From 7904afd1ff43240ba69b8289719df5e01bde3ed3 Mon Sep 17 00:00:00 2001 From: Adam Szewera Date: Fri, 5 Apr 2024 11:47:50 +0200 Subject: [PATCH] Prefer injecting preferences instead of using PreferenceManager directly (#2073) # Description Prefer injecting preferences instead of using `PreferenceManager.getDefaultSharedPreferences(context)` directly. # Changes * replace `PreferenceManager.getDefaultSharedPreferences(context)` by injecting SharedPreferences instead --- .../syncthingandroid/DaggerComponent.java | 4 ++++ .../activities/FirstStartActivity.java | 3 +-- .../activities/FolderPickerActivity.java | 13 ++++++++----- .../activities/SettingsActivity.java | 2 -- .../activities/ShareActivity.java | 19 ++++++++++++------- .../activities/ThemedAppCompatActivity.java | 11 ++++++++--- syncthing/src/github.com/syncthing/syncthing | 2 +- 7 files changed, 34 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/nutomic/syncthingandroid/DaggerComponent.java b/app/src/main/java/com/nutomic/syncthingandroid/DaggerComponent.java index 586616676..0561e8085 100644 --- a/app/src/main/java/com/nutomic/syncthingandroid/DaggerComponent.java +++ b/app/src/main/java/com/nutomic/syncthingandroid/DaggerComponent.java @@ -4,6 +4,8 @@ import com.nutomic.syncthingandroid.activities.FolderPickerActivity; import com.nutomic.syncthingandroid.activities.MainActivity; import com.nutomic.syncthingandroid.activities.SettingsActivity; +import com.nutomic.syncthingandroid.activities.ShareActivity; +import com.nutomic.syncthingandroid.activities.ThemedAppCompatActivity; import com.nutomic.syncthingandroid.receiver.AppConfigReceiver; import com.nutomic.syncthingandroid.service.RunConditionMonitor; import com.nutomic.syncthingandroid.service.EventProcessor; @@ -34,4 +36,6 @@ public interface DaggerComponent { void inject(AppConfigReceiver appConfigReceiver); void inject(RestApi restApi); void inject(SettingsActivity.SettingsFragment fragment); + void inject(ShareActivity activity); + void inject(ThemedAppCompatActivity activity); } diff --git a/app/src/main/java/com/nutomic/syncthingandroid/activities/FirstStartActivity.java b/app/src/main/java/com/nutomic/syncthingandroid/activities/FirstStartActivity.java index f7c951daf..3de136787 100644 --- a/app/src/main/java/com/nutomic/syncthingandroid/activities/FirstStartActivity.java +++ b/app/src/main/java/com/nutomic/syncthingandroid/activities/FirstStartActivity.java @@ -21,7 +21,6 @@ import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; -import android.preference.PreferenceManager; import android.provider.Settings; import android.text.Html; import android.util.Log; @@ -240,7 +239,7 @@ private boolean shouldSkipSlide(Slide slide) { case API_LEVEL_30: // Skip if running as root, as that circumvents any Android FS restrictions. return upgradedToApiLevel30() - || PreferenceManager.getDefaultSharedPreferences(this).getBoolean(Constants.PREF_USE_ROOT, false); + || mPreferences.getBoolean(Constants.PREF_USE_ROOT, false); case NOTIFICATION: return isNotificationPermissionGranted(); diff --git a/app/src/main/java/com/nutomic/syncthingandroid/activities/FolderPickerActivity.java b/app/src/main/java/com/nutomic/syncthingandroid/activities/FolderPickerActivity.java index 99a932196..33242bd0e 100644 --- a/app/src/main/java/com/nutomic/syncthingandroid/activities/FolderPickerActivity.java +++ b/app/src/main/java/com/nutomic/syncthingandroid/activities/FolderPickerActivity.java @@ -6,11 +6,10 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; -import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.os.IBinder; -import android.preference.PreferenceManager; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; @@ -42,6 +41,8 @@ import java.util.Collections; import java.util.Iterator; +import javax.inject.Inject; + /** * Activity that allows selecting a directory in the local file system. */ @@ -68,6 +69,9 @@ public class FolderPickerActivity extends SyncthingActivity */ private File mLocation; + @Inject + SharedPreferences mPreferences; + public static Intent createIntent(Context context, String initialDirectory, @Nullable String rootDirectory) { Intent intent = new Intent(context, FolderPickerActivity.class); @@ -103,7 +107,7 @@ protected void onCreate(Bundle savedInstanceState) { displayRoot(); } - Boolean prefUseRoot = PreferenceManager.getDefaultSharedPreferences(this).getBoolean(Constants.PREF_USE_ROOT, false); + Boolean prefUseRoot = mPreferences.getBoolean(Constants.PREF_USE_ROOT, false); if (!prefUseRoot) { Toast.makeText(this, R.string.kitkat_external_storage_warning, Toast.LENGTH_LONG) .show(); @@ -133,8 +137,7 @@ private void populateRoots() { roots.add(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS)); // Add paths that might not be accessible to Syncthing. - SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); - if (sp.getBoolean("advanced_folder_picker", false)) { + if (mPreferences.getBoolean("advanced_folder_picker", false)) { Collections.addAll(roots, new File("/storage/").listFiles()); roots.add(new File("/")); } diff --git a/app/src/main/java/com/nutomic/syncthingandroid/activities/SettingsActivity.java b/app/src/main/java/com/nutomic/syncthingandroid/activities/SettingsActivity.java index edcccded8..f079bf386 100644 --- a/app/src/main/java/com/nutomic/syncthingandroid/activities/SettingsActivity.java +++ b/app/src/main/java/com/nutomic/syncthingandroid/activities/SettingsActivity.java @@ -12,7 +12,6 @@ import android.preference.Preference; import android.preference.PreferenceGroup; import android.preference.PreferenceFragment; -import android.preference.PreferenceManager; import android.preference.PreferenceScreen; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -268,7 +267,6 @@ public void onActivityCreated(Bundle savedInstanceState) { mHttpProxyAddress.setOnPreferenceChangeListener(this); /* Initialize summaries */ - mPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); screen.findPreference(Constants.PREF_POWER_SOURCE).setSummary(mPowerSource.getEntry()); String wifiSsidSummary = TextUtils.join(", ", mPreferences.getStringSet(Constants.PREF_WIFI_SSID_WHITELIST, new HashSet<>())); screen.findPreference(Constants.PREF_WIFI_SSID_WHITELIST).setSummary(TextUtils.isEmpty(wifiSsidSummary) ? diff --git a/app/src/main/java/com/nutomic/syncthingandroid/activities/ShareActivity.java b/app/src/main/java/com/nutomic/syncthingandroid/activities/ShareActivity.java index 2d8c6bcf6..47bb1ed76 100644 --- a/app/src/main/java/com/nutomic/syncthingandroid/activities/ShareActivity.java +++ b/app/src/main/java/com/nutomic/syncthingandroid/activities/ShareActivity.java @@ -5,11 +5,11 @@ import android.app.ProgressDialog; import android.content.ContentResolver; import android.content.Intent; +import android.content.SharedPreferences; import android.database.Cursor; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; -import android.preference.PreferenceManager; import android.provider.MediaStore; import android.text.TextUtils; import android.util.Log; @@ -23,6 +23,7 @@ import com.google.common.io.Files; import com.nutomic.syncthingandroid.R; +import com.nutomic.syncthingandroid.SyncthingApp; import com.nutomic.syncthingandroid.databinding.ActivityShareBinding; import com.nutomic.syncthingandroid.model.Folder; import com.nutomic.syncthingandroid.service.SyncthingService; @@ -40,6 +41,8 @@ import java.util.List; import java.util.Map; +import javax.inject.Inject; + /** * Shares incoming files to syncthing folders. *

@@ -60,6 +63,9 @@ public class ShareActivity extends StateDialogActivity private ActivityShareBinding binding; + @Inject + SharedPreferences mPreferences; + @Override public void onServiceStateChange(SyncthingService.State currentState) { if (currentState != SyncthingService.State.ACTIVE || getApi() == null) @@ -69,8 +75,7 @@ public void onServiceStateChange(SyncthingService.State currentState) { // Get the index of the previously selected folder. int folderIndex = 0; - String savedFolderId = PreferenceManager.getDefaultSharedPreferences(this) - .getString(PREF_PREVIOUSLY_SELECTED_SYNCTHING_FOLDER, ""); + String savedFolderId = mPreferences.getString(PREF_PREVIOUSLY_SELECTED_SYNCTHING_FOLDER, ""); for (Folder folder : folders) { if (folder.id.equals(savedFolderId)) { folderIndex = folders.indexOf(folder); @@ -102,6 +107,7 @@ protected void onPostCreate(Bundle savedInstanceState) { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + ((SyncthingApp) getApplication()).component().inject(this); binding = ActivityShareBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); @@ -266,8 +272,7 @@ private String getSavedSubDirectory() { String savedSubDirectory = ""; if (selectedFolder != null) { - savedSubDirectory = PreferenceManager.getDefaultSharedPreferences(this) - .getString(PREF_FOLDER_SAVED_SUBDIRECTORY + selectedFolder.id, ""); + savedSubDirectory = mPreferences.getString(PREF_FOLDER_SAVED_SUBDIRECTORY + selectedFolder.id, ""); } return savedSubDirectory; @@ -362,7 +367,7 @@ protected void onPause() { super.onPause(); if (mFoldersSpinner.getSelectedItem() != null) { Folder selectedFolder = (Folder) mFoldersSpinner.getSelectedItem(); - PreferenceManager.getDefaultSharedPreferences(this).edit() + mPreferences.edit() .putString(PREF_PREVIOUSLY_SELECTED_SYNCTHING_FOLDER, selectedFolder.id) .apply(); } @@ -379,7 +384,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { subDirectory = subDirectory.replace(folderDirectory, ""); mSubDirectoryTextView.setText(subDirectory); - PreferenceManager.getDefaultSharedPreferences(this) + mPreferences .edit().putString(PREF_FOLDER_SAVED_SUBDIRECTORY + selectedFolder.id, subDirectory) .apply(); } diff --git a/app/src/main/java/com/nutomic/syncthingandroid/activities/ThemedAppCompatActivity.java b/app/src/main/java/com/nutomic/syncthingandroid/activities/ThemedAppCompatActivity.java index e1092521f..8f126a09d 100644 --- a/app/src/main/java/com/nutomic/syncthingandroid/activities/ThemedAppCompatActivity.java +++ b/app/src/main/java/com/nutomic/syncthingandroid/activities/ThemedAppCompatActivity.java @@ -2,12 +2,14 @@ import android.content.SharedPreferences; import android.os.Bundle; -import android.preference.PreferenceManager; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatDelegate; +import com.nutomic.syncthingandroid.SyncthingApp; import com.nutomic.syncthingandroid.service.Constants; +import javax.inject.Inject; + /** * Provides a themed instance of AppCompatActivity. */ @@ -15,12 +17,15 @@ public class ThemedAppCompatActivity extends AppCompatActivity { private static final String FOLLOW_SYSTEM = "-1"; + @Inject + SharedPreferences mPreferences; + @Override protected void onCreate(Bundle savedInstanceState) { + ((SyncthingApp) getApplication()).component().inject(this); // Load theme. - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); //For api level below 28, Follow system fall backs to light mode - Integer prefAppTheme = Integer.parseInt(prefs.getString(Constants.PREF_APP_THEME, FOLLOW_SYSTEM)); + Integer prefAppTheme = Integer.parseInt(mPreferences.getString(Constants.PREF_APP_THEME, FOLLOW_SYSTEM)); AppCompatDelegate.setDefaultNightMode(prefAppTheme); super.onCreate(savedInstanceState); } diff --git a/syncthing/src/github.com/syncthing/syncthing b/syncthing/src/github.com/syncthing/syncthing index bdfd0f054..683b48182 160000 --- a/syncthing/src/github.com/syncthing/syncthing +++ b/syncthing/src/github.com/syncthing/syncthing @@ -1 +1 @@ -Subproject commit bdfd0f0548d2f6fc4b5500690dbd383baa3b0561 +Subproject commit 683b48182c08095bb396b810d0cbe40f8bccd348