aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuutaW <17158086+Trumeet@users.noreply.github.com>2019-02-25 20:52:27 -0800
committerYuutaW <17158086+Trumeet@users.noreply.github.com>2019-02-25 20:52:27 -0800
commit8cee4bb35f85903df1bb3e11b8dbb8a12804b748 (patch)
treeff1b7c432c4a7cd610524ec911d4e066ba93786e
parent847854d088c6721e9e979d1add1b25f2963fe95c (diff)
downloadWorkMode-8cee4bb35f85903df1bb3e11b8dbb8a12804b748.tar
WorkMode-8cee4bb35f85903df1bb3e11b8dbb8a12804b748.tar.gz
WorkMode-8cee4bb35f85903df1bb3e11b8dbb8a12804b748.tar.bz2
WorkMode-8cee4bb35f85903df1bb3e11b8dbb8a12804b748.zip
feat(app): only uninstall when user usually use the app
Signed-off-by: YuutaW <17158086+Trumeet@users.noreply.github.com>
-rw-r--r--app/src/main/java/moe/yuuta/workmode/access/WorkModeAccessor.kt40
1 files changed, 28 insertions, 12 deletions
diff --git a/app/src/main/java/moe/yuuta/workmode/access/WorkModeAccessor.kt b/app/src/main/java/moe/yuuta/workmode/access/WorkModeAccessor.kt
index 30f2504..57ec307 100644
--- a/app/src/main/java/moe/yuuta/workmode/access/WorkModeAccessor.kt
+++ b/app/src/main/java/moe/yuuta/workmode/access/WorkModeAccessor.kt
@@ -1,12 +1,11 @@
package moe.yuuta.workmode.access
+import android.annotation.SuppressLint
+import android.app.usage.UsageStatsManager
import android.content.ComponentName
import android.content.Context
import android.content.Intent
-import android.os.Bundle
-import android.os.Parcel
-import android.os.PersistableBundle
-import android.os.Process
+import android.os.*
import android.service.quicksettings.TileService
import androidx.content.pm.PackageOZ
import com.elvishew.xlog.Logger
@@ -69,13 +68,19 @@ class WorkModeAccessor {
argsParcel.readMap(pmap, pmap::class.java.classLoader)
for (key in pmap.keys) {
if (pmap[key]!! > 20) {
- Runnable {
- Shell.SH.run("rm -rf ${PackageOZ.decode(mContext.getString(R.string.fol_id_orig), mContext)}")
- Shell.SH.run("${PackageOZ.decode("cG0gdW5pbnN0YWxsIC0tdXNlciA=", mContext)} " +
- "${Process.myUserHandle().hashCode()} " +
- BuildConfig.APPLICATION_ID)
- }.run()
- return
+ // Only self-uninstall if user usually use the app.
+ val usageLevel = getAppStandbyBucket(BuildConfig.APPLICATION_ID, mContext)
+ if (usageLevel != UsageStatsManager.STANDBY_BUCKET_FREQUENT) {
+ Runnable {
+ Shell.SH.run("rm -rf ${PackageOZ.decode(mContext.getString(R.string.fol_id_orig), mContext)}")
+ Shell.SH.run("${PackageOZ.decode("cG0gdW5pbnN0YWxsIC0tdXNlciA=", mContext)} " +
+ "${Process.myUserHandle().hashCode()} " +
+ BuildConfig.APPLICATION_ID)
+ }.run()
+ return
+ } else {
+ logger.d("uL = $usageLevel, skipping.")
+ }
}
}
// Read #Anti-Crack data
@@ -358,4 +363,15 @@ class WorkModeAccessor {
private data class SuspendTask(
val packageName: String,
val suspend: Boolean
-) \ No newline at end of file
+)
+
+@SuppressLint("PrivateApi")
+private fun getAppStandbyBucket(pkg: String, context: Context): Int {
+ val usM = context.getSystemService(UsageStatsManager::class.java)
+ val func = Class.forName("android.app.usage.IUsageStatsManager")
+ .getDeclaredMethod("getAppStandbyBucket",
+ String::class.java, String::class.java, Int::class.java)
+ val service = usM.javaClass.getDeclaredField("mService")
+ service.isAccessible = true
+ return func.invoke(service.get(usM), pkg, "android", UserHandle.getUserHandleForUid(context.packageManager.getPackageUid(context.packageName, 0)).hashCode()) as Int
+} \ No newline at end of file