Skip to content

Commit 5017eda

Browse files
committed
animation improvements, minor fixes
1 parent ce6eff3 commit 5017eda

File tree

6 files changed

+142
-97
lines changed

6 files changed

+142
-97
lines changed

app/src/main/AndroidManifest.xml

+3-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@
2323
android:testOnly="false"
2424
android:hardwareAccelerated="true"
2525
android:label="@string/app_name"
26-
android:supportsRtl="true">
26+
android:supportsRtl="true"
27+
android:enableOnBackInvokedCallback="true"
28+
tools:targetApi="33">
2729
<activity
2830
android:icon="@mipmap/launcher_icon"
2931
android:name="ru.queuejw.mpl.Main"

app/src/main/java/ru/queuejw/mpl/content/settings/SettingsActivity.kt

+39-29
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,14 @@ import androidx.appcompat.app.AppCompatDelegate
88
import androidx.core.content.edit
99
import androidx.core.view.WindowCompat
1010
import androidx.fragment.app.Fragment
11+
import androidx.fragment.app.FragmentManager
1112
import androidx.fragment.app.commit
1213
import androidx.lifecycle.lifecycleScope
1314
import kotlinx.coroutines.delay
1415
import kotlinx.coroutines.launch
1516
import ru.queuejw.mpl.Application.Companion.PREFS
17+
import ru.queuejw.mpl.Application.Companion.customBoldFont
18+
import ru.queuejw.mpl.Application.Companion.customFont
1619
import ru.queuejw.mpl.R
1720
import ru.queuejw.mpl.content.settings.fragments.MainSettingsFragment
1821
import ru.queuejw.mpl.content.settings.fragments.ThemeSettingsFragment
@@ -26,37 +29,45 @@ class SettingsActivity : AppCompatActivity() {
2629
private var isTipActive = false
2730

2831
override fun onCreate(savedInstanceState: Bundle?) {
32+
super.onCreate(savedInstanceState)
2933
when (PREFS.appTheme) {
3034
0 -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
3135
1 -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
3236
2 -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
3337
}
34-
super.onCreate(savedInstanceState)
3538
binding = LauncherSettingsMainBinding.inflate(layoutInflater)
39+
binding.root.apply {
40+
pivotX = 24f
41+
pivotY = height.toFloat()
42+
}
3643
setContentView(binding.root)
3744
WindowCompat.setDecorFitsSystemWindows(window, false)
3845
Utils.applyWindowInsets(binding.root)
39-
}
40-
41-
override fun onStart() {
42-
super.onStart()
43-
setupBackPressedDispatcher()
44-
supportFragmentManager.commit {
45-
replace(binding.fragmentContainerView.id, MainSettingsFragment())
46-
}
46+
setupFont()
4747
if (PREFS.prefs.getBoolean("themeChanged", false)) {
48+
supportFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)
4849
PREFS.prefs.edit { putBoolean("themeChanged", false) }
49-
changeFragment(ThemeSettingsFragment(), "theme")
50+
changeFragmentFunction(ThemeSettingsFragment(), "theme")
51+
} else {
52+
supportFragmentManager.commit {
53+
replace(binding.fragmentContainerView.id, MainSettingsFragment())
54+
}
5055
}
51-
prepareTip()
5256
}
5357

