Эх сурвалжийг харах

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

HapeLee 1 жил өмнө
parent
commit
d5fcd7a113

+ 11 - 17
app/src/main/AndroidManifest.xml

@@ -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,30 +116,24 @@
             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:name=".ui.main.MainActivity"
+            android:alwaysRetainTaskState="true"
+            android:enableOnBackInvokedCallback="true"
             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">
-        </activity>
         <activity
             android:name=".ui.welcome.WelcomeActivity"
             android:enableOnBackInvokedCallback="true"

+ 18 - 0
app/src/main/java/io/legato/kazusa/App.kt

@@ -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)

+ 1 - 1
app/src/main/java/io/legato/kazusa/help/LauncherIconHelp.kt

@@ -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?) {

+ 25 - 0
app/src/main/java/io/legato/kazusa/ui/main/MainActivity.kt

@@ -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

+ 0 - 50
app/src/main/java/io/legato/kazusa/ui/welcome/SplashActivity.kt

@@ -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()
-        )
-    }
-}

+ 0 - 8
app/src/main/res/layout/activity_splash.xml

@@ -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>