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"/>