Ver código fonte

feat(apps): Adds option to choose the alignment of apps (#161)

Co-authored-by: Matej Voboril <tobiah@pm.me>
Klaus-Hendrik Wolf 2 anos atrás
pai
commit
a14f58e7b9

+ 26 - 0
app/src/main/java/com/sduduzog/slimlauncher/adapters/HomeAdapter.kt

@@ -9,12 +9,24 @@ import com.sduduzog.slimlauncher.R
 import com.sduduzog.slimlauncher.models.HomeApp
 import com.sduduzog.slimlauncher.utils.OnLaunchAppListener
 
+/**
+ * Corresponding to the resulting gravity, not the option key
+ */
+enum class Alignment (val value: Int) {
+    LEFT(3),
+    RIGHT(5),
+    CENTER(1)
+}
 
 class HomeAdapter(private val listener: OnLaunchAppListener)
     : RecyclerView.Adapter<HomeAdapter.ViewHolder>() {
 
     private var apps: List<HomeApp> = listOf()
+    private var gravity: Alignment = Alignment.LEFT
 
+    constructor(listener: OnLaunchAppListener, alignment: Int) : this(listener) {
+        setAlignment(alignment)
+    }
     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
         val view = LayoutInflater.from(parent.context)
                 .inflate(R.layout.main_fragment_list_item, parent, false)
@@ -24,6 +36,7 @@ class HomeAdapter(private val listener: OnLaunchAppListener)
     override fun onBindViewHolder(holder: ViewHolder, position: Int) {
         val item = apps.elementAt(position)
         holder.mLabelView.text = item.appNickname ?: item.appName
+        holder.mLabelView.gravity = gravity.value
         holder.mLabelView.setOnClickListener {
             listener.onLaunch(item, it)
         }
@@ -36,6 +49,19 @@ class HomeAdapter(private val listener: OnLaunchAppListener)
         notifyDataSetChanged()
     }
 
+    fun getGravity(): Alignment = gravity
+
+    fun setGravity(gravity: Alignment) {
+        this.gravity = gravity
+    }
+
+    private fun setAlignment(alignment: Int) {
+        gravity = when (alignment) {
+            2 -> Alignment.RIGHT
+            1 -> Alignment.CENTER
+            else -> Alignment.LEFT
+        }
+    }
 
     inner class ViewHolder(mView: View) : RecyclerView.ViewHolder(mView) {
         val mLabelView: TextView = mView.findViewById(R.id.home_fragment_list_item_app_name)

+ 39 - 0
app/src/main/java/com/sduduzog/slimlauncher/ui/dialogs/ChooseAlignmentDialog.kt

@@ -0,0 +1,39 @@
+package com.sduduzog.slimlauncher.ui.dialogs
+
+import android.app.AlertDialog
+import android.app.Dialog
+import android.content.Context.MODE_PRIVATE
+import android.content.SharedPreferences
+import android.os.Bundle
+import androidx.core.content.edit
+import androidx.fragment.app.DialogFragment
+import com.sduduzog.slimlauncher.R
+
+class ChooseAlignmentDialog : DialogFragment() {
+
+    private lateinit var settings: SharedPreferences
+
+    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+        val builder = AlertDialog.Builder(requireContext())
+        settings = requireContext().getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)
+
+        val active = settings.getInt(getString(R.string.prefs_settings_alignment), 3)
+        builder.setTitle(R.string.choose_alignment_dialog_title)
+        builder.setSingleChoiceItems(R.array.alignment_format_array, active) { dialogInterface, i ->
+            dialogInterface.dismiss()
+            settings.edit {
+                putInt(getString(R.string.prefs_settings_alignment), i)
+            }
+
+        }
+        return builder.create()
+    }
+
+
+    companion object {
+        fun getInstance(): ChooseAlignmentDialog{
+            return ChooseAlignmentDialog()
+        }
+    }
+}
+

+ 7 - 3
app/src/main/java/com/sduduzog/slimlauncher/ui/main/HomeFragment.kt

@@ -46,7 +46,6 @@ import java.text.SimpleDateFormat
 import java.util.*
 import javax.inject.Inject
 
-
 @AndroidEntryPoint
 class HomeFragment : BaseFragment(), OnLaunchAppListener {
     @Inject
@@ -70,8 +69,13 @@ class HomeFragment : BaseFragment(), OnLaunchAppListener {
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
-        val adapter1 = HomeAdapter(this)
-        val adapter2 = HomeAdapter(this)
+        val settingsKey = getString(R.string.prefs_settings)
+        val alignmentKey: String = getString(R.string.prefs_settings_alignment)
+        val preferences = requireContext().getSharedPreferences(settingsKey, Context.MODE_PRIVATE)
+        val alignment = preferences.getInt(alignmentKey, 3)
+
+        val adapter1 = HomeAdapter(this, alignment)
+        val adapter2 = HomeAdapter(this, alignment)
         home_fragment_list.adapter = adapter1
         home_fragment_list_exp.adapter = adapter2
 

+ 5 - 0
app/src/main/java/com/sduduzog/slimlauncher/ui/options/OptionsFragment.kt

@@ -15,6 +15,7 @@ import androidx.navigation.Navigation
 import com.sduduzog.slimlauncher.R
 import com.sduduzog.slimlauncher.datasource.UnlauncherDataSource
 import com.sduduzog.slimlauncher.ui.dialogs.ChangeThemeDialog
+import com.sduduzog.slimlauncher.ui.dialogs.ChooseAlignmentDialog
 import com.sduduzog.slimlauncher.ui.dialogs.ChooseTimeFormatDialog
 import com.sduduzog.slimlauncher.utils.BaseFragment
 import com.sduduzog.slimlauncher.utils.createTitleAndSubtitleText
@@ -53,6 +54,10 @@ class OptionsFragment : BaseFragment() {
             val chooseTimeFormatDialog = ChooseTimeFormatDialog.getInstance()
             chooseTimeFormatDialog.showNow(childFragmentManager, "TIME_FORMAT_CHOOSER")
         }
+        options_fragment_choose_alignment.setOnClickListener {
+            val chooseAlignmentDialog = ChooseAlignmentDialog.getInstance()
+            chooseAlignmentDialog.showNow(childFragmentManager, "ALIGNMENT_CHOOSER")
+        }
         options_fragment_toggle_status_bar.setOnClickListener {
             val settings = requireContext().getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)
             val isHidden = settings.getBoolean(getString(R.string.prefs_settings_key_toggle_status_bar), false)

+ 1 - 1
app/src/main/res/layout/main_fragment_list_item.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/home_fragment_list_item_app_name"
-    android:layout_width="wrap_content"
+    android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_marginTop="4dp"
     android:layout_marginBottom="4dp"

+ 20 - 6
app/src/main/res/layout/options_fragment.xml

@@ -91,9 +91,21 @@
             android:text="@string/options_fragment_customise_apps"
             android:textAppearance="@style/TextAppearance.AppCompat"
             android:textSize="@dimen/_20ssp"
-            app:layout_constraintBottom_toTopOf="@+id/options_fragment_customize_quick_buttons"
+            app:layout_constraintBottom_toTopOf="@id/options_fragment_choose_alignment"
             app:layout_constraintStart_toStartOf="@+id/options_fragment_toggle_status_bar"
-            app:layout_constraintTop_toBottomOf="@+id/options_fragment_toggle_status_bar" />
+            app:layout_constraintTop_toBottomOf="@id/options_fragment_toggle_status_bar" />
+
+        <TextView
+            android:id="@+id/options_fragment_choose_alignment"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:stateListAnimator="@xml/animate_scale"
+            android:text="@string/options_fragment_choose_alignment"
+            android:textAppearance="@style/TextAppearance.AppCompat"
+            android:textSize="@dimen/_20ssp"
+            app:layout_constraintBottom_toTopOf="@id/options_fragment_customize_quick_buttons"
+            app:layout_constraintStart_toStartOf="@+id/options_fragment_customise_apps"
+            app:layout_constraintTop_toBottomOf="@id/options_fragment_customise_apps" />
 
         <TextView
             android:id="@+id/options_fragment_customize_quick_buttons"
@@ -105,8 +117,9 @@
             android:text="@string/options_fragment_customize_quick_buttons"
             android:textAppearance="@style/TextAppearance.AppCompat"
             android:textSize="@dimen/_20ssp"
-            app:layout_constraintStart_toStartOf="@+id/options_fragment_customise_apps"
-            app:layout_constraintTop_toBottomOf="@+id/options_fragment_customise_apps" />
+            app:layout_constraintBottom_toTopOf="@id/options_fragment_customize_app_drawer"
+            app:layout_constraintStart_toStartOf="@+id/options_fragment_choose_alignment"
+            app:layout_constraintTop_toBottomOf="@+id/options_fragment_choose_alignment" />
 
         <TextView
             android:id="@+id/options_fragment_customize_app_drawer"
@@ -119,7 +132,8 @@
             android:textAppearance="@style/TextAppearance.AppCompat"
             android:textSize="@dimen/_20ssp"
             app:layout_constraintStart_toStartOf="@+id/options_fragment_customize_quick_buttons"
-            app:layout_constraintTop_toBottomOf="@+id/options_fragment_customize_quick_buttons" />
+            app:layout_constraintTop_toBottomOf="@+id/options_fragment_customize_quick_buttons"
+            />
 
         <androidx.appcompat.widget.SwitchCompat
             android:id="@+id/options_fragment_auto_device_theme_wallpaper"
@@ -130,7 +144,7 @@
             android:textAppearance="@style/TextAppearance.AppCompat"
             android:textSize="@dimen/_20ssp"
             android:layout_marginStart="@dimen/_16sdp"
-            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintStart_toStartOf="@+id/options_fragment_customize_app_drawer"
             app:layout_constraintTop_toBottomOf="@id/options_fragment_customize_app_drawer" />
     </androidx.constraintlayout.widget.ConstraintLayout>
 

+ 7 - 0
app/src/main/res/values-de/strings.xml

@@ -21,6 +21,12 @@
         <item>Verstecken</item>
     </string-array>
 
+    <string-array name="alignment_format_array">
+        <item>Links</item>
+        <item>Mitte</item>
+        <item>Rechts</item>
+    </string-array>
+
     <string name="choose_theme_dialog_title">Stil auswählen</string>
     <string name="app_name">Unlauncher</string>
     <string name="choose_time_format_dialog_title">Zeitformat</string>
@@ -36,6 +42,7 @@
     <string name="options_fragment_customise_apps">Apps einstellen</string>
     <string name="options_fragment_device_settings">Geräteeinstellungen</string>
     <string name="add_apps_fragment_search_apps">Appsuche</string>
+    <string name="options_fragment_choose_alignment">Apps ausrichten</string>
     <string name="options_fragment_customize_quick_buttons">Knöpfe einstellen</string>
     <string name="options_fragment_customize_app_drawer">Appschublade</string>
     <string name="options_fragment_toggle_status_bar">Statusleiste umschalten</string>

+ 9 - 0
app/src/main/res/values/strings.xml

@@ -28,16 +28,24 @@
         <item>Hide</item>
     </string-array>
 
+    <string-array name="alignment_format_array">
+        <item>left</item>
+        <item>center</item>
+        <item>right</item>
+    </string-array>
+
     <string name="prefs_settings" translatable="false">settings</string>
     <string name="prefs_settings_key_theme" translatable="false">key_theme</string>
     <string name="prefs_settings_key_time_format" translatable="false">time_format</string>
     <string name="prefs_settings_key_toggle_status_bar" translatable="false">hide_status_bar</string>
+    <string name="prefs_settings_alignment" translatable="false">alignment</string>
     <string name="choose_time_format_dialog_title">Choose Time Format</string>
     <string name="main_fragment_options">Options</string>
     <string name="options_fragment_device_settings">Device Settings</string>
     <string name="options_fragment_change_theme">Change Theme</string>
     <string name="options_fragment_choose_time_format">Choose Time Format</string>
     <string name="options_fragment_customise_apps">Customise Apps</string>
+    <string name="options_fragment_choose_alignment">Choose Alignment</string>
     <string name="options_fragment_customize_quick_buttons">Customise Quick Buttons</string>
     <string name="options_fragment_customize_app_drawer">Customise Drawer</string>
     <string name="options_fragment_toggle_status_bar">Toggle Status Bar</string>
@@ -75,5 +83,6 @@
     <string name="hide_app">Hide App</string>
     <string name="rename_app">Rename App</string>
     <string name="uninstall">Uninstall</string>
+    <string name="choose_alignment_dialog_title">Choose alignment</string>
 
 </resources>