54-
override fun onResume() {
55-
super.onResume()
58+
private fun setupFont() {
59+
customFont?.let {
60+
binding.settings.typeface = it
61+
}
62+
customBoldFont?.let {
63+
binding.settings.typeface = it
64+
}
5665
}
5766

58-
override fun onPause() {
59-
super.onPause()
67+
override fun onStart() {
68+
super.onStart()
69+
setupBackPressedDispatcher()
70+
prepareTip()
6071
}
6172

6273
private fun prepareTip() {
@@ -90,17 +101,17 @@ class SettingsActivity : AppCompatActivity() {
90101
if(!PREFS.isTransitionAnimEnabled) {
91102
supportFragmentManager.popBackStackImmediate()
92103
} else {
93-
binding.root.animate().rotationY(90f).alpha(0.75f).translationX(-100f).setDuration(150).setInterpolator(
104+
binding.root.animate().rotationY(90f).alpha(0.75f).translationX(-100f).setDuration(125).setInterpolator(
94105
DecelerateInterpolator()
95106
).withEndAction {
96107
supportFragmentManager.popBackStack()
97108
binding.root.apply {
98-
rotationY = -45f
109+
rotationY = -90f
99110
alpha = 0f
100111
}
101112
lifecycleScope.launch {
102113
delay(25)
103-
binding.root.animate().rotationY(0f).alpha(1f).translationX(0f).setDuration(150).setInterpolator(
114+
binding.root.animate().rotationY(0f).alpha(1f).translationX(0f).setDuration(125).setInterpolator(
104115
DecelerateInterpolator()
105116
).start()
106117
}.start()
@@ -119,11 +130,7 @@ class SettingsActivity : AppCompatActivity() {
119130

120131
fun changeFragment(fragment: Fragment, name: String) {
121132
if(PREFS.isTransitionAnimEnabled) {
122-
lifecycleScope.launch {
123-
animateFragmentEnter()
124-
delay(80)
125-
changeFragmentFunction(fragment, name)
126-
}
133+
animateFragmentEnter(fragment, name)
127134
} else {
128135
changeFragmentFunction(fragment, name)
129136
}
@@ -134,17 +141,20 @@ class SettingsActivity : AppCompatActivity() {
134141
addToBackStack(name)
135142
}
136143
}
137-
private fun animateFragmentEnter() {
138-
binding.root.animate().rotationY(-45f).alpha(0.75f).translationX(-500f).setDuration(75)
144+
private fun animateFragmentEnter(fragment: Fragment, name: String) {
145+
binding.root.animate().rotationY(-90f).alpha(0.75f).translationX(-250f).setDuration(125)
139146
.setInterpolator(
140147
DecelerateInterpolator()
141148
).withEndAction {
142-
binding.root.alpha = 0f
143-
binding.root.rotationY = 90f
149+
binding.root.apply {
150+
alpha = 0f
151+
rotationY = 90f
152+
}
153+
changeFragmentFunction(fragment, name)
144154
lifecycleScope.launch {
145-
delay(50)
155+
delay(25)
146156
binding.root.alpha = 0.5f
147-
binding.root.animate().rotationY(0f).alpha(1f).translationX(0f).setDuration(150)
157+
binding.root.animate().rotationY(0f).alpha(1f).translationX(0f).setDuration(125)
148158
.setInterpolator(
149159
DecelerateInterpolator()
150160
).start()

app/src/main/java/ru/queuejw/mpl/content/settings/fragments/AboutSettingsFragment.kt

+31-23
Original file line numberDiff line numberDiff line change
@@ -76,30 +76,10 @@ class AboutSettingsFragment : Fragment() {
7676
Utils.VERSION_NAME
7777
)
7878
binding.moreInfobtn.setOnClickListener {
79-
binding.phoneinfoMore.text = getString(
80-
R.string.phone_moreinfo,
81-
Utils.VERSION_NAME,
82-
Utils.VERSION_CODE,
83-
Build.DEVICE,
84-
Build.BRAND,
85-
Build.MODEL,
86-
Build.PRODUCT,
87-
Build.HARDWARE,
88-
Build.DISPLAY,
89-
Build.TIME
90-
)
91-
binding.moreInfobtn.visibility = View.GONE
92-
binding.moreinfoLayout.visibility = View.VISIBLE
79+
showMoreInfo()
9380
}
9481
binding.resetLauncher.setOnClickListener {
95-
WPDialog(requireActivity()).setTopDialog(true)
96-
.setTitle(getString(R.string.reset_warning_title))
97-
.setMessage(getString(R.string.reset_warning))
98-
.setNegativeButton(getString(R.string.yes)) {
99-
resetPart1()
100-
WPDialog(requireActivity()).dismiss()
101-
}
102-
.setPositiveButton(getString(R.string.no), null).show()
82+
resetDialog()
10383
}
10484
binding.restartLauncher.setOnClickListener {
10585
exitProcess(0)
@@ -132,4 +112,32 @@ class AboutSettingsFragment : Fragment() {
132112
requireActivity().finishAffinity()
133113
startActivity(intent)
134114
}
135-
}
115+
116+
private fun resetDialog() {
117+
WPDialog(requireActivity()).setTopDialog(true)
118+
.setTitle(getString(R.string.reset_warning_title))
119+
.setMessage(getString(R.string.reset_warning))
120+
.setNegativeButton(getString(R.string.yes)) {
121+
resetPart1()
122+
WPDialog(requireActivity()).dismiss()
123+
}
124+
.setPositiveButton(getString(R.string.no), null).show()
125+
}
126+
127+
private fun showMoreInfo() {
128+
binding.phoneinfoMore.text = getString(
129+
R.string.phone_moreinfo,
130+
Utils.VERSION_NAME,
131+
Utils.VERSION_CODE,
132+
Build.DEVICE,
133+
Build.BRAND,
134+
Build.MODEL,
135+
Build.PRODUCT,
136+
Build.HARDWARE,
137+
Build.DISPLAY,
138+
Build.TIME
139+
)
140+
binding.moreInfobtn.visibility = View.GONE
141+
binding.moreinfoLayout.visibility = View.VISIBLE
142+
}
143+
}

app/src/main/java/ru/queuejw/mpl/content/settings/fragments/MainSettingsFragment.kt

+55-15
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package ru.queuejw.mpl.content.settings.fragments
22

3+
import android.content.Context
34
import android.os.Bundle
45
import android.view.LayoutInflater
56
import android.view.View
67
import android.view.ViewGroup
78
import androidx.fragment.app.Fragment
89
import leakcanary.LeakCanary
910
import ru.queuejw.mpl.Application.Companion.PREFS
11+
import ru.queuejw.mpl.Application.Companion.customFont
12+
import ru.queuejw.mpl.Application.Companion.customLightFont
1013
import ru.queuejw.mpl.R
1114
import ru.queuejw.mpl.content.settings.SettingsActivity
1215
import ru.queuejw.mpl.databinding.SettingsListBinding
@@ -28,12 +31,58 @@ class MainSettingsFragment : Fragment() {
2831

2932
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
3033
super.onViewCreated(view, savedInstanceState)
31-
setUi()
34+
context?.let { setUi(it) }
35+
setupFont()
3236
setOnClickers()
3337
}
3438

35-
private fun setUi() {
36-
binding.themeSub.text = Utils.accentName(requireContext())
39+
private fun setupFont() {
40+
val regularTextViewList = listOf(
41+
binding.startThemeLabel,
42+
binding.allAppsListLabel,
43+
binding.tilesLabel,
44+
binding.iconPacksLabel,
45+
binding.fontsLabel,
46+
binding.animationsLabel,
47+
binding.feedbackLabel,
48+
binding.updatesLabel,
49+
binding.navigationLabel,
50+
binding.aboutLabel,
51+
binding.leackcanaryLabel,
52+
)
53+
val lightTextViewList = listOf(
54+
binding.themeSub,
55+
binding.allAppsSub,
56+
binding.tilesSettingSub,
57+
binding.iconsSub,
58+
binding.fontsSub,
59+
binding.animationsSub,
60+
binding.feedbackSub,
61+
binding.updatesSub,
62+
binding.navbarSub,
63+
binding.aboutSub,
64+
binding.leakcanarySub,
65+
)
66+
regularTextViewList.forEach {
67+
customFont?.let { font ->
68+
it.typeface = font
69+
}
70+
}
71+
lightTextViewList.forEach {
72+
if (PREFS.customLightFontPath != null) {
73+
customLightFont?.let { font ->
74+
it.typeface = font
75+
}
76+
} else {
77+
customFont?.let { font ->
78+
it.typeface = font
79+
}
80+
}
81+
}
82+
}
83+
84+
private fun setUi(context: Context) {
85+
binding.themeSub.text = Utils.accentName(context)
3786
binding.navbarSub.text = when (PREFS.navBarColor) {
3887
0 -> getString(R.string.always_dark)
3988
1 -> getString(R.string.always_light)
@@ -49,8 +98,8 @@ class MainSettingsFragment : Fragment() {
4998
}
5099
binding.iconsSub.text = runCatching {
51100
if (PREFS.iconPackPackage == "null") getString(R.string.iconPackNotSelectedSub)
52-
else requireActivity().packageManager.getApplicationLabel(
53-
requireActivity().packageManager.getApplicationInfo(
101+
else context.packageManager.getApplicationLabel(
102+
context.packageManager.getApplicationInfo(
54103
PREFS.iconPackPackage!!,
55104
0
56105
)
@@ -74,19 +123,10 @@ class MainSettingsFragment : Fragment() {
74123

75124
private fun setClickListener(view: View, fragment: Fragment, name: String) {
76125
view.setOnClickListener {
77-
(requireActivity() as SettingsActivity).changeFragment(fragment, name)
126+
(requireActivity() as SettingsActivity?)?.changeFragment(fragment, name)
78127
}
79128
}
80129

81-
override fun onResume() {
82-
super.onResume()
83-
84-
}
85-
86-
override fun onPause() {
87-
super.onPause()
88-
}
89-
90130
override fun onDestroyView() {
91131
super.onDestroyView()
92132
_binding = null

0 commit comments

Comments
 (0)