Got rid of status bar and made animation apply to the window instead of the layout.

This commit is contained in:
ottoptj 2024-05-31 12:23:40 +03:00
commit d0112bbbe4
7 changed files with 29 additions and 58 deletions

View file

@ -41,14 +41,11 @@ android {
dependencies { dependencies {
implementation("androidx.core:core-ktx:1.13.1") implementation("androidx.core:core-ktx:1.13.1")
implementation("androidx.appcompat:appcompat:1.6.1") implementation("androidx.appcompat:appcompat:1.7.0")
implementation("com.google.android.material:material:1.12.0") implementation("com.google.android.material:material:1.12.0")
implementation("androidx.constraintlayout:constraintlayout:2.1.4") implementation("androidx.constraintlayout:constraintlayout:2.1.4")
implementation("androidx.navigation:navigation-fragment-ktx:2.7.7") implementation("androidx.navigation:navigation-fragment-ktx:2.7.7")
implementation("androidx.navigation:navigation-ui-ktx:2.7.7") implementation("androidx.navigation:navigation-ui-ktx:2.7.7")
implementation("com.google.code.gson:gson:2.10") implementation("com.google.code.gson:gson:2.10")
implementation("androidx.recyclerview:recyclerview:1.3.2") implementation("androidx.recyclerview:recyclerview:1.3.2")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
} }

View file

@ -4,7 +4,9 @@ import android.animation.Animator
import android.animation.AnimatorListenerAdapter import android.animation.AnimatorListenerAdapter
import android.animation.ArgbEvaluator import android.animation.ArgbEvaluator
import android.animation.ObjectAnimator import android.animation.ObjectAnimator
import android.animation.ValueAnimator
import android.app.Activity import android.app.Activity
import android.graphics.drawable.ColorDrawable
import android.view.View import android.view.View
import android.view.WindowManager import android.view.WindowManager
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
@ -34,56 +36,32 @@ class Animations () {
val originalColor = ContextCompat.getColor(activity, R.color.original_color) val originalColor = ContextCompat.getColor(activity, R.color.original_color)
val newColor = ContextCompat.getColor(activity, R.color.new_color) val newColor = ContextCompat.getColor(activity, R.color.new_color)
val backgroundColorAnimator: ObjectAnimator = ObjectAnimator.ofObject( val colorDrawable = ColorDrawable(originalColor)
binding.root, activity.window.setBackgroundDrawable(colorDrawable)
"backgroundColor",
ArgbEvaluator(),
originalColor,
newColor
)
backgroundColorAnimator.setDuration(duration) val backgroundColorAnimator = ValueAnimator.ofObject(ArgbEvaluator(), originalColor, newColor)
backgroundColorAnimator.addUpdateListener { animator ->
colorDrawable.color = animator.animatedValue as Int
}
backgroundColorAnimator.duration = duration
val window = activity.window
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
val statusBarColorAnimator = ObjectAnimator.ofArgb(
window,
"statusBarColor",
originalColor,
newColor
)
statusBarColorAnimator.setDuration(duration)
backgroundColorAnimator.start() backgroundColorAnimator.start()
statusBarColorAnimator.start()
} }
fun backgroundOut(activity: Activity, binding: ActivityMainBinding, duration: Long = 100) { fun backgroundOut(activity: Activity, binding: ActivityMainBinding, duration: Long = 100) {
val originalColor = ContextCompat.getColor(activity, R.color.new_color) val originalColor = ContextCompat.getColor(activity, R.color.new_color)
val newColor = ContextCompat.getColor(activity, R.color.original_color) val newColor = ContextCompat.getColor(activity, R.color.original_color)
val backgroundColorAnimator: ObjectAnimator = ObjectAnimator.ofObject( val colorDrawable = ColorDrawable(originalColor)
binding.root, activity.window.setBackgroundDrawable(colorDrawable)
"backgroundColor",
ArgbEvaluator(),
originalColor,
newColor
)
backgroundColorAnimator.setDuration(duration) val backgroundColorAnimator = ValueAnimator.ofObject(ArgbEvaluator(), originalColor, newColor)
backgroundColorAnimator.addUpdateListener { animator ->
colorDrawable.color = animator.animatedValue as Int
}
backgroundColorAnimator.duration = duration
val window = activity.window
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
val statusBarColorAnimator = ObjectAnimator.ofArgb(
window,
"statusBarColor",
originalColor,
newColor
)
statusBarColorAnimator.setDuration(duration)
backgroundColorAnimator.start() backgroundColorAnimator.start()
statusBarColorAnimator.start()
} }
private fun View.slideInFromBottom(duration: Long = 100) { private fun View.slideInFromBottom(duration: Long = 100) {
if (visibility != View.VISIBLE) { if (visibility != View.VISIBLE) {

View file

@ -16,6 +16,7 @@ import android.text.TextWatcher
import android.view.GestureDetector import android.view.GestureDetector
import android.view.MotionEvent import android.view.MotionEvent
import android.view.View import android.view.View
import android.view.WindowManager
import android.view.inputmethod.InputMethodManager import android.view.inputmethod.InputMethodManager
import android.widget.EditText import android.widget.EditText
import android.widget.LinearLayout import android.widget.LinearLayout
@ -71,7 +72,6 @@ class MainActivity : AppCompatActivity(), AppMenuAdapter.OnItemClickListener, Ap
setContentView(binding.root) setContentView(binding.root)
setSupportActionBar(null) setSupportActionBar(null)
launcherApps = getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps launcherApps = getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps
gestureDetector = GestureDetector(this, GestureListener()) gestureDetector = GestureDetector(this, GestureListener())

View file

@ -5,7 +5,6 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_gravity="fill_vertical" android:layout_gravity="fill_vertical"
android:fitsSystemWindows="true"
android:orientation="vertical" android:orientation="vertical"
tools:context=".MainActivity"> tools:context=".MainActivity">
@ -77,7 +76,6 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_gravity="fill_vertical" android:layout_gravity="fill_vertical"
android:fitsSystemWindows="true"
android:gravity="fill_vertical" android:gravity="fill_vertical"
android:orientation="vertical" android:orientation="vertical"
android:visibility="visible"> android:visibility="visible">

View file

@ -1,11 +1,9 @@
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. --> <!-- Base application theme. -->
<style name="Base.Theme.YamLauncher" parent="Theme.Material3.DayNight.NoActionBar"> <style name="Base.Theme.YamLauncher" parent="Theme.AppCompat.NoActionBar">
<!-- Customize your dark theme here. -->
<item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item> <item name="android:colorBackgroundCacheHint">@android:color/transparent</item>
<item name="android:windowShowWallpaper">true</item> <item name="android:windowShowWallpaper">true</item>
<!-- <item name="colorPrimary">@color/my_dark_primary</item> -->
</style> </style>
</resources> </resources>

View file

@ -1,9 +1,10 @@
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<style name="Theme.YamLauncher" parent="Base.Theme.YamLauncher"> <style name="Theme.YamLauncher" parent="Base.Theme.YamLauncher">
<!-- Transparent system bars for edge-to-edge. -->
<item name="android:navigationBarColor">@android:color/transparent</item> <item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:statusBarColor">@android:color/transparent</item> <item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowLightStatusBar">?attr/isLightTheme</item> <item name="android:windowLightStatusBar">?attr/isLightTheme</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style> </style>
</resources> </resources>

View file

@ -1,11 +1,10 @@
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. --> <!-- Base application theme. -->
<style name="Base.Theme.YamLauncher" parent="Theme.Material3.DayNight.NoActionBar"> <style name="Base.Theme.YamLauncher" parent="Theme.AppCompat.NoActionBar">
<!-- Customize your light theme here. -->
<item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item> <item name="android:colorBackgroundCacheHint">@android:color/transparent</item>
<item name="android:windowShowWallpaper">true</item> <item name="android:windowShowWallpaper">true</item>
<!-- <item name="colorPrimary">@color/my_light_primary</item> -->
</style> </style>
<style name="AppSearchView" parent="Widget.AppCompat.SearchView" > <style name="AppSearchView" parent="Widget.AppCompat.SearchView" >