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 de3fca1..0f6e91c 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 @@ -1,15 +1,11 @@ package de.jrpie.android.launcher.preferences; -import android.util.Log; - import org.json.JSONException; import org.json.JSONObject; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Set; -import java.util.stream.Collectors; import de.jrpie.android.launcher.R; import de.jrpie.android.launcher.apps.AppInfo; @@ -39,6 +35,9 @@ import eu.jonahbauer.android.preference.annotations.serializer.PreferenceSeriali @Preference(name = "custom_names", type = HashMap.class, serializer = LauncherPreferences$Config.MapAppInfoStringSerializer.class), @Preference(name = "hide_bound_apps", type = boolean.class, defaultValue = "false"), }), + @PreferenceGroup(name = "list", prefix = "settings_list_", suffix = "_key", value = { + @Preference(name = "layout", type = ListLayout.class, defaultValue = "DEFAULT") + }), @PreferenceGroup(name = "gestures", prefix = "settings_gesture_", suffix = "_key", value = { }), @PreferenceGroup(name = "general", prefix = "settings_general_", suffix = "_key", value = { diff --git a/app/src/main/java/de/jrpie/android/launcher/preferences/ListLayout.kt b/app/src/main/java/de/jrpie/android/launcher/preferences/ListLayout.kt new file mode 100644 index 0000000..e20945a --- /dev/null +++ b/app/src/main/java/de/jrpie/android/launcher/preferences/ListLayout.kt @@ -0,0 +1,36 @@ +package de.jrpie.android.launcher.preferences + +import android.content.Context +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import de.jrpie.android.launcher.R + + +// TODO: move this to de.jrpie.android.launcher.ui.list.apps ? +@Suppress("unused") +enum class ListLayout( + val layoutManager: (context: Context) -> RecyclerView.LayoutManager, + val layoutResource: Int, + val useBadgedText: Boolean, +) { + DEFAULT( + { c -> LinearLayoutManager(c) }, + R.layout.list_apps_row, + false + ), + TEXT( + { c -> LinearLayoutManager(c) }, + R.layout.list_apps_row_variant_text, + true + ), + GRID( + { c -> + val displayMetrics = c.resources.displayMetrics + val widthSp = displayMetrics.widthPixels / displayMetrics.scaledDensity + GridLayoutManager(c, (widthSp / 90).toInt()) + }, + R.layout.list_apps_row_variant_grid, + false + ), +} \ No newline at end of file diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/AppsRecyclerAdapter.kt b/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/AppsRecyclerAdapter.kt index 10f149a..555e771 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/AppsRecyclerAdapter.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/AppsRecyclerAdapter.kt @@ -5,7 +5,6 @@ import android.app.Activity import android.content.Intent import android.graphics.Rect import android.os.AsyncTask -import android.text.InputType import android.util.Log import android.view.LayoutInflater import android.view.View @@ -25,9 +24,11 @@ import de.jrpie.android.launcher.apps.AppFilter import de.jrpie.android.launcher.apps.AppInfo import de.jrpie.android.launcher.apps.DetailedAppInfo import de.jrpie.android.launcher.appsList +import de.jrpie.android.launcher.getUserFromId import de.jrpie.android.launcher.loadApps import de.jrpie.android.launcher.openAppSettings import de.jrpie.android.launcher.preferences.LauncherPreferences +import de.jrpie.android.launcher.preferences.ListLayout import de.jrpie.android.launcher.transformGrayscale import de.jrpie.android.launcher.ui.list.ListActivity import de.jrpie.android.launcher.uninstallApp @@ -47,7 +48,8 @@ class AppsRecyclerAdapter( private val intention: ListActivity.ListActivityIntention = ListActivity.ListActivityIntention.VIEW, private val forGesture: String? = "", - private var appFilter: AppFilter = AppFilter(activity, "") + private var appFilter: AppFilter = AppFilter(activity, ""), + private val layout: ListLayout ) : RecyclerView.Adapter() { @@ -74,7 +76,15 @@ class AppsRecyclerAdapter( override fun onBindViewHolder(viewHolder: ViewHolder, i: Int) { - val appLabel = appsListDisplayed[i].getCustomLabel(activity).toString() + var appLabel = appsListDisplayed[i].label.toString() + + if (layout.useBadgedText) { + appLabel = activity.packageManager.getUserBadgedLabel( + appLabel, + getUserFromId(appsListDisplayed[i].app.user, activity) + ).toString() + } + val appIcon = appsListDisplayed[i].icon viewHolder.textView.text = appLabel @@ -212,9 +222,12 @@ class AppsRecyclerAdapter( } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + + val layout = LauncherPreferences.list().layout() val inflater = LayoutInflater.from(parent.context) - val view: View = inflater.inflate(R.layout.list_apps_row, parent, false) - return ViewHolder(view) + val view: View = inflater.inflate(layout.layoutResource, parent, false) + val viewHolder = ViewHolder(view) + return viewHolder } init { diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/ListFragmentApps.kt b/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/ListFragmentApps.kt index fa48d14..d6443b2 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/ListFragmentApps.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/ListFragmentApps.kt @@ -70,15 +70,15 @@ class ListFragmentApps : Fragment(), UIObject { "", favoritesVisibility = favoritesVisibility, hiddenVisibility = hiddenVisibility - ) + ), + layout = LauncherPreferences.list().layout() ) // set up the list / recycler binding.listAppsRview.apply { // improve performance (since content changes don't change the layout size) setHasFixedSize(true) - layoutManager = LinearLayoutManager(context) - // TODO: option to change this to GridLayoutManager(context, numCols) + layoutManager = LauncherPreferences.list().layout().layoutManager(context) adapter = appsRViewAdapter } diff --git a/app/src/main/res/layout/list_apps_row_variant_grid.xml b/app/src/main/res/layout/list_apps_row_variant_grid.xml new file mode 100644 index 0000000..1a9058c --- /dev/null +++ b/app/src/main/res/layout/list_apps_row_variant_grid.xml @@ -0,0 +1,34 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/list_apps_row_variant_text.xml b/app/src/main/res/layout/list_apps_row_variant_text.xml new file mode 100644 index 0000000..053568b --- /dev/null +++ b/app/src/main/res/layout/list_apps_row_variant_text.xml @@ -0,0 +1,36 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml index 21a2514..d51bd35 100644 --- a/app/src/main/res/values/donottranslate.xml +++ b/app/src/main/res/values/donottranslate.xml @@ -9,12 +9,25 @@ internal.started_before internal.first_startup internal.version_code - apps.favorites - apps.hidden - apps.custom_names - apps.hide_bound_apps + apps.favorites + apps.hidden + apps.custom_names + apps.hide_bound_apps + list.layout + general.select_launcher - general.select_launcher + + + DEFAULT + TEXT + GRID + + + + @string/settings_list_layout_item_default + @string/settings_list_layout_item_text + @string/settings_list_layout_item_grid +