diff --git a/README.md b/README.md
index 8fef77e..3d68294 100644
--- a/README.md
+++ b/README.md
@@ -17,7 +17,7 @@ Lock a device and wipe its data on panic trigger.
height="30%">
You can use [PanicKit](https://guardianproject.info/code/panickit/), tile, shortcut or send a
-broadcast with authentication code. On trigger, using
+message with authentication code. On trigger, using
[Device Administration API](https://developer.android.com/guide/topics/admin/device-admin), it
locks a device and optionally runs wipe.
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 69e9d6d..875e772 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -122,5 +122,17 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/me/lucky/wasted/MainActivity.kt b/app/src/main/java/me/lucky/wasted/MainActivity.kt
index 7618993..f7b05cd 100644
--- a/app/src/main/java/me/lucky/wasted/MainActivity.kt
+++ b/app/src/main/java/me/lucky/wasted/MainActivity.kt
@@ -216,11 +216,13 @@ open class MainActivity : AppCompatActivity() {
setTileState(launchers.and(Launcher.TILE.flag) != 0)
shortcut.setState(launchers.and(Launcher.SHORTCUT.flag) != 0)
setCodeReceiverState(launchers.and(Launcher.BROADCAST.flag) != 0)
+ setNotificationState(launchers.and(Launcher.NOTIFICATION.flag) != 0)
} else {
setPanicKitState(false)
setTileState(false)
shortcut.setState(false)
setCodeReceiverState(false)
+ setNotificationState(false)
}
updateCodeColorState()
}
@@ -248,6 +250,8 @@ open class MainActivity : AppCompatActivity() {
setComponentState(RestartReceiver::class.java, value)
private fun setTileState(value: Boolean) =
setComponentState(QSTileService::class.java, value)
+ private fun setNotificationState(value: Boolean) =
+ setComponentState(NotificationListenerService::class.java, value)
private fun setPanicKitState(value: Boolean) {
setComponentState(PanicConnectionActivity::class.java, value)
diff --git a/app/src/main/java/me/lucky/wasted/NotificationListenerService.kt b/app/src/main/java/me/lucky/wasted/NotificationListenerService.kt
new file mode 100644
index 0000000..c8ba31e
--- /dev/null
+++ b/app/src/main/java/me/lucky/wasted/NotificationListenerService.kt
@@ -0,0 +1,41 @@
+package me.lucky.wasted
+
+import android.app.Notification
+import android.os.Build
+import android.service.notification.NotificationListenerService
+import android.service.notification.StatusBarNotification
+
+class NotificationListenerService : NotificationListenerService() {
+ private lateinit var prefs: Preferences
+ private lateinit var admin: DeviceAdminManager
+
+ override fun onCreate() {
+ super.onCreate()
+ init()
+ }
+
+ private fun init() {
+ prefs = Preferences(this)
+ admin = DeviceAdminManager(this)
+ }
+
+ override fun onNotificationPosted(sbn: StatusBarNotification?) {
+ super.onNotificationPosted(sbn)
+ if (sbn == null) return
+ val code = prefs.code
+ if (!prefs.isServiceEnabled ||
+ code == "" ||
+ sbn.notification.extras.getString(Notification.EXTRA_TEXT) != code) return
+ cancelAllNotifications()
+ try {
+ admin.lockNow()
+ if (prefs.isWipeData) admin.wipeData()
+ } catch (exc: SecurityException) {}
+ }
+
+ override fun onListenerConnected() {
+ super.onListenerConnected()
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) return
+ migrateNotificationFilter(0, null)
+ }
+}
diff --git a/app/src/main/java/me/lucky/wasted/Preferences.kt b/app/src/main/java/me/lucky/wasted/Preferences.kt
index adeb72b..c593958 100644
--- a/app/src/main/java/me/lucky/wasted/Preferences.kt
+++ b/app/src/main/java/me/lucky/wasted/Preferences.kt
@@ -83,4 +83,5 @@ enum class Launcher(val flag: Int) {
TILE(1 shl 1),
SHORTCUT(1 shl 2),
BROADCAST(1 shl 3),
+ NOTIFICATION(1 shl 4),
}
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index fdfe1b3..db4d572 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -1,7 +1,7 @@
Потрачено
- Включите Потрачено чтобы заблокировать устройство при получении тревожного сигнала. Вы можете использовать PanicKit, плитку быстрых настроек, ярлык или отправить широковещательное сообщение с этим кодом аутентификации.
+ Включите Потрачено чтобы заблокировать устройство при получении тревожного сигнала. Вы можете использовать PanicKit, плитку быстрых настроек, ярлык или отправить сообщение с этим кодом аутентификации.
Потрачено
Разрешите Потрачено блокировать устройство и опционально стирать его данные при получении тревожного сигнала
Администратор устройства недоступен
@@ -32,4 +32,7 @@
Плитка
Ярлык
Широковещательное сообщение
+ Уведомление
+ Вайпер
+ Сканирует уведомления на наличие кода аутентификации
diff --git a/app/src/main/res/values/string-arrays.xml b/app/src/main/res/values/string-arrays.xml
index 427edec..a3b67b6 100644
--- a/app/src/main/res/values/string-arrays.xml
+++ b/app/src/main/res/values/string-arrays.xml
@@ -5,5 +5,6 @@
- @string/launchers_array_1
- @string/launchers_array_2
- @string/launchers_array_3
+ - @string/launchers_array_4
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 2fe1574..577440d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,7 +1,7 @@
Wasted
- Turn on Wasted to lock a device on panic trigger. You can use PanicKit, tile, shortcut or send a broadcast with this authentication code.
+ Turn on Wasted to lock a device on panic trigger. You can use PanicKit, tile, shortcut or send a message with this authentication code.
Wasted
Allow Wasted to lock a device and optionally wipe its data on panic trigger
Device admin unavailable
@@ -22,7 +22,7 @@
Default
OK
Wipe a device on inactivity
- Failed to schedule a wipe service
+ Failed to schedule a wipe job
Receive unlock events
Unlock Service
Activate panic\?
@@ -32,4 +32,7 @@
Tile
Shortcut
Broadcast
+ Notification
+ Viper
+ Scan notifications for authentication code
diff --git a/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt
index 777b828..58b0b30 100644
--- a/fastlane/metadata/android/en-US/full_description.txt
+++ b/fastlane/metadata/android/en-US/full_description.txt
@@ -1,7 +1,7 @@
Lock a device and wipe its data on panic trigger.
-You can use PanicKit, tile, shortcut or send a broadcast with authentication code. On trigger,
-using Device Administration API, it locks a device and optionally runs wipe.
+You can use PanicKit, tile, shortcut or send a message with authentication code. On trigger, using
+Device Administration API, it locks a device and optionally runs wipe.
Also you can:
* limit the maximum number of failed password attempts
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png
index 8b6f0e6..34b0e55 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png
index e8d8209..932137c 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png
index 8ca38f9..cbbd10a 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png
index 6ab1fb2..ea58a63 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/ru-RU/full_description.txt b/fastlane/metadata/android/ru-RU/full_description.txt
index 4dd784c..c94e843 100644
--- a/fastlane/metadata/android/ru-RU/full_description.txt
+++ b/fastlane/metadata/android/ru-RU/full_description.txt
@@ -1,8 +1,8 @@
Блокировка устройства и удаление его данных при получении тревожного сигнала.
-Вы можете использовать PanicKit, плитку быстрых настроек, ярлык или отправить широковещательное
-сообщение с кодом аутентификации. При получении тревожного сигнала, используя API Администратора
-Устройства, программа заблокирует устройство и опционально запустит стирание данных.
+Вы можете использовать PanicKit, плитку быстрых настроек, ярлык или отправить сообщение с кодом
+аутентификации. При получении тревожного сигнала, используя API Администратора Устройства,
+программа заблокирует устройство и опционально запустит стирание данных.
Также Вы можете:
* установить лимит на максимальное количество неудачных попыток ввода пароля