refactor: Use androidx.core:core-splashscreen library (#766)
Previous code depended on, but did not initialise, the androidx splashscreen library. Fix that, using the library on API < 31, or the platform implementation otherwise. `SplashActivity` is no longer needed, launching goes straight in to `MainActivity`. Version 1.2.0-alpha01 is needed to fix some theme corruption bugs in earlier versions of the library.
This commit is contained in:
parent
2f69b20209
commit
4551313bd2
|
@ -25,22 +25,6 @@
|
||||||
android:networkSecurityConfig="@xml/network_security_config"
|
android:networkSecurityConfig="@xml/network_security_config"
|
||||||
android:enableOnBackInvokedCallback="true">
|
android:enableOnBackInvokedCallback="true">
|
||||||
|
|
||||||
<activity
|
|
||||||
android:name=".SplashActivity"
|
|
||||||
android:theme="@style/SplashTheme"
|
|
||||||
android:exported="true">
|
|
||||||
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
|
||||||
</intent-filter>
|
|
||||||
|
|
||||||
<meta-data
|
|
||||||
android:name="android.app.shortcuts"
|
|
||||||
android:resource="@xml/share_shortcuts" />
|
|
||||||
|
|
||||||
</activity>
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".feature.login.LoginActivity"
|
android:name=".feature.login.LoginActivity"
|
||||||
android:windowSoftInputMode="adjustResize"
|
android:windowSoftInputMode="adjustResize"
|
||||||
|
@ -56,11 +40,20 @@
|
||||||
android:scheme="@string/oauth_scheme" />
|
android:scheme="@string/oauth_scheme" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<activity android:name=".feature.login.LoginWebViewActivity" />
|
<activity android:name=".feature.login.LoginWebViewActivity" />
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name=".MainActivity"
|
||||||
android:configChanges="orientation|screenSize|keyboardHidden|screenLayout|smallestScreenSize"
|
android:configChanges="orientation|screenSize|keyboardHidden|screenLayout|smallestScreenSize"
|
||||||
android:exported="true">
|
android:exported="true"
|
||||||
|
android:theme="@style/SplashTheme">
|
||||||
|
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
||||||
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
|
</intent-filter>
|
||||||
|
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.SEND" />
|
<action android:name="android.intent.action.SEND" />
|
||||||
|
@ -109,6 +102,9 @@
|
||||||
android:name="android.service.chooser.chooser_target_service"
|
android:name="android.service.chooser.chooser_target_service"
|
||||||
android:value="androidx.sharetarget.ChooserTargetServiceCompat" />
|
android:value="androidx.sharetarget.ChooserTargetServiceCompat" />
|
||||||
|
|
||||||
|
<meta-data
|
||||||
|
android:name="android.app.shortcuts"
|
||||||
|
android:resource="@xml/share_shortcuts" />
|
||||||
</activity>
|
</activity>
|
||||||
<activity
|
<activity
|
||||||
android:name=".components.compose.ComposeActivity"
|
android:name=".components.compose.ComposeActivity"
|
||||||
|
|
|
@ -48,6 +48,7 @@ import androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||||
import androidx.core.app.ActivityCompat
|
import androidx.core.app.ActivityCompat
|
||||||
import androidx.core.content.pm.ShortcutManagerCompat
|
import androidx.core.content.pm.ShortcutManagerCompat
|
||||||
import androidx.core.content.res.ResourcesCompat
|
import androidx.core.content.res.ResourcesCompat
|
||||||
|
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
||||||
import androidx.core.view.GravityCompat
|
import androidx.core.view.GravityCompat
|
||||||
import androidx.core.view.MenuProvider
|
import androidx.core.view.MenuProvider
|
||||||
import androidx.core.view.forEach
|
import androidx.core.view.forEach
|
||||||
|
@ -229,10 +230,13 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, MenuProvider {
|
||||||
|
|
||||||
@SuppressLint("RestrictedApi")
|
@SuppressLint("RestrictedApi")
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
|
||||||
|
installSplashScreen()
|
||||||
|
}
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
val activeAccount = accountManager.activeAccount
|
// will be redirected to LoginActivity by BaseActivity
|
||||||
?: return // will be redirected to LoginActivity by BaseActivity
|
val activeAccount = accountManager.activeAccount ?: return
|
||||||
|
|
||||||
var showNotificationTab = false
|
var showNotificationTab = false
|
||||||
|
|
||||||
|
|
|
@ -1,52 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2023 Pachli Association
|
|
||||||
*
|
|
||||||
* This file is a part of Pachli.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
|
||||||
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* Pachli is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
|
|
||||||
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
|
||||||
* Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with Pachli; if not,
|
|
||||||
* see <http://www.gnu.org/licenses>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package app.pachli
|
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import android.os.Bundle
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
|
||||||
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
|
||||||
import app.pachli.core.accounts.AccountManager
|
|
||||||
import app.pachli.core.navigation.LoginActivityIntent
|
|
||||||
import app.pachli.core.navigation.LoginActivityIntent.LoginMode
|
|
||||||
import app.pachli.core.navigation.MainActivityIntent
|
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
|
||||||
import javax.inject.Inject
|
|
||||||
|
|
||||||
@SuppressLint("CustomSplashScreen")
|
|
||||||
@AndroidEntryPoint
|
|
||||||
class SplashActivity : AppCompatActivity() {
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
lateinit var accountManager: AccountManager
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
installSplashScreen()
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
|
|
||||||
/** Determine whether the user is currently logged in, and if so go ahead and load the
|
|
||||||
* timeline. Otherwise, start the activity_login screen. */
|
|
||||||
val intent = if (accountManager.activeAccount != null) {
|
|
||||||
MainActivityIntent(this)
|
|
||||||
} else {
|
|
||||||
LoginActivityIntent(this, LoginMode.DEFAULT)
|
|
||||||
}
|
|
||||||
startActivity(intent)
|
|
||||||
finish()
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -56,6 +56,7 @@ import dagger.hilt.android.AndroidEntryPoint
|
||||||
import dagger.hilt.android.EntryPointAccessors.fromApplication
|
import dagger.hilt.android.EntryPointAccessors.fromApplication
|
||||||
import dagger.hilt.components.SingletonComponent
|
import dagger.hilt.components.SingletonComponent
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
import kotlin.properties.Delegates
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
|
@ -68,13 +69,18 @@ abstract class BaseActivity : AppCompatActivity(), MenuProvider {
|
||||||
|
|
||||||
private var requesters: HashMap<Int, PermissionRequester> = HashMap()
|
private var requesters: HashMap<Int, PermissionRequester> = HashMap()
|
||||||
|
|
||||||
|
/** The most recent theme ID set with [setTheme]. */
|
||||||
|
@get:StyleRes
|
||||||
|
private var activeThemeId by Delegates.notNull<Int>()
|
||||||
|
|
||||||
@EntryPoint
|
@EntryPoint
|
||||||
@InstallIn(SingletonComponent::class)
|
@InstallIn(SingletonComponent::class)
|
||||||
interface SharedPreferencesRepositoryEntryPoint {
|
interface SharedPreferencesRepositoryEntryPoint {
|
||||||
fun sharedPreferencesRepository(): SharedPreferencesRepository
|
fun sharedPreferencesRepository(): SharedPreferencesRepository
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setTheme(themeId: Int) {
|
override fun setTheme(@StyleRes themeId: Int) {
|
||||||
|
activeThemeId = themeId
|
||||||
super.setTheme(themeId)
|
super.setTheme(themeId)
|
||||||
if (BuildConfig.DEBUG) {
|
if (BuildConfig.DEBUG) {
|
||||||
val name = resources.getResourceEntryName(themeId)
|
val name = resources.getResourceEntryName(themeId)
|
||||||
|
@ -97,6 +103,8 @@ abstract class BaseActivity : AppCompatActivity(), MenuProvider {
|
||||||
Timber.d("activeTheme: %s", theme)
|
Timber.d("activeTheme: %s", theme)
|
||||||
if (theme == AppTheme.BLACK) {
|
if (theme == AppTheme.BLACK) {
|
||||||
setTheme(DR.style.Theme_Pachli_Black)
|
setTheme(DR.style.Theme_Pachli_Black)
|
||||||
|
} else if (activeThemeId == DR.style.SplashTheme) {
|
||||||
|
setTheme(DR.style.Theme_Pachli)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the task description, the theme would turn it blue
|
// Set the task description, the theme would turn it blue
|
||||||
|
|
|
@ -58,7 +58,6 @@
|
||||||
|
|
||||||
<style name="SplashTheme" parent="Theme.SplashScreen">
|
<style name="SplashTheme" parent="Theme.SplashScreen">
|
||||||
<item name="windowSplashScreenAnimatedIcon">@drawable/ic_splash</item>
|
<item name="windowSplashScreenAnimatedIcon">@drawable/ic_splash</item>
|
||||||
<item name="postSplashScreenTheme">@style/Theme.Pachli</item>
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="Theme.Pachli" parent="Base.Theme.Pachli">
|
<style name="Theme.Pachli" parent="Base.Theme.Pachli">
|
||||||
|
|
|
@ -18,7 +18,7 @@ androidx-paging = "3.3.0"
|
||||||
androidx-preference = "1.2.1"
|
androidx-preference = "1.2.1"
|
||||||
androidx-recyclerview = "1.3.2"
|
androidx-recyclerview = "1.3.2"
|
||||||
androidx-sharetarget = "1.2.0"
|
androidx-sharetarget = "1.2.0"
|
||||||
androidx-splashscreen = "1.0.1"
|
androidx-splashscreen = "1.2.0-alpha01"
|
||||||
androidx-startup = "1.1.1"
|
androidx-startup = "1.1.1"
|
||||||
androidx-swiperefresh-layout = "1.1.0"
|
androidx-swiperefresh-layout = "1.1.0"
|
||||||
androidx-testing = "2.2.0"
|
androidx-testing = "2.2.0"
|
||||||
|
|
Loading…
Reference in New Issue