diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/MainActivity.kt index f9fed1e1..b792ca80 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/MainActivity.kt @@ -31,10 +31,12 @@ import java.io.File import java.util.* class MainActivity : SimpleActivity() { - private var isSearchOpen = false private val BACK_PRESS_TIMEOUT = 5000 private val PICKED_PATH = "picked_path" + private var isSearchOpen = false private var wasBackJustPressed = false + private var mIsPasswordProtectionPending = false + private var mWasProtectionHandled = false private var searchMenuItem: MenuItem? = null private lateinit var fragment: ItemsFragment @@ -43,6 +45,7 @@ class MainActivity : SimpleActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) appLaunched(BuildConfig.APPLICATION_ID) + mIsPasswordProtectionPending = config.isAppPasswordProtectionOn fragment = (fragment_holder as ItemsFragment).apply { isGetRingtonePicker = intent.action == RingtoneManager.ACTION_RINGTONE_PICKER @@ -51,10 +54,18 @@ class MainActivity : SimpleActivity() { } if (savedInstanceState == null) { - tryInitFileManager() - checkWhatsNewDialog() - checkIfRootAvailable() - checkInvalidFavorites() + handleAppPasswordProtection { + mWasProtectionHandled = it + if (it) { + mIsPasswordProtectionPending = false + tryInitFileManager() + checkWhatsNewDialog() + checkIfRootAvailable() + checkInvalidFavorites() + } else { + finish() + } + } } } @@ -108,11 +119,27 @@ class MainActivity : SimpleActivity() { override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) outState.putString(PICKED_PATH, (fragment_holder as ItemsFragment).currentPath) + outState.putBoolean(WAS_PROTECTION_HANDLED, mWasProtectionHandled) } override fun onRestoreInstanceState(savedInstanceState: Bundle) { super.onRestoreInstanceState(savedInstanceState) - openPath(savedInstanceState.getString(PICKED_PATH), true) + mWasProtectionHandled = savedInstanceState.getBoolean(WAS_PROTECTION_HANDLED, false) + val path = savedInstanceState.getString(PICKED_PATH) ?: internalStoragePath + + if (!mWasProtectionHandled) { + handleAppPasswordProtection { + mWasProtectionHandled = it + if (it) { + mIsPasswordProtectionPending = false + openPath(path, true) + } else { + finish() + } + } + } else { + openPath(path, true) + } } private fun setupSearch(menu: Menu) { @@ -179,6 +206,10 @@ class MainActivity : SimpleActivity() { } private fun openPath(path: String, forceRefresh: Boolean = false) { + if (mIsPasswordProtectionPending && !mWasProtectionHandled) { + return + } + var newPath = path val file = File(path) if (file.exists() && !file.isDirectory) { diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/SettingsActivity.kt index 3f6c9d88..d85c8d20 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/SettingsActivity.kt @@ -30,6 +30,7 @@ class SettingsActivity : SimpleActivity() { setupManageFavorites() setupShowHidden() setupHiddenItemPasswordProtection() + setupAppPasswordProtection() setupKeepLastModified() setupShowInfoBubble() setupEnableRootAccess() @@ -106,6 +107,28 @@ class SettingsActivity : SimpleActivity() { } } + private fun setupAppPasswordProtection() { + settings_app_password_protection.isChecked = config.isAppPasswordProtectionOn + settings_app_password_protection_holder.setOnClickListener { + val tabToShow = if (config.isAppPasswordProtectionOn) config.appProtectionType else SHOW_ALL_TABS + SecurityDialog(this, config.appPasswordHash, tabToShow) { hash, type, success -> + if (success) { + val hasPasswordProtection = config.isAppPasswordProtectionOn + settings_app_password_protection.isChecked = !hasPasswordProtection + config.isAppPasswordProtectionOn = !hasPasswordProtection + config.appPasswordHash = if (hasPasswordProtection) "" else hash + config.appProtectionType = type + + if (config.isAppPasswordProtectionOn) { + val confirmationTextId = if (config.appProtectionType == PROTECTION_FINGERPRINT) + R.string.fingerprint_setup_successfully else R.string.protection_setup_successfully + ConfirmationDialog(this, "", confirmationTextId, R.string.ok, 0) { } + } + } + } + } + } + private fun setupKeepLastModified() { settings_keep_last_modified.isChecked = config.keepLastModified settings_keep_last_modified_holder.setOnClickListener { diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/fragments/ItemsFragment.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/fragments/ItemsFragment.kt index f6fa4237..b48d5a4b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/fragments/ItemsFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/fragments/ItemsFragment.kt @@ -173,12 +173,7 @@ class ItemsFragment : Fragment(), ItemOperationsListener, Breadcrumbs.Breadcrumb skipItemUpdating = false Thread { if (activity?.isDestroyed == false) { - /*if (path.startsWith(OTG_PATH)) { - val getProperFileSize = context!!.config.sorting and SORT_BY_SIZE != 0 - context!!.getOTGItems(path, context!!.config.shouldShowHidden, getProperFileSize) { - callback(path, it) - } - } else */if (!context!!.config.enableRootAccess || !context!!.isPathOnRoot(path)) { + if (!context!!.config.enableRootAccess || !context!!.isPathOnRoot(path)) { getRegularItemsOf(path, callback) } else { RootHelpers(activity!!).getFiles(path, callback) diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index b304fa80..502ac9ee 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -29,7 +29,6 @@ android:layout_height="wrap_content" android:layout_centerVertical="true" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/customize_colors"/> @@ -74,7 +73,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/use_english_language" app:switchPadding="@dimen/medium_margin"/> @@ -116,7 +114,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/show_hidden_items" app:switchPadding="@dimen/medium_margin"/> @@ -134,7 +131,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/bigger_margin" - android:layout_marginLeft="@dimen/bigger_margin" android:layout_marginTop="@dimen/activity_margin" android:text="@string/file_operations" android:textAllCaps="true" @@ -158,7 +154,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/keep_last_modified" app:switchPadding="@dimen/medium_margin"/> @@ -176,7 +171,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/bigger_margin" - android:layout_marginLeft="@dimen/bigger_margin" android:layout_marginTop="@dimen/activity_margin" android:text="@string/scrolling" android:textAllCaps="true" @@ -200,7 +194,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/show_info_bubble" app:switchPadding="@dimen/medium_margin"/> @@ -218,7 +211,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/bigger_margin" - android:layout_marginLeft="@dimen/bigger_margin" android:layout_marginTop="@dimen/activity_margin" android:text="@string/security" android:textAllCaps="true" @@ -242,12 +234,34 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/password_protect_hidden_items" app:switchPadding="@dimen/medium_margin"/> + + + + + +