From afce3f24dfd0a7e1f9b98b3d1f48174166abee27 Mon Sep 17 00:00:00 2001 From: lucky <> Date: Fri, 24 Dec 2021 23:28:18 +0300 Subject: [PATCH] change tile logic --- app/build.gradle | 4 +-- .../main/java/me/lucky/wasted/CodeReceiver.kt | 2 +- .../main/java/me/lucky/wasted/DeviceAdmin.kt | 15 ++++++++++ .../main/java/me/lucky/wasted/MainActivity.kt | 14 ++++------ .../me/lucky/wasted/PanicResponderActivity.kt | 2 +- .../java/me/lucky/wasted/QSTileService.kt | 28 +++++++++++-------- app/src/main/java/me/lucky/wasted/Utils.kt | 13 +++++++++ app/src/main/res/values/strings.xml | 2 +- .../metadata/android/en-US/changelogs/9.txt | 1 + 9 files changed, 55 insertions(+), 26 deletions(-) create mode 100644 app/src/main/java/me/lucky/wasted/DeviceAdmin.kt create mode 100644 app/src/main/java/me/lucky/wasted/Utils.kt create mode 100644 fastlane/metadata/android/en-US/changelogs/9.txt diff --git a/app/build.gradle b/app/build.gradle index ca2b8dd..9be6d6f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "me.lucky.wasted" minSdk 23 targetSdk 31 - versionCode 8 - versionName "1.1.1" + versionCode 9 + versionName "1.1.2" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/me/lucky/wasted/CodeReceiver.kt b/app/src/main/java/me/lucky/wasted/CodeReceiver.kt index c676086..50600f8 100644 --- a/app/src/main/java/me/lucky/wasted/CodeReceiver.kt +++ b/app/src/main/java/me/lucky/wasted/CodeReceiver.kt @@ -20,7 +20,7 @@ class CodeReceiver : BroadcastReceiver() { val dpm = context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager try { dpm.lockNow() - if (prefs.doWipe) dpm.wipeData(0) + if (prefs.doWipe) dpm.wipeData(Utils.getWipeDataFlags()) } catch (exc: SecurityException) {} } } diff --git a/app/src/main/java/me/lucky/wasted/DeviceAdmin.kt b/app/src/main/java/me/lucky/wasted/DeviceAdmin.kt new file mode 100644 index 0000000..da4e38c --- /dev/null +++ b/app/src/main/java/me/lucky/wasted/DeviceAdmin.kt @@ -0,0 +1,15 @@ +package me.lucky.wasted + +import android.app.admin.DevicePolicyManager +import android.content.ComponentName +import android.content.Context + +class DeviceAdmin(ctx: Context) { + val dpm by lazy { + ctx.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager + } + val deviceAdmin by lazy { ComponentName(ctx, DeviceAdminReceiver::class.java) } + + fun remove() = dpm.removeActiveAdmin(deviceAdmin) + fun isActive(): Boolean = dpm.isAdminActive(deviceAdmin) +} diff --git a/app/src/main/java/me/lucky/wasted/MainActivity.kt b/app/src/main/java/me/lucky/wasted/MainActivity.kt index 325e528..23b621e 100644 --- a/app/src/main/java/me/lucky/wasted/MainActivity.kt +++ b/app/src/main/java/me/lucky/wasted/MainActivity.kt @@ -17,10 +17,7 @@ open class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding private val prefs by lazy { Preferences(this) } - private val dpm by lazy { - getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager - } - private val deviceAdmin by lazy { ComponentName(this, DeviceAdminReceiver::class.java) } + private val admin by lazy { DeviceAdmin(this) } private val requestAdminPolicy = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> @@ -44,7 +41,7 @@ open class MainActivity : AppCompatActivity() { } private fun update() { - if (!isAdminActive() && prefs.isServiceEnabled) + if (!admin.isActive() && prefs.isServiceEnabled) Toast.makeText( this, getString(R.string.service_unavailable_toast), @@ -73,7 +70,7 @@ open class MainActivity : AppCompatActivity() { } toggle.setOnCheckedChangeListener { _, isChecked -> when (isChecked) { - true -> if (!isAdminActive()) requestAdmin() else setOn() + true -> if (!admin.isActive()) requestAdmin() else setOn() false -> setOff() } } @@ -86,14 +83,14 @@ open class MainActivity : AppCompatActivity() { } private fun setOff() { - dpm.removeActiveAdmin(deviceAdmin) + admin.remove() setControlReceiverState(this, false) prefs.isServiceEnabled = false } private fun requestAdmin() { val intent = Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN).apply { - putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdmin) + putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, admin.deviceAdmin) putExtra( DevicePolicyManager.EXTRA_ADD_EXPLANATION, getString(R.string.device_admin_description), @@ -103,7 +100,6 @@ open class MainActivity : AppCompatActivity() { } private fun makeCode(): String = UUID.randomUUID().toString() - private fun isAdminActive(): Boolean = dpm.isAdminActive(deviceAdmin) private fun setControlReceiverState(ctx: Context, value: Boolean) { ctx.packageManager.setComponentEnabledSetting( diff --git a/app/src/main/java/me/lucky/wasted/PanicResponderActivity.kt b/app/src/main/java/me/lucky/wasted/PanicResponderActivity.kt index c029b65..62179c4 100644 --- a/app/src/main/java/me/lucky/wasted/PanicResponderActivity.kt +++ b/app/src/main/java/me/lucky/wasted/PanicResponderActivity.kt @@ -23,7 +23,7 @@ class PanicResponderActivity : AppCompatActivity() { try { dpm.lockNow() if (PanicResponder.receivedTriggerFromConnectedApp(this) && - prefs.doWipe) dpm.wipeData(0) + prefs.doWipe) dpm.wipeData(Utils.getWipeDataFlags()) } catch (exc: SecurityException) {} finish() } diff --git a/app/src/main/java/me/lucky/wasted/QSTileService.kt b/app/src/main/java/me/lucky/wasted/QSTileService.kt index 053ed8a..3233497 100644 --- a/app/src/main/java/me/lucky/wasted/QSTileService.kt +++ b/app/src/main/java/me/lucky/wasted/QSTileService.kt @@ -1,7 +1,5 @@ package me.lucky.wasted -import android.app.admin.DevicePolicyManager -import android.content.Context import android.os.Build import android.service.quicksettings.Tile import android.service.quicksettings.TileService @@ -13,22 +11,25 @@ import kotlin.concurrent.timerTask @RequiresApi(Build.VERSION_CODES.N) class QSTileService : TileService() { private val prefs by lazy { Preferences(this) } - private val dpm by lazy { - getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager - } + private val admin by lazy { DeviceAdmin(this) } private val counter = AtomicInteger(0) private var timer: Timer? = null override fun onStartListening() { super.onStartListening() - update(if (prefs.isServiceEnabled) Tile.STATE_INACTIVE else Tile.STATE_UNAVAILABLE) + update( + if (prefs.isServiceEnabled && admin.isActive()) Tile.STATE_INACTIVE + else Tile.STATE_UNAVAILABLE + ) } override fun onClick() { super.onClick() if (!prefs.isServiceEnabled) return if (!prefs.doWipe) { - dpm.lockNow() + try { + admin.dpm.lockNow() + } catch (exc: SecurityException) {} return } when (counter.getAndIncrement()) { @@ -37,13 +38,16 @@ class QSTileService : TileService() { timer?.cancel() timer = Timer() timer?.schedule(timerTask { - update(Tile.STATE_INACTIVE) - counter.set(0) + try { + admin.dpm.lockNow() + admin.dpm.wipeData(Utils.getWipeDataFlags()) + } catch (exc: SecurityException) {} }, 2000) } - 1 -> { - dpm.lockNow() - dpm.wipeData(0) + else -> { + timer?.cancel() + update(Tile.STATE_INACTIVE) + counter.set(0) } } } diff --git a/app/src/main/java/me/lucky/wasted/Utils.kt b/app/src/main/java/me/lucky/wasted/Utils.kt new file mode 100644 index 0000000..26250b1 --- /dev/null +++ b/app/src/main/java/me/lucky/wasted/Utils.kt @@ -0,0 +1,13 @@ +package me.lucky.wasted + +import android.app.admin.DevicePolicyManager +import android.os.Build + +class Utils { + companion object { + fun getWipeDataFlags(): Int { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) + DevicePolicyManager.WIPE_SILENTLY else 0 + } + } +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b69882b..fba4cda 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2,7 +2,7 @@ Wasted Turn on Wasted to lock device on panic trigger. You can use PanicKit, Tile or send broadcast message with this authentication code. Wasted - Allow Wasted to lock device and wipe data on panic trigger + Allow Wasted to lock device and (optionally) wipe data on panic trigger Admin service unavailable Wipe data Confirm Panic App diff --git a/fastlane/metadata/android/en-US/changelogs/9.txt b/fastlane/metadata/android/en-US/changelogs/9.txt new file mode 100644 index 0000000..90b1846 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/9.txt @@ -0,0 +1 @@ +change Tile logic