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..7256d95 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
@@ -14,6 +14,7 @@ import java.util.stream.Collectors;
import de.jrpie.android.launcher.R;
import de.jrpie.android.launcher.apps.AppInfo;
import de.jrpie.android.launcher.actions.lock.LockMethod;
+import de.jrpie.android.launcher.preferences.theme.AppListLayout;
import de.jrpie.android.launcher.preferences.theme.Background;
import de.jrpie.android.launcher.preferences.theme.ColorTheme;
import de.jrpie.android.launcher.preferences.theme.Font;
@@ -39,6 +40,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_apps", prefix = "settings_list_apps_", suffix = "_key", value = {
+ @Preference(name = "layout", type = AppListLayout.class, defaultValue = "TEXT")
+ }),
@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/theme/AppListLayout.kt b/app/src/main/java/de/jrpie/android/launcher/preferences/theme/AppListLayout.kt
new file mode 100644
index 0000000..935a2fc
--- /dev/null
+++ b/app/src/main/java/de/jrpie/android/launcher/preferences/theme/AppListLayout.kt
@@ -0,0 +1,43 @@
+package de.jrpie.android.launcher.preferences.theme
+
+import android.app.Activity
+import android.content.Context
+import android.util.DisplayMetrics
+import androidx.recyclerview.widget.GridLayoutManager
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import de.jrpie.android.launcher.R
+import de.jrpie.android.launcher.ui.list.apps.AppsRecyclerAdapter
+
+
+// TODO: move this to de.jrpie.android.launcher.ui.list.apps ?
+@Suppress("unused")
+enum class AppListLayout(
+ val layoutManager: (context: Context) -> RecyclerView.LayoutManager,
+ val layoutResource: Int,
+ val prepareView: (viewHolder: AppsRecyclerAdapter.ViewHolder) -> Unit,
+
+ ) {
+ DEFAULT(
+ { c -> LinearLayoutManager(c) },
+ R.layout.list_apps_row,
+ { v -> }
+ ),
+
+ // TODO work profile indicator
+ TEXT(
+ { c -> LinearLayoutManager(c) },
+ R.layout.list_apps_row_variant_text,
+ { v ->
+ }
+ ),
+ GRID(
+ { c ->
+ val displayMetrics = c.resources.displayMetrics
+ val width_sp = displayMetrics.widthPixels / displayMetrics.scaledDensity
+ GridLayoutManager(c, (width_sp / 90).toInt()) },
+ R.layout.list_apps_row_variant_grid,
+ { v ->
+ }
+ ),
+}
\ 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..a437ba3 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
@@ -21,6 +21,7 @@ import com.google.android.material.snackbar.Snackbar
import de.jrpie.android.launcher.R
import de.jrpie.android.launcher.REQUEST_CHOOSE_APP
import de.jrpie.android.launcher.actions.AppAction
+import de.jrpie.android.launcher.actions.LauncherDeviceAdmin
import de.jrpie.android.launcher.apps.AppFilter
import de.jrpie.android.launcher.apps.AppInfo
import de.jrpie.android.launcher.apps.DetailedAppInfo
@@ -28,6 +29,7 @@ import de.jrpie.android.launcher.appsList
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.theme.AppListLayout
import de.jrpie.android.launcher.transformGrayscale
import de.jrpie.android.launcher.ui.list.ListActivity
import de.jrpie.android.launcher.uninstallApp
@@ -212,9 +214,13 @@ class AppsRecyclerAdapter(
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+
+ val layout = LauncherPreferences.list_apps().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)
+ layout.prepareView(viewHolder)
+ 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..3ffe53f 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
@@ -77,7 +77,7 @@ class ListFragmentApps : Fragment(), UIObject {
binding.listAppsRview.apply {
// improve performance (since content changes don't change the layout size)
setHasFixedSize(true)
- layoutManager = LinearLayoutManager(context)
+ layoutManager = LauncherPreferences.list_apps().layout().layoutManager(context)
// TODO: option to change this to GridLayoutManager(context, numCols)
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..a174e26
--- /dev/null
+++ b/app/src/main/res/layout/list_apps_row_variant_text.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
\ 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..60d9320 100644
--- a/app/src/main/res/values/donottranslate.xml
+++ b/app/src/main/res/values/donottranslate.xml
@@ -9,12 +9,12 @@
internal.started_before
internal.first_startup
internal.version_code
- apps.favorites
- apps.hidden
- apps.custom_names
- apps.hide_bound_apps
-
- general.select_launcher
+ apps.favorites
+ apps.hidden
+ apps.custom_names
+ apps.hide_bound_apps
+ list.apps.layout
+ general.select_launcher