diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/src/main/java/moe/yuuta/workmode/access/WorkModeAccessor.kt | 40 |
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 |