Skip to content

Commit

Permalink
animation improvements, minor fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
queuejw committed Feb 12, 2025
1 parent ce6eff3 commit 5017eda
Show file tree
Hide file tree
Showing 6 changed files with 142 additions and 97 deletions.
4 changes: 3 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@
android:testOnly="false"
android:hardwareAccelerated="true"
android:label="@string/app_name"
android:supportsRtl="true">
android:supportsRtl="true"
android:enableOnBackInvokedCallback="true"
tools:targetApi="33">
<activity
android:icon="@mipmap/launcher_icon"
android:name="ru.queuejw.mpl.Main"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,14 @@ import androidx.appcompat.app.AppCompatDelegate
import androidx.core.content.edit
import androidx.core.view.WindowCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.commit
import androidx.lifecycle.lifecycleScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import ru.queuejw.mpl.Application.Companion.PREFS
import ru.queuejw.mpl.Application.Companion.customBoldFont
import ru.queuejw.mpl.Application.Companion.customFont
import ru.queuejw.mpl.R
import ru.queuejw.mpl.content.settings.fragments.MainSettingsFragment
import ru.queuejw.mpl.content.settings.fragments.ThemeSettingsFragment
Expand All @@ -26,37 +29,45 @@ class SettingsActivity : AppCompatActivity() {
private var isTipActive = false

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
when (PREFS.appTheme) {
0 -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
1 -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
2 -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
}
super.onCreate(savedInstanceState)
binding = LauncherSettingsMainBinding.inflate(layoutInflater)
binding.root.apply {
pivotX = 24f
pivotY = height.toFloat()
}
setContentView(binding.root)
WindowCompat.setDecorFitsSystemWindows(window, false)
Utils.applyWindowInsets(binding.root)
}

override fun onStart() {
super.onStart()
setupBackPressedDispatcher()
supportFragmentManager.commit {
replace(binding.fragmentContainerView.id, MainSettingsFragment())
}
setupFont()
if (PREFS.prefs.getBoolean("themeChanged", false)) {
supportFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)
PREFS.prefs.edit { putBoolean("themeChanged", false) }
changeFragment(ThemeSettingsFragment(), "theme")
changeFragmentFunction(ThemeSettingsFragment(), "theme")
} else {
supportFragmentManager.commit {
replace(binding.fragmentContainerView.id, MainSettingsFragment())
}
}
prepareTip()
}

