From 933b7b68865550dd8b2a63c9caf49d6a949fb191 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Wed, 24 Apr 2024 15:41:26 +0530 Subject: [PATCH] DeviceOwnerReceiver: Add minimal support for device owner API SessionInstaller can commit silent installs if the app is device owner. Implemented on request of users. This still needs user to set the app as device owner manually using ADB (only possible if the device has no accounts setup yet). Co-authored-by: Syuugo Signed-off-by: Aayush Gupta --- app/src/main/AndroidManifest.xml | 17 +++++++++++++ .../data/receiver/DeviceOwnerReceiver.kt | 5 ++++ .../java/com/aurora/store/util/Preferences.kt | 1 + .../ui/preferences/InstallationPreference.kt | 25 +++++++++++++++++++ app/src/main/res/values/strings.xml | 5 ++++ .../main/res/xml/device_owner_receiver.xml | 2 ++ .../main/res/xml/preferences_installation.xml | 7 ++++++ 7 files changed, 62 insertions(+) create mode 100644 app/src/main/java/com/aurora/store/data/receiver/DeviceOwnerReceiver.kt create mode 100644 app/src/main/res/xml/device_owner_receiver.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index cec0787cb..c33bb0580 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -58,6 +58,10 @@ android:name="android.hardware.gamepad" android:required="false"/> + + + + + + + + + + diff --git a/app/src/main/java/com/aurora/store/data/receiver/DeviceOwnerReceiver.kt b/app/src/main/java/com/aurora/store/data/receiver/DeviceOwnerReceiver.kt new file mode 100644 index 000000000..cc5fb4184 --- /dev/null +++ b/app/src/main/java/com/aurora/store/data/receiver/DeviceOwnerReceiver.kt @@ -0,0 +1,5 @@ +package com.aurora.store.data.receiver + +import android.app.admin.DeviceAdminReceiver + +class DeviceOwnerReceiver : DeviceAdminReceiver() diff --git a/app/src/main/java/com/aurora/store/util/Preferences.kt b/app/src/main/java/com/aurora/store/util/Preferences.kt index b500207b6..3046943e6 100644 --- a/app/src/main/java/com/aurora/store/util/Preferences.kt +++ b/app/src/main/java/com/aurora/store/util/Preferences.kt @@ -47,6 +47,7 @@ object Preferences { const val PREFERENCE_DOWNLOADS_CACHE_TIME = "PREFERENCE_DOWNLOADS_CACHE_TIME" const val PREFERENCE_AUTO_DELETE = "PREFERENCE_AUTO_DELETE" + const val PREFERENCE_INSTALLATION_DEVICE_OWNER = "PREFERENCE_INSTALLATION_DEVICE_OWNER" const val INSTALLATION_ABANDON_SESSION = "INSTALLATION_ABANDON_SESSION" const val PREFERENCE_TOS_READ = "PREFERENCE_TOS_READ" diff --git a/app/src/main/java/com/aurora/store/view/ui/preferences/InstallationPreference.kt b/app/src/main/java/com/aurora/store/view/ui/preferences/InstallationPreference.kt index d69f78d69..f1895eb7f 100644 --- a/app/src/main/java/com/aurora/store/view/ui/preferences/InstallationPreference.kt +++ b/app/src/main/java/com/aurora/store/view/ui/preferences/InstallationPreference.kt @@ -19,6 +19,9 @@ package com.aurora.store.view.ui.preferences +import android.app.admin.DevicePolicyManager +import android.content.Context +import android.content.DialogInterface import android.content.pm.PackageManager import android.os.Bundle import android.view.View @@ -38,6 +41,7 @@ import com.aurora.store.util.CommonUtil import com.aurora.store.util.Log import com.aurora.store.util.PackageUtil import com.aurora.store.util.Preferences +import com.aurora.store.util.Preferences.PREFERENCE_INSTALLATION_DEVICE_OWNER import com.aurora.store.util.save import com.aurora.store.view.custom.preference.AuroraListPreference import com.topjohnwu.superuser.Shell @@ -72,6 +76,27 @@ class InstallationPreference : BasePreferenceFragment() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.preferences_installation, rootKey) + + findPreference(PREFERENCE_INSTALLATION_DEVICE_OWNER)?.apply { + val packageName = context.packageName + val devicePolicyManager = + context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager + + isVisible = devicePolicyManager.isDeviceOwnerApp(packageName) + setOnPreferenceClickListener { + context.showDialog( + context.getString(R.string.pref_clear_device_owner_title), + context.getString(R.string.pref_clear_device_owner_desc), + { _: DialogInterface, _: Int -> + @Suppress("DEPRECATION") + devicePolicyManager.clearDeviceOwnerApp(packageName) + activity?.recreate() + }, + { dialog: DialogInterface, _: Int -> dialog.dismiss() } + ) + true + } + } } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a2d19f86c..030046b12 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -439,4 +439,9 @@ Keep downloads cache How long to preserve downloads cache (failed, cancelled and completed), in hours + + + Clear device owner + Removes Aurora Store as the device owner app + This will revoke session installer\'s permission to silently install app. Proceed with clearing device ownership? diff --git a/app/src/main/res/xml/device_owner_receiver.xml b/app/src/main/res/xml/device_owner_receiver.xml new file mode 100644 index 000000000..af18155c5 --- /dev/null +++ b/app/src/main/res/xml/device_owner_receiver.xml @@ -0,0 +1,2 @@ + + diff --git a/app/src/main/res/xml/preferences_installation.xml b/app/src/main/res/xml/preferences_installation.xml index ab19bcb5a..3343c3da7 100644 --- a/app/src/main/res/xml/preferences_installation.xml +++ b/app/src/main/res/xml/preferences_installation.xml @@ -41,6 +41,13 @@ app:summary="@string/pref_abandon_session_desc" app:title="@string/pref_abandon_session" /> + +