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.