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