From e049de06d80615fdb97c8a719be336f2b91250c6 Mon Sep 17 00:00:00 2001 From: HeCodes2Much Date: Fri, 29 Nov 2024 17:55:18 +0000 Subject: [PATCH] Feature: Added the ability for home app to be at bottom. --- .../launcher/helper/BottomDialogHelper.kt | 2 +- .../launcher/helper/PreferenceHelper.kt | 4 +++ .../launcher/ui/home/HomeFragment.kt | 26 ++++++++++++++-- .../launcher/ui/home/HomeViewHolder.kt | 2 ++ .../ui/settings/SettingsFeaturesFragment.kt | 6 ++++ .../launcher/utils/Constants.kt | 1 + .../launcher/viewmodel/PreferenceViewModel.kt | 6 ++++ app/src/main/res/layout/fragment_home.xml | 6 ++-- .../res/layout/fragment_settings_features.xml | 31 +++++++++++++++++++ app/src/main/res/values/strings.xml | 1 + 10 files changed, 79 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/github/droidworksstudio/launcher/helper/BottomDialogHelper.kt b/app/src/main/java/com/github/droidworksstudio/launcher/helper/BottomDialogHelper.kt index a9d89f9..05e0138 100644 --- a/app/src/main/java/com/github/droidworksstudio/launcher/helper/BottomDialogHelper.kt +++ b/app/src/main/java/com/github/droidworksstudio/launcher/helper/BottomDialogHelper.kt @@ -10,12 +10,12 @@ import javax.inject.Inject class BottomDialogHelper @Inject constructor() { + @Suppress("DEPRECATION") fun setupDialogStyle(dialog: Dialog?) { val window = dialog?.window if (window != null) { window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) - @Suppress("DEPRECATION") window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) window.statusBarColor = Color.TRANSPARENT } diff --git a/app/src/main/java/com/github/droidworksstudio/launcher/helper/PreferenceHelper.kt b/app/src/main/java/com/github/droidworksstudio/launcher/helper/PreferenceHelper.kt index 6b2f7f9..f38c48f 100644 --- a/app/src/main/java/com/github/droidworksstudio/launcher/helper/PreferenceHelper.kt +++ b/app/src/main/java/com/github/droidworksstudio/launcher/helper/PreferenceHelper.kt @@ -175,6 +175,10 @@ class PreferenceHelper @Inject constructor(@ApplicationContext context: Context) get() = prefs.getInt(Constants.WIDGET_BATTERY, 2) set(value) = prefs.edit().putInt(Constants.WIDGET_BATTERY, value).apply() + var homeAlignmentBottom: Boolean + get() = prefs.getBoolean(Constants.HOME_ALLIGNMENT_BOTTOM, false) + set(value) = prefs.edit().putBoolean(Constants.HOME_ALLIGNMENT_BOTTOM, value).apply() + var settingsLock: Boolean get() = prefs.getBoolean(Constants.TOGGLE_SETTING_LOCK, false) set(value) = prefs.edit().putBoolean(Constants.TOGGLE_SETTING_LOCK, value).apply() diff --git a/app/src/main/java/com/github/droidworksstudio/launcher/ui/home/HomeFragment.kt b/app/src/main/java/com/github/droidworksstudio/launcher/ui/home/HomeFragment.kt index 2feb1dd..1dc938c 100644 --- a/app/src/main/java/com/github/droidworksstudio/launcher/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/github/droidworksstudio/launcher/ui/home/HomeFragment.kt @@ -6,6 +6,7 @@ import android.content.Context import android.content.Intent import android.content.IntentFilter import android.content.pm.PackageManager +import android.graphics.Color import android.os.BatteryManager import android.os.Build import android.os.Bundle @@ -188,8 +189,26 @@ class HomeFragment : Fragment(), ViewGroup.LayoutParams.WRAP_CONTENT ) - // Set the bottom margin instead of top - layoutParams.topMargin = marginInPixels.toInt() + // Determine the gravity and margin based on the alignment preference + val gravity = if (preferenceHelper.homeAlignmentBottom) + Gravity.BOTTOM + else + Gravity.TOP + + // Apply the margin and gravity + val parentLayout = binding.appListTouchArea + val params = parentLayout.layoutParams.apply { + height = ViewGroup.LayoutParams.MATCH_PARENT + } + parentLayout.layoutParams = params + parentLayout.gravity = gravity + + // Set the appropriate margin based on the alignment + if (preferenceHelper.homeAlignmentBottom) + layoutParams.bottomMargin = marginInPixels.toInt() + else + layoutParams.topMargin = marginInPixels.toInt() + // Set gravity to align RecyclerView to the bottom layoutParams.gravity = when (preferenceHelper.homeAppAlignment) { @@ -231,6 +250,9 @@ class HomeFragment : Fragment(), clock.setOnClickListener { context.launchClock() } date.setOnClickListener { context.launchCalendar() } battery.setOnClickListener { context.openBatteryManager() } + + touchArea.setBackgroundColor(Color.parseColor("#00FFFF")) + appListTouchArea.setBackgroundColor(Color.parseColor("#FF00FF")) } } diff --git a/app/src/main/java/com/github/droidworksstudio/launcher/ui/home/HomeViewHolder.kt b/app/src/main/java/com/github/droidworksstudio/launcher/ui/home/HomeViewHolder.kt index d097c42..b9f99e2 100644 --- a/app/src/main/java/com/github/droidworksstudio/launcher/ui/home/HomeViewHolder.kt +++ b/app/src/main/java/com/github/droidworksstudio/launcher/ui/home/HomeViewHolder.kt @@ -2,6 +2,7 @@ package com.github.droidworksstudio.launcher.ui.home import android.annotation.SuppressLint import android.content.pm.PackageManager +import android.graphics.Color import android.graphics.drawable.Drawable import android.view.Gravity import android.view.View @@ -27,6 +28,7 @@ class HomeViewHolder @Inject constructor( @SuppressLint("ClickableViewAccessibility") fun bind(appInfo: AppInfo) { binding.apply { + itemView.setBackgroundColor(Color.parseColor("#0000FF")) // Get the current LayoutParams of appHiddenName val layoutAppNameParams = appHomeName.layoutParams as LinearLayoutCompat.LayoutParams diff --git a/app/src/main/java/com/github/droidworksstudio/launcher/ui/settings/SettingsFeaturesFragment.kt b/app/src/main/java/com/github/droidworksstudio/launcher/ui/settings/SettingsFeaturesFragment.kt index 9026fa8..7c63b9b 100644 --- a/app/src/main/java/com/github/droidworksstudio/launcher/ui/settings/SettingsFeaturesFragment.kt +++ b/app/src/main/java/com/github/droidworksstudio/launcher/ui/settings/SettingsFeaturesFragment.kt @@ -363,6 +363,12 @@ class SettingsFeaturesFragment : Fragment(), appHelper.triggerHapticFeedback(context, feedbackType) } + homeAlignmentBottomSwitchCompat.setOnCheckedChangeListener { _, isChecked -> + preferenceViewModel.setHomeAlignmentBottom(isChecked) + val feedbackType = if (isChecked) "on" else "off" + appHelper.triggerHapticFeedback(context, feedbackType) + } + disableAnimationsSwitchCompat.setOnCheckedChangeListener { _, isChecked -> preferenceViewModel.setDisableAnimations(isChecked) val feedbackType = if (isChecked) "on" else "off" diff --git a/app/src/main/java/com/github/droidworksstudio/launcher/utils/Constants.kt b/app/src/main/java/com/github/droidworksstudio/launcher/utils/Constants.kt index 4b45d5c..e7bbbd2 100644 --- a/app/src/main/java/com/github/droidworksstudio/launcher/utils/Constants.kt +++ b/app/src/main/java/com/github/droidworksstudio/launcher/utils/Constants.kt @@ -63,6 +63,7 @@ object Constants { const val AUTOMATIC_OPEN_APP = "AUTOMATIC_OPEN_APP" const val SEARCH_FROM_START = "SEARCH_FROM_START" const val FILTER_STRENGTH = "FILTER_STRENGTH" + const val HOME_ALLIGNMENT_BOTTOM = "HOME_ALLIGNMENT_BOTTOM" const val TOGGLE_SETTING_LOCK = "TOGGLE_SETTING_LOCK" const val DISABLE_ANIMATIONS = "DISABLE_ANIMATIONS" diff --git a/app/src/main/java/com/github/droidworksstudio/launcher/viewmodel/PreferenceViewModel.kt b/app/src/main/java/com/github/droidworksstudio/launcher/viewmodel/PreferenceViewModel.kt index aef3830..214be64 100644 --- a/app/src/main/java/com/github/droidworksstudio/launcher/viewmodel/PreferenceViewModel.kt +++ b/app/src/main/java/com/github/droidworksstudio/launcher/viewmodel/PreferenceViewModel.kt @@ -44,6 +44,7 @@ class PreferenceViewModel @Inject constructor( private val dailyWordTextSizeLiveData: MutableLiveData = MutableLiveData() private val autoOpenAppsLiveData: MutableLiveData = MutableLiveData() private val searchFromStartLiveData: MutableLiveData = MutableLiveData() + private val homeAlignmentBottomLiveData: MutableLiveData = MutableLiveData() private val autoKeyboardLiveData: MutableLiveData = MutableLiveData() private val lockSettingsLiveData: MutableLiveData = MutableLiveData() private val disableAnimationsLiveData: MutableLiveData = MutableLiveData() @@ -269,6 +270,11 @@ class PreferenceViewModel @Inject constructor( autoOpenAppsLiveData.postValue((preferenceHelper.automaticOpenApp)) } + fun setHomeAlignmentBottom(homeAlignmentBottom: Boolean) { + preferenceHelper.homeAlignmentBottom = homeAlignmentBottom + homeAlignmentBottomLiveData.postValue((preferenceHelper.homeAlignmentBottom)) + } + fun setSearchFromStart(searchFromStart: Boolean) { preferenceHelper.searchFromStart = searchFromStart searchFromStartLiveData.postValue((preferenceHelper.searchFromStart)) diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 527ab29..1239595 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -18,7 +18,7 @@ @@ -105,7 +104,8 @@ + android:layout_height="wrap_content" + android:layout_marginHorizontal="20dp" /> diff --git a/app/src/main/res/layout/fragment_settings_features.xml b/app/src/main/res/layout/fragment_settings_features.xml index da2bbf2..5a1f1ad 100644 --- a/app/src/main/res/layout/fragment_settings_features.xml +++ b/app/src/main/res/layout/fragment_settings_features.xml @@ -153,6 +153,37 @@ + + + + + + + + Show App Icons Auto Show Keyboard Auto Open Last App + Home Alignment Bottom Search From Start Lock Settings Disable Animations