Skip to content

Commit 4138c02

Browse files
Feature: Added a toggle to disable animations.
1 parent 8f83174 commit 4138c02

File tree

10 files changed

+150
-16
lines changed

10 files changed

+150
-16
lines changed

app/src/main/java/com/github/droidworksstudio/launcher/helper/PreferenceHelper.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,10 @@ class PreferenceHelper @Inject constructor(@ApplicationContext context: Context)
179179
get() = prefs.getBoolean(Constants.TOGGLE_SETTING_LOCK, false)
180180
set(value) = prefs.edit().putBoolean(Constants.TOGGLE_SETTING_LOCK, value).apply()
181181

182+
var disableAnimations: Boolean
183+
get() = prefs.getBoolean(Constants.DISABLE_ANIMATIONS, false)
184+
set(value) = prefs.edit().putBoolean(Constants.DISABLE_ANIMATIONS, value).apply()
185+
182186
var searchEngines: Constants.SearchEngines
183187
get() {
184188
return try {

app/src/main/java/com/github/droidworksstudio/launcher/ui/drawer/DrawFragment.kt

Lines changed: 51 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import android.annotation.SuppressLint
44
import android.content.Context
55
import android.os.Build
66
import android.os.Bundle
7+
import android.os.Handler
8+
import android.os.Looper
79
import android.view.LayoutInflater
810
import android.view.View
911
import android.view.ViewGroup
@@ -14,6 +16,7 @@ import androidx.fragment.app.viewModels
1416
import androidx.lifecycle.Lifecycle
1517
import androidx.lifecycle.lifecycleScope
1618
import androidx.lifecycle.repeatOnLifecycle
19+
import androidx.navigation.NavOptions
1720
import androidx.navigation.fragment.findNavController
1821
import androidx.recyclerview.widget.RecyclerView
1922
import androidx.recyclerview.widget.StaggeredGridLayoutManager
@@ -191,16 +194,38 @@ class DrawFragment : Fragment(),
191194
RecyclerView.SCROLL_STATE_DRAGGING -> {
192195
onTop = !recyclerView.canScrollVertically(-1)
193196
if (onTop) binding.searchViewText.hideKeyboard()
194-
if (onTop && !recyclerView.canScrollVertically(1))
195-
findNavController().popBackStack()
197+
if (onTop && !recyclerView.canScrollVertically(1)) {
198+
val actionTypeNavOptions: NavOptions? =
199+
if (preferenceHelper.disableAnimations) null
200+
else appHelper.getActionType(Constants.Swipe.Up)
201+
202+
Handler(Looper.getMainLooper()).post {
203+
findNavController().navigate(
204+
R.id.action_DrawFragment_to_HomeFragment,
205+
null,
206+
actionTypeNavOptions
207+
)
208+
}
209+
}
196210
}
197211

198212
RecyclerView.SCROLL_STATE_IDLE -> {
199213
if (!recyclerView.canScrollVertically(1)) {
200214
binding.searchViewText.hideKeyboard()
201215
} else if (!recyclerView.canScrollVertically(-1)) {
202-
if (onTop) findNavController().popBackStack()
203-
else binding.searchViewText.showKeyboard()
216+
if (onTop) {
217+
val actionTypeNavOptions: NavOptions? =
218+
if (preferenceHelper.disableAnimations) null
219+
else appHelper.getActionType(Constants.Swipe.Up)
220+
221+
Handler(Looper.getMainLooper()).post {
222+
findNavController().navigate(
223+
R.id.action_DrawFragment_to_HomeFragment,
224+
null,
225+
actionTypeNavOptions
226+
)
227+
}
228+
} else binding.searchViewText.showKeyboard()
204229
}
205230
}
206231
}
@@ -213,12 +238,32 @@ class DrawFragment : Fragment(),
213238
return object : OnSwipeTouchListener(context) {
214239
override fun onSwipeLeft() {
215240
super.onSwipeLeft()
216-
findNavController().navigateUp()
241+
val actionTypeNavOptions: NavOptions? =
242+
if (preferenceHelper.disableAnimations) null
243+
else appHelper.getActionType(Constants.Swipe.Left)
244+
245+
Handler(Looper.getMainLooper()).post {
246+
findNavController().navigate(
247+
R.id.action_DrawFragment_to_HomeFragment,
248+
null,
249+
actionTypeNavOptions
250+
)
251+
}
217252
}
218253

219254
override fun onSwipeRight() {
220255
super.onSwipeRight()
221-
findNavController().navigateUp()
256+
val actionTypeNavOptions: NavOptions? =
257+
if (preferenceHelper.disableAnimations) null
258+
else appHelper.getActionType(Constants.Swipe.Right)
259+
260+
Handler(Looper.getMainLooper()).post {
261+
findNavController().navigate(
262+
R.id.action_DrawFragment_to_HomeFragment,
263+
null,
264+
actionTypeNavOptions
265+
)
266+
}
222267
}
223268
}
224269
}

