diff --git a/app/src/main/java/com/github/droidworksstudio/launcher/helper/PreferenceHelper.kt b/app/src/main/java/com/github/droidworksstudio/launcher/helper/PreferenceHelper.kt index 4fa617b..9745c4d 100644 --- a/app/src/main/java/com/github/droidworksstudio/launcher/helper/PreferenceHelper.kt +++ b/app/src/main/java/com/github/droidworksstudio/launcher/helper/PreferenceHelper.kt @@ -95,10 +95,6 @@ class PreferenceHelper @Inject constructor(@ApplicationContext context: Context) get() = prefs.getBoolean(Constants.SHOW_APP_ICON, false) set(value) = prefs.edit().putBoolean(Constants.SHOW_APP_ICON, value).apply() - var showAppIconAsDots: Boolean - get() = prefs.getBoolean(Constants.SHOW_APP_ICON_DOTS, false) - set(value) = prefs.edit().putBoolean(Constants.SHOW_APP_ICON_DOTS, value).apply() - var locationDenied: Boolean get() = prefs.getBoolean(Constants.LOCATION_DENIED, false) set(value) = prefs.edit().putBoolean(Constants.LOCATION_DENIED, value).apply() @@ -198,6 +194,21 @@ class PreferenceHelper @Inject constructor(@ApplicationContext context: Context) } set(value) = prefs.edit().putString(Constants.SEARCH_ENGINE, value.name).apply() + var iconPack: Constants.IconPacks + get() { + return try { + Constants.IconPacks.valueOf( + prefs.getString( + Constants.ICONS_PACK, + Constants.IconPacks.System.name + ).toString() + ) + } catch (_: Exception) { + Constants.IconPacks.System + } + } + set(value) = prefs.edit().putString(Constants.ICONS_PACK, value.name).apply() + var launcherFont: Constants.Fonts get() { return try { diff --git a/app/src/main/java/com/github/droidworksstudio/launcher/ui/drawer/DrawViewHolder.kt b/app/src/main/java/com/github/droidworksstudio/launcher/ui/drawer/DrawViewHolder.kt index 6a830db..1125fae 100644 --- a/app/src/main/java/com/github/droidworksstudio/launcher/ui/drawer/DrawViewHolder.kt +++ b/app/src/main/java/com/github/droidworksstudio/launcher/ui/drawer/DrawViewHolder.kt @@ -14,6 +14,7 @@ import com.github.droidworksstudio.launcher.data.entities.AppInfo import com.github.droidworksstudio.launcher.databinding.ItemDrawBinding import com.github.droidworksstudio.launcher.helper.PreferenceHelper import com.github.droidworksstudio.launcher.listener.OnItemClickedListener +import com.github.droidworksstudio.launcher.utils.Constants class DrawViewHolder( private val binding: ItemDrawBinding, @@ -44,11 +45,16 @@ class DrawViewHolder( if (preferenceHelper.showAppIcon) { val pm: PackageManager = binding.root.context.packageManager val appIcon = pm.getApplicationIcon(appInfo.packageName) - val appIconSize = (preferenceHelper.appTextSize * if (preferenceHelper.showAppIconAsDots) 1.1f else 2f).toInt() + val appIconSize = (preferenceHelper.appTextSize * if (preferenceHelper.iconPack == Constants.IconPacks.System) 2f else 1.1f).toInt() val layoutParams = LinearLayoutCompat.LayoutParams(appIconSize, appIconSize) - val appNewIcon: Drawable? = if (preferenceHelper.showAppIconAsDots) { - val newIcon = ContextCompat.getDrawable(itemView.context, R.drawable.app_dot_icon)!! + val appNewIcon: Drawable? = if (preferenceHelper.iconPack == Constants.IconPacks.EasyDots) { + val newIcon = ContextCompat.getDrawable(itemView.context, R.drawable.app_easy_dot_icon)!! + val bitmap = ColorIconsExtensions.drawableToBitmap(appIcon) + val dominantColor = ColorIconsExtensions.getDominantColor(bitmap) + ColorIconsExtensions.recolorDrawable(newIcon, dominantColor) + } else if (preferenceHelper.iconPack == Constants.IconPacks.NiagaraDots) { + val newIcon = ContextCompat.getDrawable(itemView.context, R.drawable.app_niagara_dot_icon)!! val bitmap = ColorIconsExtensions.drawableToBitmap(appIcon) val dominantColor = ColorIconsExtensions.getDominantColor(bitmap) ColorIconsExtensions.recolorDrawable(newIcon, dominantColor) diff --git a/app/src/main/java/com/github/droidworksstudio/launcher/ui/home/HomeViewHolder.kt b/app/src/main/java/com/github/droidworksstudio/launcher/ui/home/HomeViewHolder.kt index a923124..d097c42 100644 --- a/app/src/main/java/com/github/droidworksstudio/launcher/ui/home/HomeViewHolder.kt +++ b/app/src/main/java/com/github/droidworksstudio/launcher/ui/home/HomeViewHolder.kt @@ -15,6 +15,7 @@ import com.github.droidworksstudio.launcher.data.entities.AppInfo import com.github.droidworksstudio.launcher.databinding.ItemHomeBinding import com.github.droidworksstudio.launcher.helper.PreferenceHelper import com.github.droidworksstudio.launcher.listener.OnItemClickedListener +import com.github.droidworksstudio.launcher.utils.Constants import javax.inject.Inject class HomeViewHolder @Inject constructor( @@ -44,11 +45,16 @@ class HomeViewHolder @Inject constructor( if (preferenceHelper.showAppIcon) { val pm: PackageManager = binding.root.context.packageManager val appIcon = pm.getApplicationIcon(appInfo.packageName) - val appIconSize = (preferenceHelper.appTextSize * if (preferenceHelper.showAppIconAsDots) 1.1f else 2f).toInt() + val appIconSize = (preferenceHelper.appTextSize * if (preferenceHelper.iconPack == Constants.IconPacks.System) 2f else 1.1f).toInt() val layoutParams = LinearLayoutCompat.LayoutParams(appIconSize, appIconSize) - val appNewIcon: Drawable? = if (preferenceHelper.showAppIconAsDots) { - val newIcon = ContextCompat.getDrawable(itemView.context, R.drawable.app_dot_icon)!! + val appNewIcon: Drawable? = if (preferenceHelper.iconPack == Constants.IconPacks.EasyDots) { + val newIcon = ContextCompat.getDrawable(itemView.context, R.drawable.app_easy_dot_icon)!! + val bitmap = ColorIconsExtensions.drawableToBitmap(appIcon) + val dominantColor = ColorIconsExtensions.getDominantColor(bitmap) + ColorIconsExtensions.recolorDrawable(newIcon, dominantColor) + } else if (preferenceHelper.iconPack == Constants.IconPacks.NiagaraDots) { + val newIcon = ContextCompat.getDrawable(itemView.context, R.drawable.app_niagara_dot_icon)!! val bitmap = ColorIconsExtensions.drawableToBitmap(appIcon) val dominantColor = ColorIconsExtensions.getDominantColor(bitmap) ColorIconsExtensions.recolorDrawable(newIcon, dominantColor) diff --git a/app/src/main/java/com/github/droidworksstudio/launcher/ui/settings/SettingsLookFeelFragment.kt b/app/src/main/java/com/github/droidworksstudio/launcher/ui/settings/SettingsLookFeelFragment.kt index 6c4a110..789371f 100644 --- a/app/src/main/java/com/github/droidworksstudio/launcher/ui/settings/SettingsLookFeelFragment.kt +++ b/app/src/main/java/com/github/droidworksstudio/launcher/ui/settings/SettingsLookFeelFragment.kt @@ -77,6 +77,7 @@ class SettingsLookFeelFragment : Fragment(), binding.apply { miscellaneousLauncherFontsControl.text = preferenceHelper.launcherFont.getString(context) + miscellaneousIconsControl.text = preferenceHelper.iconPack.name } } @@ -97,15 +98,6 @@ class SettingsLookFeelFragment : Fragment(), alarmClockSwitchCompat.isChecked = preferenceHelper.showAlarmClock dailyWordSwitchCompat.isChecked = preferenceHelper.showDailyWord appIconsSwitchCompat.isChecked = preferenceHelper.showAppIcon - appIconDotsSwitchCompat.isChecked = preferenceHelper.showAppIconAsDots - } - - if (!binding.appIconsSwitchCompat.isChecked) { - // Disable and gray out the other setting if appIconsSwitchCompat is checked - binding.appIconDotsSwitchCompat.apply { - isEnabled = binding.appIconsSwitchCompat.isChecked - isChecked = false - } } } @@ -139,6 +131,10 @@ class SettingsLookFeelFragment : Fragment(), startActivity(Intent.createChooser(intent, "Select Wallpaper")) } + miscellaneousIconsControl.setOnClickListener { + showIconsDialog() + } + miscellaneousLauncherFontsControl.setOnClickListener { showLauncherFontDialog() } @@ -188,19 +184,38 @@ class SettingsLookFeelFragment : Fragment(), preferenceViewModel.setShowAppIcons(isChecked) val feedbackType = if (isChecked) "on" else "off" appHelper.triggerHapticFeedback(context, feedbackType) - - // Disable and gray out the other setting if appIconsSwitchCompat is checked - binding.appIconDotsSwitchCompat.isEnabled = isChecked - binding.appIconDotsSwitchCompat.isChecked = false } + } - appIconDotsSwitchCompat.setOnCheckedChangeListener { _, isChecked -> - preferenceViewModel.setShowAppIconDots(isChecked) - val feedbackType = if (isChecked) "on" else "off" + } + + private var iconsDialog: AlertDialog? = null + + @RequiresApi(Build.VERSION_CODES.Q) + private fun showIconsDialog() { + // Dismiss any existing dialog to prevent multiple dialogs open simultaneously + iconsDialog?.dismiss() + // Get the array of SearchEngines enum values + val items = Constants.IconPacks.entries.toTypedArray() + + // Map the enum values to their string representations + val itemStrings = items.map { it.getString(context) }.toTypedArray() + + val dialogBuilder = MaterialAlertDialogBuilder(context).apply { + setTitle(getString(R.string.settings_select_icons)) + setItems(itemStrings) { _, which -> + val selectedItem = items[which] + preferenceViewModel.setIconsPack(selectedItem) + binding.miscellaneousIconsControl.text = preferenceHelper.iconPack.name + + val feedbackType = "select" appHelper.triggerHapticFeedback(context, feedbackType) } } + // Assign the created dialog to launcherFontDialog + iconsDialog = dialogBuilder.create() + iconsDialog?.show() } private var launcherFontDialog: AlertDialog? = null @@ -238,6 +253,7 @@ class SettingsLookFeelFragment : Fragment(), } private fun dismissDialogs() { + iconsDialog?.dismiss() launcherFontDialog?.dismiss() } } \ No newline at end of file diff --git a/app/src/main/java/com/github/droidworksstudio/launcher/utils/Constants.kt b/app/src/main/java/com/github/droidworksstudio/launcher/utils/Constants.kt index f4849c1..d4d7a1d 100644 --- a/app/src/main/java/com/github/droidworksstudio/launcher/utils/Constants.kt +++ b/app/src/main/java/com/github/droidworksstudio/launcher/utils/Constants.kt @@ -89,6 +89,7 @@ object Constants { const val URL_GOOGLE_PLAY_STORE = "https://play.google.com/store/search?c=apps&q" const val APP_GOOGLE_PLAY_STORE = "market://search?c=apps&q" + const val ICONS_PACK = "ICONS_PACK" const val LAUNCHER_FONT = "LAUNCHER_FONT" const val REQUEST_INSTALL_PERMISSION = 123 @@ -196,6 +197,20 @@ object Constants { } } + enum class IconPacks { + System, + EasyDots, + NiagaraDots; + + fun getString(context: Context): String { + return when (this) { + System -> context.getString(R.string.settings_system) + EasyDots -> context.getString(R.string.settings_icons_easy_dots) + NiagaraDots -> context.getString(R.string.settings_icons_niagara_dots) + } + } + } + enum class Fonts { System, Bitter, @@ -229,7 +244,7 @@ object Constants { fun getString(context: Context): String { return when (this) { - System -> context.getString(R.string.settings_font_system) + System -> context.getString(R.string.settings_system) Bitter -> context.getString(R.string.settings_font_bitter) Dotness -> context.getString(R.string.settings_font_dotness) DroidSans -> context.getString(R.string.settings_font_droidsans) @@ -261,7 +276,7 @@ object Constants { fun string(context: Context): String { return when (this) { - System -> context.getString(R.string.app_system_language) + System -> context.getString(R.string.settings_system) Czech -> "Czech" Danish -> "Danish" Dutch -> "Dutch" diff --git a/app/src/main/java/com/github/droidworksstudio/launcher/viewmodel/PreferenceViewModel.kt b/app/src/main/java/com/github/droidworksstudio/launcher/viewmodel/PreferenceViewModel.kt index f9e3eb3..86dc690 100644 --- a/app/src/main/java/com/github/droidworksstudio/launcher/viewmodel/PreferenceViewModel.kt +++ b/app/src/main/java/com/github/droidworksstudio/launcher/viewmodel/PreferenceViewModel.kt @@ -23,7 +23,6 @@ class PreferenceViewModel @Inject constructor( private val showWeatherWidgetSunSetRiseLiveData: MutableLiveData = MutableLiveData() private val showBatteryWidgetLiveData: MutableLiveData = MutableLiveData() private val showAppIconLiveData: MutableLiveData = MutableLiveData() - private val showAppIconAsDotsLiveData: MutableLiveData = MutableLiveData() private val homeAppAlignmentLiveData: MutableLiveData = MutableLiveData() private val homeDateAlignmentLiveData: MutableLiveData = MutableLiveData() private val homeTimeAlignmentLiveData: MutableLiveData = MutableLiveData() @@ -56,6 +55,7 @@ class PreferenceViewModel @Inject constructor( private val appLanguageLiveData: MutableLiveData = MutableLiveData() private val searchEngineLiveData: MutableLiveData = MutableLiveData() + private val iconPackLiveData: MutableLiveData = MutableLiveData() private val launcherFontLiveData: MutableLiveData = MutableLiveData() private val doubleTapActionLiveData: MutableLiveData = MutableLiveData() private val swipeUpActionLiveData: MutableLiveData = MutableLiveData() @@ -103,11 +103,6 @@ class PreferenceViewModel @Inject constructor( showAppIconLiveData.postValue(preferenceHelper.showAppIcon) } - fun setShowAppIconDots(showAppIconAsDots: Boolean) { - preferenceHelper.showAppIconAsDots = showAppIconAsDots - showAppIconAsDotsLiveData.postValue(preferenceHelper.showAppIconAsDots) - } - fun setAlarmClockColor(alarmClockColor: Int) { preferenceHelper.alarmClockColor = alarmClockColor alarmClockColorLiveData.postValue(preferenceHelper.alarmClockColor) @@ -293,6 +288,11 @@ class PreferenceViewModel @Inject constructor( searchEngineLiveData.postValue((preferenceHelper.searchEngines)) } + fun setIconsPack(iconPack: Constants.IconPacks) { + preferenceHelper.iconPack = iconPack + iconPackLiveData.postValue((preferenceHelper.iconPack)) + } + fun setFilterStrength(filterStrength: Int) { preferenceHelper.filterStrength = filterStrength filterStrengthLiveData.postValue((preferenceHelper.filterStrength)) diff --git a/app/src/main/res/layout/fragment_settings_look_feel.xml b/app/src/main/res/layout/fragment_settings_look_feel.xml index 8553b97..07ef848 100644 --- a/app/src/main/res/layout/fragment_settings_look_feel.xml +++ b/app/src/main/res/layout/fragment_settings_look_feel.xml @@ -276,37 +276,6 @@ tools:ignore="TouchTargetSizeCheck" /> - - - - - - - - + + + + + + + +