6.7.0 - Alpha10 - 新增 autojs.(restart/exit) 方法, 用于重启或退出 AutoJs6 应用
This commit is contained in:
@@ -1,39 +1,41 @@
|
||||
package org.autojs.autojs.runtime.api.augment.autojs
|
||||
|
||||
import org.autojs.autojs.rhino.ProxyObject
|
||||
import org.autojs.autojs.rhino.ProxyObject.Companion.PROXY_GETTER_KEY
|
||||
import org.autojs.autojs.runtime.ScriptRuntime
|
||||
import org.autojs.autojs.runtime.api.augment.Augmentable
|
||||
import org.autojs.autojs.util.RhinoUtils.NOT_CONSTRUCTABLE
|
||||
import org.autojs.autojs.util.RhinoUtils.coerceString
|
||||
import org.autojs.autojs.util.RhinoUtils.newBaseFunction
|
||||
import org.mozilla.javascript.BaseFunction
|
||||
import org.mozilla.javascript.NativeObject
|
||||
import org.mozilla.javascript.Scriptable
|
||||
import java.util.function.Supplier
|
||||
import android.Manifest
|
||||
import org.autojs.autojs6.BuildConfig
|
||||
import android.content.pm.PackageManager
|
||||
import org.autojs.autojs.util.RootUtils
|
||||
import org.autojs.autojs.util.RootUtils.RootMode
|
||||
import android.provider.Settings
|
||||
import android.provider.Settings.System
|
||||
import org.autojs.autojs.annotation.RhinoSingletonFunctionInterface
|
||||
import org.autojs.autojs.extension.AnyExtensions.isJsNullish
|
||||
import org.autojs.autojs.extension.FlexibleArray
|
||||
import org.autojs.autojs.extension.ScriptableExtensions.prop
|
||||
import org.autojs.autojs.extension.ScriptableExtensions.defineProp
|
||||
import org.autojs.autojs.extension.ScriptableExtensions.prop
|
||||
import org.autojs.autojs.rhino.ProxyObject
|
||||
import org.autojs.autojs.rhino.ProxyObject.Companion.PROXY_GETTER_KEY
|
||||
import org.autojs.autojs.runtime.ScriptRuntime
|
||||
import org.autojs.autojs.runtime.api.ScreenMetrics
|
||||
import org.autojs.autojs.runtime.api.augment.Augmentable
|
||||
import org.autojs.autojs.runtime.api.augment.util.Util.checkStringArgument
|
||||
import org.autojs.autojs.runtime.exception.WrappedIllegalArgumentException
|
||||
import org.autojs.autojs.theme.ThemeColorManager
|
||||
import org.autojs.autojs.util.IntentUtils
|
||||
import org.autojs.autojs.util.RhinoUtils.NOT_CONSTRUCTABLE
|
||||
import org.autojs.autojs.util.RhinoUtils.UNDEFINED
|
||||
import org.autojs.autojs.util.RhinoUtils.coerceIntNumber
|
||||
import org.autojs.autojs.util.RhinoUtils.coerceString
|
||||
import org.autojs.autojs.util.RhinoUtils.newBaseFunction
|
||||
import org.autojs.autojs.util.RhinoUtils.newNativeObject
|
||||
import org.autojs.autojs.util.RhinoUtils.undefined
|
||||
import org.autojs.autojs.util.RootUtils
|
||||
import org.autojs.autojs.util.RootUtils.RootMode
|
||||
import org.autojs.autojs6.BuildConfig
|
||||
import org.autojs.autojs6.R
|
||||
import org.mozilla.javascript.BaseFunction
|
||||
import org.mozilla.javascript.Context
|
||||
import org.mozilla.javascript.NativeObject
|
||||
import org.mozilla.javascript.Scriptable
|
||||
import org.mozilla.javascript.Undefined
|
||||
import java.util.*
|
||||
import java.util.function.Supplier
|
||||
import android.content.Context as AndroidContext
|
||||
|
||||
class Autojs(private val scriptRuntime: ScriptRuntime) : Augmentable() {
|
||||
@@ -77,6 +79,8 @@ class Autojs(private val scriptRuntime: ScriptRuntime) : Augmentable() {
|
||||
::canDisplayOverOtherApps.name,
|
||||
::getLanguage.name,
|
||||
::getLanguageTag.name,
|
||||
::restart.name,
|
||||
::exit.name,
|
||||
)
|
||||
|
||||
override val selfAssignmentGetters = listOf<Pair<String, Supplier<Any?>>>(
|
||||
@@ -198,6 +202,18 @@ class Autojs(private val scriptRuntime: ScriptRuntime) : Augmentable() {
|
||||
getLanguage(arrayOf()).toLanguageTag()
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
@RhinoSingletonFunctionInterface
|
||||
fun restart(args: Array<out Any?>): Undefined = ensureArgumentsIsEmpty(args) {
|
||||
undefined { IntentUtils.App.restart(globalContext) }
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
@RhinoSingletonFunctionInterface
|
||||
fun exit(args: Array<out Any?>): Undefined = ensureArgumentsIsEmpty(args) {
|
||||
undefined { IntentUtils.App.exit(globalContext) }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@ import android.content.pm.PackageManager
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.os.Process
|
||||
import android.view.Gravity
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
@@ -21,17 +20,11 @@ import androidx.fragment.app.Fragment
|
||||
import androidx.viewpager.widget.ViewPager
|
||||
import androidx.viewpager.widget.ViewPager.SimpleOnPageChangeListener
|
||||
import com.google.android.material.tabs.TabLayout
|
||||
import com.huaban.analysis.jieba.CharsDictionaryDatabase
|
||||
import com.huaban.analysis.jieba.PhrasesDictionaryDatabase
|
||||
import com.huaban.analysis.jieba.WordDictionaryDatabase
|
||||
import org.autojs.autojs.App
|
||||
import org.autojs.autojs.AutoJs
|
||||
import org.autojs.autojs.app.FragmentPagerAdapterBuilder
|
||||
import org.autojs.autojs.app.FragmentPagerAdapterBuilder.StoredFragmentPagerAdapter
|
||||
import org.autojs.autojs.app.OnActivityResultDelegate
|
||||
import org.autojs.autojs.app.OnActivityResultDelegate.DelegateHost
|
||||
import org.autojs.autojs.core.accessibility.AccessibilityTool
|
||||
import org.autojs.autojs.core.image.capture.ScreenCapturerForegroundService
|
||||
import org.autojs.autojs.core.permission.RequestPermissionCallbacks
|
||||
import org.autojs.autojs.core.pref.Pref
|
||||
import org.autojs.autojs.event.BackPressedHandler
|
||||
@@ -50,7 +43,6 @@ import org.autojs.autojs.theme.widget.ThemeColorFloatingActionButton
|
||||
import org.autojs.autojs.theme.widget.ThemeColorToolbar
|
||||
import org.autojs.autojs.ui.BaseActivity
|
||||
import org.autojs.autojs.ui.doc.DocumentationFragment
|
||||
import org.autojs.autojs.ui.enhancedfloaty.FloatyService
|
||||
import org.autojs.autojs.ui.explorer.ExplorerView
|
||||
import org.autojs.autojs.ui.floating.FloatyWindowManger
|
||||
import org.autojs.autojs.ui.log.LogActivity
|
||||
@@ -305,33 +297,9 @@ class MainActivity : BaseActivity(), DelegateHost, HostActivity {
|
||||
}
|
||||
}
|
||||
|
||||
fun rebirth() {
|
||||
packageManager.getLaunchIntentForPackage(packageName)?.let {
|
||||
startActivity(Intent.makeRestartActivityTask(it.component))
|
||||
}
|
||||
exitCompletely()
|
||||
}
|
||||
|
||||
fun exitCompletely() {
|
||||
FloatyWindowManger.hideCircularMenuAndSaveState()
|
||||
|
||||
FloatyService.stopService()
|
||||
ScreenCapturerForegroundService.stopService()
|
||||
|
||||
AutoJs.instance.scriptEngineService.stopAll()
|
||||
AutoJs.instance.clear()
|
||||
|
||||
App.app.clear()
|
||||
|
||||
WordDictionaryDatabase.getInstance(applicationContext).close()
|
||||
CharsDictionaryDatabase.getInstance(applicationContext).close()
|
||||
PhrasesDictionaryDatabase.getInstance(applicationContext).close()
|
||||
|
||||
fun beforeExit() {
|
||||
mA11yTool.stopService(false)
|
||||
mForeGroundService.stopIfNeeded()
|
||||
WrappedShizuku.onDestroy()
|
||||
|
||||
Process.killProcess(Process.myPid())
|
||||
}
|
||||
|
||||
@Suppress("OVERRIDE_DEPRECATION")
|
||||
|
||||
@@ -39,6 +39,8 @@ import org.autojs.autojs.ui.main.MainActivity
|
||||
import org.autojs.autojs.ui.settings.AboutActivity
|
||||
import org.autojs.autojs.ui.settings.PreferencesActivity
|
||||
import org.autojs.autojs.util.DisplayUtils
|
||||
import org.autojs.autojs.util.IntentUtils.App.exit
|
||||
import org.autojs.autojs.util.IntentUtils.App.restart
|
||||
import org.autojs.autojs.util.NetworkUtils
|
||||
import org.autojs.autojs.util.ViewUtils
|
||||
import org.autojs.autojs.util.ViewUtils.MODE
|
||||
@@ -414,8 +416,8 @@ open class DrawerFragment : Fragment() {
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
)
|
||||
}
|
||||
binding.restart.setOnClickListener { mActivity.rebirth() }
|
||||
binding.exit.setOnClickListener { mActivity.exitCompletely() }
|
||||
binding.restart.setOnClickListener { restart(mActivity, mActivity::beforeExit) }
|
||||
binding.exit.setOnClickListener { exit(mActivity, mActivity::beforeExit) }
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
|
||||
@@ -1,17 +1,31 @@
|
||||
package org.autojs.autojs.util
|
||||
|
||||
import android.app.AlarmManager
|
||||
import android.app.PendingIntent
|
||||
import android.content.ActivityNotFoundException
|
||||
import android.content.Context
|
||||
import android.content.Context.ALARM_SERVICE
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Process
|
||||
import android.os.SystemClock
|
||||
import android.provider.OpenableColumns
|
||||
import android.provider.Settings
|
||||
import android.view.View
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.content.FileProvider
|
||||
import androidx.core.net.toUri
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import com.huaban.analysis.jieba.CharsDictionaryDatabase
|
||||
import com.huaban.analysis.jieba.PhrasesDictionaryDatabase
|
||||
import com.huaban.analysis.jieba.WordDictionaryDatabase
|
||||
import org.autojs.autojs.AutoJs
|
||||
import org.autojs.autojs.core.image.capture.ScreenCapturerForegroundService
|
||||
import org.autojs.autojs.external.fileprovider.AppFileProvider
|
||||
import org.autojs.autojs.runtime.api.Mime
|
||||
import org.autojs.autojs.runtime.api.WrappedShizuku
|
||||
import org.autojs.autojs.ui.enhancedfloaty.FloatyService
|
||||
import org.autojs.autojs.ui.floating.FloatyWindowManger
|
||||
import org.autojs.autojs6.R
|
||||
import java.io.File
|
||||
|
||||
@@ -314,4 +328,62 @@ object IntentUtils {
|
||||
fun show(messageRes: Int)
|
||||
}
|
||||
|
||||
object App {
|
||||
|
||||
@JvmStatic
|
||||
@JvmOverloads
|
||||
fun restart(context: Context, extraActions: (() -> Unit)? = null) {
|
||||
val launchIntent = context.packageManager.getLaunchIntentForPackage(context.packageName)?.apply {
|
||||
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_CLEAR_TASK)
|
||||
}
|
||||
|
||||
when (context) {
|
||||
is AppCompatActivity -> {
|
||||
context.startActivity(launchIntent)
|
||||
}
|
||||
else -> {
|
||||
val pendingIntent = PendingIntent.getActivity(
|
||||
/* context = */ context,
|
||||
/* requestCode = */ 1001,
|
||||
/* intent = */ launchIntent,
|
||||
/* flags = */ PendingIntent.FLAG_CANCEL_CURRENT or PendingIntent.FLAG_IMMUTABLE,
|
||||
)
|
||||
val am = context.getSystemService(ALARM_SERVICE) as AlarmManager
|
||||
am.setExactAndAllowWhileIdle(
|
||||
/* type = */ AlarmManager.ELAPSED_REALTIME,
|
||||
/* triggerAtMillis = */ SystemClock.elapsedRealtime() + 300L,
|
||||
/* operation = */ pendingIntent,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
exit(context, extraActions)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
@JvmOverloads
|
||||
fun exit(context: Context, extraActions: (() -> Unit)? = null) {
|
||||
FloatyWindowManger.hideCircularMenuAndSaveState()
|
||||
|
||||
FloatyService.stopService()
|
||||
ScreenCapturerForegroundService.stopService()
|
||||
|
||||
AutoJs.instance.scriptEngineService.stopAll()
|
||||
AutoJs.instance.clear()
|
||||
|
||||
org.autojs.autojs.App.app.clear()
|
||||
|
||||
WordDictionaryDatabase.getInstance(context.applicationContext).close()
|
||||
CharsDictionaryDatabase.getInstance(context.applicationContext).close()
|
||||
PhrasesDictionaryDatabase.getInstance(context.applicationContext).close()
|
||||
|
||||
WrappedShizuku.onDestroy()
|
||||
|
||||
extraActions?.invoke()
|
||||
|
||||
Process.killProcess(Process.myPid())
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user