修复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:exported="true"
android:icon="@mipmap/launcher0"
android:targetActivity=".ui.welcome.SplashActivity">
android:targetActivity=".ui.main.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
@@ -51,7 +51,7 @@
android:enabled="false"
android:exported="true"
android:icon="@mipmap/launcher1"
android:targetActivity=".ui.welcome.SplashActivity">
android:targetActivity=".ui.main.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@@ -64,7 +64,7 @@
android:enabled="false"
android:exported="true"
android:icon="@mipmap/launcher2"
android:targetActivity=".ui.welcome.SplashActivity">
android:targetActivity=".ui.main.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@@ -77,7 +77,7 @@
android:enabled="false"
android:exported="true"
android:icon="@mipmap/launcher3"
android:targetActivity=".ui.welcome.SplashActivity">
android:targetActivity=".ui.main.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@@ -90,7 +90,7 @@
android:enabled="false"
android:exported="true"
android:icon="@mipmap/launcher4"
android:targetActivity=".ui.welcome.SplashActivity">
android:targetActivity=".ui.main.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@@ -103,7 +103,7 @@
android:enabled="false"
android:exported="true"
android:icon="@mipmap/launcher5"
android:targetActivity=".ui.welcome.SplashActivity">
android:targetActivity=".ui.main.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@@ -116,29 +116,23 @@
android:enabled="false"
android:exported="true"
android:icon="@mipmap/launcher6"
android:targetActivity=".ui.welcome.SplashActivity">
android:targetActivity=".ui.main.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</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
android:name=".ui.main.MainActivity"
android:alwaysRetainTaskState="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
android:name=".ui.welcome.WelcomeActivity"
+18
View File
@@ -9,6 +9,8 @@ import android.content.pm.ApplicationInfo
import android.content.res.Configuration
import android.os.Build
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.logger.DefaultLogger
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.source.SourceHelp
import io.legato.kazusa.help.storage.Backup
import io.legato.kazusa.lib.theme.primaryColor
import io.legato.kazusa.model.BookCover
import io.legato.kazusa.utils.ChineseUtils
import io.legato.kazusa.utils.FirebaseManager
import io.legato.kazusa.utils.LogUtils
import io.legato.kazusa.utils.defaultSharedPreferences
import io.legato.kazusa.utils.getPrefBoolean
import io.legato.kazusa.utils.getPrefString
import io.legato.kazusa.utils.isDebuggable
import kotlinx.coroutines.launch
import org.chromium.base.ThreadUtils
@@ -64,6 +68,20 @@ class App : Application() {
private lateinit var oldConfig: Configuration
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()
FirebaseManager.init(this)
CrashHandler(this)
@@ -25,7 +25,7 @@ object LauncherIconHelp {
// 主Activity的ComponentName
private val mainActivity = ComponentName(
appCtx.packageName,
"${appCtx.packageName}.ui.welcome.SplashActivity"
"${appCtx.packageName}.ui.main.MainActivity"
)
fun changeIcon(icon: String?) {
@@ -2,6 +2,7 @@
package io.legato.kazusa.ui.main
import android.annotation.SuppressLint
import android.content.res.Configuration
import android.os.Bundle
import android.text.format.DateUtils
@@ -12,6 +13,7 @@ import android.widget.FrameLayout
import android.widget.ImageView
import androidx.activity.addCallback
import androidx.activity.viewModels
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import androidx.core.view.get
import androidx.core.view.postDelayed
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.service.BaseReadAloudService
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.main.bookshelf.BaseBookshelfFragment
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.my.MyFragment
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.utils.getPrefBoolean
import io.legato.kazusa.utils.gone
import io.legato.kazusa.utils.hideSoftInput
import io.legato.kazusa.utils.observeEvent
@@ -103,8 +108,12 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
}
override fun onCreate(savedInstanceState: Bundle?) {
installSplashScreen()
super.onCreate(savedInstanceState)
if (checkStartupRoute()) return
setExitSharedElementCallback(MaterialContainerTransformSharedElementCallback())
if (savedInstanceState != null) {
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 {
viewPagerMain.offscreenPageLimit = 3
viewPagerMain.adapter = adapter
@@ -343,6 +367,7 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
}
@SuppressLint("NotifyDataSetChanged")
private fun upBottomMenu() {
val navView = getNavigationBarView()
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>