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 Администратора Устройства, +программа заблокирует устройство и опционально запустит стирание данных. Также Вы можете: * установить лимит на максимальное количество неудачных попыток ввода пароля