summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AndroidManifest.xml4
-rw-r--r--src/com/android/packageinstaller/PackageInstallerActivity.java76
2 files changed, 41 insertions, 39 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 456c565f..221029e5 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -10,7 +10,9 @@
<uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_USERS" />
- <uses-permission android:name="android.permission.GRANT_REVOKE_PERMISSIONS" />
+ <uses-permission android:name="android.permission.GRANT_RUNTIME_PERMISSIONS" />
+ <uses-permission android:name="android.permission.REVOKE_RUNTIME_PERMISSIONS" />
+ <uses-permission android:name="android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS" />
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
<uses-permission android:name="android.permission.READ_INSTALL_SESSIONS" />
<uses-permission android:name="android.permission.UPDATE_APP_OPS_STATS" />
diff --git a/src/com/android/packageinstaller/PackageInstallerActivity.java b/src/com/android/packageinstaller/PackageInstallerActivity.java
index e9b50315..d0d6947e 100644
--- a/src/com/android/packageinstaller/PackageInstallerActivity.java
+++ b/src/com/android/packageinstaller/PackageInstallerActivity.java
@@ -126,53 +126,59 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
}
}
});
-
+ // If the app supports runtime permissions the new permissions will
+ // be requested at runtime, hence we do not show them at install.
+ boolean supportsRuntimePermissions = mPkgInfo.applicationInfo.targetSdkVersion
+ >= Build.VERSION_CODES.MNC;
boolean permVisible = false;
mScrollView = null;
mOkCanInstall = false;
int msg = 0;
- if (mPkgInfo != null) {
- AppSecurityPermissions perms = new AppSecurityPermissions(this, mPkgInfo);
- final int N = perms.getPermissionCount(AppSecurityPermissions.WHICH_ALL);
- if (mAppInfo != null) {
- msg = (mAppInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0
- ? R.string.install_confirm_question_update_system
- : R.string.install_confirm_question_update;
- mScrollView = new CaffeinatedScrollView(this);
- mScrollView.setFillViewport(true);
- boolean newPermissionsFound =
+
+ AppSecurityPermissions perms = new AppSecurityPermissions(this, mPkgInfo);
+ final int N = perms.getPermissionCount(AppSecurityPermissions.WHICH_ALL);
+ if (mAppInfo != null) {
+ msg = (mAppInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0
+ ? R.string.install_confirm_question_update_system
+ : R.string.install_confirm_question_update;
+ mScrollView = new CaffeinatedScrollView(this);
+ mScrollView.setFillViewport(true);
+ boolean newPermissionsFound = false;
+ if (!supportsRuntimePermissions) {
+ newPermissionsFound =
(perms.getPermissionCount(AppSecurityPermissions.WHICH_NEW) > 0);
mInstallFlowAnalytics.setNewPermissionsFound(newPermissionsFound);
if (newPermissionsFound) {
permVisible = true;
mScrollView.addView(perms.getPermissionsView(
AppSecurityPermissions.WHICH_NEW));
- } else {
- LayoutInflater inflater = (LayoutInflater)getSystemService(
- Context.LAYOUT_INFLATER_SERVICE);
- TextView label = (TextView)inflater.inflate(R.layout.label, null);
- label.setText(R.string.no_new_perms);
- mScrollView.addView(label);
}
- adapter.addTab(tabHost.newTabSpec(TAB_ID_NEW).setIndicator(
- getText(R.string.newPerms)), mScrollView);
- } else {
- findViewById(R.id.tabscontainer).setVisibility(View.GONE);
- findViewById(R.id.divider).setVisibility(View.VISIBLE);
}
- if (N > 0) {
- permVisible = true;
+ if (!supportsRuntimePermissions && !newPermissionsFound) {
LayoutInflater inflater = (LayoutInflater)getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
- View root = inflater.inflate(R.layout.permissions_list, null);
- if (mScrollView == null) {
- mScrollView = (CaffeinatedScrollView)root.findViewById(R.id.scrollview);
- }
- ((ViewGroup)root.findViewById(R.id.permission_list)).addView(
- perms.getPermissionsView(AppSecurityPermissions.WHICH_ALL));
- adapter.addTab(tabHost.newTabSpec(TAB_ID_ALL).setIndicator(
- getText(R.string.allPerms)), root);
+ TextView label = (TextView)inflater.inflate(R.layout.label, null);
+ label.setText(R.string.no_new_perms);
+ mScrollView.addView(label);
}
+ adapter.addTab(tabHost.newTabSpec(TAB_ID_NEW).setIndicator(
+ getText(R.string.newPerms)), mScrollView);
+ } else {
+ findViewById(R.id.tabscontainer).setVisibility(View.GONE);
+ findViewById(R.id.divider).setVisibility(View.VISIBLE);
+ }
+ if (!supportsRuntimePermissions && N > 0) {
+ permVisible = true;
+ LayoutInflater inflater = (LayoutInflater)getSystemService(
+ Context.LAYOUT_INFLATER_SERVICE);
+ View root = inflater.inflate(R.layout.permissions_list, null);
+ if (mScrollView == null) {
+ mScrollView = (CaffeinatedScrollView)root.findViewById(R.id.scrollview);
+ }
+ ((ViewGroup)root.findViewById(R.id.permission_list)).addView(
+ perms.getPermissionsView(AppSecurityPermissions.WHICH_ALL));
+ adapter.addTab(tabHost.newTabSpec(TAB_ID_ALL).setIndicator(
+ getText(R.string.allPerms)), root);
}
mInstallFlowAnalytics.setPermissionsDisplayed(permVisible);
if (!permVisible) {
@@ -392,12 +398,6 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
}
private void initiateInstall() {
- if (mPkgInfo.applicationInfo
- .targetSdkVersion > Build.VERSION_CODES.LOLLIPOP_MR1) {
- startInstall();
- return;
- }
-
String pkgName = mPkgInfo.packageName;
// Check if there is already a package on the device with this name
// but it has been renamed to something else.