override fun onResume() {
super.onResume()
private fun setupFont() {
customFont?.let {
binding.settings.typeface = it
}
customBoldFont?.let {
binding.settings.typeface = it
}
}

override fun onPause() {
super.onPause()
override fun onStart() {
super.onStart()
setupBackPressedDispatcher()
prepareTip()
}

private fun prepareTip() {
Expand Down Expand Up @@ -90,17 +101,17 @@ class SettingsActivity : AppCompatActivity() {
if(!PREFS.isTransitionAnimEnabled) {
supportFragmentManager.popBackStackImmediate()
} else {
binding.root.animate().rotationY(90f).alpha(0.75f).translationX(-100f).setDuration(150).setInterpolator(
binding.root.animate().rotationY(90f).alpha(0.75f).translationX(-100f).setDuration(125).setInterpolator(
DecelerateInterpolator()
).withEndAction {
supportFragmentManager.popBackStack()
binding.root.apply {
rotationY = -45f
rotationY = -90f
alpha = 0f
}
lifecycleScope.launch {
delay(25)
binding.root.animate().rotationY(0f).alpha(1f).translationX(0f).setDuration(150).setInterpolator(
binding.root.animate().rotationY(0f).alpha(1f).translationX(0f).setDuration(125).setInterpolator(
DecelerateInterpolator()
).start()
}.start()
Expand All @@ -119,11 +130,7 @@ class SettingsActivity : AppCompatActivity() {

fun changeFragment(fragment: Fragment, name: String) {
if(PREFS.isTransitionAnimEnabled) {
lifecycleScope.launch {
animateFragmentEnter()
delay(80)
changeFragmentFunction(fragment, name)
}
animateFragmentEnter(fragment, name)
} else {
changeFragmentFunction(fragment, name)
}
Expand All @@ -134,17 +141,20 @@ class SettingsActivity : AppCompatActivity() {
addToBackStack(name)
}
}
private fun animateFragmentEnter() {
binding.root.animate().rotationY(-45f).alpha(0.75f).translationX(-500f).setDuration(75)
private fun animateFragmentEnter(fragment: Fragment, name: String) {
binding.root.animate().rotationY(-90f).alpha(0.75f).translationX(-250f).setDuration(125)
.setInterpolator(
DecelerateInterpolator()
).withEndAction {
binding.root.alpha = 0f
binding.root.rotationY = 90f
binding.root.apply {
alpha = 0f
rotationY = 90f
}
changeFragmentFunction(fragment, name)
lifecycleScope.launch {
delay(50)
delay(25)
binding.root.alpha = 0.5f
binding.root.animate().rotationY(0f).alpha(1f).translationX(0f).setDuration(150)
binding.root.animate().rotationY(0f).alpha(1f).translationX(0f).setDuration(125)
.setInterpolator(
DecelerateInterpolator()
).start()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,30 +76,10 @@ class AboutSettingsFragment : Fragment() {
Utils.VERSION_NAME
)
binding.moreInfobtn.setOnClickListener {
binding.phoneinfoMore.text = getString(
R.string.phone_moreinfo,
Utils.VERSION_NAME,
Utils.VERSION_CODE,
Build.DEVICE,
Build.BRAND,
Build.MODEL,
Build.PRODUCT,
Build.HARDWARE,
Build.DISPLAY,
Build.TIME
)
binding.moreInfobtn.visibility = View.GONE
binding.moreinfoLayout.visibility = View.VISIBLE
showMoreInfo()
}
binding.resetLauncher.setOnClickListener {
WPDialog(requireActivity()).setTopDialog(true)
.setTitle(getString(R.string.reset_warning_title))
.setMessage(getString(R.string.reset_warning))
.setNegativeButton(getString(R.string.yes)) {
resetPart1()
WPDialog(requireActivity()).dismiss()
}
.setPositiveButton(getString(R.string.no), null).show()
resetDialog()
}
binding.restartLauncher.setOnClickListener {
exitProcess(0)
Expand Down Expand Up @@ -132,4 +112,32 @@ class AboutSettingsFragment : Fragment() {
requireActivity().finishAffinity()
startActivity(intent)
}
}

private fun resetDialog() {
WPDialog(requireActivity()).setTopDialog(true)
.setTitle(getString(R.string.reset_warning_title))
.setMessage(getString(R.string.reset_warning))
.setNegativeButton(getString(R.string.yes)) {
resetPart1()
WPDialog(requireActivity()).dismiss()
}
.setPositiveButton(getString(R.string.no), null).show()
}

private fun showMoreInfo() {
binding.phoneinfoMore.text = getString(
R.string.phone_moreinfo,
Utils.VERSION_NAME,
Utils.VERSION_CODE,
Build.DEVICE,
Build.BRAND,
Build.MODEL,
Build.PRODUCT,
Build.HARDWARE,
Build.DISPLAY,
Build.TIME
)
binding.moreInfobtn.visibility = View.GONE
binding.moreinfoLayout.visibility = View.VISIBLE
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package ru.queuejw.mpl.content.settings.fragments

import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import leakcanary.LeakCanary
import ru.queuejw.mpl.Application.Companion.PREFS
import ru.queuejw.mpl.Application.Companion.customFont
import ru.queuejw.mpl.Application.Companion.customLightFont
import ru.queuejw.mpl.R
import ru.queuejw.mpl.content.settings.SettingsActivity
import ru.queuejw.mpl.databinding.SettingsListBinding
Expand All @@ -28,12 +31,58 @@ class MainSettingsFragment : Fragment() {

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setUi()
context?.let { setUi(it) }
setupFont()
setOnClickers()
}

private fun setUi() {
binding.themeSub.text = Utils.accentName(requireContext())
private fun setupFont() {
val regularTextViewList = listOf(
binding.startThemeLabel,
binding.allAppsListLabel,
binding.tilesLabel,
binding.iconPacksLabel,
binding.fontsLabel,
binding.animationsLabel,
binding.feedbackLabel,
binding.updatesLabel,
binding.navigationLabel,
binding.aboutLabel,
binding.leackcanaryLabel,
)
val lightTextViewList = listOf(
binding.themeSub,
binding.allAppsSub,
binding.tilesSettingSub,
binding.iconsSub,
binding.fontsSub,
binding.animationsSub,
binding.feedbackSub,
binding.updatesSub,
binding.navbarSub,
binding.aboutSub,
binding.leakcanarySub,
)
regularTextViewList.forEach {
customFont?.let { font ->
it.typeface = font
}
}
lightTextViewList.forEach {
if (PREFS.customLightFontPath != null) {
customLightFont?.let { font ->
it.typeface = font
}
} else {
customFont?.let { font ->
it.typeface = font
}
}
}
}

private fun setUi(context: Context) {
binding.themeSub.text = Utils.accentName(context)
binding.navbarSub.text = when (PREFS.navBarColor) {
0 -> getString(R.string.always_dark)
1 -> getString(R.string.always_light)
Expand All @@ -49,8 +98,8 @@ class MainSettingsFragment : Fragment() {
}
binding.iconsSub.text = runCatching {
if (PREFS.iconPackPackage == "null") getString(R.string.iconPackNotSelectedSub)
else requireActivity().packageManager.getApplicationLabel(
requireActivity().packageManager.getApplicationInfo(
else context.packageManager.getApplicationLabel(
context.packageManager.getApplicationInfo(
PREFS.iconPackPackage!!,
0
)
Expand All @@ -74,19 +123,10 @@ class MainSettingsFragment : Fragment() {

private fun setClickListener(view: View, fragment: Fragment, name: String) {
view.setOnClickListener {
(requireActivity() as SettingsActivity).changeFragment(fragment, name)
(requireActivity() as SettingsActivity?)?.changeFragment(fragment, name)
}
}

override fun onResume() {
super.onResume()

}

override fun onPause() {
super.onPause()
}

override fun onDestroyView() {
super.onDestroyView()
_binding = null
Expand Down
Loading

0 comments on commit 5017eda

Please sign in to comment.