diff --git a/app/build.gradle b/app/build.gradle index 09cfe1c0..471385c0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -64,7 +64,7 @@ android { } dependencies { - implementation 'com.github.SimpleMobileTools:Simple-Commons:7f3e880dc5' + implementation 'com.github.SimpleMobileTools:Simple-Commons:387fbe81cc' implementation 'com.github.tibbi:AndroidPdfViewer:da57ff410e' implementation 'com.github.Stericson:RootTools:df729dcb13' implementation 'com.github.Stericson:RootShell:1.6' 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 3c16516c..1af79240 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 @@ -69,6 +69,8 @@ class MainActivity : SimpleActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) appLaunched(BuildConfig.APPLICATION_ID) + setupOptionsMenu() + refreshMenuItems() mTabsToShow = getTabsList() if (!config.wasStorageAnalysisTabAdded && isOreoPlus()) { @@ -108,6 +110,8 @@ class MainActivity : SimpleActivity() { } setupTabColors() + setupToolbar(main_toolbar, searchMenuItem = searchMenuItem) + getAllFragments().forEach { it?.onResume(getProperTextColor()) } @@ -140,19 +144,12 @@ class MainActivity : SimpleActivity() { config.temporarilyShowHidden = false } - override fun onCreateOptionsMenu(menu: Menu): Boolean { - menuInflater.inflate(R.menu.menu, menu) - setupSearch(menu) - updateMenuItemColors(menu) - return true - } - - override fun onPrepareOptionsMenu(menu: Menu?): Boolean { - val currentFragment = getCurrentFragment() ?: return true + private fun refreshMenuItems() { + val currentFragment = getCurrentFragment() ?: return val currentViewType = config.getFolderViewType(currentFragment.currentPath) val favorites = config.favorites - menu!!.apply { + main_toolbar.menu.apply { findItem(R.id.search).isVisible = currentFragment is ItemsFragment findItem(R.id.sort).isVisible = currentFragment is ItemsFragment findItem(R.id.change_view_type).isVisible = currentFragment !is StorageFragment @@ -172,33 +169,34 @@ class MainActivity : SimpleActivity() { currentViewType == VIEW_TYPE_GRID && config.fileColumnCnt < MAX_COLUMN_COUNT && currentFragment !is StorageFragment findItem(R.id.reduce_column_count).isVisible = currentViewType == VIEW_TYPE_GRID && config.fileColumnCnt > 1 && currentFragment !is StorageFragment } - - return true } - override fun onOptionsItemSelected(item: MenuItem): Boolean { - if (getCurrentFragment() == null) { - return true - } + private fun setupOptionsMenu() { + setupSearch(main_toolbar.menu) + main_toolbar.setOnMenuItemClickListener { menuItem -> + if (getCurrentFragment() == null) { + return@setOnMenuItemClickListener true + } - when (item.itemId) { - R.id.go_home -> goHome() - R.id.go_to_favorite -> goToFavorite() - R.id.sort -> showSortingDialog() - R.id.add_favorite -> addFavorite() - R.id.remove_favorite -> removeFavorite() - R.id.toggle_filename -> toggleFilenameVisibility() - R.id.set_as_home -> setAsHome() - R.id.change_view_type -> changeViewType() - R.id.temporarily_show_hidden -> tryToggleTemporarilyShowHidden() - R.id.stop_showing_hidden -> tryToggleTemporarilyShowHidden() - R.id.increase_column_count -> increaseColumnCount() - R.id.reduce_column_count -> reduceColumnCount() - R.id.settings -> launchSettings() - R.id.about -> launchAbout() - else -> return super.onOptionsItemSelected(item) + when (menuItem.itemId) { + R.id.go_home -> goHome() + R.id.go_to_favorite -> goToFavorite() + R.id.sort -> showSortingDialog() + R.id.add_favorite -> addFavorite() + R.id.remove_favorite -> removeFavorite() + R.id.toggle_filename -> toggleFilenameVisibility() + R.id.set_as_home -> setAsHome() + R.id.change_view_type -> changeViewType() + R.id.temporarily_show_hidden -> tryToggleTemporarilyShowHidden() + R.id.stop_showing_hidden -> tryToggleTemporarilyShowHidden() + R.id.increase_column_count -> increaseColumnCount() + R.id.reduce_column_count -> reduceColumnCount() + R.id.settings -> launchSettings() + R.id.about -> launchAbout() + else -> return@setOnMenuItemClickListener false + } + return@setOnMenuItemClickListener true } - return true } override fun onSaveInstanceState(outState: Bundle) { @@ -405,7 +403,7 @@ class MainActivity : SimpleActivity() { getAllFragments().forEach { (it as? ItemOperationsListener)?.finishActMode() } - invalidateOptionsMenu() + refreshMenuItems() } }) main_view_pager.currentItem = config.lastUsedViewPagerPage @@ -458,7 +456,7 @@ class MainActivity : SimpleActivity() { updateBottomTabItemColors(inactiveView, false) } - val bottomBarColor = getBottomTabsBackgroundColor() + val bottomBarColor = getBottomNavigationBackgroundColor() main_tabs_holder.setBackgroundColor(bottomBarColor) updateNavigationBarColor(bottomBarColor) } diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/ReadTextActivity.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/ReadTextActivity.kt index 0063bddf..5978d951 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/ReadTextActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/ReadTextActivity.kt @@ -339,7 +339,7 @@ class ReadTextActivity : SimpleActivity() { } private fun closeSearch() { - searchQueryET.text.clear() + searchQueryET.text?.clear() isSearchActive = false search_wrapper.beGone() } 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 934e6076..66b062e3 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 @@ -2,7 +2,6 @@ package com.simplemobiletools.filemanager.pro.activities import android.content.Intent import android.os.Bundle -import android.view.Menu import com.simplemobiletools.commons.dialogs.ChangeDateTimeFormatDialog import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.dialogs.RadioGroupDialog @@ -25,6 +24,7 @@ class SettingsActivity : SimpleActivity() { override fun onResume() { super.onResume() + setupToolbar(settings_toolbar, NavigationIcon.Arrow) setupCustomizeColors() setupUseEnglish() @@ -41,8 +41,7 @@ class SettingsActivity : SimpleActivity() { setupKeepLastModified() setupDeleteConfirmation() setupEnableRootAccess() - updateTextColors(settings_holder) - invalidateOptionsMenu() + updateTextColors(settings_nested_scrollview) arrayOf( settings_color_customization_label, @@ -67,11 +66,6 @@ class SettingsActivity : SimpleActivity() { } } - override fun onCreateOptionsMenu(menu: Menu): Boolean { - updateMenuItemColors(menu) - return super.onCreateOptionsMenu(menu) - } - private fun setupCustomizeColors() { settings_customize_colors_holder.setOnClickListener { startCustomizationActivity() diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/ChangeSortingDialog.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/ChangeSortingDialog.kt index 9ab985d6..9f188f36 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/ChangeSortingDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/ChangeSortingDialog.kt @@ -1,9 +1,9 @@ package com.simplemobiletools.filemanager.pro.dialogs import android.view.View -import androidx.appcompat.app.AlertDialog import com.simplemobiletools.commons.activities.BaseSimpleActivity import com.simplemobiletools.commons.extensions.beVisibleIf +import com.simplemobiletools.commons.extensions.getAlertDialogBuilder import com.simplemobiletools.commons.extensions.setupDialogStuff import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.filemanager.pro.R @@ -24,10 +24,10 @@ class ChangeSortingDialog(val activity: BaseSimpleActivity, val path: String = " sorting_dialog_numeric_sorting.isChecked = currSorting and SORT_USE_NUMERIC_VALUE != 0 } - AlertDialog.Builder(activity) + activity.getAlertDialogBuilder() .setPositiveButton(R.string.ok) { dialog, which -> dialogConfirmed() } .setNegativeButton(R.string.cancel, null) - .create().apply { + .apply { activity.setupDialogStuff(view, this, R.string.sort_by) } diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/ChangeViewTypeDialog.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/ChangeViewTypeDialog.kt index 0fe22257..f27de77a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/ChangeViewTypeDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/ChangeViewTypeDialog.kt @@ -1,10 +1,9 @@ package com.simplemobiletools.filemanager.pro.dialogs import android.view.View -import androidx.appcompat.app.AlertDialog import com.simplemobiletools.commons.activities.BaseSimpleActivity import com.simplemobiletools.commons.extensions.beGone -import com.simplemobiletools.commons.extensions.beVisibleIf +import com.simplemobiletools.commons.extensions.getAlertDialogBuilder import com.simplemobiletools.commons.extensions.setupDialogStuff import com.simplemobiletools.commons.helpers.VIEW_TYPE_GRID import com.simplemobiletools.commons.helpers.VIEW_TYPE_LIST @@ -36,16 +35,21 @@ class ChangeViewTypeDialog(val activity: BaseSimpleActivity, val path: String = } } - AlertDialog.Builder(activity) + activity.getAlertDialogBuilder() .setPositiveButton(R.string.ok) { dialog, which -> dialogConfirmed() } .setNegativeButton(R.string.cancel, null) - .create().apply { + .apply { activity.setupDialogStuff(view, this) } } private fun dialogConfirmed() { - val viewType = if (view.change_view_type_dialog_radio.checkedRadioButtonId == view.change_view_type_dialog_radio_grid.id) VIEW_TYPE_GRID else VIEW_TYPE_LIST + val viewType = if (view.change_view_type_dialog_radio.checkedRadioButtonId == view.change_view_type_dialog_radio_grid.id) { + VIEW_TYPE_GRID + } else { + VIEW_TYPE_LIST + } + if (view.change_view_type_dialog_use_for_this_folder.isChecked) { config.saveFolderViewType(this.path, viewType) } else { diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/CompressAsDialog.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/CompressAsDialog.kt index d7737c52..9c2b1db6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/CompressAsDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/CompressAsDialog.kt @@ -30,30 +30,30 @@ class CompressAsDialog(val activity: BaseSimpleActivity, val path: String, val c } } - AlertDialog.Builder(activity) - .setPositiveButton(R.string.ok, null) - .setNegativeButton(R.string.cancel, null) - .create().apply { - activity.setupDialogStuff(view, this, R.string.compress_as) { - showKeyboard(view.file_name) - getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(View.OnClickListener { - val name = view.file_name.value - when { - name.isEmpty() -> activity.toast(R.string.empty_name) - name.isAValidFilename() -> { - val newPath = "$realPath/$name.zip" - if (activity.getDoesFilePathExist(newPath)) { - activity.toast(R.string.name_taken) - return@OnClickListener - } - - dismiss() - callback(newPath) + activity.getAlertDialogBuilder() + .setPositiveButton(R.string.ok, null) + .setNegativeButton(R.string.cancel, null) + .apply { + activity.setupDialogStuff(view, this, R.string.compress_as) { alertDialog -> + alertDialog.showKeyboard(view.file_name) + alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(View.OnClickListener { + val name = view.file_name.value + when { + name.isEmpty() -> activity.toast(R.string.empty_name) + name.isAValidFilename() -> { + val newPath = "$realPath/$name.zip" + if (activity.getDoesFilePathExist(newPath)) { + activity.toast(R.string.name_taken) + return@OnClickListener } - else -> activity.toast(R.string.invalid_name) + + alertDialog.dismiss() + callback(newPath) } - }) - } + else -> activity.toast(R.string.invalid_name) + } + }) } + } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/CreateNewItemDialog.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/CreateNewItemDialog.kt index 86fb1370..c9e89d18 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/CreateNewItemDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/CreateNewItemDialog.kt @@ -15,13 +15,13 @@ class CreateNewItemDialog(val activity: SimpleActivity, val path: String, val ca private val view = activity.layoutInflater.inflate(R.layout.dialog_create_new, null) init { - AlertDialog.Builder(activity) + activity.getAlertDialogBuilder() .setPositiveButton(R.string.ok, null) .setNegativeButton(R.string.cancel, null) - .create().apply { - activity.setupDialogStuff(view, this, R.string.create_new) { - showKeyboard(view.item_name) - getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(View.OnClickListener { + .apply { + activity.setupDialogStuff(view, this, R.string.create_new) { alertDialog -> + alertDialog.showKeyboard(view.item_name) + alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(View.OnClickListener { val name = view.item_name.value if (name.isEmpty()) { activity.toast(R.string.empty_name) @@ -33,11 +33,11 @@ class CreateNewItemDialog(val activity: SimpleActivity, val path: String, val ca } if (view.dialog_radio_group.checkedRadioButtonId == R.id.dialog_radio_directory) { - createDirectory(newPath, this) { + createDirectory(newPath, alertDialog) { callback(it) } } else { - createFile(newPath, this) { + createFile(newPath, alertDialog) { callback(it) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/ManageVisibleTabsDialog.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/ManageVisibleTabsDialog.kt index b1642c62..f7d4c21c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/ManageVisibleTabsDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/ManageVisibleTabsDialog.kt @@ -1,8 +1,8 @@ package com.simplemobiletools.filemanager.pro.dialogs -import androidx.appcompat.app.AlertDialog import com.simplemobiletools.commons.activities.BaseSimpleActivity import com.simplemobiletools.commons.extensions.beGone +import com.simplemobiletools.commons.extensions.getAlertDialogBuilder import com.simplemobiletools.commons.extensions.setupDialogStuff import com.simplemobiletools.commons.helpers.TAB_FILES import com.simplemobiletools.commons.helpers.TAB_RECENT_FILES @@ -34,10 +34,10 @@ class ManageVisibleTabsDialog(val activity: BaseSimpleActivity) { view.findViewById(value).isChecked = showTabs and key != 0 } - AlertDialog.Builder(activity) + activity.getAlertDialogBuilder() .setPositiveButton(R.string.ok) { dialog, which -> dialogConfirmed() } .setNegativeButton(R.string.cancel, null) - .create().apply { + .apply { activity.setupDialogStuff(view, this) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/SaveAsDialog.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/SaveAsDialog.kt index 09a6b758..d43619d7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/SaveAsDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/SaveAsDialog.kt @@ -8,8 +8,10 @@ import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.filemanager.pro.R import kotlinx.android.synthetic.main.dialog_save_as.view.* -class SaveAsDialog(val activity: BaseSimpleActivity, var path: String, val hidePath: Boolean, - val callback: (path: String, filename: String) -> Unit) { +class SaveAsDialog( + val activity: BaseSimpleActivity, var path: String, val hidePath: Boolean, + val callback: (path: String, filename: String) -> Unit +) { init { if (path.isEmpty()) { @@ -45,44 +47,44 @@ class SaveAsDialog(val activity: BaseSimpleActivity, var path: String, val hideP } } - AlertDialog.Builder(activity) - .setPositiveButton(R.string.ok, null) - .setNegativeButton(R.string.cancel, null) - .create().apply { - activity.setupDialogStuff(view, this, R.string.save_as) { - showKeyboard(view.save_as_name) - getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener { - val filename = view.save_as_name.value - val extension = view.save_as_extension.value + activity.getAlertDialogBuilder() + .setPositiveButton(R.string.ok, null) + .setNegativeButton(R.string.cancel, null) + .apply { + activity.setupDialogStuff(view, this, R.string.save_as) { alertDialog -> + alertDialog.showKeyboard(view.save_as_name) + alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener { + val filename = view.save_as_name.value + val extension = view.save_as_extension.value - if (filename.isEmpty()) { - activity.toast(R.string.filename_cannot_be_empty) - return@setOnClickListener - } + if (filename.isEmpty()) { + activity.toast(R.string.filename_cannot_be_empty) + return@setOnClickListener + } - var newFilename = filename - if (extension.isNotEmpty()) { - newFilename += ".$extension" - } + var newFilename = filename + if (extension.isNotEmpty()) { + newFilename += ".$extension" + } - val newPath = "$realPath/$newFilename" - if (!newFilename.isAValidFilename()) { - activity.toast(R.string.filename_invalid_characters) - return@setOnClickListener - } + val newPath = "$realPath/$newFilename" + if (!newFilename.isAValidFilename()) { + activity.toast(R.string.filename_invalid_characters) + return@setOnClickListener + } - if (!hidePath && activity.getDoesFilePathExist(newPath)) { - val title = String.format(activity.getString(R.string.file_already_exists_overwrite), newFilename) - ConfirmationDialog(activity, title) { - callback(newPath, newFilename) - dismiss() - } - } else { + if (!hidePath && activity.getDoesFilePathExist(newPath)) { + val title = String.format(activity.getString(R.string.file_already_exists_overwrite), newFilename) + ConfirmationDialog(activity, title) { callback(newPath, newFilename) - dismiss() + alertDialog.dismiss() } + } else { + callback(newPath, newFilename) + alertDialog.dismiss() } } } + } } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 41f92bd1..f4b679ad 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,23 +1,46 @@ - - + + + + + + + app:layout_behavior="@string/appbar_scrolling_view_behavior"> - + - + + + + diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 6cd80756..8225701b 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -1,358 +1,383 @@ - + android:layout_height="match_parent"> - + android:layout_height="wrap_content"> - + android:layout_height="?attr/actionBarSize" + android:background="@color/color_primary" + app:title="@string/settings" + app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" /> + + + + - + android:text="@string/color_customization" /> - + + + android:background="@drawable/ripple_all_corners"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + diff --git a/app/src/main/res/menu/menu_decompress.xml b/app/src/main/res/menu/menu_decompress.xml index 119912a4..44f03616 100644 --- a/app/src/main/res/menu/menu_decompress.xml +++ b/app/src/main/res/menu/menu_decompress.xml @@ -5,5 +5,5 @@ android:id="@+id/decompress" android:icon="@drawable/ic_decompress_vector" android:title="@string/decompress" - app:showAsAction="ifRoom" /> + app:showAsAction="always" /> diff --git a/app/src/main/res/menu/menu_editor.xml b/app/src/main/res/menu/menu_editor.xml index b8998e7d..6f300516 100644 --- a/app/src/main/res/menu/menu_editor.xml +++ b/app/src/main/res/menu/menu_editor.xml @@ -7,12 +7,12 @@ android:id="@+id/menu_search" android:icon="@drawable/ic_search_vector" android:title="@string/search" - app:showAsAction="ifRoom" /> + app:showAsAction="always" /> + app:showAsAction="always" /> + app:showAsAction="always" />