From 4f9f9da5cc3cb8fd9afbaedbd96a2448cb50424c Mon Sep 17 00:00:00 2001 From: Muntashir Al-Islam Date: Thu, 13 Jul 2023 08:53:01 +0600 Subject: [PATCH] [FM] Implement settings for files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Option to display “Files” in the app drawer 2. Option to remember last opened path and its position 3. Set home directory (set to /sdcard by default) 4. New icon for Files which will also be displayed in app drawer (if enabled) 5. New window duplicates the last window instead of opening the home directory 6. Added a “Settings” menu item in the Files activities. Signed-off-by: Muntashir Al-Islam --- app/src/main/AndroidManifest.xml | 18 ++++ app/src/main/ic_launcher_fm-playstore.png | Bin 0 -> 16890 bytes .../AppManager/fm/FmActivity.java | 28 ++++-- .../AppManager/fm/FmFragment.java | 30 ++++++- .../muntashirakon/AppManager/fm/FmUtils.java | 2 +- .../settings/FileManagerPreferences.java | 82 ++++++++++++++++++ .../AppManager/settings/Prefs.java | 65 ++++++++++++++ .../AppManager/utils/AppPref.java | 9 ++ .../drawable/ic_launcher_fm_foreground.xml | 17 ++++ app/src/main/res/menu/activity_fm_actions.xml | 6 ++ .../res/mipmap-anydpi-v26/ic_launcher_fm.xml | 6 ++ .../ic_launcher_fm_round.xml | 6 ++ .../main/res/mipmap-hdpi/ic_launcher_fm.png | Bin 0 -> 1670 bytes .../res/mipmap-hdpi/ic_launcher_fm_round.png | Bin 0 -> 3297 bytes .../main/res/mipmap-mdpi/ic_launcher_fm.png | Bin 0 -> 1163 bytes .../res/mipmap-mdpi/ic_launcher_fm_round.png | Bin 0 -> 2086 bytes .../main/res/mipmap-xhdpi/ic_launcher_fm.png | Bin 0 -> 2377 bytes .../res/mipmap-xhdpi/ic_launcher_fm_round.png | Bin 0 -> 4766 bytes .../main/res/mipmap-xxhdpi/ic_launcher_fm.png | Bin 0 -> 3617 bytes .../mipmap-xxhdpi/ic_launcher_fm_round.png | Bin 0 -> 7498 bytes .../res/mipmap-xxxhdpi/ic_launcher_fm.png | Bin 0 -> 5062 bytes .../mipmap-xxxhdpi/ic_launcher_fm_round.png | Bin 0 -> 10939 bytes .../res/values/ic_launcher_fm_background.xml | 4 + app/src/main/res/values/strings.xml | 5 ++ .../main/res/xml/preferences_file_manager.xml | 20 +++++ app/src/main/res/xml/preferences_main.xml | 7 ++ arts/icon_v2/icon_fm.svg | 75 ++++++++++++++++ 27 files changed, 373 insertions(+), 7 deletions(-) create mode 100644 app/src/main/ic_launcher_fm-playstore.png create mode 100644 app/src/main/java/io/github/muntashirakon/AppManager/settings/FileManagerPreferences.java create mode 100644 app/src/main/res/drawable/ic_launcher_fm_foreground.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_fm.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_fm_round.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_fm.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_fm_round.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_fm.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_fm_round.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_fm.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_fm_round.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_fm.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_fm_round.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_fm.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_fm_round.png create mode 100644 app/src/main/res/values/ic_launcher_fm_background.xml create mode 100644 app/src/main/res/xml/preferences_file_manager.xml create mode 100644 arts/icon_v2/icon_fm.svg diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 60c051b8ed2..a38582a8b15 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -950,6 +950,8 @@ android:name=".fm.FmActivity" android:exported="true" android:label="@string/files" + android:icon="@mipmap/ic_launcher_fm" + android:roundIcon="@mipmap/ic_launcher_fm_round" android:taskAffinity=".fm.FmActivity"> @@ -973,6 +975,22 @@ + + + + + + + + + %m}@;7>{z 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 literal 0 HcmV?d00001 diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/fm/FmActivity.java b/app/src/main/java/io/github/muntashirakon/AppManager/fm/FmActivity.java index 89861731172..c1a173f02da 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/fm/FmActivity.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/fm/FmActivity.java @@ -6,7 +6,6 @@ import android.content.Intent; import android.net.Uri; import android.os.Bundle; -import android.os.Environment; import android.os.Parcel; import android.os.Parcelable; import android.provider.DocumentsContract; @@ -17,12 +16,14 @@ import androidx.annotation.Nullable; import androidx.core.os.BundleCompat; import androidx.core.os.ParcelCompat; +import androidx.core.util.Pair; import androidx.fragment.app.Fragment; import java.util.Objects; import io.github.muntashirakon.AppManager.BaseActivity; import io.github.muntashirakon.AppManager.R; +import io.github.muntashirakon.AppManager.settings.Prefs; public class FmActivity extends BaseActivity { public static class Options implements Parcelable { @@ -72,6 +73,8 @@ public void writeToParcel(@NonNull Parcel dest, int flags) { } } + public static final String LAUNCHER_ALIAS = "io.github.muntashirakon.AppManager.fm.FilesActivity"; + public static final String EXTRA_OPTIONS = "opt"; @Override @@ -80,7 +83,7 @@ protected void onAuthenticated(@Nullable Bundle savedInstanceState) { setSupportActionBar(findViewById(R.id.toolbar)); findViewById(R.id.progress_linear).setVisibility(View.GONE); Uri uri = getIntent().getData(); - if (uri.getScheme() == null) { + if (uri != null && uri.getScheme() == null) { // file:// URI can have no schema. So, fix it by adding file:// if (uri.getPath() != null && uri.getAuthority() == null) { uri = uri.buildUpon().scheme(ContentResolver.SCHEME_FILE).build(); @@ -91,11 +94,26 @@ protected void onAuthenticated(@Nullable Bundle savedInstanceState) { } if (savedInstanceState == null) { Options options = getIntent().getExtras() != null ? BundleCompat.getParcelable(getIntent().getExtras(), EXTRA_OPTIONS, Options.class) : null; + Integer position = null; if (options == null) { - options = new Options(uri != null ? uri : Uri.fromFile(Environment.getExternalStorageDirectory()), - false, false, false); + if (uri != null) { + options = new Options(uri, false, false, false); + } else if (Prefs.FileManager.isRememberLastOpenedPath()) { + Pair> optionsUriPostionPair = Prefs.FileManager.getLastOpenedPath(); + if (optionsUriPostionPair != null) { + options = optionsUriPostionPair.first; + if (options.isVfs) { + uri = optionsUriPostionPair.second.first; + } + position = optionsUriPostionPair.second.second; + } + } + if (options == null) { + // Use home + options = new Options(Prefs.FileManager.getHome(), false, false, false); + } } - Fragment fragment = FmFragment.getNewInstance(options, options.isVfs ? uri : null); + Fragment fragment = FmFragment.getNewInstance(options, options.isVfs ? uri : null, position); getSupportFragmentManager() .beginTransaction() .replace(R.id.main_layout, fragment, FmFragment.TAG) diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/fm/FmFragment.java b/app/src/main/java/io/github/muntashirakon/AppManager/fm/FmFragment.java index 62a208f8ea4..76d52c0e26e 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/fm/FmFragment.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/fm/FmFragment.java @@ -13,6 +13,7 @@ import android.net.Uri; import android.os.Bundle; import android.os.SystemClock; +import android.provider.DocumentsContract; import android.text.SpannableStringBuilder; import android.text.TextUtils; import android.text.format.Formatter; @@ -57,6 +58,8 @@ import java.util.concurrent.atomic.AtomicReference; import io.github.muntashirakon.AppManager.R; +import io.github.muntashirakon.AppManager.settings.Prefs; +import io.github.muntashirakon.AppManager.settings.SettingsActivity; import io.github.muntashirakon.AppManager.shortcut.CreateShortcutDialogFragment; import io.github.muntashirakon.AppManager.utils.FileUtils; import io.github.muntashirakon.AppManager.utils.StorageUtils; @@ -83,7 +86,8 @@ public class FmFragment extends Fragment implements SearchView.OnQueryTextListen public static final String ARG_POSITION = "pos"; @NonNull - public static FmFragment getNewInstance(@NonNull FmActivity.Options options, @Nullable Uri initUri) { + public static FmFragment getNewInstance(@NonNull FmActivity.Options options, @Nullable Uri initUri, + @Nullable Integer position) { if (!options.isVfs && initUri != null) { throw new IllegalArgumentException("initUri can only be set when the file system is virtual."); } @@ -91,6 +95,9 @@ public static FmFragment getNewInstance(@NonNull FmActivity.Options options, @Nu Bundle args = new Bundle(); args.putParcelable(ARG_OPTIONS, options); args.putParcelable(ARG_URI, initUri); + if (position != null) { + args.putInt(ARG_POSITION, position); + } fragment.setArguments(args); return fragment; } @@ -155,6 +162,9 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat } if (options == null) { options = Objects.requireNonNull(BundleCompat.getParcelable(requireArguments(), ARG_OPTIONS, FmActivity.Options.class)); + if (requireArguments().containsKey(ARG_POSITION)) { + scrollPosition.set(requireArguments().getInt(ARG_POSITION, RecyclerView.NO_POSITION)); + } } mActivity = (FmActivity) requireActivity(); // Set title and subtitle @@ -338,6 +348,17 @@ public void onScrolled(@NonNull androidx.recyclerview.widget.RecyclerView recycl mModel.setOptions(options, uri); } + @Override + public void onStop() { + super.onStop(); + if (mModel != null && mRecyclerView != null) { + View v = mRecyclerView.getChildAt(0); + if (v != null) { + Prefs.FileManager.setLastOpenedPath(mModel.getOptions(), mModel.getCurrentUri(), mRecyclerView.getChildAdapterPosition(v)); + } + } + } + @Override public void onSaveInstanceState(@NonNull Bundle outState) { if (mModel != null) { @@ -432,9 +453,16 @@ public boolean onOptionsItemSelected(@NonNull MenuItem item) { return true; } else if (id == R.id.action_new_window) { Intent intent = new Intent(mActivity, FmActivity.class); + if (!mModel.getOptions().isVfs) { + intent.setDataAndType(mModel.getCurrentUri(), DocumentsContract.Document.MIME_TYPE_DIR); + } intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); startActivity(intent); return true; + } else if (id == R.id.action_settings) { + Intent intent = SettingsActivity.getIntent(requireContext(), "files_prefs"); + startActivity(intent); + return true; } return super.onOptionsItemSelected(item); } diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/fm/FmUtils.java b/app/src/main/java/io/github/muntashirakon/AppManager/fm/FmUtils.java index 192215b79f9..06c37e3f94d 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/fm/FmUtils.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/fm/FmUtils.java @@ -21,7 +21,7 @@ import io.github.muntashirakon.io.Path; import io.github.muntashirakon.io.fs.VirtualFileSystem; -final class FmUtils { +public final class FmUtils { @NonNull public static String getDisplayablePath(@NonNull Path path) { return getDisplayablePath(path.getUri()); diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/settings/FileManagerPreferences.java b/app/src/main/java/io/github/muntashirakon/AppManager/settings/FileManagerPreferences.java new file mode 100644 index 00000000000..72b1303ff04 --- /dev/null +++ b/app/src/main/java/io/github/muntashirakon/AppManager/settings/FileManagerPreferences.java @@ -0,0 +1,82 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package io.github.muntashirakon.AppManager.settings; + +import android.content.ComponentName; +import android.content.ContentResolver; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.Bundle; +import android.text.TextUtils; + +import androidx.annotation.Nullable; +import androidx.preference.Preference; +import androidx.preference.SwitchPreferenceCompat; + +import com.google.android.material.transition.MaterialSharedAxis; + +import java.io.File; +import java.util.Objects; + +import io.github.muntashirakon.AppManager.BuildConfig; +import io.github.muntashirakon.AppManager.R; +import io.github.muntashirakon.AppManager.fm.FmActivity; +import io.github.muntashirakon.AppManager.fm.FmUtils; +import io.github.muntashirakon.dialog.TextInputDialogBuilder; + +public class FileManagerPreferences extends PreferenceFragment { + + @Override + public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) { + setPreferencesFromResource(R.xml.preferences_file_manager, rootKey); + getPreferenceManager().setPreferenceDataStore(new SettingsDataStore()); + // Display in launcher + SwitchPreferenceCompat displayInLauncherPref = Objects.requireNonNull(findPreference("fm_display_in_launcher")); + displayInLauncherPref.setChecked(Prefs.FileManager.displayInLauncher()); + displayInLauncherPref.setOnPreferenceChangeListener((preference, newValue) -> { + boolean isChecked = (boolean) newValue; + int newState = isChecked ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED; + ComponentName componentName = new ComponentName(BuildConfig.APPLICATION_ID, FmActivity.LAUNCHER_ALIAS); + requireContext().getPackageManager().setComponentEnabledSetting(componentName, newState, PackageManager.DONT_KILL_APP); + return true; + }); + // Remember last opened path + SwitchPreferenceCompat filesRememberLastPathPref = Objects.requireNonNull(findPreference("fm_remember_last_path")); + filesRememberLastPathPref.setChecked(Prefs.FileManager.isRememberLastOpenedPath()); + // Set home + Preference setHomePrefs = Objects.requireNonNull(findPreference("fm_home")); + setHomePrefs.setSummary(FmUtils.getDisplayablePath(Prefs.FileManager.getHome())); + setHomePrefs.setOnPreferenceClickListener(preference -> { + new TextInputDialogBuilder(requireContext(), null) + .setTitle(R.string.pref_set_home) + .setInputText(FmUtils.getDisplayablePath(Prefs.FileManager.getHome())) + .setNegativeButton(R.string.cancel, null) + .setPositiveButton(R.string.ok, (dialog, which, inputText, isChecked) -> { + if (TextUtils.isEmpty(inputText)) { + return; + } + String newHome = inputText.toString(); + Uri uri; + if (newHome.startsWith(File.separator)) { + uri = new Uri.Builder().scheme(ContentResolver.SCHEME_FILE).path(newHome).build(); + } else uri = Uri.parse(newHome); + Prefs.FileManager.setHome(uri); + setHomePrefs.setSummary(FmUtils.getDisplayablePath(uri)); + }) + .show(); + return true; + }); + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setEnterTransition(new MaterialSharedAxis(MaterialSharedAxis.Z, true)); + setReturnTransition(new MaterialSharedAxis(MaterialSharedAxis.Z, false)); + } + + @Override + public int getTitle() { + return R.string.files; + } +} diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/settings/Prefs.java b/app/src/main/java/io/github/muntashirakon/AppManager/settings/Prefs.java index 4e55d601322..51dfa9bc24e 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/settings/Prefs.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/settings/Prefs.java @@ -5,8 +5,10 @@ import static io.github.muntashirakon.AppManager.backup.MetadataManager.TAR_TYPES; import android.Manifest; +import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; +import android.content.pm.PackageManager; import android.net.Uri; import android.os.Build; import android.text.TextUtils; @@ -14,6 +16,10 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.StyleRes; +import androidx.core.util.Pair; + +import org.json.JSONException; +import org.json.JSONObject; import java.io.File; @@ -24,6 +30,7 @@ import io.github.muntashirakon.AppManager.backup.CryptoUtils; import io.github.muntashirakon.AppManager.compat.ManifestCompat; import io.github.muntashirakon.AppManager.details.AppDetailsFragment; +import io.github.muntashirakon.AppManager.fm.FmActivity; import io.github.muntashirakon.AppManager.fm.FmListOptions; import io.github.muntashirakon.AppManager.logcat.helper.LogcatHelper; import io.github.muntashirakon.AppManager.main.MainListOptions; @@ -32,6 +39,7 @@ import io.github.muntashirakon.AppManager.self.SelfPermissions; import io.github.muntashirakon.AppManager.utils.AppPref; import io.github.muntashirakon.AppManager.utils.ArrayUtils; +import io.github.muntashirakon.AppManager.utils.ContextUtils; import io.github.muntashirakon.AppManager.utils.FreezeUtils; import io.github.muntashirakon.AppManager.utils.TarUtils; import io.github.muntashirakon.io.Path; @@ -265,6 +273,63 @@ public static void setOpenPgpKeyIds(@NonNull String keyIds) { } public static final class FileManager { + public static boolean displayInLauncher() { + ComponentName componentName = new ComponentName(BuildConfig.APPLICATION_ID, FmActivity.LAUNCHER_ALIAS); + int state = ContextUtils.getContext().getPackageManager().getComponentEnabledSetting(componentName); + return state == PackageManager.COMPONENT_ENABLED_STATE_ENABLED; + } + + public static Uri getHome() { + return Uri.parse(AppPref.getString(AppPref.PrefKey.PREF_FM_HOME_STR)); + } + + public static void setHome(@NonNull Uri uri) { + AppPref.set(AppPref.PrefKey.PREF_FM_HOME_STR, uri.toString()); + } + + public static boolean isRememberLastOpenedPath() { + return AppPref.getBoolean(AppPref.PrefKey.PREF_FM_REMEMBER_LAST_PATH_BOOL); + } + + @Nullable + public static Pair> getLastOpenedPath() { + String jsonString = AppPref.getString(AppPref.PrefKey.PREF_FM_LAST_PATH_STR); + try { + JSONObject object = new JSONObject(jsonString); + if (object.has("path") && object.has("pos")) { + boolean vfs = object.has("vfs") && object.getBoolean("vfs"); + FmActivity.Options options = new FmActivity.Options(Uri.parse(object.getString("path")), + vfs, false, false); + Uri initUri; + if (vfs && object.has("init")) { + initUri = Uri.parse(object.getString("init")); + } else initUri = null; + Pair uriPositionPair = new Pair<>(initUri, object.getInt("pos")); + return new Pair<>(options, uriPositionPair); + } + } catch (JSONException e) { + e.printStackTrace(); + } + return null; + } + + public static void setLastOpenedPath(@NonNull FmActivity.Options options, @NonNull Uri initUri, int position) { + try { + JSONObject object = new JSONObject(); + object.put("pos", position); + if (options.isVfs) { + object.put("vfs", true); + object.put("path", options.uri.toString()); + object.put("init", initUri.toString()); + } else { + object.put("path", initUri.toString()); + } + AppPref.set(AppPref.PrefKey.PREF_FM_LAST_PATH_STR, object.toString()); + } catch (JSONException e) { + e.printStackTrace(); + } + } + @FmListOptions.Options public static int getOptions() { return AppPref.getInt(AppPref.PrefKey.PREF_FM_OPTIONS_INT); diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/utils/AppPref.java b/app/src/main/java/io/github/muntashirakon/AppManager/utils/AppPref.java index 0a7733172e7..2e866873f94 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/utils/AppPref.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/utils/AppPref.java @@ -81,7 +81,11 @@ public enum PrefKey { PREF_ENCRYPTION_STR, PREF_FREEZE_TYPE_INT, + PREF_FM_DISPLAY_IN_LAUNCHER_BOOL, + PREF_FM_HOME_STR, + PREF_FM_LAST_PATH_STR, PREF_FM_OPTIONS_INT, + PREF_FM_REMEMBER_LAST_PATH_BOOL, PREF_FM_SORT_ORDER_INT, PREF_FM_SORT_REVERSE_BOOL, @@ -377,6 +381,8 @@ public Object getDefaultValue(@NonNull PrefKey key) { case PREF_LOG_VIEWER_OMIT_SENSITIVE_INFO_BOOL: case PREF_APP_THEME_PURE_BLACK_BOOL: case PREF_DISPLAY_CHANGELOG_BOOL: + case PREF_FM_DISPLAY_IN_LAUNCHER_BOOL: + case PREF_FM_REMEMBER_LAST_PATH_BOOL: case PREF_FM_SORT_REVERSE_BOOL: return false; case PREF_APP_OP_SHOW_DEFAULT_BOOL: @@ -429,6 +435,7 @@ public Object getDefaultValue(@NonNull PrefKey key) { case PREF_SIGNATURE_SCHEMES_INT: return SigSchemes.DEFAULT_SCHEMES; case PREF_BACKUP_VOLUME_STR: + case PREF_FM_HOME_STR: return Uri.fromFile(Environment.getExternalStorageDirectory()).toString(); case PREF_LOG_VIEWER_FILTER_PATTERN_STR: return mContext.getString(R.string.pref_filter_pattern_default); @@ -457,6 +464,8 @@ public Object getDefaultValue(@NonNull PrefKey key) { return FmListOptions.SORT_BY_NAME; case PREF_DEBLOATER_FILTER_FLAGS_INT: return DebloaterListOptions.getDefaultFilterFlags(); + case PREF_FM_LAST_PATH_STR: + return "{}"; } throw new IllegalArgumentException("Pref key not found."); } diff --git a/app/src/main/res/drawable/ic_launcher_fm_foreground.xml b/app/src/main/res/drawable/ic_launcher_fm_foreground.xml new file mode 100644 index 00000000000..d24c32ad440 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_fm_foreground.xml @@ -0,0 +1,17 @@ + + + + + + diff --git a/app/src/main/res/menu/activity_fm_actions.xml b/app/src/main/res/menu/activity_fm_actions.xml index 9f946a4a7ea..ae6072667ba 100644 --- a/app/src/main/res/menu/activity_fm_actions.xml +++ b/app/src/main/res/menu/activity_fm_actions.xml @@ -38,4 +38,10 @@ android:title="@string/storage" app:showAsAction="never" /> + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_fm.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_fm.xml new file mode 100644 index 00000000000..3709095a7d8 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_fm.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_fm_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_fm_round.xml new file mode 100644 index 00000000000..bb1f60f92c4 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_fm_round.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_fm.png b/app/src/main/res/mipmap-hdpi/ic_launcher_fm.png new file mode 100644 index 0000000000000000000000000000000000000000..008c3f0d08da8a4270005e67fd197c9f480bdd92 GIT binary patch literal 1670 zcmV;126_33P)A%v4U(ffjvkqsL-JQLNXEML!^We;x-#Op!o;kNsEfzD( zFvAQpq>nKSyTO2_xP(=_V4#RuTOfhgW~=f#?Wa5rdn@A%VDv$oTC1K2yq_%59e=|A3p| zL01&Lf(Ic(G3bIinZZyDx~k|MZb9f!47#XJW-z!Wrty14ui!z*FbxV5ra@ssmqF>t zZYr6QMZU5EUCfy=k&;|?O}>{z;td*~;-SO!3+eu~ee|s75Ixt)qnih5Uv2qlnUq+A zQoT+(y=OT+>pn#P{@4;VgEtOR&J#(~i=DX|9aSUE={ zG!_Pb7<%2Z(vsqW*Qqf?B(VlHZ&;ua87q%(HPJ6;H^+r@%~iB;Rz4-W9ilPv8uW+}_Dg5bIF5}$LyNoYaY@wu`9@87y-05m)+!mP9-jBu zRv#^$^ID*u4a;Z6ydjp}pw^};o)d#~Z~IQV`e_Y6W5Tuk%(3*_x%V{B=s{|Op4@Jx zHNH1^P8^`&+OzIvnm;o)P!~3_;&XbC+9328^b+isj&ENQxZcKQwX`G`ud5(CEvD7A z)CQeus3b4Tm%|2RwFwV8_S5Xb99|dBi9Xr>mgd<=k=CFGY`2YrHyBj^PKoCJiCs$r zhiF9wnf%O1EE5UR8g$|4YW^DKq$l$;9Pxf%`z|WXP3QIDh!=}Vu}maLY0yB|0Y05$ z=GypnNzfw>T-&{RZlKO3vkQWj3x|{jwSBaTPvukD!tjr8wrTDw{Cs8;UofK1G_Q+( z`m$bACLGckgpTRKr z&LBJsbFjU*cA}Q{ta+14r)BeF4zV5)^tyZBHfVB&LMnrPZQUGrWw5?UaXa|Idg;_` zs$MXi)>qC7P&s!BP0C6Yg>ggmY(JzisK2w3%2-dq)Qwg1;rd1VV6305d7iQrHAJhw zyyDOJW`-{mlQLfzmBkG1ZQH5IKN399XyZHhMAKy_^kJLXK2Gm#UQ*cVnamm?fzh01x;oHExx^n6A}(A z2ewtu9@Y++^!xeH$02B|*#3kYgpDNjQetBiu&!xh=By~6M%PcS)ivvc;?K)_*uE@- z_oRyAJU+;WS{I>>%BJ_F8ieWj=vE(}eZ)qAzpm`%zwAi&V*w|Sou}6E8BV;X26dy2 zXsg)%gc}5~(R{yVUeteqDp8;Thf#@bV0j z6w{zEm88jRd*u)&Zt5*RK_tbp;+uW7hgy4(oth`wK`5v@ml9 znYN|SXwmt4sl&~f$S8H&?Z?=N-|4d3dKkAE-I9Se_do-*K$BmaXP9E0fo|tzWHY8Q zW-^K-2O6Lyi;-lB;?)Wk7{JgK@jn%0N)9wYi>^UA(tz7Wzzj3YFhh#?A5k%-@}(g% Qn*aa+07*qoM6N<$f);EzP5=M^ literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_fm_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_fm_round.png new file mode 100644 index 0000000000000000000000000000000000000000..f433ea12640edff56bce1e07464408adb15130a9 GIT binary patch literal 3297 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_fm.png b/app/src/main/res/mipmap-mdpi/ic_launcher_fm.png new file mode 100644 index 0000000000000000000000000000000000000000..f3d67db69576f2934a59ccf0cdb6042c80db2900 GIT binary patch literal 1163 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_fm.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_fm.png new file mode 100644 index 0000000000000000000000000000000000000000..74e60379d8ed806c9e3e37447bbce8ad5a4d94d0 GIT binary patch literal 3617 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 UDp~jV#sB~S07*qoM6N<$g1}*0@Bjb+ literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_fm.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_fm.png new file mode 100644 index 0000000000000000000000000000000000000000..fdea215672b32bdd9b588b9e39dc899118a6cd0c GIT binary patch literal 5062 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 F{11!ggX{nR literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_fm_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_fm_round.png new file mode 100644 index 0000000000000000000000000000000000000000..e7acc7ee6e5ba8da81db26c7d167acd0e22c7179 GIT binary patch literal 10939 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 + + #090503 + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 52601984647..726d6f23aad 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1425,4 +1425,9 @@ Replace with alternative Alternatives Browse + Configure file manager. + Display “Files” in app drawer + Remember last opened path and its position + When this option is enabled, opening a new window opens the last opened folder instead of the home folder. + Set home diff --git a/app/src/main/res/xml/preferences_file_manager.xml b/app/src/main/res/xml/preferences_file_manager.xml new file mode 100644 index 00000000000..0bfa48ed812 --- /dev/null +++ b/app/src/main/res/xml/preferences_file_manager.xml @@ -0,0 +1,20 @@ + + + + + + + + + + diff --git a/app/src/main/res/xml/preferences_main.xml b/app/src/main/res/xml/preferences_main.xml index 07d73afbf49..8f1c1bd3025 100644 --- a/app/src/main/res/xml/preferences_main.xml +++ b/app/src/main/res/xml/preferences_main.xml @@ -57,6 +57,13 @@ app:summary="@string/pref_log_viewer_msg" android:fragment="io.github.muntashirakon.AppManager.settings.LogViewerPreferences" /> + + + + + + + + + image/svg+xml + + + + + + + + + + + +