Skip to content

Commit 319239e

Browse files
authored
Merge pull request #83 from Hepolise/dev
Feat: Added splash screen
2 parents 0ae8c1e + f9cab28 commit 319239e

File tree

4 files changed

+45
-2
lines changed

4 files changed

+45
-2
lines changed

app/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ dependencies {
4646
implementation("androidx.compose.ui:ui")
4747
implementation("androidx.compose.ui:ui-tooling-preview")
4848
implementation("androidx.compose.material3:material3:1.3.1")
49+
implementation("androidx.core:core-splashscreen:1.0.1")
4950

5051
// Required for preview support
5152
debugImplementation("androidx.compose.ui:ui-tooling")

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@
77
android:icon="@mipmap/ic_launcher"
88
android:label="@string/app_name"
99
android:roundIcon="@mipmap/ic_launcher_round"
10-
android:theme="@android:style/Theme.Material.NoActionBar"
10+
android:theme="@style/Theme.App.Starting"
1111
android:enableOnBackInvokedCallback="true"
1212
tools:targetApi="tiramisu">
1313

1414
<!-- Main activity -->
1515
<activity
1616
android:name="ru.hepolise.volumekeytrackcontrol.ui.SettingsActivity"
1717
android:exported="true"
18-
android:theme="@android:style/Theme.Material.NoActionBar">
18+
android:theme="@style/Theme.App.Starting">
1919
<intent-filter>
2020
<action android:name="android.intent.action.MAIN" />
2121
<category android:name="android.intent.category.LAUNCHER" />

app/src/main/java/ru/hepolise/volumekeytrackcontrol/ui/SettingsActivity.kt

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
package ru.hepolise.volumekeytrackcontrol.ui
22

3+
import android.animation.AnimatorSet
4+
import android.animation.ObjectAnimator
35
import android.annotation.SuppressLint
46
import android.content.Context
57
import android.content.Intent
68
import android.net.Uri
79
import android.os.Build
810
import android.os.Bundle
911
import android.os.Vibrator
12+
import android.view.View
13+
import android.view.animation.AccelerateInterpolator
14+
import android.view.animation.AnticipateInterpolator
1015
import android.widget.Toast
1116
import androidx.activity.ComponentActivity
1217
import androidx.activity.compose.setContent
@@ -73,6 +78,8 @@ import androidx.compose.ui.text.withLink
7378
import androidx.compose.ui.tooling.preview.Preview
7479
import androidx.compose.ui.unit.dp
7580
import androidx.compose.ui.unit.sp
81+
import androidx.core.animation.doOnEnd
82+
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
7683
import ru.hepolise.volumekeytrackcontrol.util.Constants
7784
import ru.hepolise.volumekeytrackcontrol.util.SharedPreferencesUtil.LONG_PRESS_DURATION
7885
import ru.hepolise.volumekeytrackcontrol.util.SharedPreferencesUtil.LONG_PRESS_DURATION_DEFAULT_VALUE
@@ -95,7 +102,34 @@ import ru.hepolise.volumekeytrackcontrolmodule.R
95102

96103
class SettingsActivity : ComponentActivity() {
97104
override fun onCreate(savedInstanceState: Bundle?) {
105+
val splashscreen = installSplashScreen()
106+
var keepSplashScreen = true
98107
super.onCreate(savedInstanceState)
108+
splashscreen.setKeepOnScreenCondition { keepSplashScreen }
109+
keepSplashScreen = false
110+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
111+
splashScreen.setOnExitAnimationListener { splashScreenView ->
112+
val scaleX = ObjectAnimator.ofFloat(splashScreenView, View.SCALE_X, 1f, 0.6f)
113+
val scaleY = ObjectAnimator.ofFloat(splashScreenView, View.SCALE_Y, 1f, 0.6f)
114+
115+
val fadeOut = ObjectAnimator.ofFloat(splashScreenView, View.ALPHA, 1f, 0f)
116+
117+
scaleX.interpolator = AnticipateInterpolator()
118+
scaleY.interpolator = AnticipateInterpolator()
119+
fadeOut.interpolator = AccelerateInterpolator()
120+
121+
val duration = 400L
122+
scaleX.duration = duration
123+
scaleY.duration = duration
124+
fadeOut.duration = duration
125+
126+
AnimatorSet().apply {
127+
playTogether(scaleX, scaleY, fadeOut)
128+
doOnEnd { splashScreenView.remove() }
129+
start()
130+
}
131+
}
132+
}
99133
enableEdgeToEdge()
100134
setContent {
101135
MaterialTheme(

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<resources>
3+
4+
<style name="Theme.App.Starting" parent="Theme.SplashScreen">
5+
<item name="windowSplashScreenAnimatedIcon">@mipmap/ic_launcher_foreground</item>
6+
<item name="postSplashScreenTheme">@android:style/Theme.Material.NoActionBar</item>
7+
</style>
8+
</resources>

0 commit comments

Comments
 (0)