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
|
2021-08-11 17:10:16 +08:00
|
|
|
|
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
|
|
|
|
|
|
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
|
|
|
|
|
2021-08-11 17:10:16 +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)
|
|
|
|
|
|
}
|
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
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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) {
|
2020-08-22 11:16:42 +08:00
|
|
|
|
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)) {
|
2020-08-22 11:16:42 +08:00
|
|
|
|
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) {
|
2020-08-22 11:16:42 +08:00
|
|
|
|
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)
|
2021-08-11 17:10:16 +08:00
|
|
|
|
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)
|
2021-08-11 17:10:16 +08:00
|
|
|
|
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)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2021-08-11 17:10:16 +08:00
|
|
|
|
|
|
|
|
|
|
override fun getAppContext(): Context {
|
|
|
|
|
|
return this
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-08-19 16:59:13 +08:00
|
|
|
|
override fun getCurrentContext(): Context {
|
|
|
|
|
|
return mActivityList.lastOrNull() ?: this
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-08-11 17:10:16 +08:00
|
|
|
|
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)
|
2021-08-11 17:10:16 +08:00
|
|
|
|
}
|
2020-08-15 22:05:07 +08:00
|
|
|
|
}
|