mirror of
https://github.com/Divested-Mobile/DivestOS-Build.git
synced 2024-10-01 01:35:54 -04:00
0c4db149e1
This revokes the permissions to all user installed apps on update. Likely an expected quirk of being on 20.0 without the permission. 19.1 upgrades and new 20.0 installs should be fine. TODO: update 19.1 with the SpecialRuntimePermAppUtils too Signed-off-by: Tad <tad@spotco.us>
145 lines
6.0 KiB
Diff
145 lines
6.0 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Dmitry Muhomor <muhomor.dmitry@gmail.com>
|
|
Date: Fri, 7 Oct 2022 20:47:48 +0300
|
|
Subject: [PATCH] PackageInstallerUI: an option to skip auto-grant of INTERNET
|
|
permission
|
|
|
|
---
|
|
.../res/layout/install_content_view.xml | 25 ++++++++++---
|
|
.../PackageInstaller/res/values/strings.xml | 2 ++
|
|
.../PackageInstallerActivity.java | 35 +++++++++++++++++++
|
|
3 files changed, 58 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/packages/PackageInstaller/res/layout/install_content_view.xml b/packages/PackageInstaller/res/layout/install_content_view.xml
|
|
index 2ecd2d55ac71..4db24fffd7ea 100644
|
|
--- a/packages/PackageInstaller/res/layout/install_content_view.xml
|
|
+++ b/packages/PackageInstaller/res/layout/install_content_view.xml
|
|
@@ -70,13 +70,30 @@
|
|
|
|
</LinearLayout>
|
|
|
|
- <TextView
|
|
+ <LinearLayout
|
|
android:id="@+id/install_confirm_question"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
- style="@android:style/TextAppearance.Material.Subhead"
|
|
- android:text="@string/install_confirm_question"
|
|
- android:visibility="invisible" />
|
|
+ android:orientation="vertical"
|
|
+ android:visibility="invisible">
|
|
+
|
|
+ <TextView
|
|
+ android:layout_width="wrap_content"
|
|
+ android:layout_height="wrap_content"
|
|
+ style="@android:style/TextAppearance.Material.Subhead"
|
|
+ android:text="@string/install_confirm_question" />
|
|
+
|
|
+ <CheckBox
|
|
+ android:id="@+id/install_allow_INTERNET_permission"
|
|
+ android:layout_width="wrap_content"
|
|
+ android:layout_height="wrap_content"
|
|
+ android:layout_marginTop="16dp"
|
|
+ style="@android:style/TextAppearance.Material.Subhead"
|
|
+ android:text="@string/allow_network_permission_checkbox"
|
|
+ android:checked="true"
|
|
+ android:visibility="gone" />
|
|
+
|
|
+ </LinearLayout>
|
|
|
|
<TextView
|
|
android:id="@+id/install_confirm_question_update"
|
|
diff --git a/packages/PackageInstaller/res/values/strings.xml b/packages/PackageInstaller/res/values/strings.xml
|
|
index 688d11691477..36d3beb03ee0 100644
|
|
--- a/packages/PackageInstaller/res/values/strings.xml
|
|
+++ b/packages/PackageInstaller/res/values/strings.xml
|
|
@@ -235,4 +235,6 @@
|
|
<!-- Notification shown in status bar when an application is successfully installed.
|
|
[CHAR LIMIT=50] -->
|
|
<string name="notification_installation_success_status">Successfully installed \u201c<xliff:g id="appname" example="Package Installer">%1$s</xliff:g>\u201d</string>
|
|
+
|
|
+ <string name="allow_network_permission_checkbox">Allow Network permission</string>
|
|
</resources>
|
|
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java b/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
|
|
index 10eefebadeff..7ecd02e47852 100644
|
|
--- a/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
|
|
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
|
|
@@ -44,16 +44,19 @@ import android.content.pm.PackageManager.NameNotFoundException;
|
|
import android.net.Uri;
|
|
import android.os.Bundle;
|
|
import android.os.Process;
|
|
+import android.os.RemoteException;
|
|
import android.os.UserManager;
|
|
import android.provider.Settings;
|
|
import android.util.Log;
|
|
import android.view.View;
|
|
import android.widget.Button;
|
|
+import android.widget.CheckBox;
|
|
|
|
import com.android.internal.app.AlertActivity;
|
|
|
|
import java.io.File;
|
|
import java.util.ArrayList;
|
|
+import java.util.Arrays;
|
|
import java.util.List;
|
|
|
|
/**
|
|
@@ -132,6 +135,8 @@ public class PackageInstallerActivity extends AlertActivity {
|
|
private boolean mPermissionResultWasSet;
|
|
private boolean mAllowNextOnPause;
|
|
|
|
+ private CheckBox mGrantInternetPermission;
|
|
+
|
|
private void startInstallConfirm() {
|
|
View viewToEnable;
|
|
|
|
@@ -141,6 +146,14 @@ public class PackageInstallerActivity extends AlertActivity {
|
|
} else {
|
|
// This is a new application with no permissions.
|
|
viewToEnable = requireViewById(R.id.install_confirm_question);
|
|
+
|
|
+ if (mPkgInfo != null) {
|
|
+ String[] perms = mPkgInfo.requestedPermissions;
|
|
+ if (perms != null && Arrays.asList(perms).contains(Manifest.permission.INTERNET)) {
|
|
+ mGrantInternetPermission = requireViewById(R.id.install_allow_INTERNET_permission);
|
|
+ mGrantInternetPermission.setVisibility(View.VISIBLE);
|
|
+ }
|
|
+ }
|
|
}
|
|
|
|
viewToEnable.setVisibility(View.VISIBLE);
|
|
@@ -438,6 +451,8 @@ public class PackageInstallerActivity extends AlertActivity {
|
|
mAlert.setButton(DialogInterface.BUTTON_POSITIVE, getString(R.string.install),
|
|
(ignored, ignored2) -> {
|
|
if (mOk.isEnabled()) {
|
|
+ handleSpecialRuntimePermissionAutoGrants();
|
|
+
|
|
if (mSessionId != -1) {
|
|
mInstaller.setPermissionsResult(mSessionId, true);
|
|
mPermissionResultWasSet = true;
|
|
@@ -894,4 +909,24 @@ public class PackageInstallerActivity extends AlertActivity {
|
|
getActivity().finish();
|
|
}
|
|
}
|
|
+
|
|
+ void handleSpecialRuntimePermissionAutoGrants() {
|
|
+ var skipPermissionAutoGrants = new ArrayList<String>();
|
|
+
|
|
+ if (mGrantInternetPermission != null) {
|
|
+ if (!mGrantInternetPermission.isChecked()) {
|
|
+ skipPermissionAutoGrants.add(Manifest.permission.INTERNET);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ var pm = AppGlobals.getPackageManager();
|
|
+ var pkgName = mPkgInfo.packageName;
|
|
+ int userId = getUserId();
|
|
+ try {
|
|
+ pm.skipSpecialRuntimePermissionAutoGrantsForPackage(pkgName,
|
|
+ userId, skipPermissionAutoGrants);
|
|
+ } catch (RemoteException e) {
|
|
+ throw e.rethrowFromSystemServer();
|
|
+ }
|
|
+ }
|
|
}
|