diff --git a/app/build.gradle b/app/build.gradle index de468fa6..f009622b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -65,6 +65,7 @@ if (project.hasProperty('sign')) { dependencies { implementation project(':client') implementation 'androidx.appcompat:appcompat:1.5.1' + implementation 'androidx.core:core-splashscreen:1.0.0' implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 37f4a2ac..c975aafd 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -17,12 +17,12 @@ android:supportsRtl="true" android:usesCleartextTraffic="true" android:networkSecurityConfig="@xml/network_security_config" - android:theme="@style/AppTheme"> + android:theme="@style/AppTheme.SplashScreen"> diff --git a/app/src/main/kotlin/com/github/gotify/init/InitializationActivity.kt b/app/src/main/kotlin/com/github/gotify/init/InitializationActivity.kt index ae342d9c..ac886315 100644 --- a/app/src/main/kotlin/com/github/gotify/init/InitializationActivity.kt +++ b/app/src/main/kotlin/com/github/gotify/init/InitializationActivity.kt @@ -7,6 +7,7 @@ import android.os.Build import android.os.Bundle import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity +import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import androidx.preference.PreferenceManager import com.github.gotify.NotificationSupport import com.github.gotify.R @@ -30,6 +31,7 @@ import com.livinglifetechway.quickpermissionskotlin.util.QuickPermissionsRequest internal class InitializationActivity : AppCompatActivity() { private lateinit var settings: Settings + private var splashScreenActive = true override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -38,8 +40,6 @@ internal class InitializationActivity : AppCompatActivity() { .getString(getString(R.string.setting_key_theme), getString(R.string.theme_default))!! ThemeHelper.setTheme(this, theme) - setContentView(R.layout.splash) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationSupport.createChannels( this.getSystemService(NOTIFICATION_SERVICE) as NotificationManager @@ -49,6 +49,8 @@ internal class InitializationActivity : AppCompatActivity() { settings = Settings(this) Log.i("Entering ${javaClass.simpleName}") + installSplashScreen().setKeepOnScreenCondition { splashScreenActive } + if (settings.tokenExists()) { runWithNeededPermissions { tryAuthenticate() @@ -59,6 +61,7 @@ internal class InitializationActivity : AppCompatActivity() { } private fun showLogin() { + splashScreenActive = false startActivity(Intent(this, LoginActivity::class.java)) finish() } @@ -76,6 +79,8 @@ internal class InitializationActivity : AppCompatActivity() { } private fun failed(exception: ApiException) { + splashScreenActive = false + setContentView(R.layout.splash) when (exception.code) { 0 -> { dialog(getString(R.string.not_available, settings.url)) @@ -98,6 +103,7 @@ internal class InitializationActivity : AppCompatActivity() { .setMessage(message) .setPositiveButton(R.string.retry) { _, _ -> tryAuthenticate() } .setNegativeButton(R.string.logout) { _, _ -> showLogin() } + .setCancelable(false) .show() } @@ -106,6 +112,7 @@ internal class InitializationActivity : AppCompatActivity() { settings.setUser(user.name, user.isAdmin) requestVersion { + splashScreenActive = false startActivity(Intent(this, MessagesActivity::class.java)) finish() } diff --git a/app/src/main/res/drawable/gotify_splash.png b/app/src/main/res/drawable/gotify_splash.png new file mode 100644 index 00000000..d371ceb1 Binary files /dev/null and b/app/src/main/res/drawable/gotify_splash.png differ diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 775c7066..b8c79e19 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -15,6 +15,11 @@ false true + +