app/src/main/java/com/github/droidworksstudio/launcher/ui/home/HomeFragment.kt

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,9 @@ class HomeFragment : Fragment(),
418418
}
419419

420420
Constants.Action.ShowAppList -> {
421-
val actionTypeNavOptions: NavOptions = appHelper.getActionType(actionType)
421+
val actionTypeNavOptions: NavOptions? =
422+
if (preferenceHelper.disableAnimations) null
423+
else appHelper.getActionType(actionType)
422424
Handler(Looper.getMainLooper()).post {
423425
findNavController().navigate(
424426
R.id.action_HomeFragment_to_DrawFragment,
@@ -430,7 +432,9 @@ class HomeFragment : Fragment(),
430432

431433

432434
Constants.Action.ShowFavoriteList -> {
433-
val actionTypeNavOptions: NavOptions = appHelper.getActionType(actionType)
435+
val actionTypeNavOptions: NavOptions? =
436+
if (preferenceHelper.disableAnimations) null
437+
else appHelper.getActionType(actionType)
434438
Handler(Looper.getMainLooper()).post {
435439
findNavController().navigate(
436440
R.id.action_HomeFragment_to_FavoriteFragment,
@@ -441,7 +445,9 @@ class HomeFragment : Fragment(),
441445
}
442446

443447
Constants.Action.ShowHiddenList -> {
444-
val actionTypeNavOptions: NavOptions = appHelper.getActionType(actionType)
448+
val actionTypeNavOptions: NavOptions? =
449+
if (preferenceHelper.disableAnimations) null
450+
else appHelper.getActionType(actionType)
445451
Handler(Looper.getMainLooper()).post {
446452
findNavController().navigate(
447453
R.id.action_HomeFragment_to_HiddenFragment,
@@ -465,7 +471,9 @@ class HomeFragment : Fragment(),
465471
}
466472

467473
Constants.Action.ShowWidgets -> {
468-
val actionTypeNavOptions: NavOptions = appHelper.getActionType(actionType)
474+
val actionTypeNavOptions: NavOptions? =
475+
if (preferenceHelper.disableAnimations) null
476+
else appHelper.getActionType(actionType)
469477
Handler(Looper.getMainLooper()).post {
470478
findNavController().navigate(
471479
R.id.action_HomeFragment_to_WidgetsFragment,

app/src/main/java/com/github/droidworksstudio/launcher/ui/settings/SettingsFeaturesFragment.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ class SettingsFeaturesFragment : Fragment(),
127127
automaticOpenAppSwitchCompat.isChecked = preferenceHelper.automaticOpenApp
128128
searchFromStartSwitchCompat.isChecked = preferenceHelper.searchFromStart
129129
lockSettingsSwitchCompat.isChecked = preferenceHelper.settingsLock
130+
disableAnimationsSwitchCompat.isChecked = preferenceHelper.disableAnimations
130131
}
131132
}
132133

@@ -361,6 +362,12 @@ class SettingsFeaturesFragment : Fragment(),
361362
val feedbackType = if (isChecked) "on" else "off"
362363
appHelper.triggerHapticFeedback(context, feedbackType)
363364
}
365+
366+
disableAnimationsSwitchCompat.setOnCheckedChangeListener { _, isChecked ->
367+
preferenceViewModel.setDisableAnimations(isChecked)
368+
val feedbackType = if (isChecked) "on" else "off"
369+
appHelper.triggerHapticFeedback(context, feedbackType)
370+
}
364371
}
365372

366373
}

app/src/main/java/com/github/droidworksstudio/launcher/ui/widgets/WidgetFragment.kt

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -389,26 +389,47 @@ class WidgetFragment : Fragment(),
389389
return object : OnSwipeTouchListener(context) {
390390
override fun onLongClick() {
391391
super.onLongClick()
392-
val actionTypeNavOptions: NavOptions =
393-
appHelper.getActionType(Constants.Swipe.DoubleTap)
392+
val actionTypeNavOptions: NavOptions? =
393+
if (preferenceHelper.disableAnimations) null
394+
else appHelper.getActionType(Constants.Swipe.DoubleTap)
395+
394396
Handler(Looper.getMainLooper()).post {
395397
findNavController().navigate(
396398
R.id.action_WidgetsFragment_to_WidgetsSettingsFragment,
397399
null,
398400
actionTypeNavOptions
399401
)
400402
}
401-
return
402403
}
403404

404405
override fun onSwipeLeft() {
405406
super.onSwipeLeft()
406-
findNavController().navigateUp()
407+
val actionTypeNavOptions: NavOptions? =
408+
if (preferenceHelper.disableAnimations) null
409+
else appHelper.getActionType(Constants.Swipe.Left)
410+
411+
Handler(Looper.getMainLooper()).post {
412+
findNavController().navigate(
413+
R.id.action_WidgetsFragment_to_HomeFragment,
414+
null,
415+
actionTypeNavOptions
416+
)
417+
}
407418
}
408419

409420
override fun onSwipeRight() {
410421
super.onSwipeRight()
411-
findNavController().navigateUp()
422+
val actionTypeNavOptions: NavOptions? =
423+
if (preferenceHelper.disableAnimations) null
424+
else appHelper.getActionType(Constants.Swipe.Right)
425+
426+
Handler(Looper.getMainLooper()).post {
427+
findNavController().navigate(
428+
R.id.action_WidgetsFragment_to_HomeFragment,
429+
null,
430+
actionTypeNavOptions
431+
)
432+
}
412433
}
413434
}
414435
}

app/src/main/java/com/github/droidworksstudio/launcher/utils/Constants.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ object Constants {
6464
const val SEARCH_FROM_START = "SEARCH_FROM_START"
6565
const val FILTER_STRENGTH = "FILTER_STRENGTH"
6666
const val TOGGLE_SETTING_LOCK = "TOGGLE_SETTING_LOCK"
67+
const val DISABLE_ANIMATIONS = "DISABLE_ANIMATIONS"
6768

6869
const val HOME_DATE_ALIGNMENT = "HOME_DATE_ALIGNMENT"
6970
const val HOME_TIME_ALIGNMENT = "HOME_TIME_ALIGNMENT"

app/src/main/java/com/github/droidworksstudio/launcher/viewmodel/PreferenceViewModel.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ class PreferenceViewModel @Inject constructor(
4646
private val searchFromStartLiveData: MutableLiveData<Boolean> = MutableLiveData()
4747
private val autoKeyboardLiveData: MutableLiveData<Boolean> = MutableLiveData()
4848
private val lockSettingsLiveData: MutableLiveData<Boolean> = MutableLiveData()
49+
private val disableAnimationsLiveData: MutableLiveData<Boolean> = MutableLiveData()
4950
private val appGroupPaddingSizeLiveData: MutableLiveData<Float> = MutableLiveData()
5051
private val appPaddingSizeLiveData: MutableLiveData<Float> = MutableLiveData()
5152

@@ -278,6 +279,11 @@ class PreferenceViewModel @Inject constructor(
278279
lockSettingsLiveData.postValue((preferenceHelper.settingsLock))
279280
}
280281

282+
fun setDisableAnimations(disableAnimations: Boolean) {
283+
preferenceHelper.disableAnimations = disableAnimations
284+
disableAnimationsLiveData.postValue((preferenceHelper.disableAnimations))
285+
}
286+
281287
fun setAppLanguage(appLanguage: Constants.Language) {
282288
preferenceHelper.appLanguage = appLanguage
283289
appLanguageLiveData.postValue((preferenceHelper.appLanguage))

app/src/main/res/layout/fragment_settings_features.xml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,37 @@
183183
tools:ignore="TouchTargetSizeCheck" />
184184

185185
</androidx.appcompat.widget.LinearLayoutCompat>
186+
187+
<androidx.appcompat.widget.LinearLayoutCompat
188+
android:layout_width="match_parent"
189+
android:layout_height="wrap_content"
190+
android:orientation="horizontal"
191+
tools:ignore="MissingConstraints">
192+
193+
<androidx.appcompat.widget.AppCompatTextView
194+
android:id="@+id/disableAnimations_text"
195+
style="@style/TextDefaultStyle"
196+
android:layout_width="0dp"
197+
android:layout_height="wrap_content"
198+
android:layout_weight="1"
199+
android:gravity="left|center"
200+
android:text="@string/settings_display_disable_animations"
201+
android:textSize="@dimen/text_large"
202+
app:layout_constraintStart_toStartOf="parent"
203+
app:layout_constraintTop_toTopOf="parent"
204+
tools:ignore="RtlHardcoded" />
205+
206+
<androidx.appcompat.widget.SwitchCompat
207+
android:id="@+id/disableAnimations_switchCompat"
208+
android:layout_width="wrap_content"
209+
android:layout_height="wrap_content"
210+
android:scaleX="0.7"
211+
android:scaleY="0.8"
212+
android:thumb="@drawable/shape_switch_thumb"
213+
app:track="@drawable/selector_switch"
214+
tools:ignore="TouchTargetSizeCheck" />
215+
216+
</androidx.appcompat.widget.LinearLayoutCompat>
186217
</androidx.appcompat.widget.LinearLayoutCompat>
187218

188219
<androidx.appcompat.widget.LinearLayoutCompat

app/src/main/res/navigation/nav_graph.xml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@
6464
<action
6565
android:id="@+id/action_WidgetsFragment_to_WidgetsSettingsFragment"
6666
app:destination="@id/WidgetsSettingsFragment" />
67+
68+
<action
69+
android:id="@+id/action_WidgetsFragment_to_HomeFragment"
70+
app:destination="@id/HomeFragment" />
6771
</fragment>
6872

6973
<fragment
@@ -82,7 +86,13 @@
8286
android:id="@+id/DrawFragment"
8387
android:name="com.github.droidworksstudio.launcher.ui.drawer.DrawFragment"
8488
android:label="@string/draw_fragment_label"
85-
tools:layout="@layout/fragment_draw" />
89+
tools:layout="@layout/fragment_draw">
90+
91+
<action
92+
android:id="@+id/action_DrawFragment_to_HomeFragment"
93+
app:destination="@id/HomeFragment" />
94+
</fragment>
95+
8696

8797
<fragment
8898
android:id="@+id/FavoriteFragment"

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@
102102
<string name="settings_display_auto_open_apps">Auto Open Last App</string>
103103
<string name="settings_search_from_start">Search From Start</string>
104104
<string name="settings_display_lock_settings">Lock Settings</string>
105+
<string name="settings_display_disable_animations">Disable Animations</string>
105106

106107
<string name="settings_appearance_text_size_title">Size</string>
107108
<string name="settings_appearance_color_title">Color</string>

0 commit comments

Comments
 (0)