add consent dialog for accessibility service

This commit is contained in:
Josia Pietsch 2024-12-07 02:21:01 +01:00
parent 46aaa91fe9
commit 97d10d09b5
Signed by: jrpie
GPG key ID: E70B571D66986A2D
6 changed files with 98 additions and 8 deletions

View file

@ -1,12 +1,14 @@
package de.jrpie.android.launcher.actions.lock package de.jrpie.android.launcher.actions.lock
import android.accessibilityservice.AccessibilityService import android.accessibilityservice.AccessibilityService
import android.app.AlertDialog
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Build import android.os.Build
import android.provider.Settings import android.provider.Settings
import android.util.Log import android.util.Log
import android.view.accessibility.AccessibilityEvent import android.view.accessibility.AccessibilityEvent
import android.widget.CheckBox
import android.widget.Toast import android.widget.Toast
import de.jrpie.android.launcher.R import de.jrpie.android.launcher.R
@ -50,6 +52,32 @@ class LauncherAccessibilityService : AccessibilityService() {
.contains("${context.packageName}/${LauncherAccessibilityService::class.java.name}") .contains("${context.packageName}/${LauncherAccessibilityService::class.java.name}")
.also { Log.d(TAG, "Accessibility Service enabled: $it") } .also { Log.d(TAG, "Accessibility Service enabled: $it") }
} }
fun showEnableDialog(context: Context) {
AlertDialog.Builder(context, R.style.AlertDialogDanger).apply {
setView(R.layout.dialog_consent_accessibility)
setTitle(R.string.dialog_consent_accessibility_title)
setPositiveButton(R.string.dialog_consent_accessibility_ok) { _, _ ->
lockScreen(context)
}
setNegativeButton(R.string.dialog_consent_accessibility_cancel) { _, _ -> }
}.create().also { it.show() }.apply {
val buttonOk = getButton(AlertDialog.BUTTON_POSITIVE)
val checkboxes = listOf(
findViewById<CheckBox>(R.id.dialog_consent_accessibility_checkbox_1),
findViewById(R.id.dialog_consent_accessibility_checkbox_2),
findViewById(R.id.dialog_consent_accessibility_checkbox_3),
findViewById(R.id.dialog_consent_accessibility_checkbox_4),
)
val update = {
buttonOk.isEnabled = checkboxes.map { b -> b?.isChecked == true }.all { it }
}
update()
checkboxes.forEach { c ->
c?.setOnClickListener { _ -> update() }
}
}
}
} }

View file

@ -22,7 +22,7 @@ enum class LockMethod(
ACCESSIBILITY_SERVICE( ACCESSIBILITY_SERVICE(
LauncherAccessibilityService::lockScreen, LauncherAccessibilityService::lockScreen,
LauncherAccessibilityService::isEnabled, LauncherAccessibilityService::isEnabled,
LauncherAccessibilityService::lockScreen LauncherAccessibilityService::showEnableDialog
), ),
; ;

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:alpha="0.2" android:color="?android:color" />
<item android:color="?android:color" />
</selector>

View file

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/AlertDialogDanger"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="20dp">
<de.jrpie.android.launcher.ui.util.HtmlTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/dialog_consent_accessibility_text" />
<Space
android:layout_width="match_parent"
android:layout_height="20dp" />
<CheckBox
android:id="@+id/dialog_consent_accessibility_checkbox_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:text="@string/dialog_consent_accessibility_privileges" />
<CheckBox
android:id="@+id/dialog_consent_accessibility_checkbox_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:text="@string/dialog_consent_accessibility_other_options" />
<CheckBox
android:id="@+id/dialog_consent_accessibility_checkbox_3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:text="@string/dialog_consent_accessibility_data_collection" />
<CheckBox
android:id="@+id/dialog_consent_accessibility_checkbox_4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:text="@string/dialog_consent_accessibility_consent" />
</LinearLayout>
</ScrollView>

View file

@ -298,4 +298,12 @@
<string name="dialog_select_color_cancel">Cancel</string> <string name="dialog_select_color_cancel">Cancel</string>
<string name="dialog_select_color_color_hex">Color</string> <string name="dialog_select_color_color_hex">Color</string>
<string name="dialog_choose_color_title">Choose color</string> <string name="dialog_choose_color_title">Choose color</string>
<string name="dialog_consent_accessibility_privileges">I am aware that this will grant far-reaching privileges to µLauncher.</string>
<string name="dialog_consent_accessibility_other_options">I am aware that other options exist (using device administrator privileges or the power button).</string>
<string name="dialog_consent_accessibility_consent">I consent to µLauncher using the accessibility service to provide functionality unrelated to accessibility.</string>
<string name="dialog_consent_accessibility_data_collection">I consent to µLauncher not collecting any data.</string>
<string name="dialog_consent_accessibility_text"><![CDATA[You are about to activate the accessibility service. This will grant <strong>far-reaching privileges</strong> to µLauncher.<br/>µLauncher will use these privileges <strong>only to lock the screen</strong>. µLauncher <strong>will never collect any data</strong>. In particular, µLauncher does not use the accessibility service to collect any data.]]></string>
<string name="dialog_consent_accessibility_title">Activating the Accessibility Service</string>
<string name="dialog_consent_accessibility_ok">Activate Accessibility Service</string>
<string name="dialog_consent_accessibility_cancel">Cancel</string>
</resources> </resources>

View file

@ -116,19 +116,18 @@
<item name="android:textColor">#000</item> <item name="android:textColor">#000</item>
</style> </style>
<style name="PopupMenuCustom" parent="@android:style/Widget.PopupMenu" tools:keep="@style/PopupMenuCustom"> <style name="PopupMenuCustom" parent="@android:style/Widget.PopupMenu" tools:keep="@style/PopupMenuCustom">
<item name="android:popupBackground">#252827</item> <item name="android:popupBackground">#252827</item>
</style> </style>
<style name="AlertDialogCustom" parent="Theme.AppCompat.Light.Dialog.Alert"> <style name="AlertDialogCustom" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="android:textColor">#000000</item>
<item name="android:background">#ffffff</item>
<item name="android:color">#000000</item> <item name="android:color">#000000</item>
<item name="android:textColor">@color/text_color_toggle</item>
<item name="android:background">#ffffff</item>
</style>
<style name="AlertDialogDanger" parent="AlertDialogCustom">
<item name="buttonTint">#ff0000</item>
</style> </style>
<!-- Set the fade in animation on all activities by default --> <!-- Set the fade in animation on all activities by default -->