diff --git a/app/src/main/java/com/fankes/apperrorstracking/ui/activity/AppErrorsDetailActivity.kt b/app/src/main/java/com/fankes/apperrorstracking/ui/activity/AppErrorsDetailActivity.kt index 41974ce..2fbfa29 100644 --- a/app/src/main/java/com/fankes/apperrorstracking/ui/activity/AppErrorsDetailActivity.kt +++ b/app/src/main/java/com/fankes/apperrorstracking/ui/activity/AppErrorsDetailActivity.kt @@ -24,11 +24,9 @@ package com.fankes.apperrorstracking.ui.activity import android.app.Activity -import android.content.ComponentName import android.content.Context import android.content.Intent import androidx.core.view.isGone -import com.fankes.apperrorstracking.BuildConfig import com.fankes.apperrorstracking.R import com.fankes.apperrorstracking.bean.AppErrorsInfoBean import com.fankes.apperrorstracking.databinding.ActivityAppErrorsDetailBinding @@ -53,16 +51,8 @@ class AppErrorsDetailActivity : BaseActivity() { * @param appErrorsInfo 应用异常信息 * @param isOutSide 是否从外部启动 */ - fun start(context: Context, appErrorsInfo: AppErrorsInfoBean, isOutSide: Boolean = false) { - runCatching { - context.startActivity((if (isOutSide) Intent() else Intent(context, AppErrorsDetailActivity::class.java)).apply { - flags = if (context !is Activity) Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK - else Intent.FLAG_ACTIVITY_NEW_TASK - if (isOutSide) component = ComponentName(BuildConfig.APPLICATION_ID, AppErrorsDetailActivity::class.java.name) - putExtra(FrameworkHooker.APP_ERRORS_INFO, appErrorsInfo) - }) - }.onFailure { context.toast(msg = "Start AppErrorsDetailActivity failed") } - } + fun start(context: Context, appErrorsInfo: AppErrorsInfoBean, isOutSide: Boolean = false) = + context.navigate(isOutSide) { putExtra(FrameworkHooker.APP_ERRORS_INFO, appErrorsInfo) } } /** 预导出的异常堆栈 */ diff --git a/app/src/main/java/com/fankes/apperrorstracking/utils/factory/FunctionFactory.kt b/app/src/main/java/com/fankes/apperrorstracking/utils/factory/FunctionFactory.kt index d40195b..95ff29f 100644 --- a/app/src/main/java/com/fankes/apperrorstracking/utils/factory/FunctionFactory.kt +++ b/app/src/main/java/com/fankes/apperrorstracking/utils/factory/FunctionFactory.kt @@ -23,10 +23,9 @@ package com.fankes.apperrorstracking.utils.factory -import android.content.ClipData -import android.content.ClipboardManager -import android.content.Context -import android.content.Intent +import android.app.Activity +import android.app.Service +import android.content.* import android.content.pm.PackageManager import android.content.res.Configuration import android.graphics.Color @@ -35,6 +34,7 @@ import android.graphics.drawable.Drawable import android.net.Uri import android.provider.Settings import android.widget.Toast +import com.fankes.apperrorstracking.BuildConfig import com.fankes.apperrorstracking.locale.LocaleString /** @@ -101,6 +101,22 @@ fun Context.appIcon(packageName: String) = */ fun Context.toast(msg: String) = Toast.makeText(this, msg, Toast.LENGTH_SHORT).show() +/** + * 跳转到指定页面 + * + * [T] 为指定的 [Activity] + * @param isOutSide 是否从外部启动 + * @param callback 回调 [Intent] 方法体 + */ +inline fun Context.navigate(isOutSide: Boolean = false, callback: Intent.() -> Unit = {}) = runCatching { + startActivity((if (isOutSide) Intent() else Intent(if (this is Service) applicationContext else this, T::class.java)).apply { + flags = if (this@navigate !is Activity) Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK + else Intent.FLAG_ACTIVITY_NEW_TASK + if (isOutSide) component = ComponentName(BuildConfig.APPLICATION_ID, T::class.java.name) + callback(this) + }) +}.onFailure { toast(msg = "Start ${T::class.java.name} failed") } + /** * 复制到剪贴板 * @param content 要复制的文本