diff --git a/app/src/main/kotlin/com/simplemobiletools/launcher/activities/HiddenIconsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/launcher/activities/HiddenIconsActivity.kt index d2e6570a..3ce3919b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/launcher/activities/HiddenIconsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/launcher/activities/HiddenIconsActivity.kt @@ -11,7 +11,7 @@ import com.simplemobiletools.commons.interfaces.RefreshRecyclerViewListener import com.simplemobiletools.commons.views.MyGridLayoutManager import com.simplemobiletools.launcher.R import com.simplemobiletools.launcher.adapters.HiddenIconsAdapter -import com.simplemobiletools.launcher.extensions.getColumnCount +import com.simplemobiletools.launcher.extensions.getDrawerColumnCount import com.simplemobiletools.launcher.extensions.getDrawableForPackageName import com.simplemobiletools.launcher.extensions.hiddenIconsDB import com.simplemobiletools.launcher.models.HiddenIcon @@ -28,7 +28,7 @@ class HiddenIconsActivity : SimpleActivity(), RefreshRecyclerViewListener { setupMaterialScrollListener(manage_hidden_icons_list, manage_hidden_icons_toolbar) val layoutManager = manage_hidden_icons_list.layoutManager as MyGridLayoutManager - layoutManager.spanCount = getColumnCount() + layoutManager.spanCount = getDrawerColumnCount() } override fun onResume() { diff --git a/app/src/main/kotlin/com/simplemobiletools/launcher/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/launcher/activities/MainActivity.kt index e6be5e69..5b0f389d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/launcher/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/launcher/activities/MainActivity.kt @@ -208,6 +208,8 @@ class MainActivity : SimpleActivity(), FlingListener { if (window.navigationBarColor != resources.getColor(R.color.semitransparent_navigation)) { window.navigationBarColor = Color.TRANSPARENT } + + (all_apps_fragment as? AllAppsFragment)?.onResume() } override fun onStop() { diff --git a/app/src/main/kotlin/com/simplemobiletools/launcher/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/launcher/activities/SettingsActivity.kt index a611fe53..4215fd97 100644 --- a/app/src/main/kotlin/com/simplemobiletools/launcher/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/launcher/activities/SettingsActivity.kt @@ -2,15 +2,19 @@ package com.simplemobiletools.launcher.activities import android.content.Intent import android.os.Bundle +import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.NavigationIcon import com.simplemobiletools.commons.helpers.isTiramisuPlus import com.simplemobiletools.commons.models.FAQItem +import com.simplemobiletools.commons.models.RadioItem import com.simplemobiletools.launcher.BuildConfig import com.simplemobiletools.launcher.R import com.simplemobiletools.launcher.extensions.config +import com.simplemobiletools.launcher.extensions.getDrawerColumnCount +import com.simplemobiletools.launcher.helpers.MAX_COLUMN_COUNT import kotlinx.android.synthetic.main.activity_settings.* -import java.util.* +import java.util.Locale import kotlin.system.exitProcess class SettingsActivity : SimpleActivity() { @@ -32,6 +36,7 @@ class SettingsActivity : SimpleActivity() { setupPurchaseThankYou() setupCustomizeColors() setupUseEnglish() + setupDrawerColumnCount() setupLanguage() setupManageHiddenIcons() updateTextColors(settings_holder) @@ -82,6 +87,29 @@ class SettingsActivity : SimpleActivity() { } } + private fun setupDrawerColumnCount() { + val currentColumnCount = getDrawerColumnCount() + settings_drawer_column_count.text = currentColumnCount.toString() + settings_drawer_column_count_holder.setOnClickListener { + val items = ArrayList() + for (i in 1..MAX_COLUMN_COUNT) { + items.add(RadioItem(i, resources.getQuantityString(R.plurals.column_counts, i, i))) + } + + RadioGroupDialog(this, items, currentColumnCount) { + val newColumnCount = it as Int + if (currentColumnCount != newColumnCount) { + if (portrait) { + config.portraitDrawerColumnCount = newColumnCount + } else { + config.landscapeDrawerColumnCount = newColumnCount + } + setupDrawerColumnCount() + } + } + } + } + private fun setupLanguage() { settings_language.text = Locale.getDefault().displayLanguage settings_language_holder.beVisibleIf(isTiramisuPlus()) diff --git a/app/src/main/kotlin/com/simplemobiletools/launcher/adapters/LaunchersAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/launcher/adapters/LaunchersAdapter.kt index 4aa2cd85..81f3ed8c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/launcher/adapters/LaunchersAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/launcher/adapters/LaunchersAdapter.kt @@ -11,10 +11,10 @@ import com.bumptech.glide.request.transition.DrawableCrossFadeFactory import com.qtalk.recyclerviewfastscroller.RecyclerViewFastScroller import com.simplemobiletools.commons.extensions.getColoredDrawableWithColor import com.simplemobiletools.commons.extensions.getProperTextColor -import com.simplemobiletools.commons.extensions.portrait import com.simplemobiletools.commons.extensions.realScreenSize import com.simplemobiletools.launcher.R import com.simplemobiletools.launcher.activities.SimpleActivity +import com.simplemobiletools.launcher.extensions.getDrawerColumnCount import com.simplemobiletools.launcher.interfaces.AllAppsListener import com.simplemobiletools.launcher.models.AppLauncher import com.simplemobiletools.launcher.models.HomeScreenGridItem @@ -47,13 +47,7 @@ class LaunchersAdapter( override fun getItemCount() = launchers.size private fun calculateIconWidth() { - val currentColumnCount = activity.resources.getInteger( - if (activity.portrait) { - R.integer.portrait_column_count - } else { - R.integer.landscape_column_count - } - ) + val currentColumnCount = activity.getDrawerColumnCount() val iconWidth = activity.realScreenSize.x / currentColumnCount iconPadding = (iconWidth * 0.1f).toInt() diff --git a/app/src/main/kotlin/com/simplemobiletools/launcher/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/launcher/extensions/Context.kt index 72aa0e45..d9334cca 100644 --- a/app/src/main/kotlin/com/simplemobiletools/launcher/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/launcher/extensions/Context.kt @@ -23,11 +23,11 @@ val Context.homeScreenGridItemsDB: HomeScreenGridItemsDao get() = AppsDatabase.g val Context.hiddenIconsDB: HiddenIconsDao get() = AppsDatabase.getInstance(applicationContext).HiddenIconsDao() -fun Context.getColumnCount(): Int { +fun Context.getDrawerColumnCount(): Int { return if (portrait) { - resources.getInteger(R.integer.portrait_column_count) + config.portraitDrawerColumnCount } else { - resources.getInteger(R.integer.landscape_column_count) + config.landscapeDrawerColumnCount } } diff --git a/app/src/main/kotlin/com/simplemobiletools/launcher/fragments/AllAppsFragment.kt b/app/src/main/kotlin/com/simplemobiletools/launcher/fragments/AllAppsFragment.kt index 8829bb8c..049738b4 100644 --- a/app/src/main/kotlin/com/simplemobiletools/launcher/fragments/AllAppsFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/launcher/fragments/AllAppsFragment.kt @@ -13,7 +13,7 @@ import com.simplemobiletools.commons.views.MyGridLayoutManager import com.simplemobiletools.launcher.R import com.simplemobiletools.launcher.activities.MainActivity import com.simplemobiletools.launcher.adapters.LaunchersAdapter -import com.simplemobiletools.launcher.extensions.getColumnCount +import com.simplemobiletools.launcher.extensions.getDrawerColumnCount import com.simplemobiletools.launcher.extensions.launchApp import com.simplemobiletools.launcher.helpers.ITEM_TYPE_ICON import com.simplemobiletools.launcher.interfaces.AllAppsListener @@ -40,6 +40,20 @@ class AllAppsFragment(context: Context, attributeSet: AttributeSet) : MyFragment } } + @SuppressLint("NotifyDataSetChanged") + fun onResume() { + if (all_apps_grid?.layoutManager == null || all_apps_grid?.adapter == null) { + return + } + + val layoutManager = all_apps_grid.layoutManager as MyGridLayoutManager + if (layoutManager.spanCount != context.getDrawerColumnCount()) { + onConfigurationChanged() + // Force redraw due to changed item size + (all_apps_grid.adapter as LaunchersAdapter).notifyDataSetChanged() + } + } + fun onConfigurationChanged() { if (all_apps_grid == null) { return @@ -50,7 +64,7 @@ class AllAppsFragment(context: Context, attributeSet: AttributeSet) : MyFragment setupViews() val layoutManager = all_apps_grid.layoutManager as MyGridLayoutManager - layoutManager.spanCount = context.getColumnCount() + layoutManager.spanCount = context.getDrawerColumnCount() val launchers = (all_apps_grid.adapter as LaunchersAdapter).launchers setupAdapter(launchers) } @@ -100,7 +114,7 @@ class AllAppsFragment(context: Context, attributeSet: AttributeSet) : MyFragment private fun setupAdapter(launchers: ArrayList) { activity?.runOnUiThread { val layoutManager = all_apps_grid.layoutManager as MyGridLayoutManager - layoutManager.spanCount = context.getColumnCount() + layoutManager.spanCount = context.getDrawerColumnCount() val currAdapter = all_apps_grid.adapter if (currAdapter == null) { diff --git a/app/src/main/kotlin/com/simplemobiletools/launcher/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/launcher/helpers/Config.kt index 338a0098..fb1cbcf5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/launcher/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/launcher/helpers/Config.kt @@ -2,6 +2,7 @@ package com.simplemobiletools.launcher.helpers import android.content.Context import com.simplemobiletools.commons.helpers.BaseConfig +import com.simplemobiletools.launcher.R class Config(context: Context) : BaseConfig(context) { companion object { @@ -11,4 +12,12 @@ class Config(context: Context) : BaseConfig(context) { var wasHomeScreenInit: Boolean get() = prefs.getBoolean(WAS_HOME_SCREEN_INIT, false) set(wasHomeScreenInit) = prefs.edit().putBoolean(WAS_HOME_SCREEN_INIT, wasHomeScreenInit).apply() + + var portraitDrawerColumnCount: Int + get() = prefs.getInt(PORTRAIT_DRAWER_COLUMN_COUNT, context.resources.getInteger(R.integer.portrait_column_count)) + set(portraitDrawerColumnCount) = prefs.edit().putInt(PORTRAIT_DRAWER_COLUMN_COUNT, portraitDrawerColumnCount).apply() + + var landscapeDrawerColumnCount: Int + get() = prefs.getInt(LANDSCAPE_DRAWER_COLUMN_COUNT, context.resources.getInteger(R.integer.landscape_column_count)) + set(landscapeDrawerColumnCount) = prefs.edit().putInt(LANDSCAPE_DRAWER_COLUMN_COUNT, landscapeDrawerColumnCount).apply() } diff --git a/app/src/main/kotlin/com/simplemobiletools/launcher/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/launcher/helpers/Constants.kt index 299c8836..fa46bb12 100644 --- a/app/src/main/kotlin/com/simplemobiletools/launcher/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/launcher/helpers/Constants.kt @@ -5,10 +5,13 @@ const val WIDGET_LIST_ITEMS_HOLDER = 1 // shared prefs const val WAS_HOME_SCREEN_INIT = "was_home_screen_init" +const val PORTRAIT_DRAWER_COLUMN_COUNT = "portrait_drawer_column_count" +const val LANDSCAPE_DRAWER_COLUMN_COUNT = "landscape_drawer_column_count" // default home screen grid size const val ROW_COUNT = 6 const val COLUMN_COUNT = 5 +const val MAX_COLUMN_COUNT = 15 const val UNINSTALL_APP_REQUEST_CODE = 50 const val REQUEST_CONFIGURE_WIDGET = 51 diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index fe6b1e24..d391a4e9 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -120,6 +120,30 @@ + + + + + + + +