diff --git a/.gitignore b/.gitignore
index 5ecda83bd..041b3d4be 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,6 +18,9 @@ crashlytics-build.properties
com_crashlytics_export_strings.xml
fabric.properties
+#Firebase
+/google-services.json
+
# Key
signing.properties
amahi-release-key.keystore
diff --git a/.travis.yml b/.travis.yml
index bb4eb1c6d..3eb3093b2 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -23,6 +23,9 @@ android:
licenses:
- .+
+script:
+ - ./gradlew clean build -Pbuild=dev
+
before_script:
- echo no | android create avd --force -n test -t android-19 --abi armeabi-v7a
- emulator -avd test -no-audio -no-window &
diff --git a/build.gradle b/build.gradle
index 205b0f5dc..418af2c02 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,18 +1,15 @@
buildscript {
repositories {
- maven { url 'https://maven.fabric.io/public' }
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.1'
- classpath 'io.fabric.tools:gradle:1.26.1'
}
}
apply plugin: "com.android.application"
-apply plugin: 'io.fabric'
android {
compileSdkVersion 28
@@ -80,6 +77,10 @@ android {
release {
signingConfig signingConfigs.release
}
+
+ dev {
+ signingConfig signingConfigs.debug
+ }
}
android {
@@ -93,6 +94,26 @@ android {
}
}
+//Note: Here we are checking if it's the dev build environment which is invoked in Travis
+
+def build_param = "${build}";
+
+if (build_param != "dev") {
+ //exclude production build
+ android.variantFilter { variant ->
+ if (variant.buildType.name.equals('dev')) {
+ variant.setIgnore(true);
+ }
+ }
+} else {
+ //exclude all except production build
+ android.variantFilter { variant ->
+ if (!variant.buildType.name.equals('dev')) {
+ variant.setIgnore(true);
+ }
+ }
+}
+
ext {
archRoomVersion = "1.1.0"
}
@@ -114,7 +135,6 @@ dependencies {
google()
mavenCentral()
mavenLocal()
- maven { url 'https://maven.fabric.io/public' }
maven { url 'http://dl.bintray.com/megabitdragon/maven' }
maven { url 'https://jitpack.io' }
jcenter()
@@ -131,10 +151,7 @@ dependencies {
implementation "androidx.mediarouter:mediarouter:${SUPPORT_LIBRARY_VERSION}"
implementation "androidx.media:media:${SUPPORT_LIBRARY_VERSION}"
implementation "androidx.cardview:cardview:${SUPPORT_LIBRARY_VERSION}"
- implementation 'com.google.android.gms:play-services-cast-framework:11.6.0'
- implementation('com.crashlytics.sdk.android:crashlytics:2.6.6@aar') {
- transitive = true
- }
+ implementation 'com.google.android.gms:play-services-cast-framework:18.1.0'
implementation 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1'
implementation 'com.github.dmytrodanylyk.android-process-button:library:1.0.4'
implementation 'com.jakewharton.timber:timber:4.5.1'
@@ -160,9 +177,8 @@ dependencies {
// Dagger
implementation 'com.squareup.dagger:dagger:1.2.5'
- compileOnly 'com.squareup.dagger:dagger-compiler:1.2.5'
annotationProcessor 'com.squareup.dagger:dagger-compiler:1.2.5'
-
+ implementation 'com.github.blinkist.dagger2-shaded:dagger2-shaded-library:2.27'
implementation 'com.github.wseemann:FFmpegMediaMetadataRetriever:1.0.14'
implementation 'com.google.android.exoplayer:exoplayer-core:2.7.3'
@@ -178,6 +194,9 @@ dependencies {
betaReleaseImplementation 'com.readystatesoftware.chuck:library-no-op:1.1.0'
*/
+ // Firebase
+ implementation 'com.google.firebase:firebase-crashlytics:17.1.0'
+
}
task generateWrapper(type: Wrapper) {
diff --git a/src/dev/google-services.json b/src/dev/google-services.json
new file mode 100644
index 000000000..54dd946d7
--- /dev/null
+++ b/src/dev/google-services.json
@@ -0,0 +1,51 @@
+{
+ "project_info": {
+ "project_number": "",
+ "project_id": ""
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:123456789012:android:1234567890123456",
+ "android_client_info": {
+ "package_name": "org.amahi.anywhere"
+ }
+ },
+ "oauth_client": [
+ {
+ "client_id": "",
+ "client_type": 3
+ },
+ {
+ "client_id": "",
+ "client_type": 1,
+ "android_info": {
+ "package_name": "org.amahi.anywhere",
+ "certificate_hash": ""
+ }
+ }
+ ],
+ "api_key": [
+ {
+ "current_key": ""
+ }
+ ],
+ "services": {
+ "analytics_service": {
+ "status": 2,
+ "analytics_property": {
+ "tracking_id": ""
+ }
+ },
+ "appinvite_service": {
+ "status": 1,
+ "other_platform_oauth_client": []
+ },
+ "ads_service": {
+ "status": 1
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml
index fd718f4bf..16c9c8265 100644
--- a/src/main/AndroidManifest.xml
+++ b/src/main/AndroidManifest.xml
@@ -192,10 +192,6 @@
android:name=".job.NetConnectivityJob"
android:permission="android.permission.BIND_JOB_SERVICE" />
-
-
diff --git a/src/main/java/org/amahi/anywhere/AmahiApplication.java b/src/main/java/org/amahi/anywhere/AmahiApplication.java
index f3446dd94..78464a4b3 100644
--- a/src/main/java/org/amahi/anywhere/AmahiApplication.java
+++ b/src/main/java/org/amahi/anywhere/AmahiApplication.java
@@ -30,13 +30,12 @@
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatDelegate;
-import com.crashlytics.android.Crashlytics;
import org.amahi.anywhere.job.NetConnectivityJob;
import org.amahi.anywhere.job.PhotosContentJob;
import dagger.ObjectGraph;
-import io.fabric.sdk.android.Fabric;
+
import timber.log.Timber;
/**
@@ -67,7 +66,7 @@ public void onCreate() {
instance = this;
setUpLogging();
- setUpReporting();
+// setUpReporting();
setUpDetecting();
setUpInjections();
@@ -111,11 +110,11 @@ private boolean isDebugging() {
return BuildConfig.DEBUG;
}
- private void setUpReporting() {
- if (!isDebugging()) {
- Fabric.with(this, new Crashlytics());
- }
- }
+// private void setUpReporting() {
+// if (!isDebugging()) {
+// // Can disable Crashlytics for Debug Mode
+// }
+// }
private void setUpDetecting() {
if (isDebugging()) {
diff --git a/src/main/java/org/amahi/anywhere/AmahiModule.java b/src/main/java/org/amahi/anywhere/AmahiModule.java
index 7dbf6598a..2e23cbcde 100644
--- a/src/main/java/org/amahi/anywhere/AmahiModule.java
+++ b/src/main/java/org/amahi/anywhere/AmahiModule.java
@@ -60,14 +60,20 @@
import org.amahi.anywhere.util.UploadManager;
import javax.inject.Singleton;
+import javax.inject.Singleton2;
import dagger.Module;
+import dagger.Module2;
import dagger.Provides;
/**
* Application dependency injection module. Includes {@link org.amahi.anywhere.server.ApiModule} and
* provides application's {@link android.content.Context} for possible consumers.
*/
+@Module2(includes = {
+ ApiModule.class,
+ CacheModule.class
+})
@Module(
includes = {
ApiModule.class,
@@ -119,6 +125,7 @@ public AmahiModule(Application application) {
@Provides
@Singleton
+ @Singleton2
Context provideContext() {
return application;
}
diff --git a/src/main/java/org/amahi/anywhere/activity/NativeVideoActivity.java b/src/main/java/org/amahi/anywhere/activity/NativeVideoActivity.java
index ca2a25d49..b57298216 100644
--- a/src/main/java/org/amahi/anywhere/activity/NativeVideoActivity.java
+++ b/src/main/java/org/amahi/anywhere/activity/NativeVideoActivity.java
@@ -31,6 +31,7 @@
import android.widget.VideoView;
import com.google.android.gms.cast.MediaInfo;
+import com.google.android.gms.cast.MediaLoadOptions;
import com.google.android.gms.cast.MediaMetadata;
import com.google.android.gms.cast.framework.CastButtonFactory;
import com.google.android.gms.cast.framework.CastContext;
@@ -347,7 +348,15 @@ public void onAdBreakStatusUpdated() {
}
});
- remoteMediaClient.load(buildMediaInfo(), autoPlay, position);
+
+ remoteMediaClient.load(buildMediaInfo(), buildMediaLoadOptions(autoPlay, position));
+ }
+
+ private MediaLoadOptions buildMediaLoadOptions(boolean autoPlay, int position) {
+ return new MediaLoadOptions.Builder()
+ .setAutoplay(autoPlay)
+ .setPlayPosition(position)
+ .build();
}
private MediaInfo buildMediaInfo() {
diff --git a/src/main/java/org/amahi/anywhere/cache/CacheModule.java b/src/main/java/org/amahi/anywhere/cache/CacheModule.java
index 2630b5454..5f11ceef9 100644
--- a/src/main/java/org/amahi/anywhere/cache/CacheModule.java
+++ b/src/main/java/org/amahi/anywhere/cache/CacheModule.java
@@ -22,14 +22,17 @@
import android.content.Context;
import javax.inject.Singleton;
+import javax.inject.Singleton2;
import dagger.Module;
+import dagger.Module2;
import dagger.Provides;
/**
* Cache dependency injection module.
* Provides Singleton {@link CacheManager} for possible consumers.
*/
+@Module2
@Module(
complete = false,
library = true
@@ -37,6 +40,7 @@
public class CacheModule {
@Provides
@Singleton
+ @Singleton2
CacheManager provideCacheManager(Context context) {
return new CacheManager(context);
}
diff --git a/src/main/java/org/amahi/anywhere/server/ApiAdapter.java b/src/main/java/org/amahi/anywhere/server/ApiAdapter.java
index 2ef308504..9dbb21675 100644
--- a/src/main/java/org/amahi/anywhere/server/ApiAdapter.java
+++ b/src/main/java/org/amahi/anywhere/server/ApiAdapter.java
@@ -21,6 +21,7 @@
import javax.inject.Inject;
import javax.inject.Singleton;
+import javax.inject.Singleton2;
import okhttp3.OkHttpClient;
import retrofit2.Converter.Factory;
@@ -32,6 +33,7 @@
* dependency injection provided components.
*/
@Singleton
+@Singleton2
public class ApiAdapter {
private final Retrofit.Builder apiBuilder;
diff --git a/src/main/java/org/amahi/anywhere/server/ApiModule.java b/src/main/java/org/amahi/anywhere/server/ApiModule.java
index d4ada982d..345a9eba3 100644
--- a/src/main/java/org/amahi/anywhere/server/ApiModule.java
+++ b/src/main/java/org/amahi/anywhere/server/ApiModule.java
@@ -28,8 +28,10 @@
import org.amahi.anywhere.util.Time;
import javax.inject.Singleton;
+import javax.inject.Singleton2;
import dagger.Module;
+import dagger.Module2;
import dagger.Provides;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
@@ -40,11 +42,11 @@
* API dependency injection module. Provides resources such as HTTP client and JSON converter
* for possible consumers.
*/
-
@Module(
complete = false,
library = true
)
+@Module2
public class ApiModule {
/**
@@ -57,6 +59,7 @@ public class ApiModule {
@Provides
@Singleton
+ @Singleton2
OkHttpClient provideHttpClient(ApiHeaders headers, HttpLoggingInterceptor logging) {
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
@@ -68,6 +71,7 @@ OkHttpClient provideHttpClient(ApiHeaders headers, HttpLoggingInterceptor loggin
@Provides
@Singleton
+ @Singleton2
ApiHeaders provideHeaders(Context context) {
return new ApiHeaders(context);
}
@@ -85,18 +89,21 @@ ChuckInterceptor provideChuckInterceptor(Context context) {
*/
@Provides
@Singleton
+ @Singleton2
Converter.Factory provideJsonConverterFactory(Gson json) {
return GsonConverterFactory.create(json);
}
@Provides
@Singleton
+ @Singleton2
Gson provideJson() {
return new GsonBuilder().setDateFormat(Time.Format.RFC_1123).create();
}
@Provides
@Singleton
+ @Singleton2
HttpLoggingInterceptor provideLogging() {
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
diff --git a/src/main/java/org/amahi/anywhere/server/client/AmahiClient.java b/src/main/java/org/amahi/anywhere/server/client/AmahiClient.java
index 419312354..82b416de3 100644
--- a/src/main/java/org/amahi/anywhere/server/client/AmahiClient.java
+++ b/src/main/java/org/amahi/anywhere/server/client/AmahiClient.java
@@ -29,11 +29,13 @@
import javax.inject.Inject;
import javax.inject.Singleton;
+import javax.inject.Singleton2;
/**
* Amahi API implementation. Wraps {@link org.amahi.anywhere.server.api.AmahiApi}.
*/
@Singleton
+@Singleton2
public class AmahiClient {
private final AmahiApi api;
diff --git a/src/main/java/org/amahi/anywhere/server/client/ServerClient.java b/src/main/java/org/amahi/anywhere/server/client/ServerClient.java
index 32d705c58..8907de6b3 100644
--- a/src/main/java/org/amahi/anywhere/server/client/ServerClient.java
+++ b/src/main/java/org/amahi/anywhere/server/client/ServerClient.java
@@ -61,6 +61,7 @@
import javax.inject.Inject;
import javax.inject.Singleton;
+import javax.inject.Singleton2;
import okhttp3.MultipartBody;
import okhttp3.ResponseBody;
@@ -75,6 +76,7 @@
* {@link org.amahi.anywhere.server.api.ServerApi}. Reacts to network connection changes as well.
*/
@Singleton
+@Singleton2
public class ServerClient {
private final ApiAdapter apiAdapter;
private final ProxyApi proxyApi;
diff --git a/src/main/java/org/amahi/anywhere/util/Downloader.java b/src/main/java/org/amahi/anywhere/util/Downloader.java
index 508e9875a..b21a78c2c 100644
--- a/src/main/java/org/amahi/anywhere/util/Downloader.java
+++ b/src/main/java/org/amahi/anywhere/util/Downloader.java
@@ -41,12 +41,14 @@
import javax.inject.Inject;
import javax.inject.Singleton;
+import javax.inject.Singleton2;
/**
* File downloader. Uses system {@link android.app.DownloadManager}
* for downloads placing and cancelling.
*/
@Singleton
+@Singleton2
public class Downloader extends BroadcastReceiver {
public static final String OFFLINE_PATH = "offline_files";
private final Context context;
diff --git a/src/main/java/org/amahi/anywhere/util/FileManager.java b/src/main/java/org/amahi/anywhere/util/FileManager.java
index 3fc374cd2..b45f55e0f 100644
--- a/src/main/java/org/amahi/anywhere/util/FileManager.java
+++ b/src/main/java/org/amahi/anywhere/util/FileManager.java
@@ -2,6 +2,8 @@
import android.content.Context;
import android.net.Uri;
+import android.os.AsyncTask;
+
import androidx.core.content.FileProvider;
import org.amahi.anywhere.bus.BusProvider;
@@ -16,8 +18,6 @@
import java.io.InputStream;
import java.io.OutputStream;
-import io.fabric.sdk.android.services.concurrency.AsyncTask;
-
public class FileManager {
public static final int RECENT_FILE = 0;