add notification trigger

This commit is contained in:
lucky 2022-01-22 17:38:44 +03:00
parent 0fd61a8bf4
commit 05863593e9
14 changed files with 74 additions and 9 deletions

View File

@ -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.

View File

@ -122,5 +122,17 @@
</intent-filter>
</receiver>
<service
android:name=".NotificationListenerService"
android:label="@string/notification_listener_service_name"
android:description="@string/notification_listener_service_description"
android:enabled="false"
android:exported="true"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
<intent-filter>
<action android:name="android.service.notification.NotificationListenerService" />
</intent-filter>
</service>
</application>
</manifest>

View File

@ -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)

View File

@ -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)
}
}

View File

@ -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),
}

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Потрачено</string>
<string name="description">Включите Потрачено чтобы заблокировать устройство при получении тревожного сигнала. Вы можете использовать PanicKit, плитку быстрых настроек, ярлык или отправить широковещательное сообщение с этим кодом аутентификации.</string>
<string name="description">Включите Потрачено чтобы заблокировать устройство при получении тревожного сигнала. Вы можете использовать PanicKit, плитку быстрых настроек, ярлык или отправить сообщение с этим кодом аутентификации.</string>
<string name="device_admin_label">Потрачено</string>
<string name="device_admin_description">Разрешите Потрачено блокировать устройство и опционально стирать его данные при получении тревожного сигнала</string>
<string name="service_unavailable_popup">Администратор устройства недоступен</string>
@ -32,4 +32,7 @@
<string name="launchers_array_1">Плитка</string>
<string name="launchers_array_2">Ярлык</string>
<string name="launchers_array_3">Широковещательное сообщение</string>
<string name="launchers_array_4">Уведомление</string>
<string name="notification_listener_service_name">Вайпер</string>
<string name="notification_listener_service_description">Сканирует уведомления на наличие кода аутентификации</string>
</resources>

View File

@ -5,5 +5,6 @@
<item>@string/launchers_array_1</item>
<item>@string/launchers_array_2</item>
<item>@string/launchers_array_3</item>
<item>@string/launchers_array_4</item>
</string-array>
</resources>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Wasted</string>
<string name="description">Turn on Wasted to lock a device on panic trigger. You can use PanicKit, tile, shortcut or send a broadcast with this authentication code.</string>
<string name="description">Turn on Wasted to lock a device on panic trigger. You can use PanicKit, tile, shortcut or send a message with this authentication code.</string>
<string name="device_admin_label">Wasted</string>
<string name="device_admin_description">Allow Wasted to lock a device and optionally wipe its data on panic trigger</string>
<string name="service_unavailable_popup">Device admin unavailable</string>
@ -22,7 +22,7 @@
<string name="notification_channel_default_name">Default</string>
<string name="ok">OK</string>
<string name="wipe_job_description">Wipe a device on inactivity</string>
<string name="wipe_job_schedule_failed_popup">Failed to schedule a wipe service</string>
<string name="wipe_job_schedule_failed_popup">Failed to schedule a wipe job</string>
<string name="unlock_service_description">Receive unlock events</string>
<string name="unlock_service_notification_title">Unlock Service</string>
<string name="dialog_confirm_panic_title">Activate panic\?</string>
@ -32,4 +32,7 @@
<string name="launchers_array_1">Tile</string>
<string name="launchers_array_2">Shortcut</string>
<string name="launchers_array_3">Broadcast</string>
<string name="launchers_array_4">Notification</string>
<string name="notification_listener_service_name">Viper</string>
<string name="notification_listener_service_description">Scan notifications for authentication code</string>
</resources>

View File

@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 114 KiB

After

Width:  |  Height:  |  Size: 114 KiB

View File

@ -1,8 +1,8 @@
Блокировка устройства и удаление его данных при получении тревожного сигнала.
Вы можете использовать PanicKit, плитку быстрых настроек, ярлык или отправить широковещательное
сообщение с кодом аутентификации. При получении тревожного сигнала, используя API Администратора
Устройства, программа заблокирует устройство и опционально запустит стирание данных.
Вы можете использовать PanicKit, плитку быстрых настроек, ярлык или отправить сообщение с кодом
аутентификации. При получении тревожного сигнала, используя API Администратора Устройства,
программа заблокирует устройство и опционально запустит стирание данных.
Также Вы можете:
* установить лимит на максимальное количество неудачных попыток ввода пароля