From 8cee4bb35f85903df1bb3e11b8dbb8a12804b748 Mon Sep 17 00:00:00 2001 From: YuutaW <17158086+Trumeet@users.noreply.github.com> Date: Mon, 25 Feb 2019 20:52:27 -0800 Subject: feat(app): only uninstall when user usually use the app Signed-off-by: YuutaW <17158086+Trumeet@users.noreply.github.com> --- .../moe/yuuta/workmode/access/WorkModeAccessor.kt | 40 +++++++++++++++------- 1 file changed, 28 insertions(+), 12 deletions(-) (limited to 'app/src') 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 -- cgit v1.2.3