TiebaLite/app/src/main/java/com/huanchengfly/tieba/post/BaseApplication.kt

586 lines
30 KiB
Kotlin
Raw Normal View History

2020-08-15 22:05:07 +08:00
package com.huanchengfly.tieba.post
import android.app.Activity
2021-08-19 16:57:31 +08:00
import android.app.ActivityManager
2020-08-15 22:05:07 +08:00
import android.app.Application
2021-08-19 16:57:31 +08:00
import android.app.Dialog
2020-08-15 22:05:07 +08:00
import android.content.ClipboardManager
import android.content.Context
import android.content.Intent
import android.content.res.ColorStateList
import android.content.res.Configuration
2021-08-19 16:57:31 +08:00
import android.content.res.Resources
2020-08-15 22:05:07 +08:00
import android.graphics.Color
2020-08-15 22:26:17 +08:00
import android.graphics.drawable.Drawable
2020-08-15 22:05:07 +08:00
import android.net.Uri
2021-08-19 16:57:31 +08:00
import android.os.Build
2020-08-15 22:05:07 +08:00
import android.os.Bundle
2021-08-19 16:57:31 +08:00
import android.os.Process
2020-08-15 22:05:07 +08:00
import android.view.View
2021-08-19 16:57:31 +08:00
import android.webkit.WebView
2020-08-15 22:05:07 +08:00
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.TextView
2021-08-19 16:57:31 +08:00
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AlertDialog
2020-08-15 22:05:07 +08:00
import androidx.appcompat.app.AppCompatDelegate
2021-08-19 16:57:31 +08:00
import com.huanchengfly.tieba.post.activities.BaseActivity
2020-08-15 22:05:07 +08:00
import com.huanchengfly.tieba.post.api.interfaces.CommonCallback
2021-08-19 16:57:31 +08:00
import com.huanchengfly.tieba.post.components.dialogs.LoadingDialog
import com.huanchengfly.tieba.post.plugins.PluginManager
import com.huanchengfly.tieba.post.plugins.interfaces.IApp
2020-08-15 22:05:07 +08:00
import com.huanchengfly.tieba.post.ui.theme.interfaces.ThemeSwitcher
import com.huanchengfly.tieba.post.ui.theme.utils.ThemeUtils
import com.huanchengfly.tieba.post.utils.*
import com.huanchengfly.tieba.post.utils.QuickPreviewUtil.PreviewInfo
import com.huanchengfly.tieba.post.utils.QuickPreviewUtil.getForumName
import com.huanchengfly.tieba.post.utils.QuickPreviewUtil.getPreviewInfo
import com.huanchengfly.tieba.post.utils.QuickPreviewUtil.isForumUrl
import com.huanchengfly.tieba.post.utils.QuickPreviewUtil.isThreadUrl
2021-12-03 20:36:11 +08:00
import com.microsoft.appcenter.AppCenter
import com.microsoft.appcenter.analytics.Analytics
import com.microsoft.appcenter.crashes.Crashes
import com.microsoft.appcenter.distribute.Distribute
import com.microsoft.appcenter.distribute.DistributeListener
import com.microsoft.appcenter.distribute.ReleaseDetails
import com.microsoft.appcenter.distribute.UpdateAction
2020-08-15 22:05:07 +08:00
import org.intellij.lang.annotations.RegExp
import org.litepal.LitePal
import java.util.*
import java.util.regex.Pattern
2021-08-19 16:57:31 +08:00
class BaseApplication : Application(), IApp {
2020-08-15 22:05:07 +08:00
private val mActivityList: MutableList<Activity> = mutableListOf()
2021-08-19 16:57:31 +08:00
@RequiresApi(api = 28)
fun setWebViewPath(context: Context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
val processName = getProcessName(context)
if (applicationContext.packageName != processName) { //判断不等于默认进程名称
WebView.setDataDirectorySuffix(processName!!)
}
}
}
private fun getProcessName(context: Context): String? {
val manager = context.getSystemService(ACTIVITY_SERVICE) as ActivityManager
for (processInfo in manager.runningAppProcesses) {
if (processInfo.pid == Process.myPid()) {
return processInfo.processName
}
}
return null
}
2020-08-15 22:05:07 +08:00
override fun onCreate() {
instance = this
super.onCreate()
2021-08-19 16:57:31 +08:00
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
setWebViewPath(this)
}
2021-12-03 20:36:11 +08:00
Distribute.setListener(MyDistributeListener())
AppCenter.start(
this, "b56debcc-264b-4368-a2cd-8c20213f6433",
Analytics::class.java, Crashes::class.java, Distribute::class.java
)
2020-08-15 22:05:07 +08:00
ThemeUtils.init(ThemeDelegate)
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
LitePal.initialize(this)
registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {
2021-08-15 18:30:51 +08:00
private var clipBoardHash: Int = 0
2020-08-15 22:05:07 +08:00
private fun updateClipBoardHashCode() {
clipBoardHash = getClipBoardHash()
}
2021-08-15 18:30:51 +08:00
private fun getClipBoardHash(): Int {
2020-08-15 22:05:07 +08:00
val cm = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val data = cm.primaryClip
if (data != null) {
val item = data.getItemAt(0)
2021-08-15 18:30:51 +08:00
return item.hashCode()
2020-08-15 22:05:07 +08:00
}
2021-08-15 18:30:51 +08:00
return 0
2020-08-15 22:05:07 +08:00
}
private val clipBoard: String
get() {
val cm = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val data = cm.primaryClip ?: return ""
val item = data.getItemAt(0)
return if (item == null || item.text == null) {
""
} else item.text.toString()
}
private fun isTiebaDomain(host: String?): Boolean {
return host != null && (host.equals("wapp.baidu.com", ignoreCase = true) ||
host.equals("tieba.baidu.com", ignoreCase = true) ||
host.equals("tiebac.baidu.com", ignoreCase = true))
}
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {}
override fun onActivityStarted(activity: Activity) {}
private fun updatePreviewView(context: Context, previewView: View, data: PreviewInfo?) {
if (data == null) {
previewView.visibility = View.GONE
return
}
previewView.visibility = View.VISIBLE
val iconView = Objects.requireNonNull(previewView).findViewById<ImageView>(R.id.icon)
val title = previewView.findViewById<TextView>(R.id.title)
val subtitle = previewView.findViewById<TextView>(R.id.subtitle)
title.text = data.title
subtitle.text = data.subtitle
if (data.icon != null) when (data.icon!!.type) {
QuickPreviewUtil.Icon.TYPE_DRAWABLE_RES -> {
iconView.setImageResource(data.icon!!.res)
val iconLayoutParams = iconView.layoutParams as FrameLayout.LayoutParams
run {
2020-08-22 22:22:06 +08:00
iconLayoutParams.height = 24f.pxToDp()
2020-08-15 22:05:07 +08:00
iconLayoutParams.width = iconLayoutParams.height
}
iconView.layoutParams = iconLayoutParams
iconView.imageTintList = ColorStateList.valueOf(ThemeUtils.getColorByAttr(context, R.attr.colorAccent))
}
QuickPreviewUtil.Icon.TYPE_URL -> {
ImageUtil.load(iconView, ImageUtil.LOAD_TYPE_AVATAR, data.icon!!.url)
val avatarLayoutParams = iconView.layoutParams as FrameLayout.LayoutParams
run {
2020-08-22 22:22:06 +08:00
avatarLayoutParams.height = 40f.pxToDp()
2020-08-15 22:05:07 +08:00
avatarLayoutParams.width = avatarLayoutParams.height
}
iconView.layoutParams = avatarLayoutParams
iconView.imageTintList = null
}
}
}
override fun onActivityResumed(activity: Activity) {
2021-08-15 18:30:51 +08:00
if (clipBoardHash != getClipBoardHash()) {
@RegExp val regex =
"((http|https)://)(([a-zA-Z0-9._-]+\\.[a-zA-Z]{2,6})|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(:[0-9]{1,4})*(/[a-zA-Z0-9&%_./-~-]*)?"
2020-08-15 22:05:07 +08:00
val pattern = Pattern.compile(regex)
val matcher = pattern.matcher(clipBoard)
if (matcher.find()) {
val url = matcher.group()
val uri = Uri.parse(url)
if (isTiebaDomain(uri.host)) {
val previewView = Util.inflate(activity, R.layout.preview_url)
if (isForumUrl(uri)) {
2021-08-15 18:30:51 +08:00
updatePreviewView(
activity, previewView, PreviewInfo()
2020-08-15 22:05:07 +08:00
.setIconRes(R.drawable.ic_round_forum)
.setTitle(activity.getString(R.string.title_forum, getForumName(uri)))
2020-08-28 18:33:09 +08:00
.setSubtitle(activity.getString(R.string.text_loading))
2020-08-15 22:05:07 +08:00
.setUrl(url))
} else if (isThreadUrl(uri)) {
updatePreviewView(activity, previewView, PreviewInfo()
.setIconRes(R.drawable.ic_round_mode_comment)
.setTitle(url)
2020-08-28 18:33:09 +08:00
.setSubtitle(activity.getString(R.string.text_loading))
2020-08-15 22:05:07 +08:00
.setUrl(url))
}
getPreviewInfo(activity, url, object : CommonCallback<PreviewInfo> {
override fun onSuccess(data: PreviewInfo) {
updatePreviewView(activity, previewView, data)
}
override fun onFailure(code: Int, error: String) {
updatePreviewView(activity, previewView, PreviewInfo()
.setUrl(url)
.setTitle(url)
.setSubtitle(activity.getString(R.string.subtitle_link))
.setIconRes(R.drawable.ic_link))
}
})
DialogUtil.build(activity)
.setTitle(R.string.title_dialog_clip_board_tieba_url)
.setPositiveButton(R.string.button_yes) { _, _ ->
startActivity(Intent("com.huanchengfly.tieba.post.ACTION_JUMP", uri)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.addCategory(Intent.CATEGORY_DEFAULT))
}
.setView(previewView)
.setNegativeButton(R.string.button_no, null)
.show()
}
}
}
updateClipBoardHashCode()
}
override fun onActivityPaused(activity: Activity) {}
override fun onActivityStopped(activity: Activity) {}
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
override fun onActivityDestroyed(activity: Activity) {}
})
2021-08-15 19:22:28 +08:00
if (BuildConfig.DEBUG) CrashUtil.CrashHandler.getInstance().init(this)
2021-08-15 18:30:51 +08:00
PluginManager.init(this)
2020-08-15 22:05:07 +08:00
}
2021-08-19 16:57:31 +08:00
//禁止app字体大小跟随系统字体大小调节
override fun getResources(): Resources {
val fontScale = appPreferences.fontScale
val resources = super.getResources()
if (resources.configuration.fontScale != fontScale) {
val configuration = resources.configuration
configuration.fontScale = fontScale
resources.updateConfiguration(configuration, resources.displayMetrics)
}
return resources
}
2020-08-15 22:05:07 +08:00
/**
* 添加Activity
*/
fun addActivity(activity: Activity) {
// 判断当前集合中不存在该Activity
if (!mActivityList.contains(activity)) {
mActivityList.add(activity) //把当前Activity添加到集合中
}
}
/**
* 销毁单个Activity
*/
@JvmOverloads
fun removeActivity(activity: Activity, finish: Boolean = false) {
//判断当前集合中存在该Activity
if (mActivityList.contains(activity)) {
mActivityList.remove(activity) //从集合中移除
if (finish) activity.finish() //销毁当前Activity
}
}
/**
* 销毁所有的Activity
*/
fun removeAllActivity() {
//通过循环把集合中的所有Activity销毁
for (activity in mActivityList) {
activity.finish()
}
}
object ScreenInfo {
@JvmField
var EXACT_SCREEN_HEIGHT = 0
@JvmField
var EXACT_SCREEN_WIDTH = 0
@JvmField
var SCREEN_HEIGHT = 0
@JvmField
var SCREEN_WIDTH = 0
@JvmField
var DENSITY = 0f
}
2021-12-03 20:36:11 +08:00
class MyDistributeListener : DistributeListener {
override fun onReleaseAvailable(
activity: Activity,
releaseDetails: ReleaseDetails
): Boolean {
val versionName = releaseDetails.shortVersion
val releaseNotes = releaseDetails.releaseNotes
if (activity is BaseActivity) {
activity.showDialog {
setTitle(activity.getString(R.string.title_dialog_update, versionName))
setMessage(releaseNotes)
setCancelable(!releaseDetails.isMandatoryUpdate)
setPositiveButton(R.string.appcenter_distribute_update_dialog_download) { _, _ ->
Distribute.notifyUpdateAction(UpdateAction.UPDATE)
}
if (!releaseDetails.isMandatoryUpdate) {
setNeutralButton(R.string.appcenter_distribute_update_dialog_postpone) { _, _ ->
Distribute.notifyUpdateAction(UpdateAction.POSTPONE)
}
setNegativeButton(R.string.button_next_time, null)
}
}
}
return true
}
override fun onNoReleaseAvailable(activity: Activity) {}
}
2020-08-15 22:05:07 +08:00
companion object {
val TAG = BaseApplication::class.java.simpleName
2020-08-15 22:26:17 +08:00
@JvmStatic
var translucentBackground: Drawable? = null
2020-08-15 22:05:07 +08:00
private val packageName: String
get() = instance.packageName
@JvmStatic
lateinit var instance: BaseApplication
private set
val isSystemNight: Boolean
get() = nightMode == Configuration.UI_MODE_NIGHT_YES
val isFirstRun: Boolean
get() = SharedPreferencesUtil.get(SharedPreferencesUtil.SP_APP_DATA).getBoolean("first", true)
private val nightMode: Int
get() = instance.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
}
object ThemeDelegate : ThemeSwitcher {
fun getColorByAttr(context: Context, attrId: Int, theme: String): Int {
val resources = context.resources
when (attrId) {
R.attr.colorPrimary -> {
if (ThemeUtil.THEME_CUSTOM == theme) {
val customPrimaryColorStr = context.appPreferences.customPrimaryColor
2020-08-15 22:05:07 +08:00
return if (customPrimaryColorStr != null) {
Color.parseColor(customPrimaryColorStr)
} else getColorByAttr(context, attrId, ThemeUtil.THEME_WHITE)
2021-07-10 21:28:00 +08:00
} else if (ThemeUtil.isTranslucentTheme(theme)) {
val primaryColorStr = context.appPreferences.translucentPrimaryColor
2020-08-15 22:05:07 +08:00
return if (primaryColorStr != null) {
Color.parseColor(primaryColorStr)
} else getColorByAttr(context, attrId, ThemeUtil.THEME_WHITE)
}
return context.getColorCompat(resources.getIdentifier("theme_color_primary_$theme", "color", packageName))
}
R.attr.colorAccent -> {
2021-07-10 21:28:00 +08:00
return if (ThemeUtil.THEME_CUSTOM == theme || ThemeUtil.isTranslucentTheme(theme)) {
2020-08-15 22:05:07 +08:00
getColorByAttr(context, R.attr.colorPrimary, theme)
} else context.getColorCompat(
resources.getIdentifier("theme_color_accent_$theme", "color", packageName)
)
}
2021-07-10 21:28:00 +08:00
R.attr.colorOnAccent -> {
return if (ThemeUtil.isNightMode(context) || ThemeUtil.isTranslucentTheme(theme)) {
context.getColorCompat(resources.getIdentifier("theme_color_on_accent_$theme", "color", packageName))
} else context.getColorCompat(R.color.theme_color_on_accent_light)
}
2020-08-15 22:05:07 +08:00
R.attr.colorToolbar -> {
2021-07-10 21:28:00 +08:00
if (ThemeUtil.isTranslucentTheme(theme)) {
2020-08-15 22:05:07 +08:00
return context.getColorCompat(R.color.transparent)
}
if (ThemeUtil.THEME_CUSTOM == theme) {
val primary = context.appPreferences.customToolbarPrimaryColor
2020-08-15 22:05:07 +08:00
return if (primary) {
getColorByAttr(context, R.attr.colorPrimary, theme)
} else context.getColorCompat(R.color.white)
}
return if (ThemeUtil.THEME_WHITE == theme || ThemeUtil.isNightMode(theme)) {
context.getColorCompat(resources.getIdentifier("theme_color_toolbar_$theme", "color", packageName))
} else getColorByAttr(context, R.attr.colorPrimary, theme)
}
R.attr.colorText -> {
2021-07-10 21:28:00 +08:00
return if (ThemeUtil.isTranslucentTheme(theme)) {
context.getColorCompat(resources.getIdentifier("color_text_$theme", "color", packageName))
2020-08-15 22:05:07 +08:00
} else context.getColorCompat(if (ThemeUtil.isNightMode(context)) R.color.color_text_night else R.color.color_text)
}
R.attr.color_text_disabled -> {
2021-07-10 21:28:00 +08:00
return if (ThemeUtil.isTranslucentTheme(theme)) {
context.getColorCompat(resources.getIdentifier("color_text_disabled_$theme", "color", packageName))
2020-08-15 22:05:07 +08:00
} else context.getColorCompat(if (ThemeUtil.isNightMode(context)) R.color.color_text_disabled_night else R.color.color_text_disabled)
}
R.attr.colorTextSecondary -> {
2021-07-10 21:28:00 +08:00
return if (ThemeUtil.isTranslucentTheme(theme)) {
context.getColorCompat(resources.getIdentifier("color_text_secondary_$theme", "color", packageName))
2020-08-15 22:05:07 +08:00
} else context.getColorCompat(if (ThemeUtil.isNightMode(context)) R.color.color_text_secondary_night else R.color.color_text_secondary)
}
R.attr.colorTextOnPrimary -> {
2021-07-10 21:28:00 +08:00
return if (ThemeUtil.isTranslucentTheme(theme)) {
2020-08-15 22:05:07 +08:00
context.getColorCompat(R.color.white)
} else getColorByAttr(context, R.attr.colorBg, theme)
}
R.attr.colorBg -> {
2021-07-10 21:28:00 +08:00
if (ThemeUtil.isTranslucentTheme(theme)) {
2020-08-15 22:05:07 +08:00
return context.getColorCompat(R.color.transparent)
}
return if (ThemeUtil.isNightMode(context)) {
context.getColorCompat(resources.getIdentifier("theme_color_background_$theme", "color", packageName))
} else context.getColorCompat(R.color.theme_color_background_light)
}
2020-08-22 22:22:06 +08:00
R.attr.colorWindowBackground -> {
2021-07-10 21:28:00 +08:00
if (ThemeUtil.isTranslucentTheme(theme)) {
2020-08-22 22:22:06 +08:00
return context.getColorCompat(R.color.transparent)
}
return if (ThemeUtil.isNightMode(context)) {
context.getColorCompat(resources.getIdentifier("theme_color_window_background_$theme", "color", packageName))
} else context.getColorCompat(R.color.theme_color_window_background_light)
}
2020-08-15 22:05:07 +08:00
R.attr.colorUnselected -> {
2021-07-10 21:28:00 +08:00
return context.getColorCompat(if (ThemeUtil.isNightMode(context)) resources.getIdentifier("theme_color_unselected_$theme", "color", packageName) else R.color.theme_color_unselected_day)
2020-08-15 22:05:07 +08:00
}
R.attr.colorNavBar -> {
2021-07-10 21:28:00 +08:00
if (ThemeUtil.isTranslucentTheme(theme)) {
2020-08-15 22:05:07 +08:00
return context.getColorCompat(R.color.transparent)
}
return if (ThemeUtil.isNightMode(context)) {
context.getColorCompat(resources.getIdentifier("theme_color_nav_$theme", "color", packageName))
} else context.getColorCompat(R.color.theme_color_nav_light)
}
R.attr.colorFloorCard -> {
2021-07-10 21:28:00 +08:00
return if (ThemeUtil.isNightMode(context) || ThemeUtil.isTranslucentTheme(theme)) {
2020-08-15 22:05:07 +08:00
context.getColorCompat(resources.getIdentifier("theme_color_floor_card_$theme", "color", packageName))
} else context.getColorCompat(R.color.theme_color_floor_card_light)
}
R.attr.colorCard -> {
2021-07-10 21:28:00 +08:00
return if (ThemeUtil.isNightMode(context) || ThemeUtil.isTranslucentTheme(theme)) {
2020-08-15 22:05:07 +08:00
context.getColorCompat(resources.getIdentifier("theme_color_card_$theme", "color", packageName))
} else context.getColorCompat(R.color.theme_color_card_light)
}
R.attr.colorDivider -> {
2021-07-10 21:28:00 +08:00
return if (ThemeUtil.isNightMode(context) || ThemeUtil.isTranslucentTheme(theme)) {
2020-08-15 22:05:07 +08:00
context.getColorCompat(resources.getIdentifier("theme_color_divider_$theme", "color", packageName))
} else context.getColorCompat(R.color.theme_color_divider_light)
}
R.attr.shadow_color -> {
2021-07-10 21:28:00 +08:00
return if (ThemeUtil.isTranslucentTheme(theme)) {
2020-08-15 22:05:07 +08:00
context.getColorCompat(R.color.transparent)
} else context.getColorCompat(if (ThemeUtil.isNightMode(context)) R.color.theme_color_shadow_night else R.color.theme_color_shadow_day)
}
R.attr.colorToolbarItem -> {
2021-07-10 21:28:00 +08:00
if (ThemeUtil.isTranslucentTheme(theme)) {
return context.getColorCompat(resources.getIdentifier("theme_color_toolbar_item_$theme", "color", packageName))
2020-08-15 22:05:07 +08:00
}
return if (ThemeUtil.isNightMode(context)) {
context.getColorCompat(R.color.theme_color_toolbar_item_night)
} else context.getColorCompat(if (ThemeUtil.isStatusBarFontDark(context)) R.color.theme_color_toolbar_item_light else R.color.theme_color_toolbar_item_dark)
}
R.attr.colorToolbarItemActive -> {
2021-07-10 21:28:00 +08:00
if (ThemeUtil.THEME_WHITE == theme || ThemeUtil.isTranslucentTheme(theme)) {
2020-08-15 22:05:07 +08:00
return context.getColorCompat(resources.getIdentifier("theme_color_toolbar_item_active_$theme", "color", packageName))
} else if (ThemeUtil.isNightMode(theme)) {
return getColorByAttr(context, R.attr.colorAccent, theme)
}
return context.getColorCompat(if (ThemeUtil.isStatusBarFontDark(context)) R.color.theme_color_toolbar_item_light else R.color.theme_color_toolbar_item_dark)
}
R.attr.color_toolbar_item_secondary -> {
2021-07-10 21:28:00 +08:00
return if (ThemeUtil.THEME_WHITE == theme || ThemeUtil.isNightMode(theme) || ThemeUtil.isTranslucentTheme(theme)) {
2020-08-15 22:05:07 +08:00
context.getColorCompat(resources.getIdentifier("theme_color_toolbar_item_secondary_$theme", "color", packageName))
} else context.getColorCompat(if (ThemeUtil.isStatusBarFontDark(context)) R.color.theme_color_toolbar_item_secondary_white else R.color.theme_color_toolbar_item_secondary_light)
}
R.attr.color_swipe_refresh_layout_background -> {
2021-07-10 21:28:00 +08:00
return if (ThemeUtil.isNightMode(theme) || ThemeUtil.isTranslucentTheme(theme)) {
2020-08-15 22:05:07 +08:00
context.getColorCompat(resources.getIdentifier("theme_color_swipe_refresh_view_background_$theme", "color", packageName))
} else context.getColorCompat(R.color.theme_color_swipe_refresh_view_background_light)
}
2020-11-14 17:02:56 +08:00
R.attr.colorToolbarBar -> {
2021-07-10 21:28:00 +08:00
return if (ThemeUtil.isTranslucentTheme(theme)) {
context.getColorCompat(resources.getIdentifier("theme_color_toolbar_bar_$theme", "color", packageName))
} else if (ThemeUtil.isNightMode(context)) {
2020-11-14 17:02:56 +08:00
context.getColorCompat(R.color.theme_color_toolbar_bar_dark)
} else {
context.getColorCompat(R.color.theme_color_toolbar_bar_light)
}
}
R.attr.colorOnToolbarBar -> {
return if (ThemeUtil.isNightMode(context)) {
context.getColorCompat(R.color.theme_color_on_toolbar_bar_dark)
} else {
context.getColorCompat(R.color.theme_color_on_toolbar_bar_light)
}
}
2021-02-01 18:36:34 +08:00
R.attr.colorNavBarSurface -> {
return if (ThemeUtil.isNightMode(context)) {
context.getColorCompat(R.color.theme_color_nav_bar_surface_dark)
} else {
context.getColorCompat(R.color.theme_color_nav_bar_surface_light)
}
}
R.attr.colorOnNavBarSurface -> {
return if (ThemeUtil.isNightMode(context)) {
context.getColorCompat(R.color.theme_color_on_nav_bar_surface_dark)
} else {
context.getColorCompat(R.color.theme_color_on_nav_bar_surface_light)
}
}
2020-08-15 22:05:07 +08:00
}
return Util.getColorByAttr(context, attrId, R.color.transparent)
}
override fun getColorByAttr(context: Context, attrId: Int): Int {
2021-07-10 21:28:00 +08:00
return getColorByAttr(context, attrId, ThemeUtil.getThemeTranslucent(context))
2020-08-15 22:05:07 +08:00
}
override fun getColorById(context: Context, colorId: Int): Int {
when (colorId) {
R.color.default_color_primary -> return getColorByAttr(context, R.attr.colorPrimary)
R.color.default_color_accent -> return getColorByAttr(context, R.attr.colorAccent)
2021-07-10 21:28:00 +08:00
R.color.default_color_on_accent -> return getColorByAttr(context, R.attr.colorOnAccent)
2020-08-15 22:05:07 +08:00
R.color.default_color_background -> return getColorByAttr(context, R.attr.colorBg)
2020-08-22 22:22:06 +08:00
R.color.default_color_window_background -> return getColorByAttr(context, R.attr.colorWindowBackground)
2020-08-15 22:05:07 +08:00
R.color.default_color_toolbar -> return getColorByAttr(context, R.attr.colorToolbar)
R.color.default_color_toolbar_item -> return getColorByAttr(context, R.attr.colorToolbarItem)
R.color.default_color_toolbar_item_active -> return getColorByAttr(context, R.attr.colorToolbarItemActive)
R.color.default_color_toolbar_item_secondary -> return getColorByAttr(context, R.attr.color_toolbar_item_secondary)
2020-11-14 17:02:56 +08:00
R.color.default_color_toolbar_bar -> return getColorByAttr(context, R.attr.colorToolbarBar)
R.color.default_color_on_toolbar_bar -> return getColorByAttr(context, R.attr.colorOnToolbarBar)
2021-02-01 18:36:34 +08:00
R.color.default_color_nav_bar_surface -> return getColorByAttr(context, R.attr.colorNavBarSurface)
R.color.default_color_on_nav_bar_surface -> return getColorByAttr(context, R.attr.colorOnNavBarSurface)
2020-08-15 22:05:07 +08:00
R.color.default_color_card -> return getColorByAttr(context, R.attr.colorCard)
R.color.default_color_floor_card -> return getColorByAttr(context, R.attr.colorFloorCard)
R.color.default_color_nav -> return getColorByAttr(context, R.attr.colorNavBar)
R.color.default_color_shadow -> return getColorByAttr(context, R.attr.shadow_color)
R.color.default_color_unselected -> return getColorByAttr(context, R.attr.colorUnselected)
R.color.default_color_text -> return getColorByAttr(context, R.attr.colorText)
R.color.default_color_text_on_primary -> return getColorByAttr(
context,
R.attr.colorTextOnPrimary
)
R.color.default_color_text_secondary -> return getColorByAttr(
context,
R.attr.colorTextSecondary
)
R.color.default_color_text_disabled -> return getColorByAttr(
context,
R.attr.color_text_disabled
)
2020-08-15 22:05:07 +08:00
R.color.default_color_divider -> return getColorByAttr(context, R.attr.colorDivider)
R.color.default_color_swipe_refresh_view_background -> return getColorByAttr(
context,
R.attr.color_swipe_refresh_layout_background
)
2020-08-15 22:05:07 +08:00
}
return context.getColorCompat(colorId)
}
}
override fun getAppContext(): Context {
return this
}
2021-08-19 16:59:13 +08:00
override fun getCurrentContext(): Context {
return mActivityList.lastOrNull() ?: this
}
override fun launchUrl(url: String) {
2021-08-19 16:59:13 +08:00
launchUrl(getCurrentContext(), url)
}
override fun showLoadingDialog(): Dialog {
return LoadingDialog(getCurrentContext()).apply { show() }
}
override fun toastShort(text: String) {
getCurrentContext().toastShort(text)
}
override fun showAlertDialog(builder: AlertDialog.Builder.() -> Unit): AlertDialog {
val dialog = AlertDialog.Builder(getCurrentContext())
.apply(builder)
.create()
if (getCurrentContext() !is BaseActivity || (getCurrentContext() as BaseActivity).isActivityRunning) {
dialog.show()
}
return dialog
}
override fun copyText(text: String) {
TiebaUtil.copyText(getCurrentContext(), text)
}
2020-08-15 22:05:07 +08:00
}