diff --git a/app/src/main/java/de/jrpie/android/launcher/actions/Action.kt b/app/src/main/java/de/jrpie/android/launcher/actions/Action.kt index 1eab2ee..0912207 100644 --- a/app/src/main/java/de/jrpie/android/launcher/actions/Action.kt +++ b/app/src/main/java/de/jrpie/android/launcher/actions/Action.kt @@ -10,6 +10,7 @@ import android.widget.Toast import de.jrpie.android.launcher.R import de.jrpie.android.launcher.apps.AppInfo import de.jrpie.android.launcher.apps.AppInfo.Companion.INVALID_USER +import de.jrpie.android.launcher.apps.DetailedAppInfo import de.jrpie.android.launcher.preferences.LauncherPreferences interface Action { @@ -22,7 +23,18 @@ interface Action { fun writeToIntent(intent: Intent) companion object { - private fun fromId(id: String, user: Int?): Action? { + /** + * Get an action for a specific id. + * An id is of the form: + * - "launcher:${launcher_action_name}", see [LauncherAction] + * - "${package_name}", see [AppAction] + * - "${package_name}:${activity_name}", see [AppAction] + * + * @param id + * @param user a user id, ignored if the action is a [LauncherAction]. + * @param context used to complete [AppInfo] if possible + */ + private fun fromId(id: String, user: Int?, context: Context? = null): Action? { if (id.isEmpty()) { return null } @@ -32,7 +44,14 @@ interface Action { val values = id.split(";") - return AppAction(AppInfo(values[0], values.getOrNull(1), user ?: INVALID_USER)) + var info = AppInfo(values[0], values.getOrNull(1), user ?: INVALID_USER) + + // try to complete an incomplete AppInfo if a context is provided + if (context != null && (info.user == INVALID_USER || info.activityName == null)) { + info = DetailedAppInfo.fromAppInfo(info, context)?.app?:info + } + + return AppAction(info) } fun forGesture(gesture: Gesture): Action? { @@ -48,12 +67,17 @@ interface Action { fun resetToDefaultActions(context: Context) { val editor = LauncherPreferences.getSharedPreferences().edit() + val boundActions = HashSet() Gesture.entries.forEach { gesture -> context.resources .getStringArray(gesture.defaultsResource) - .map { fromId(it, null) } - .firstOrNull { it?.isAvailable(context) ?: false } - ?.bindToGesture(editor, gesture.id) + .filterNot { boundActions.contains(it) } + .map { Pair(it, fromId(it, null, context)) } + .firstOrNull { it.second?.isAvailable(context) ?: false } + ?.apply { + boundActions.add(first) + second?.bindToGesture(editor, gesture.id) + } } editor.apply() } 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 89fe14f..e7358ba 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 @@ -117,28 +117,28 @@ enum class Gesture( "action.left", R.string.settings_gesture_left, R.string.settings_gesture_description_left, - R.array.default_left, + R.array.default_messengers, R.anim.right_left ), SWIPE_LEFT_TOP_EDGE( "action.left_top", R.string.settings_gesture_left_top_edge, R.string.settings_gesture_description_left_top_edge, - R.array.default_left_top, + R.array.default_messengers, R.anim.right_left ), SWIPE_LEFT_BOTTOM_EDGE( "action.left_bottom", R.string.settings_gesture_left_bottom_edge, R.string.settings_gesture_description_left_bottom_edge, - R.array.default_left_bottom, + R.array.default_messengers, R.anim.right_left ), SWIPE_LEFT_DOUBLE( "action.double_left", R.string.settings_gesture_double_left, R.string.settings_gesture_description_double_left, - R.array.default_double_left, + R.array.default_messengers, R.anim.right_left ), SWIPE_RIGHT( diff --git a/app/src/main/res/values/defaults.xml b/app/src/main/res/values/defaults.xml index 5050404..e532965 100644 --- a/app/src/main/res/values/defaults.xml +++ b/app/src/main/res/values/defaults.xml @@ -88,31 +88,22 @@ info.tangential.cone - - + de.spiritcroc.riotx io.element.android.x im.vector.app org.thoughtcrime.securesms - - - + org.briarproject.briar.android + eu.siacs.conversations + ch.threema.app.libre com.android.messaging - com.android.google.messaging + com.google.android.apps.messaging com.samsung.android.messaging - - - org.thoughtcrime.securesms - - - - - com.whatsapp org.telegram.messenger + com.discord - launcher:volumeUp @@ -135,6 +126,8 @@ com.beemdevelopment.aegis org.fedorahosted.freeotp + proton.android.pass.fdroid + com.kunzisoft.keepass.libre launcher:settings