Add preference for giving SYSTEM_ALERT_WINDOW permission
This commit is contained in:
@@ -5,8 +5,10 @@ import android.content.DialogInterface
|
|||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
|
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
|
||||||
|
import android.net.Uri
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.provider.Settings
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
@@ -97,6 +99,14 @@ internal class SettingsActivity : AppCompatActivity(), OnSharedPreferenceChangeL
|
|||||||
Utils.setExcludeFromRecent(requireContext(), value as Boolean)
|
Utils.setExcludeFromRecent(requireContext(), value as Boolean)
|
||||||
return@OnPreferenceChangeListener true
|
return@OnPreferenceChangeListener true
|
||||||
}
|
}
|
||||||
|
findPreference<SwitchPreferenceCompat>(
|
||||||
|
getString(R.string.setting_key_intent_dialog_permission)
|
||||||
|
)?.let {
|
||||||
|
it.setOnPreferenceChangeListener { _, _ ->
|
||||||
|
openSystemAlertWindowPermissionPage()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
checkSystemAlertWindowPermission()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDisplayPreferenceDialog(preference: Preference) {
|
override fun onDisplayPreferenceDialog(preference: Preference) {
|
||||||
@@ -107,6 +117,35 @@ internal class SettingsActivity : AppCompatActivity(), OnSharedPreferenceChangeL
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
checkSystemAlertWindowPermission()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun openSystemAlertWindowPermissionPage(): Boolean {
|
||||||
|
Intent(
|
||||||
|
Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
|
||||||
|
Uri.parse("package:${requireContext().packageName}")
|
||||||
|
).apply {
|
||||||
|
startActivity(this)
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun checkSystemAlertWindowPermission() {
|
||||||
|
findPreference<SwitchPreferenceCompat>(
|
||||||
|
getString(R.string.setting_key_intent_dialog_permission)
|
||||||
|
)?.let {
|
||||||
|
val canDrawOverlays = Settings.canDrawOverlays(requireContext())
|
||||||
|
it.isChecked = canDrawOverlays
|
||||||
|
it.summary = if (canDrawOverlays) {
|
||||||
|
getString(R.string.setting_summary_intent_dialog_permission_granted)
|
||||||
|
} else {
|
||||||
|
getString(R.string.setting_summary_intent_dialog_permission)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun showListPreferenceDialog(preference: ListPreference) {
|
private fun showListPreferenceDialog(preference: ListPreference) {
|
||||||
val dialogFragment = MaterialListPreference()
|
val dialogFragment = MaterialListPreference()
|
||||||
dialogFragment.arguments = Bundle(1).apply { putString("key", preference.key) }
|
dialogFragment.arguments = Bundle(1).apply { putString("key", preference.key) }
|
||||||
|
|||||||
@@ -86,6 +86,10 @@
|
|||||||
<string name="setting_key_notification_channels">notification_channels</string>
|
<string name="setting_key_notification_channels">notification_channels</string>
|
||||||
<string name="setting_key_exclude_from_recent">exclude_from_recent</string>
|
<string name="setting_key_exclude_from_recent">exclude_from_recent</string>
|
||||||
<string name="setting_exclude_from_recent">Exclude from recents</string>
|
<string name="setting_exclude_from_recent">Exclude from recents</string>
|
||||||
|
<string name="setting_intent_dialog_permission">Intent Action Permission</string>
|
||||||
|
<string name="setting_key_intent_dialog_permission">intent_dialog_permission</string>
|
||||||
|
<string name="setting_summary_intent_dialog_permission">To always show incoming intent URLs, give permission to show this app on top of other apps.</string>
|
||||||
|
<string name="setting_summary_intent_dialog_permission_granted">Permission granted.</string>
|
||||||
<string name="push_message">Push message</string>
|
<string name="push_message">Push message</string>
|
||||||
<string name="appListDescription">App:</string>
|
<string name="appListDescription">App:</string>
|
||||||
<string name="priorityDescription">Priority:</string>
|
<string name="priorityDescription">Priority:</string>
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools">
|
||||||
|
|
||||||
<PreferenceCategory app:title="@string/settings_appearance" >
|
<PreferenceCategory app:title="@string/settings_appearance" >
|
||||||
<ListPreference
|
<ListPreference
|
||||||
@@ -37,6 +38,11 @@
|
|||||||
android:key="@string/setting_key_notification_channels"
|
android:key="@string/setting_key_notification_channels"
|
||||||
android:title="@string/setting_notification_channels"
|
android:title="@string/setting_notification_channels"
|
||||||
app:singleLineTitle="false" />
|
app:singleLineTitle="false" />
|
||||||
|
|
||||||
|
<SwitchPreferenceCompat
|
||||||
|
android:key="@string/setting_key_intent_dialog_permission"
|
||||||
|
android:title="@string/setting_intent_dialog_permission"
|
||||||
|
tools:summary="@string/setting_summary_intent_dialog_permission" />
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|||||||
Reference in New Issue
Block a user