From acbcef58273c56359844d17880db2c5c02db6180 Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Tue, 12 Nov 2024 01:53:41 +0100 Subject: [PATCH] implemented #67 - option to hide apps that are bound to gestures --- .../android/launcher/actions/AppAction.kt | 2 +- .../jrpie/android/launcher/actions/Gesture.kt | 30 +++++++++++++++---- .../jrpie/android/launcher/apps/AppFilter.kt | 16 ++++++++-- .../LauncherPreferences$Config.java | 1 + .../SettingsFragmentActionsRecycler.kt | 7 +---- app/src/main/res/values/donottranslate.xml | 1 + app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/preferences.xml | 5 ++++ 8 files changed, 48 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/de/jrpie/android/launcher/actions/AppAction.kt b/app/src/main/java/de/jrpie/android/launcher/actions/AppAction.kt index 29fb4b7..c8a75cf 100644 --- a/app/src/main/java/de/jrpie/android/launcher/actions/AppAction.kt +++ b/app/src/main/java/de/jrpie/android/launcher/actions/AppAction.kt @@ -16,7 +16,7 @@ import de.jrpie.android.launcher.apps.DetailedAppInfo import de.jrpie.android.launcher.getIntent import de.jrpie.android.launcher.openAppSettings -class AppAction(private var appInfo: AppInfo) : Action { +class AppAction(val appInfo: AppInfo) : Action { override fun invoke(context: Context, rect: Rect?): Boolean { val packageName = appInfo.packageName.toString() diff --git a/app/src/main/java/de/jrpie/android/launcher/actions/Gesture.kt b/app/src/main/java/de/jrpie/android/launcher/actions/Gesture.kt index 6270eba..89fe14f 100644 --- a/app/src/main/java/de/jrpie/android/launcher/actions/Gesture.kt +++ b/app/src/main/java/de/jrpie/android/launcher/actions/Gesture.kt @@ -2,6 +2,7 @@ package de.jrpie.android.launcher.actions import android.content.Context import de.jrpie.android.launcher.R +import de.jrpie.android.launcher.preferences.LauncherPreferences /** * @param id internal id to serialize the action. Used as a key in shared preferences. @@ -32,14 +33,18 @@ enum class Gesture( R.string.settings_gesture_description_vol_down, R.array.default_volume_down, 0, 0 ), - TIME("action.time", + TIME( + "action.time", R.string.settings_gesture_time, R.string.settings_gesture_description_time, - R.array.default_time), - DATE("action.date", + R.array.default_time + ), + DATE( + "action.date", R.string.settings_gesture_date, R.string.settings_gesture_description_date, - R.array.default_date), + R.array.default_date + ), LONG_CLICK( "action.long_click", R.string.settings_gesture_long_click, @@ -52,11 +57,13 @@ enum class Gesture( R.string.settings_gesture_description_double_click, R.array.default_double_click, 0, 0 ), - SWIPE_UP("action.up", + SWIPE_UP( + "action.up", R.string.settings_gesture_up, R.string.settings_gesture_description_up, R.array.default_up, - R.anim.bottom_up), + R.anim.bottom_up + ), SWIPE_UP_LEFT_EDGE( "action.up_left", R.string.settings_gesture_up_left_edge, @@ -170,6 +177,7 @@ enum class Gesture( fun getLabel(context: Context): String { return context.resources.getString(this.labelResource) } + fun getDescription(context: Context): String { return context.resources.getString(this.descriptionResource) } @@ -242,6 +250,16 @@ enum class Gesture( } } + fun isEnabled(): Boolean { + if (isEdgeVariant()) { + return LauncherPreferences.enabled_gestures().edgeSwipe() + } + if (isDoubleVariant()) { + return LauncherPreferences.enabled_gestures().doubleSwipe() + } + return true + } + operator fun invoke(context: Context) { val action = Action.forGesture(this) Action.launch(action, context, this.animationIn, this.animationOut) diff --git a/app/src/main/java/de/jrpie/android/launcher/apps/AppFilter.kt b/app/src/main/java/de/jrpie/android/launcher/apps/AppFilter.kt index 004c992..b51adf2 100644 --- a/app/src/main/java/de/jrpie/android/launcher/apps/AppFilter.kt +++ b/app/src/main/java/de/jrpie/android/launcher/apps/AppFilter.kt @@ -1,5 +1,8 @@ package de.jrpie.android.launcher.apps +import de.jrpie.android.launcher.actions.Action +import de.jrpie.android.launcher.actions.AppAction +import de.jrpie.android.launcher.actions.Gesture import de.jrpie.android.launcher.preferences.LauncherPreferences import java.util.Locale import kotlin.text.Regex.Companion.escapeReplacement @@ -14,20 +17,29 @@ class AppFilter( val hidden = LauncherPreferences.apps().hidden() ?: setOf() val favorites = LauncherPreferences.apps().favorites() ?: setOf() + apps = apps.filter { info -> favoritesVisibility.predicate(favorites, info) && hiddenVisibility.predicate(hidden, info) } + if (LauncherPreferences.apps().hideBoundApps()) { + val boundApps = Gesture.entries + .filter(Gesture::isEnabled) + .mapNotNull { g -> (Action.forGesture(g) as? AppAction)?.appInfo } + .toSet() + apps = apps.filterNot { info -> boundApps.contains(info.app) } + } + // normalize text for search - var allowedSpecialCharacters = search + val allowedSpecialCharacters = search .lowercase(Locale.ROOT) .toCharArray() .distinct() .filter { c -> !c.isLetter() } .map { c -> escapeReplacement(c.toString()) } .fold("") { x, y -> x + y } - var disallowedCharsRegex = "[^\\p{L}$allowedSpecialCharacters]".toRegex() + val disallowedCharsRegex = "[^\\p{L}$allowedSpecialCharacters]".toRegex() fun normalize(text: String): String { return text.lowercase(Locale.ROOT).replace(disallowedCharsRegex, "") diff --git a/app/src/main/java/de/jrpie/android/launcher/preferences/LauncherPreferences$Config.java b/app/src/main/java/de/jrpie/android/launcher/preferences/LauncherPreferences$Config.java index c876fc3..b98a157 100644 --- a/app/src/main/java/de/jrpie/android/launcher/preferences/LauncherPreferences$Config.java +++ b/app/src/main/java/de/jrpie/android/launcher/preferences/LauncherPreferences$Config.java @@ -28,6 +28,7 @@ import eu.jonahbauer.android.preference.annotations.serializer.PreferenceSeriali @PreferenceGroup(name = "apps", prefix = "settings_apps_", suffix = "_key", value = { @Preference(name = "favorites", type = Set.class, serializer = LauncherPreferences$Config.AppInfoSetSerializer.class), @Preference(name = "hidden", type = Set.class, serializer = LauncherPreferences$Config.AppInfoSetSerializer.class), + @Preference(name = "hide_bound_apps", type = boolean.class, defaultValue = "false"), }), @PreferenceGroup(name = "gestures", prefix = "settings_gesture_", suffix = "_key", value = { }), diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/settings/actions/SettingsFragmentActionsRecycler.kt b/app/src/main/java/de/jrpie/android/launcher/ui/settings/actions/SettingsFragmentActionsRecycler.kt index e8465e0..6a23caf 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/settings/actions/SettingsFragmentActionsRecycler.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/settings/actions/SettingsFragmentActionsRecycler.kt @@ -155,12 +155,7 @@ class ActionsRecyclerAdapter(val activity: Activity) : } init { - val doubleActions = LauncherPreferences.enabled_gestures().doubleSwipe() - val edgeActions = LauncherPreferences.enabled_gestures().edgeSwipe() - gesturesList = Gesture.entries.filter { - (doubleActions || !it.isDoubleVariant()) - && (edgeActions || !it.isEdgeVariant()) - } as ArrayList + gesturesList = Gesture.entries.filter(Gesture::isEnabled) as ArrayList } fun updateActions() { diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml index d3cac4b..fc255ab 100644 --- a/app/src/main/res/values/donottranslate.xml +++ b/app/src/main/res/values/donottranslate.xml @@ -11,6 +11,7 @@ internal.version_code apps.favorites apps.hidden + apps.hide_bound_apps general.select_launcher