修复HyperOS设备上的启动闪屏问题 #78

This commit is contained in:
HapeLee
2025-10-10 19:18:40 +08:00
parent 1b819050fc
commit d5fcd7a113
6 changed files with 56 additions and 77 deletions
+12 -18
View File
@@ -39,7 +39,7 @@
android:enabled="false" android:enabled="false"
android:exported="true" android:exported="true"
android:icon="@mipmap/launcher0" android:icon="@mipmap/launcher0"
android:targetActivity=".ui.welcome.SplashActivity"> android:targetActivity=".ui.main.MainActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
@@ -51,7 +51,7 @@
android:enabled="false" android:enabled="false"
android:exported="true" android:exported="true"
android:icon="@mipmap/launcher1" android:icon="@mipmap/launcher1"
android:targetActivity=".ui.welcome.SplashActivity"> android:targetActivity=".ui.main.MainActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
@@ -64,7 +64,7 @@
android:enabled="false" android:enabled="false"
android:exported="true" android:exported="true"
android:icon="@mipmap/launcher2" android:icon="@mipmap/launcher2"
android:targetActivity=".ui.welcome.SplashActivity"> android:targetActivity=".ui.main.MainActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
@@ -77,7 +77,7 @@
android:enabled="false" android:enabled="false"
android:exported="true" android:exported="true"
android:icon="@mipmap/launcher3" android:icon="@mipmap/launcher3"
android:targetActivity=".ui.welcome.SplashActivity"> android:targetActivity=".ui.main.MainActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
@@ -90,7 +90,7 @@
android:enabled="false" android:enabled="false"
android:exported="true" android:exported="true"
android:icon="@mipmap/launcher4" android:icon="@mipmap/launcher4"
android:targetActivity=".ui.welcome.SplashActivity"> android:targetActivity=".ui.main.MainActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
@@ -103,7 +103,7 @@
android:enabled="false" android:enabled="false"
android:exported="true" android:exported="true"
android:icon="@mipmap/launcher5" android:icon="@mipmap/launcher5"
android:targetActivity=".ui.welcome.SplashActivity"> android:targetActivity=".ui.main.MainActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
@@ -116,29 +116,23 @@
android:enabled="false" android:enabled="false"
android:exported="true" android:exported="true"
android:icon="@mipmap/launcher6" android:icon="@mipmap/launcher6"
android:targetActivity=".ui.welcome.SplashActivity"> android:targetActivity=".ui.main.MainActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity-alias> </activity-alias>
<activity
android:name=".ui.welcome.SplashActivity"
android:launchMode="singleTop"
android:theme="@style/Theme.App.Starting"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 主界面 --> <!-- 主界面 -->
<activity <activity
android:name=".ui.main.MainActivity" android:name=".ui.main.MainActivity"
android:alwaysRetainTaskState="true" android:alwaysRetainTaskState="true"
android:enableOnBackInvokedCallback="true" android:enableOnBackInvokedCallback="true"
android:exported="false"> android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity> </activity>
<activity <activity
android:name=".ui.welcome.WelcomeActivity" android:name=".ui.welcome.WelcomeActivity"
+18
View File
@@ -9,6 +9,8 @@ import android.content.pm.ApplicationInfo
import android.content.res.Configuration import android.content.res.Configuration
import android.os.Build import android.os.Build
import com.github.liuyueyi.quick.transfer.constants.TransType import com.github.liuyueyi.quick.transfer.constants.TransType
import com.google.android.material.color.DynamicColors
import com.google.android.material.color.DynamicColorsOptions
import com.jeremyliao.liveeventbus.LiveEventBus import com.jeremyliao.liveeventbus.LiveEventBus
import com.jeremyliao.liveeventbus.logger.DefaultLogger import com.jeremyliao.liveeventbus.logger.DefaultLogger
import com.script.rhino.ReadOnlyJavaObject import com.script.rhino.ReadOnlyJavaObject
@@ -44,12 +46,14 @@ import io.legato.kazusa.help.http.okHttpClient
import io.legato.kazusa.help.rhino.NativeBaseSource import io.legato.kazusa.help.rhino.NativeBaseSource
import io.legato.kazusa.help.source.SourceHelp import io.legato.kazusa.help.source.SourceHelp
import io.legato.kazusa.help.storage.Backup import io.legato.kazusa.help.storage.Backup
import io.legato.kazusa.lib.theme.primaryColor
import io.legato.kazusa.model.BookCover import io.legato.kazusa.model.BookCover
import io.legato.kazusa.utils.ChineseUtils import io.legato.kazusa.utils.ChineseUtils
import io.legato.kazusa.utils.FirebaseManager import io.legato.kazusa.utils.FirebaseManager
import io.legato.kazusa.utils.LogUtils import io.legato.kazusa.utils.LogUtils
import io.legato.kazusa.utils.defaultSharedPreferences import io.legato.kazusa.utils.defaultSharedPreferences
import io.legato.kazusa.utils.getPrefBoolean import io.legato.kazusa.utils.getPrefBoolean
import io.legato.kazusa.utils.getPrefString
import io.legato.kazusa.utils.isDebuggable import io.legato.kazusa.utils.isDebuggable
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.chromium.base.ThreadUtils import org.chromium.base.ThreadUtils
@@ -64,6 +68,20 @@ class App : Application() {
private lateinit var oldConfig: Configuration private lateinit var oldConfig: Configuration
override fun onCreate() { override fun onCreate() {
when (getPrefString("app_theme", "0")) {
"11" -> {
if (AppConfig.customMode == "accent")
setTheme(R.style.ThemeOverlay_WhiteBackground)
DynamicColors.applyToActivitiesIfAvailable(this, DynamicColorsOptions.Builder()
.setContentBasedSource(this.primaryColor)
.build())
}
}
if (AppConfig.pureBlack)
setTheme(R.style.ThemeOverlay_PureBlack)
super.onCreate() super.onCreate()
FirebaseManager.init(this) FirebaseManager.init(this)
CrashHandler(this) CrashHandler(this)
@@ -25,7 +25,7 @@ object LauncherIconHelp {
// 主Activity的ComponentName // 主Activity的ComponentName
private val mainActivity = ComponentName( private val mainActivity = ComponentName(
appCtx.packageName, appCtx.packageName,
"${appCtx.packageName}.ui.welcome.SplashActivity" "${appCtx.packageName}.ui.main.MainActivity"
) )
fun changeIcon(icon: String?) { fun changeIcon(icon: String?) {
@@ -2,6 +2,7 @@
package io.legato.kazusa.ui.main package io.legato.kazusa.ui.main
import android.annotation.SuppressLint
import android.content.res.Configuration import android.content.res.Configuration
import android.os.Bundle import android.os.Bundle
import android.text.format.DateUtils import android.text.format.DateUtils
@@ -12,6 +13,7 @@ import android.widget.FrameLayout
import android.widget.ImageView import android.widget.ImageView
import androidx.activity.addCallback import androidx.activity.addCallback
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import androidx.core.view.get import androidx.core.view.get
import androidx.core.view.postDelayed import androidx.core.view.postDelayed
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
@@ -40,6 +42,7 @@ import io.legato.kazusa.help.storage.Backup
import io.legato.kazusa.lib.dialogs.alert import io.legato.kazusa.lib.dialogs.alert
import io.legato.kazusa.service.BaseReadAloudService import io.legato.kazusa.service.BaseReadAloudService
import io.legato.kazusa.ui.about.CrashLogsDialog import io.legato.kazusa.ui.about.CrashLogsDialog
import io.legato.kazusa.ui.book.read.ReadBookActivity
import io.legato.kazusa.ui.book.search.SearchActivity import io.legato.kazusa.ui.book.search.SearchActivity
import io.legato.kazusa.ui.main.bookshelf.BaseBookshelfFragment import io.legato.kazusa.ui.main.bookshelf.BaseBookshelfFragment
import io.legato.kazusa.ui.main.bookshelf.books.BookshelfFragment1 import io.legato.kazusa.ui.main.bookshelf.books.BookshelfFragment1
@@ -48,7 +51,9 @@ import io.legato.kazusa.ui.main.bookshelf.books.BookshelfFragment3
import io.legato.kazusa.ui.main.explore.ExploreFragment import io.legato.kazusa.ui.main.explore.ExploreFragment
import io.legato.kazusa.ui.main.my.MyFragment import io.legato.kazusa.ui.main.my.MyFragment
import io.legato.kazusa.ui.main.rss.RssFragment import io.legato.kazusa.ui.main.rss.RssFragment
import io.legato.kazusa.ui.welcome.WelcomeActivity
import io.legato.kazusa.ui.widget.dialog.TextDialog import io.legato.kazusa.ui.widget.dialog.TextDialog
import io.legato.kazusa.utils.getPrefBoolean
import io.legato.kazusa.utils.gone import io.legato.kazusa.utils.gone
import io.legato.kazusa.utils.hideSoftInput import io.legato.kazusa.utils.hideSoftInput
import io.legato.kazusa.utils.observeEvent import io.legato.kazusa.utils.observeEvent
@@ -103,8 +108,12 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
} }
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
installSplashScreen()
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
if (checkStartupRoute()) return
setExitSharedElementCallback(MaterialContainerTransformSharedElementCallback()) setExitSharedElementCallback(MaterialContainerTransformSharedElementCallback())
if (savedInstanceState != null) { if (savedInstanceState != null) {
pagePosition = savedInstanceState.getInt("currentPagePosition", 0) pagePosition = savedInstanceState.getInt("currentPagePosition", 0)
} }
@@ -206,6 +215,21 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
} }
} }
private fun checkStartupRoute(): Boolean {
return when {
LocalConfig.isFirstOpenApp -> {
startActivity<WelcomeActivity>()
finish()
true
}
getPrefBoolean(PreferKey.defaultToRead) -> {
startActivity<ReadBookActivity>()
false
}
else -> false
}
}
private fun initView() = binding.run { private fun initView() = binding.run {
viewPagerMain.offscreenPageLimit = 3 viewPagerMain.offscreenPageLimit = 3
viewPagerMain.adapter = adapter viewPagerMain.adapter = adapter
@@ -343,6 +367,7 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
} }
@SuppressLint("NotifyDataSetChanged")
private fun upBottomMenu() { private fun upBottomMenu() {
val navView = getNavigationBarView() val navView = getNavigationBarView()
val menu = navView.menu val menu = navView.menu
@@ -1,50 +0,0 @@
package io.legato.kazusa.ui.welcome
import android.annotation.SuppressLint
import android.content.Intent
import android.os.Bundle
import androidx.core.app.ActivityOptionsCompat
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import io.legato.kazusa.base.BaseActivity
import io.legato.kazusa.constant.PreferKey
import io.legato.kazusa.databinding.ActivitySplashBinding
import io.legato.kazusa.help.config.LocalConfig
import io.legato.kazusa.ui.book.read.ReadBookActivity
import io.legato.kazusa.ui.main.MainActivity
import io.legato.kazusa.utils.getPrefBoolean
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
@SuppressLint("CustomSplashScreen")
class SplashActivity : BaseActivity<ActivitySplashBinding>() {
override val binding by viewBinding(ActivitySplashBinding::inflate)
override fun onCreate(savedInstanceState: Bundle?) {
val splashScreen = installSplashScreen()
super.onCreate(savedInstanceState)
splashScreen.setKeepOnScreenCondition { true }
routeNext()
}
private fun routeNext() {
when {
LocalConfig.isFirstOpenApp -> {
go(WelcomeActivity::class.java)
}
getPrefBoolean(PreferKey.defaultToRead) -> {
go(MainActivity::class.java)
go(ReadBookActivity::class.java)
}
else -> {
go(MainActivity::class.java)
}
}
finish()
}
private fun go(target: Class<*>) {
startActivity(
Intent(this, target),
ActivityOptionsCompat.makeSceneTransitionAnimation(this).toBundle()
)
}
}
@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/colorSurface">
</androidx.constraintlayout.widget.ConstraintLayout>