diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 252676369..8d0a4cc96 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -550,6 +550,12 @@ tools:node="remove" /> + + diff --git a/app/src/main/java/io/legato/kazusa/App.kt b/app/src/main/java/io/legato/kazusa/App.kt index dd453396d..a8a35f727 100644 --- a/app/src/main/java/io/legato/kazusa/App.kt +++ b/app/src/main/java/io/legato/kazusa/App.kt @@ -5,8 +5,6 @@ import android.app.Notification import android.app.NotificationChannel import android.app.NotificationManager import android.content.Context -import android.content.SharedPreferences -import android.content.pm.ActivityInfo import android.content.pm.ApplicationInfo import android.content.res.Configuration import android.os.Build @@ -17,7 +15,6 @@ import com.jeremyliao.liveeventbus.logger.DefaultLogger import com.script.rhino.ReadOnlyJavaObject import com.script.rhino.RhinoScriptEngine import com.script.rhino.RhinoWrapFactory -import io.legato.kazusa.base.AppContextWrapper import io.legato.kazusa.constant.AppConst.channelIdDownload import io.legato.kazusa.constant.AppConst.channelIdReadAloud import io.legato.kazusa.constant.AppConst.channelIdWeb @@ -40,7 +37,6 @@ import io.legato.kazusa.help.LifecycleHelp import io.legato.kazusa.help.RuleBigDataHelp import io.legato.kazusa.help.book.BookHelp import io.legato.kazusa.help.config.AppConfig -import io.legato.kazusa.help.config.ThemeConfig.applyDayNight import io.legato.kazusa.help.config.ThemeConfig.applyDayNightInit import io.legato.kazusa.help.coroutine.Coroutine import io.legato.kazusa.help.http.Cronet @@ -51,6 +47,7 @@ import io.legato.kazusa.help.source.SourceHelp import io.legato.kazusa.help.storage.Backup 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 @@ -70,6 +67,7 @@ class App : Application() { override fun onCreate() { super.onCreate() DynamicColors.applyToActivitiesIfAvailable(this) + FirebaseManager.initFromPreferences(this) CrashHandler(this) if (isDebuggable) { ThreadUtils.setThreadAssertsDisabledForTesting(true) diff --git a/app/src/main/java/io/legato/kazusa/constant/PreferKey.kt b/app/src/main/java/io/legato/kazusa/constant/PreferKey.kt index 9c3469f02..2fed36a38 100644 --- a/app/src/main/java/io/legato/kazusa/constant/PreferKey.kt +++ b/app/src/main/java/io/legato/kazusa/constant/PreferKey.kt @@ -169,6 +169,7 @@ object PreferKey { const val readAloudByMediaButton = "readAloudByMediaButton" const val showMangaUi = "showMangaUi" const val disableMangaScale = "disableMangaScale" + const val firebaseEnabled = "firebaseEnabled" const val cPrimary = "colorPrimary" const val cAccent = "colorAccent" diff --git a/app/src/main/java/io/legato/kazusa/help/config/AppConfig.kt b/app/src/main/java/io/legato/kazusa/help/config/AppConfig.kt index 37ce351a7..f27bb1072 100644 --- a/app/src/main/java/io/legato/kazusa/help/config/AppConfig.kt +++ b/app/src/main/java/io/legato/kazusa/help/config/AppConfig.kt @@ -668,6 +668,11 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener { } } + var firebaseEnabled: Boolean + get() = appCtx.getPrefBoolean(PreferKey.firebaseEnabled, false) + set(value) { + appCtx.putPrefBoolean(PreferKey.firebaseEnabled, value) + } //跳转到漫画界面不使用富文本模式 val showMangaUi: Boolean diff --git a/app/src/main/java/io/legato/kazusa/ui/config/OtherConfigFragment.kt b/app/src/main/java/io/legato/kazusa/ui/config/OtherConfigFragment.kt index e2c9eb95a..4180f508b 100644 --- a/app/src/main/java/io/legato/kazusa/ui/config/OtherConfigFragment.kt +++ b/app/src/main/java/io/legato/kazusa/ui/config/OtherConfigFragment.kt @@ -27,6 +27,7 @@ import io.legato.kazusa.receiver.SharedReceiverActivity import io.legato.kazusa.service.WebService import io.legato.kazusa.ui.file.HandleFileContract import io.legato.kazusa.ui.widget.number.NumberPickerDialog +import io.legato.kazusa.utils.FirebaseManager import io.legato.kazusa.utils.LogUtils import io.legato.kazusa.utils.getPrefBoolean import io.legato.kazusa.utils.postEvent @@ -218,6 +219,13 @@ class OtherConfigFragment : PreferenceFragment(), PreferKey.sourceEditMaxLine -> { upPreferenceSummary(key, AppConfig.sourceEditMaxLine.toString()) } + + PreferKey.firebaseEnabled -> { + sharedPreferences?.let { + FirebaseManager.setEnabled(requireContext(), it.getBoolean(key, true)) + } + } + } } diff --git a/app/src/main/java/io/legato/kazusa/utils/FirebaseManager.kt b/app/src/main/java/io/legato/kazusa/utils/FirebaseManager.kt new file mode 100644 index 000000000..5ead2b1b0 --- /dev/null +++ b/app/src/main/java/io/legato/kazusa/utils/FirebaseManager.kt @@ -0,0 +1,45 @@ +package io.legato.kazusa.utils + +import android.content.Context +import androidx.core.content.edit +import androidx.preference.PreferenceManager +import com.google.firebase.FirebaseApp +import com.google.firebase.analytics.FirebaseAnalytics + +object FirebaseManager { + + private const val PREF_KEY = "firebaseEnabled" + private var isEnabled = false + + fun initFromPreferences(context: Context) { + val prefs = PreferenceManager.getDefaultSharedPreferences(context) + val enabled = prefs.getBoolean(PREF_KEY, true) + applyState(context, enabled) + } + + fun setEnabled(context: Context, enabled: Boolean) { + val prefs = PreferenceManager.getDefaultSharedPreferences(context) + prefs.edit { putBoolean(PREF_KEY, enabled) } + applyState(context, enabled) + } + + private fun applyState(context: Context, enabled: Boolean) { + if (enabled) { + if (FirebaseApp.getApps(context).isEmpty()) { + FirebaseApp.initializeApp(context) + } + FirebaseAnalytics.getInstance(context).setAnalyticsCollectionEnabled(true) + } else { + try { + if (FirebaseApp.getApps(context).isNotEmpty()) { + FirebaseAnalytics.getInstance(context).setAnalyticsCollectionEnabled(false) + FirebaseApp.getInstance().delete() + } + } catch (_: Exception) { + } + } + isEnabled = enabled + } + + fun isFirebaseEnabled(): Boolean = isEnabled +} \ No newline at end of file diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 3f71a77af..a23d6b0d3 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -1236,5 +1236,6 @@ 降序 检查更新中... 没有内容哦 + 匿名统计 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6533ae1b3..a3bf1a110 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1239,5 +1239,7 @@ 降序 检查更新中... 没有内容哦 + 匿名统计 + 允许应用使用Google Firebase进行崩溃和性能统计 diff --git a/app/src/main/res/xml/pref_config_other.xml b/app/src/main/res/xml/pref_config_other.xml index 239458cc4..8463738be 100644 --- a/app/src/main/res/xml/pref_config_other.xml +++ b/app/src/main/res/xml/pref_config_other.xml @@ -66,6 +66,12 @@ app:iconSpaceReserved="false" app:layout="@layout/view_preference_category"> + +