diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser
index 8eab31a..5fce6d1 100644
Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 3d8ecea..a05354e 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -2,8 +2,8 @@
-
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 7c849a6..deba1a5 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,5 +1,7 @@
apply plugin: 'com.android.application'
-apply plugin: 'io.fabric'
+if (getGradle().getStartParameter().getTaskRequests().toString().toLowerCase().contains("google")) {
+ apply plugin: 'io.fabric'
+}
android {
compileSdkVersion 27
@@ -17,6 +19,17 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
+ flavorDimensions "store"
+ productFlavors {
+ fdroid {
+ dimension "store"
+ versionNameSuffix "-fdroid"
+ }
+ google {
+ dimension "store"
+ versionNameSuffix "-google"
+ }
+ }
}
repositories {
@@ -40,13 +53,14 @@ dependencies {
implementation 'com.github.GrenderG:Toasty:1.3.0'
implementation 'com.android.support:support-v4:27.1.1'
implementation 'com.github.bumptech.glide:glide:4.7.1'
- implementation 'com.google.firebase:firebase-core:16.0.3'
- implementation 'com.crashlytics.sdk.android:crashlytics:2.9.5'
- implementation 'com.google.firebase:firebase-messaging:17.3.0'
+ googleImplementation 'com.google.firebase:firebase-core:16.0.3'
+ googleImplementation 'com.crashlytics.sdk.android:crashlytics:2.9.5'
+ googleImplementation 'com.google.firebase:firebase-messaging:17.3.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
-
-apply plugin: 'com.google.gms.google-services'
+if (getGradle().getStartParameter().getTaskRequests().toString().toLowerCase().contains("google")) {
+ apply plugin: 'com.google.gms.google-services'
+}
diff --git a/app/src/fdroid/java/ca/pkay/rcloneexplorer/MainActivity.java b/app/src/fdroid/java/ca/pkay/rcloneexplorer/MainActivity.java
new file mode 100644
index 0000000..03f95d2
--- /dev/null
+++ b/app/src/fdroid/java/ca/pkay/rcloneexplorer/MainActivity.java
@@ -0,0 +1,20 @@
+package ca.pkay.rcloneexplorer;
+
+import android.content.SharedPreferences;
+
+public class MainActivity extends BaseMainActivity {
+ @Override
+ protected boolean updateCheck() {
+ return false;
+ }
+
+ @Override
+ protected void checkEnableCrashReports(SharedPreferences sharedPreferences) {
+
+ }
+
+ @Override
+ protected void checkSubscribeToUpdates(SharedPreferences sharedPreferences) {
+
+ }
+}
diff --git a/app/src/fdroid/java/ca/pkay/rcloneexplorer/Settings/LoggingSettingsFragment.java b/app/src/fdroid/java/ca/pkay/rcloneexplorer/Settings/LoggingSettingsFragment.java
new file mode 100644
index 0000000..32f8fbf
--- /dev/null
+++ b/app/src/fdroid/java/ca/pkay/rcloneexplorer/Settings/LoggingSettingsFragment.java
@@ -0,0 +1,4 @@
+package ca.pkay.rcloneexplorer.Settings;
+
+public class LoggingSettingsFragment extends BaseLoggingSettingsFragment {
+}
diff --git a/app/src/fdroid/java/ca/pkay/rcloneexplorer/Settings/NotificationsSettingsFragment.java b/app/src/fdroid/java/ca/pkay/rcloneexplorer/Settings/NotificationsSettingsFragment.java
new file mode 100644
index 0000000..b2b9818
--- /dev/null
+++ b/app/src/fdroid/java/ca/pkay/rcloneexplorer/Settings/NotificationsSettingsFragment.java
@@ -0,0 +1,4 @@
+package ca.pkay.rcloneexplorer.Settings;
+
+public class NotificationsSettingsFragment extends BaseNotificationsSettingsFragment {
+}
diff --git a/app/src/fdroid/res/layout/logging_settings_fragment.xml b/app/src/fdroid/res/layout/logging_settings_fragment.xml
new file mode 100644
index 0000000..d3bea20
--- /dev/null
+++ b/app/src/fdroid/res/layout/logging_settings_fragment.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/fdroid/res/layout/notification_settings_fragment.xml b/app/src/fdroid/res/layout/notification_settings_fragment.xml
new file mode 100644
index 0000000..13fed91
--- /dev/null
+++ b/app/src/fdroid/res/layout/notification_settings_fragment.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/google/AndroidManifest.xml b/app/src/google/AndroidManifest.xml
new file mode 100644
index 0000000..23acde4
--- /dev/null
+++ b/app/src/google/AndroidManifest.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/google/java/ca/pkay/rcloneexplorer/MainActivity.java b/app/src/google/java/ca/pkay/rcloneexplorer/MainActivity.java
new file mode 100644
index 0000000..dbfc873
--- /dev/null
+++ b/app/src/google/java/ca/pkay/rcloneexplorer/MainActivity.java
@@ -0,0 +1,62 @@
+package ca.pkay.rcloneexplorer;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.net.Uri;
+
+import com.crashlytics.android.Crashlytics;
+import com.google.firebase.messaging.FirebaseMessaging;
+
+import io.fabric.sdk.android.Fabric;
+
+public class MainActivity extends BaseMainActivity {
+
+ @Override
+ protected boolean updateCheck() {
+ if (getIntent() != null) {
+ String s = getIntent().getStringExtra(getString(R.string.firebase_msg_app_updates_topic));
+ if (s != null && s.equals("true")) {
+ openAppUpdate();
+ finish();
+ return true;
+ }
+
+ s = getIntent().getStringExtra(getString(R.string.firebase_msg_beta_app_updates_topic));
+ if (s != null) {
+ openBetaUpdate(s);
+ finish();
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ protected void checkEnableCrashReports(SharedPreferences sharedPreferences) {
+ boolean enableCrashReports = sharedPreferences.getBoolean(getString(R.string.pref_key_crash_reports), false);
+ if (enableCrashReports) {
+ Fabric.with(this, new Crashlytics());
+ }
+ }
+
+ @Override
+ protected void checkSubscribeToUpdates(SharedPreferences sharedPreferences) {
+ boolean appUpdates = sharedPreferences.getBoolean(getString(R.string.pref_key_app_updates), false);
+ if (appUpdates) {
+ FirebaseMessaging.getInstance().subscribeToTopic(getString(R.string.firebase_msg_app_updates_topic));
+ }
+ }
+
+ private void openAppUpdate() {
+ Uri uri = Uri.parse(getString(R.string.app_latest_release_url));
+ Intent intent = new Intent(Intent.ACTION_VIEW, uri);
+ startActivity(intent);
+ }
+
+ private void openBetaUpdate(String url) {
+ Uri uri = Uri.parse(url);
+ Intent intent = new Intent(Intent.ACTION_VIEW, uri);
+ startActivity(intent);
+ }
+
+}
diff --git a/app/src/main/java/ca/pkay/rcloneexplorer/Services/FirebaseIdService.java b/app/src/google/java/ca/pkay/rcloneexplorer/Services/FirebaseIdService.java
similarity index 100%
rename from app/src/main/java/ca/pkay/rcloneexplorer/Services/FirebaseIdService.java
rename to app/src/google/java/ca/pkay/rcloneexplorer/Services/FirebaseIdService.java
diff --git a/app/src/main/java/ca/pkay/rcloneexplorer/Services/FirebaseMessagingService.java b/app/src/google/java/ca/pkay/rcloneexplorer/Services/FirebaseMessagingService.java
similarity index 100%
rename from app/src/main/java/ca/pkay/rcloneexplorer/Services/FirebaseMessagingService.java
rename to app/src/google/java/ca/pkay/rcloneexplorer/Services/FirebaseMessagingService.java
diff --git a/app/src/google/java/ca/pkay/rcloneexplorer/Settings/LoggingSettingsFragment.java b/app/src/google/java/ca/pkay/rcloneexplorer/Settings/LoggingSettingsFragment.java
new file mode 100644
index 0000000..dfcf0cd
--- /dev/null
+++ b/app/src/google/java/ca/pkay/rcloneexplorer/Settings/LoggingSettingsFragment.java
@@ -0,0 +1,74 @@
+package ca.pkay.rcloneexplorer.Settings;
+
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.CompoundButton;
+import android.widget.Switch;
+import android.widget.Toast;
+
+import ca.pkay.rcloneexplorer.R;
+import es.dmoral.toasty.Toasty;
+
+public class LoggingSettingsFragment extends BaseLoggingSettingsFragment {
+
+ private View crashReportsElement;
+ private Switch crashReportsSwitch;
+
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ View view = super.onCreateView(inflater, container, savedInstanceState);
+ getViews(view);
+ setDefaultStates();
+ setClickListeners();
+
+ return view;
+ }
+
+ private void getViews(View view) {
+ crashReportsElement = view.findViewById(R.id.crash_reporting);
+ crashReportsSwitch = view.findViewById(R.id.crash_reporting_switch);
+ }
+
+ private void setDefaultStates() {
+ SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
+ boolean useLogs = sharedPreferences.getBoolean(getString(R.string.pref_key_logs), false);
+ boolean crashReports = sharedPreferences.getBoolean(getString(R.string.pref_key_crash_reports), false);
+
+ crashReportsSwitch.setChecked(crashReports);
+ }
+
+ private void setClickListeners() {
+ crashReportsElement.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (crashReportsSwitch.isChecked()) {
+ crashReportsSwitch.setChecked(false);
+ } else {
+ crashReportsSwitch.setChecked(true);
+ }
+ }
+ });
+ crashReportsSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ crashReportsClicked(isChecked);
+ }
+ });
+ }
+
+ private void crashReportsClicked(boolean isChecked) {
+ SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
+ SharedPreferences.Editor editor = sharedPreferences.edit();
+ editor.putBoolean(getString(R.string.pref_key_crash_reports), isChecked);
+ editor.apply();
+
+ Toasty.info(context, getString(R.string.restart_required), Toast.LENGTH_SHORT, true).show();
+ }
+}
diff --git a/app/src/main/java/ca/pkay/rcloneexplorer/Settings/NotificationsSettingsFragment.java b/app/src/google/java/ca/pkay/rcloneexplorer/Settings/NotificationsSettingsFragment.java
similarity index 69%
rename from app/src/main/java/ca/pkay/rcloneexplorer/Settings/NotificationsSettingsFragment.java
rename to app/src/google/java/ca/pkay/rcloneexplorer/Settings/NotificationsSettingsFragment.java
index 09ef9d8..66409f9 100644
--- a/app/src/main/java/ca/pkay/rcloneexplorer/Settings/NotificationsSettingsFragment.java
+++ b/app/src/google/java/ca/pkay/rcloneexplorer/Settings/NotificationsSettingsFragment.java
@@ -1,73 +1,39 @@
package ca.pkay.rcloneexplorer.Settings;
-import android.content.Context;
-import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.Switch;
-import android.widget.Toast;
import com.google.firebase.messaging.FirebaseMessaging;
import ca.pkay.rcloneexplorer.R;
-import es.dmoral.toasty.Toasty;
-public class NotificationsSettingsFragment extends Fragment {
+public class NotificationsSettingsFragment extends BaseNotificationsSettingsFragment {
- private Context context;
- private View notificationsElement;
private View appUpdatesElement;
private Switch appUpdatesSwitch;
private View betaAppUpdatesElement;
private Switch betaAppUpdatesSwitch;
- /**
- * Mandatory empty constructor for the fragment manager to instantiate the
- * fragment (e.g. upon screen orientation changes).
- */
- public NotificationsSettingsFragment() {
- }
-
- public static NotificationsSettingsFragment newInstance() {
- return new NotificationsSettingsFragment();
- }
-
- @Override
- public void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- }
-
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.notification_settings_fragment, container, false);
+ View view = super.onCreateView(inflater, container, savedInstanceState);
getViews(view);
setDefaultStates();
setClickListeners();
- if (getActivity() != null) {
- getActivity().setTitle(getString(R.string.notifications_pref_title));
- }
-
return view;
}
- @Override
- public void onAttach(Context context) {
- super.onAttach(context);
- this.context = context;
- }
-
private void getViews(View view) {
- notificationsElement = view.findViewById(R.id.notifications);
appUpdatesElement = view.findViewById(R.id.app_updates);
appUpdatesSwitch = view.findViewById(R.id.app_updates_switch);
betaAppUpdatesElement = view.findViewById(R.id.beta_app_updates);
@@ -89,14 +55,7 @@ private void setDefaultStates() {
}
}
- private void setClickListeners() {
-
- notificationsElement.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- onNotificationsClicked();
- }
- });
+ protected void setClickListeners() {
appUpdatesElement.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -131,24 +90,6 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
});
}
- private void onNotificationsClicked() {
- Intent intent = new Intent();
- intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
-
- //for Android 5-7
- intent.putExtra("app_package", context.getPackageName());
- intent.putExtra("app_uid", context.getApplicationInfo().uid);
-
- // for Android O
- intent.putExtra("android.provider.extra.APP_PACKAGE", context.getPackageName());
-
- if (intent.resolveActivity(context.getPackageManager()) != null) {
- startActivity(intent);
- } else {
- Toasty.error(context, "Couldn't find activity to start", Toast.LENGTH_SHORT, true).show();
- }
- }
-
private void onAppUpdatesClicked(boolean isChecked) {
if (isChecked) {
FirebaseMessaging.getInstance().subscribeToTopic(getString(R.string.firebase_msg_app_updates_topic));
diff --git a/app/src/main/res/layout/logging_settings_fragment.xml b/app/src/google/res/layout/logging_settings_fragment.xml
similarity index 100%
rename from app/src/main/res/layout/logging_settings_fragment.xml
rename to app/src/google/res/layout/logging_settings_fragment.xml
diff --git a/app/src/main/res/layout/notification_settings_fragment.xml b/app/src/google/res/layout/notification_settings_fragment.xml
similarity index 100%
rename from app/src/main/res/layout/notification_settings_fragment.xml
rename to app/src/google/res/layout/notification_settings_fragment.xml
diff --git a/app/src/google/res/values/strings.xml b/app/src/google/res/values/strings.xml
new file mode 100644
index 0000000..91e1d9e
--- /dev/null
+++ b/app/src/google/res/values/strings.xml
@@ -0,0 +1,10 @@
+
+ pref_key_crash_reports
+ pref_key_app_updates
+ pref_key_app_updates_beta
+ beta_app_updates
+ app_updates
+ Get notified about app updates
+ Get notified about beta releases
+ Send anonymous crash reports
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9c14236..ac1c725 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -29,16 +29,6 @@
-
-
-
-
-
-
-
-
-
-
@@ -51,12 +41,6 @@
-
-
-
-
pref_key_color_primary
pref_key_color_accent
pref_key_dark_theme
- pref_key_app_updates
- pref_key_app_updates_beta
- pref_key_crash_reports
pref_key_show_thumbnails
pref_key_wifi_only_transfers
pref_key_version_code
@@ -279,11 +276,7 @@
There are no remotes
Choose directory
Error exporting config file
- app_updates
- beta_app_updates
New version of Rclone Explorer is available on GitHub
- Get notified about app updates
- Get notified about beta releases
Delete remote?
Empty trash
Trash emptied
@@ -304,7 +297,6 @@
Cache expiry time: %1$s
Cache size
Cache size: %1$s
- Send anonymous crash reports
Pin to the top
Unpin
Pin to drawer
diff --git a/build.gradle b/build.gradle
index ede6ee2..0373d4e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -10,9 +10,11 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.4'
- classpath 'com.google.gms:google-services:4.0.1' // google-services plugin
- classpath 'io.fabric.tools:gradle:1.25.4'
-
+ if (getGradle().getStartParameter().getTaskRequests().toString().toLowerCase().contains("google")) {
+ classpath 'com.google.gms:google-services:4.0.1' // google-services plugin
+ classpath 'io.fabric.tools:gradle:1.25.4'
+ }
+
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files