From 1ee550ee500223b365cd861ef6a1762da21eedd0 Mon Sep 17 00:00:00 2001 From: lucky <> Date: Fri, 24 Dec 2021 13:37:34 +0300 Subject: [PATCH] add TileService --- README.md | 2 +- app/build.gradle | 4 +- app/src/main/AndroidManifest.xml | 14 +++++ .../main/java/me/lucky/wasted/MainActivity.kt | 4 +- .../lucky/wasted/PanicConnectionActivity.kt | 2 - .../me/lucky/wasted/PanicResponderActivity.kt | 4 +- .../main/java/me/lucky/wasted/Preferences.kt | 1 - .../java/me/lucky/wasted/QSTileService.kt | 57 +++++++++++++++++++ app/src/main/res/values/strings.xml | 3 +- .../metadata/android/en-US/changelogs/8.txt | 1 + .../android/en-US/full_description.txt | 2 +- 11 files changed, 82 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/me/lucky/wasted/QSTileService.kt create mode 100644 fastlane/metadata/android/en-US/changelogs/8.txt diff --git a/README.md b/README.md index ab84567..9087a2e 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Lock device and wipe data on panic trigger. -You can use [PanicKit](https://guardianproject.info/code/panickit/) or send broadcast message +You can use [PanicKit](https://guardianproject.info/code/panickit/), Tile or send broadcast message with authentication code. On trigger, using [Device Administration API](https://developer.android.com/guide/topics/admin/device-admin), it locks device and runs wipe. diff --git a/app/build.gradle b/app/build.gradle index 35110ee..ca2b8dd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "me.lucky.wasted" minSdk 23 targetSdk 31 - versionCode 7 - versionName "1.1.0" + versionCode 8 + versionName "1.1.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9a60b72..3c51c0d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -65,6 +65,20 @@ + + + + + + + diff --git a/app/src/main/java/me/lucky/wasted/MainActivity.kt b/app/src/main/java/me/lucky/wasted/MainActivity.kt index 5023dbe..325e528 100644 --- a/app/src/main/java/me/lucky/wasted/MainActivity.kt +++ b/app/src/main/java/me/lucky/wasted/MainActivity.kt @@ -7,7 +7,6 @@ import android.content.Intent import android.content.pm.PackageManager import android.os.Bundle import android.widget.Toast - import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity import java.util.* @@ -19,7 +18,8 @@ open class MainActivity : AppCompatActivity() { private val prefs by lazy { Preferences(this) } private val dpm by lazy { - getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager } + getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager + } private val deviceAdmin by lazy { ComponentName(this, DeviceAdminReceiver::class.java) } private val requestAdminPolicy = diff --git a/app/src/main/java/me/lucky/wasted/PanicConnectionActivity.kt b/app/src/main/java/me/lucky/wasted/PanicConnectionActivity.kt index 94f8f6c..045c73e 100644 --- a/app/src/main/java/me/lucky/wasted/PanicConnectionActivity.kt +++ b/app/src/main/java/me/lucky/wasted/PanicConnectionActivity.kt @@ -2,13 +2,11 @@ package me.lucky.wasted import android.content.pm.PackageManager import android.os.Bundle - import androidx.appcompat.app.AlertDialog import info.guardianproject.panic.PanicResponder class PanicConnectionActivity : MainActivity() { - private val pm by lazy { packageManager } override fun onCreate(savedInstanceState: Bundle?) { diff --git a/app/src/main/java/me/lucky/wasted/PanicResponderActivity.kt b/app/src/main/java/me/lucky/wasted/PanicResponderActivity.kt index 4962d88..c029b65 100644 --- a/app/src/main/java/me/lucky/wasted/PanicResponderActivity.kt +++ b/app/src/main/java/me/lucky/wasted/PanicResponderActivity.kt @@ -3,7 +3,6 @@ package me.lucky.wasted import android.app.admin.DevicePolicyManager import android.content.Context import android.os.Bundle - import androidx.appcompat.app.AppCompatActivity import info.guardianproject.panic.Panic @@ -12,7 +11,8 @@ import info.guardianproject.panic.PanicResponder class PanicResponderActivity : AppCompatActivity() { private val prefs by lazy { Preferences(this) } private val dpm by lazy { - getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager } + getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/app/src/main/java/me/lucky/wasted/Preferences.kt b/app/src/main/java/me/lucky/wasted/Preferences.kt index 90891d6..7749f70 100644 --- a/app/src/main/java/me/lucky/wasted/Preferences.kt +++ b/app/src/main/java/me/lucky/wasted/Preferences.kt @@ -1,7 +1,6 @@ package me.lucky.wasted import android.content.Context - import androidx.core.content.edit import androidx.security.crypto.EncryptedSharedPreferences import androidx.security.crypto.MasterKeys diff --git a/app/src/main/java/me/lucky/wasted/QSTileService.kt b/app/src/main/java/me/lucky/wasted/QSTileService.kt new file mode 100644 index 0000000..053ed8a --- /dev/null +++ b/app/src/main/java/me/lucky/wasted/QSTileService.kt @@ -0,0 +1,57 @@ +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 +import androidx.annotation.RequiresApi +import java.util.* +import java.util.concurrent.atomic.AtomicInteger +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 counter = AtomicInteger(0) + private var timer: Timer? = null + + override fun onStartListening() { + super.onStartListening() + update(if (prefs.isServiceEnabled) Tile.STATE_INACTIVE else Tile.STATE_UNAVAILABLE) + } + + override fun onClick() { + super.onClick() + if (!prefs.isServiceEnabled) return + if (!prefs.doWipe) { + dpm.lockNow() + return + } + when (counter.getAndIncrement()) { + 0 -> { + update(Tile.STATE_ACTIVE) + timer?.cancel() + timer = Timer() + timer?.schedule(timerTask { + update(Tile.STATE_INACTIVE) + counter.set(0) + }, 2000) + } + 1 -> { + dpm.lockNow() + dpm.wipeData(0) + } + } + } + + private fun update(tileState: Int) { + qsTile.apply { + state = tileState + updateTile() + } + } +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 99bc4b0..b69882b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,6 +1,6 @@ Wasted - Turn on Wasted to lock device on panic trigger. You can use PanicKit or send broadcast message with this authentication code. + 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 Admin service unavailable @@ -10,4 +10,5 @@ an unknown app Allow Cancel + Unlock device diff --git a/fastlane/metadata/android/en-US/changelogs/8.txt b/fastlane/metadata/android/en-US/changelogs/8.txt new file mode 100644 index 0000000..62f0901 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/8.txt @@ -0,0 +1 @@ +add TileService diff --git a/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt index a980eee..f1d987a 100644 --- a/fastlane/metadata/android/en-US/full_description.txt +++ b/fastlane/metadata/android/en-US/full_description.txt @@ -1,4 +1,4 @@ Lock device and wipe data on panic trigger. -You can use PanicKit or send broadcast message with authentication code. +You can use PanicKit, Tile or send broadcast message with authentication code. On trigger, using Device Administration API, it locks device and runs wipe.