From 4243eea2aec28997db335cb75d25c98a93855fab Mon Sep 17 00:00:00 2001 From: Xav <1234@email1234.com> Date: Wed, 28 Aug 2024 17:02:28 -0400 Subject: [PATCH] Fix deprecated warnings with pref and frag by moving to androidx and compat/support --- app/build.gradle | 3 +- app/src/main/AndroidManifest.xml | 2 + .../be/ppareit/swiftp/gui/MainActivity.java | 4 +- .../swiftp/gui/ManageUsersActivity.java | 2 +- .../swiftp/gui/PreferenceFragment.java | 423 +++++++++++------- .../ppareit/swiftp/gui/UserEditFragment.java | 2 +- .../ppareit/swiftp/gui/UserListFragment.java | 8 +- app/src/main/res/xml/preferences.xml | 64 ++- 8 files changed, 310 insertions(+), 198 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index dd15e378..69f76292 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -51,7 +51,8 @@ dependencies { implementation 'com.twofortyfouram:android-plugin-client-sdk-for-locale:4.0.3' implementation 'com.google.code.gson:gson:2.10.1' implementation 'org.jetbrains:annotations:23.0.0' - implementation 'androidx.work:work-runtime:2.9.0' + implementation 'androidx.work:work-runtime:2.9.1' + implementation 'androidx.preference:preference:1.2.1' } android { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c5f1f558..27091b18 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ along with SwiFTP. If not, see . @@ -72,6 +73,7 @@ along with SwiFTP. If not, see . diff --git a/app/src/main/java/be/ppareit/swiftp/gui/MainActivity.java b/app/src/main/java/be/ppareit/swiftp/gui/MainActivity.java index 558634c5..d6a60877 100644 --- a/app/src/main/java/be/ppareit/swiftp/gui/MainActivity.java +++ b/app/src/main/java/be/ppareit/swiftp/gui/MainActivity.java @@ -79,8 +79,8 @@ public void onCreate(Bundle savedInstanceState) { ad.show(); } - getFragmentManager().beginTransaction() - .replace(android.R.id.content, new PreferenceFragment()) + getSupportFragmentManager().beginTransaction() + .replace(android.R.id.content, new PreferenceFragment(), null) .commit(); } diff --git a/app/src/main/java/be/ppareit/swiftp/gui/ManageUsersActivity.java b/app/src/main/java/be/ppareit/swiftp/gui/ManageUsersActivity.java index d7d2f80a..cb6eb453 100644 --- a/app/src/main/java/be/ppareit/swiftp/gui/ManageUsersActivity.java +++ b/app/src/main/java/be/ppareit/swiftp/gui/ManageUsersActivity.java @@ -12,7 +12,7 @@ public class ManageUsersActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { setTheme(FsSettings.getTheme()); super.onCreate(savedInstanceState); - getFragmentManager().beginTransaction() + getSupportFragmentManager().beginTransaction() .replace(android.R.id.content, UserListFragment.newInstance()) .commit(); } diff --git a/app/src/main/java/be/ppareit/swiftp/gui/PreferenceFragment.java b/app/src/main/java/be/ppareit/swiftp/gui/PreferenceFragment.java index 28eea979..564503a9 100644 --- a/app/src/main/java/be/ppareit/swiftp/gui/PreferenceFragment.java +++ b/app/src/main/java/be/ppareit/swiftp/gui/PreferenceFragment.java @@ -34,20 +34,24 @@ import android.os.Build; import android.os.Bundle; import android.os.Handler; -import android.preference.CheckBoxPreference; -import android.preference.EditTextPreference; -import android.preference.ListPreference; -import android.preference.Preference; -import android.preference.PreferenceManager; -import android.preference.PreferenceScreen; -import android.preference.TwoStatePreference; + +import androidx.annotation.Nullable; +import androidx.lifecycle.viewmodel.CreationExtras; +import androidx.preference.EditTextPreference; +import androidx.preference.Preference; +import androidx.preference.CheckBoxPreference; +import androidx.preference.ListPreference; +import androidx.preference.PreferenceFragmentCompat; +import androidx.preference.PreferenceManager; +import androidx.preference.PreferenceScreen; +import androidx.preference.TwoStatePreference; + import android.text.util.Linkify; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; -import androidx.documentfile.provider.DocumentFile; import net.vrallev.android.cat.Cat; @@ -68,7 +72,7 @@ * This is the main activity for swiftp, it enables the user to start the server service * and allows the users to change the settings. */ -public class PreferenceFragment extends android.preference.PreferenceFragment { +public class PreferenceFragment extends PreferenceFragmentCompat { private static final int ACCESS_COARSE_LOCATION_REQUEST_CODE = 14; private static final int ACTION_OPEN_DOCUMENT_TREE = 42; @@ -76,214 +80,293 @@ public class PreferenceFragment extends android.preference.PreferenceFragment { private DynamicMultiSelectListPreference mAutoconnectListPref; private Handler mHandler = new Handler(); + private static int showScreen = 0; + private static final int SHOW_ADVANCED_SCREEN = 1; + private static final int SHOW_APPEARANCE_SCREEN = 2; + + @Override + public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) { + switch (showScreen) { + case SHOW_ADVANCED_SCREEN -> setPreferencesFromResource(R.xml.preferences, "preference_screen_advanced"); + case SHOW_APPEARANCE_SCREEN -> setPreferencesFromResource(R.xml.preferences, "appearance_screen"); + default -> setPreferencesFromResource(R.xml.preferences, rootKey); + } + showScreen = 0; + } + + @NonNull + @Override + public CreationExtras getDefaultViewModelCreationExtras() { + return super.getDefaultViewModelCreationExtras(); + } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - addPreferencesFromResource(R.xml.preferences); + + // Helps the list to get updated without recreating the UI. + PreferenceScreen prefScreenAdvanced = findPref("preference_screen_advanced"); + if (prefScreenAdvanced != null) { + prefScreenAdvanced.setOnPreferenceClickListener(preference -> { + showScreen = SHOW_ADVANCED_SCREEN; + getActivity().getSupportFragmentManager().beginTransaction() + .replace(android.R.id.content, new PreferenceFragment(), "preference_screen_advanced") + .addToBackStack("default") + .commit(); + return true; + }); + } + + // Helps the list to get updated without recreating the UI. + PreferenceScreen prefScreenAppearance = findPref("appearance_screen"); + if (prefScreenAppearance != null) { + prefScreenAppearance.setOnPreferenceClickListener(preference -> { + showScreen = SHOW_APPEARANCE_SCREEN; + getActivity().getSupportFragmentManager().beginTransaction() + .replace(android.R.id.content, new PreferenceFragment(), "appearance_screen") + .addToBackStack("default") + .commit(); + return true; + }); + } TwoStatePreference runningPref = findPref("running_switch"); - updateRunningState(); - runningPref.setOnPreferenceChangeListener((preference, newValue) -> { - if ((Boolean) newValue) { - FsService.start(); - } else { - FsService.stop(); - } - return true; - }); + if (runningPref != null) { + updateRunningState(); + runningPref.setOnPreferenceChangeListener((preference, newValue) -> { + if ((Boolean) newValue) { + FsService.start(); + } else { + FsService.stop(); + } + return true; + }); + } PreferenceScreen prefScreen = findPref("preference_screen"); Preference marketVersionPref = findPref("market_version"); - if (!App.isFreeVersion()) { - prefScreen.removePreference(marketVersionPref); + if (prefScreen != null) { + if (!App.isFreeVersion()) { + prefScreen.removePreference(marketVersionPref); + } + if (!(App.isPackageInstalled("com.android.vending") || + App.isPackageInstalled("com.google.market"))) { + prefScreen.removePreference(marketVersionPref); + } } - if (!(App.isPackageInstalled("com.android.vending") || - App.isPackageInstalled("com.google.market"))) { - prefScreen.removePreference(marketVersionPref); + if (marketVersionPref != null) { + marketVersionPref.setOnPreferenceClickListener(preference -> { + // start the market at our application + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.setData(Uri.parse("market://details?id=be.ppareit.swiftp")); + startActivity(intent); + return false; + }); } - marketVersionPref.setOnPreferenceClickListener(preference -> { - // start the market at our application - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.setData(Uri.parse("market://details?id=be.ppareit.swiftp")); - startActivity(intent); - return false; - }); Preference manageUsersPref = findPref("manage_users"); - updateUsersPref(); - manageUsersPref.setOnPreferenceClickListener((preference) -> { - startActivity(new Intent(getActivity(), ManageUsersActivity.class)); - return true; - }); + if (manageUsersPref != null) { + updateUsersPref(); + manageUsersPref.setOnPreferenceClickListener((preference) -> { + startActivity(new Intent(getActivity(), ManageUsersActivity.class)); + return true; + }); + } Preference manageAnonPref = findPref("manage_anon"); - manageAnonPref.setOnPreferenceClickListener((preference) -> { - startActivity(new Intent(getActivity(), ManageAnonActivity.class)); - return true; - }); + if (manageAnonPref != null) { + manageAnonPref.setOnPreferenceClickListener((preference) -> { + startActivity(new Intent(getActivity(), ManageAnonActivity.class)); + return true; + }); + } EditTextPreference portNumberPref = findPref("portNum"); - portNumberPref.setSummary(String.valueOf(FsSettings.getPortNumber())); - portNumberPref.setOnPreferenceChangeListener((preference, newValue) -> { - String newPortNumberString = (String) newValue; - if (preference.getSummary().equals(newPortNumberString)) - return false; - int portNumber = 0; - try { - portNumber = Integer.parseInt(newPortNumberString); - } catch (Exception e) { - Cat.d("Error parsing port number! Moving on..."); - } - if (portNumber <= 0 || 65535 < portNumber) { - Toast.makeText(getActivity(), - R.string.port_validation_error, - Toast.LENGTH_LONG).show(); - return false; - } - preference.setSummary(newPortNumberString); - FsService.stop(); - return true; - }); + if (portNumberPref != null) { + portNumberPref.setSummary(String.valueOf(FsSettings.getPortNumber())); + portNumberPref.setOnPreferenceChangeListener((preference, newValue) -> { + String newPortNumberString = (String) newValue; + if (preference.getSummary().equals(newPortNumberString)) + return false; + int portNumber = 0; + try { + portNumber = Integer.parseInt(newPortNumberString); + } catch (Exception e) { + Cat.d("Error parsing port number! Moving on..."); + } + if (portNumber <= 0 || 65535 < portNumber) { + Toast.makeText(getActivity(), + R.string.port_validation_error, + Toast.LENGTH_LONG).show(); + return false; + } + preference.setSummary(newPortNumberString); + FsService.stop(); + return true; + }); + } final CheckBoxPreference wakelockPref = findPref("stayAwake"); - wakelockPref.setOnPreferenceChangeListener((preference, newValue) -> { - FsService.stop(); - return true; - }); + if (wakelockPref != null) { + wakelockPref.setOnPreferenceChangeListener((preference, newValue) -> { + FsService.stop(); + return true; + }); + } final CheckBoxPreference writeExternalStoragePref = findPref("writeExternalStorage"); - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { - String externalStorageUri = FsSettings.getExternalStorageUri(); - if (externalStorageUri == null) { - writeExternalStoragePref.setChecked(false); - } - writeExternalStoragePref.setOnPreferenceChangeListener((preference, newValue) -> { - if ((boolean) newValue) { - Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); - startActivityForResult(intent, ACTION_OPEN_DOCUMENT_TREE); - return false; - } else { - FsSettings.setExternalStorageUri(null); - return true; + if (writeExternalStoragePref != null) { + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { + String externalStorageUri = FsSettings.getExternalStorageUri(); + if (externalStorageUri == null) { + writeExternalStoragePref.setChecked(false); } - }); - } else { - writeExternalStoragePref.setEnabled(false); - writeExternalStoragePref.setChecked(true); - writeExternalStoragePref.setSummary(getString(R.string.write_external_storage_old_android_version_summary)); + writeExternalStoragePref.setOnPreferenceChangeListener((preference, newValue) -> { + if ((boolean) newValue) { + Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); + startActivityForResult(intent, ACTION_OPEN_DOCUMENT_TREE); + return false; + } else { + FsSettings.setExternalStorageUri(null); + return true; + } + }); + } else { + writeExternalStoragePref.setEnabled(false); + writeExternalStoragePref.setChecked(true); + writeExternalStoragePref.setSummary(getString(R.string.write_external_storage_old_android_version_summary)); + } } final ListPreference batterySaver = findPref("battery_saver"); - // val 0 HIGH is always on wake locks + wake lock setting enabled (high battery, smooth) - // val 1 LOW is wake locks run only during client connection (low battery, some of both) - // val 2 DEEP is wake locks disabled (lowest battery use, a bit choppy) - final String s = batterySaver.getValue(); - if (Integer.parseInt(s) > 1) { - wakelockPref.setChecked(false); - wakelockPref.setEnabled(false); - } else { - wakelockPref.setEnabled(true); - } - batterySaver.setTitle("Battery saver"); - final String bSumSelection = FsSettings.getBatterySaverChoice(null) + '\n'; - final String bSum = bSumSelection + getString(R.string.battery_saver_desc); - batterySaver.setSummary(bSum); - batterySaver.setOnPreferenceChangeListener((preference, newValue) -> { - if (Integer.parseInt((String) newValue) > 1) { + if (batterySaver != null && wakelockPref != null) { + // val 0 HIGH is always on wake locks + wake lock setting enabled (high battery, smooth) + // val 1 LOW is wake locks run only during client connection (low battery, some of both) + // val 2 DEEP is wake locks disabled (lowest battery use, a bit choppy) + final String s = batterySaver.getValue(); + if (Integer.parseInt(s) > 1) { wakelockPref.setChecked(false); wakelockPref.setEnabled(false); } else { wakelockPref.setEnabled(true); } - final String bSumSelection2 = FsSettings.getBatterySaverChoice( - (String) newValue) + '\n'; - final String bSum2 = bSumSelection2 + getString(R.string.battery_saver_desc); - batterySaver.setSummary(bSum2); - return true; - }); + batterySaver.setTitle("Battery saver"); + final String bSumSelection = FsSettings.getBatterySaverChoice(null) + '\n'; + final String bSum = bSumSelection + getString(R.string.battery_saver_desc); + batterySaver.setSummary(bSum); + batterySaver.setOnPreferenceChangeListener((preference, newValue) -> { + if (Integer.parseInt((String) newValue) > 1) { + wakelockPref.setChecked(false); + wakelockPref.setEnabled(false); + } else { + wakelockPref.setEnabled(true); + } + final String bSumSelection2 = FsSettings.getBatterySaverChoice( + (String) newValue) + '\n'; + final String bSum2 = bSumSelection2 + getString(R.string.battery_saver_desc); + batterySaver.setSummary(bSum2); + return true; + }); + } final CheckBoxPreference useScopedStorage = findPref("useScopedStorage"); - SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(App.getAppContext()); - if (sp.getBoolean("NewScopedStorageUpgradeCheck", true)) { - // Don't break use if "write external storage" was used before the app update as the original - // code it now fully uses isn't compat with the newer one and would see major issues. - // Runs one time only on update as pref won't be checked after clean install / wipe. - // Code is executed on app start which happens automatically after app update. - if (writeExternalStoragePref.isChecked()) { // needs to be true to not break use - sp.edit().putBoolean("UseScopedStorage", true).apply(); - sp.edit().putBoolean("NewScopedStorageUpgradeCheck", false).apply(); - writeExtMultiUserUpgradePath(); + if (useScopedStorage != null && writeExternalStoragePref != null) { + SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(App.getAppContext()); + if (sp.getBoolean("NewScopedStorageUpgradeCheck", true)) { + // Don't break use if "write external storage" was used before the app update as the original + // code it now fully uses isn't compat with the newer one and would see major issues. + // Runs one time only on update as pref won't be checked after clean install / wipe. + // Code is executed on app start which happens automatically after app update. + if (writeExternalStoragePref.isChecked()) { // needs to be true to not break use + sp.edit().putBoolean("UseScopedStorage", true).apply(); + sp.edit().putBoolean("NewScopedStorageUpgradeCheck", false).apply(); + writeExtMultiUserUpgradePath(); + } } - } - if (Util.useScopedStorage()) { - // Do not allow mixing of old setting with the new one! - useScopedStorage.setChecked(true); - writeExternalStoragePref.setChecked(false); - writeExternalStoragePref.setEnabled(false); - } else { - useScopedStorage.setChecked(false); - } - useScopedStorage.setOnPreferenceChangeListener((preference, newValue) -> { - writeExternalStoragePref.setChecked(false); - writeExternalStoragePref.setEnabled(!((boolean) newValue)); - sp.edit().putBoolean("UseScopedStorage", (boolean) newValue).apply(); - Util.resetScoped(); + if (Util.useScopedStorage()) { + // Do not allow mixing of old setting with the new one! + useScopedStorage.setChecked(true); + writeExternalStoragePref.setChecked(false); + writeExternalStoragePref.setEnabled(false); + } else { + useScopedStorage.setChecked(false); + } + useScopedStorage.setOnPreferenceChangeListener((preference, newValue) -> { + writeExternalStoragePref.setChecked(false); + writeExternalStoragePref.setEnabled(!((boolean) newValue)); + sp.edit().putBoolean("UseScopedStorage", (boolean) newValue).apply(); + Util.resetScoped(); - return true; - }); + return true; + }); + } ListPreference themePref = findPref("theme"); - themePref.setSummary(themePref.getEntry()); - themePref.setOnPreferenceChangeListener((preference, newValue) -> { + if (themePref != null) { themePref.setSummary(themePref.getEntry()); - getActivity().recreate(); - return true; - }); + themePref.setOnPreferenceChangeListener((preference, newValue) -> { + themePref.setSummary(themePref.getEntry()); + getActivity().recreate(); + return true; + }); + } Preference showNotificationIconPref = findPref("show_notification_icon_preference"); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - PreferenceScreen appearanceScreen = (PreferenceScreen) findPreference("appearance_screen"); - appearanceScreen.removePreference(showNotificationIconPref); + if (showNotificationIconPref != null) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + PreferenceScreen appearanceScreen = (PreferenceScreen) findPreference("appearance_screen"); + if (appearanceScreen != null) { + appearanceScreen.removePreference(showNotificationIconPref); + } + } + showNotificationIconPref.setOnPreferenceChangeListener((preference, newValue) -> { + FsService.stop(); + return true; + }); } - showNotificationIconPref.setOnPreferenceChangeListener((preference, newValue) -> { - FsService.stop(); - return true; - }); Preference helpPref = findPref("help"); - helpPref.setOnPreferenceClickListener(preference -> { - Cat.v("On preference help clicked"); - Context context = getActivity(); - AlertDialog ad = new AlertDialog.Builder(context) - .setTitle(R.string.help_dlg_title) - .setMessage(R.string.help_dlg_message) - .setPositiveButton(android.R.string.ok, null) - .create(); - ad.show(); - Linkify.addLinks((TextView) ad.findViewById(android.R.id.message), - Linkify.ALL); - return true; - }); + if (helpPref != null) { + helpPref.setOnPreferenceClickListener(preference -> { + Cat.v("On preference help clicked"); + Context context = getActivity(); + AlertDialog ad = new AlertDialog.Builder(context) + .setTitle(R.string.help_dlg_title) + .setMessage(R.string.help_dlg_message) + .setPositiveButton(android.R.string.ok, null) + .create(); + ad.show(); + Linkify.addLinks((TextView) ad.findViewById(android.R.id.message), + Linkify.ALL); + return true; + }); + } Preference aboutPref = findPref("about"); - aboutPref.setOnPreferenceClickListener(preference -> { - startActivity(new Intent(getActivity(), AboutActivity.class)); - return true; - }); + if (aboutPref != null) { + aboutPref.setOnPreferenceClickListener(preference -> { + startActivity(new Intent(getActivity(), AboutActivity.class)); + return true; + }); + } Preference logsPref = findPref("logs"); - logsPref.setOnPreferenceClickListener(preference -> { - startActivity(new Intent(getActivity(), LogActivity.class)); - return true; - }); + if (logsPref != null) { + logsPref.setOnPreferenceClickListener(preference -> { + startActivity(new Intent(getActivity(), LogActivity.class)); + return true; + }); + } Preference logCheckbox = findPref("enable_logging"); - logCheckbox.setOnPreferenceChangeListener((preference, newValue) -> { - if (!(boolean) newValue) new Logging().clearLog(); - return true; - }); + if (logCheckbox != null) { + logCheckbox.setOnPreferenceChangeListener((preference, newValue) -> { + if (!(boolean) newValue) new Logging().clearLog(); + return true; + }); + } } @@ -384,6 +467,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent resultData) */ private void updateUsersPref() { Preference manageUsersPref = findPref("manage_users"); + if (manageUsersPref == null) return; List users = FsSettings.getUsers(); switch (users.size()) { case 0: @@ -406,6 +490,7 @@ private void updateUsersPref() { private void updateRunningState() { Resources res = getResources(); TwoStatePreference runningPref = findPref("running_switch"); + if (runningPref == null) return; if (FsService.isRunning()) { runningPref.setChecked(true); // Fill in the FTP server address diff --git a/app/src/main/java/be/ppareit/swiftp/gui/UserEditFragment.java b/app/src/main/java/be/ppareit/swiftp/gui/UserEditFragment.java index 51a91a10..3d103b79 100644 --- a/app/src/main/java/be/ppareit/swiftp/gui/UserEditFragment.java +++ b/app/src/main/java/be/ppareit/swiftp/gui/UserEditFragment.java @@ -1,13 +1,13 @@ package be.ppareit.swiftp.gui; import android.app.Activity; -import android.app.Fragment; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; import android.view.LayoutInflater; import android.view.View; diff --git a/app/src/main/java/be/ppareit/swiftp/gui/UserListFragment.java b/app/src/main/java/be/ppareit/swiftp/gui/UserListFragment.java index a92a37d0..9e57d715 100644 --- a/app/src/main/java/be/ppareit/swiftp/gui/UserListFragment.java +++ b/app/src/main/java/be/ppareit/swiftp/gui/UserListFragment.java @@ -1,13 +1,15 @@ package be.ppareit.swiftp.gui; import android.app.AlertDialog; -import android.app.Fragment; -import android.app.FragmentTransaction; import android.content.Context; import android.os.Bundle; import android.os.Parcelable; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentTransaction; + import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -68,7 +70,7 @@ private void showEditItemFragment(FtpUser item) { } refreshUserList(); }); - getActivity().getFragmentManager().beginTransaction() + getActivity().getSupportFragmentManager().beginTransaction() .replace(android.R.id.content, editFragment) .addToBackStack("default") .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 635b7709..23990680 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -18,63 +18,78 @@ along with SwiFTP. If not, see . --> + xmlns:app="http://schemas.android.com/apk/res-auto" + android:key="preference_screen" + app:iconSpaceReserved="false"> + android:title="@string/running_label" + app:iconSpaceReserved="false" /> + android:title="@string/market_version_label" + app:iconSpaceReserved="false" /> + android:title="@string/settings_label" + app:iconSpaceReserved="false"> + android:title="@string/manage_users_label" + app:iconSpaceReserved="false" /> + android:title="@string/manage_anon_label" + app:iconSpaceReserved="false"/> + android:title="@string/gui_settings_label" + app:iconSpaceReserved="false"> + android:title="@string/app_theme" + app:iconSpaceReserved="false" /> + android:title="@string/show_notification_icon" + app:iconSpaceReserved="false" /> + android:key="preference_screen_advanced" + android:title="@string/advanced_settings_label" + app:iconSpaceReserved="false" > + android:title="@string/port_number_label" + app:iconSpaceReserved="false" /> + android:title="@string/wakelock_label" + app:iconSpaceReserved="false" /> + android:title="@string/writeExternalStorage_label" + app:iconSpaceReserved="false" /> . android:drawableStart="@drawable/ic_shared_dir" android:title="@string/use_scoped_storage_label" android:summary="@string/use_scope_storage_summary" - /> + app:iconSpaceReserved="false" /> . android:key="battery_saver" android:dialogTitle="@string/battery_saver_setting_title" android:title="@string/battery_saver_setting_title" - android:summary="@string/battery_saver_desc"/> + android:summary="@string/battery_saver_desc" + app:iconSpaceReserved="false" /> + android:title="@string/logging" + app:iconSpaceReserved="false" > + android:title="@string/enable_logging" + app:iconSpaceReserved="false" /> + android:title="@string/manage_log_label" + app:iconSpaceReserved="false" /> @@ -113,13 +132,16 @@ along with SwiFTP. If not, see . + android:title="@string/extra_label" + app:iconSpaceReserved="false" > + android:title="@string/help_label" + app:iconSpaceReserved="false" /> + android:title="@string/about_label" + app:iconSpaceReserved="false"/>