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