summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSvet Ganov <svetoslavganov@google.com>2016-02-27 11:12:13 -0800
committerSvet Ganov <svetoslavganov@google.com>2016-04-21 20:33:03 -0700
commitf9bf4f795615bac03d1b35a0138318473b1ef6bf (patch)
tree2acbadfd1827e64c6478e12dcd114d4948a4744c
parentedbf987e33d5710ec765ef3a7e516db65057a8b7 (diff)
downloadandroid_packages_apps_PackageInstaller-f9bf4f795615bac03d1b35a0138318473b1ef6bf.tar.gz
android_packages_apps_PackageInstaller-f9bf4f795615bac03d1b35a0138318473b1ef6bf.tar.bz2
android_packages_apps_PackageInstaller-f9bf4f795615bac03d1b35a0138318473b1ef6bf.zip
Cleanup of the PackageInstaller API - PackageInstaller
The PackageInstaller app manages side-loading apps as well as permission management. It should be updatable, hence should rely on system APIs to talk to the platform. This is the first step of defining an API boundary. Change-Id: I37aea1e5cc3195b8b636af6790af45fe5a9765cd
-rw-r--r--Android.mk3
-rw-r--r--AndroidManifest.xml7
-rwxr-xr-xsrc/com/android/packageinstaller/InstallAppProgress.java4
-rw-r--r--src/com/android/packageinstaller/PackageInstallerActivity.java3
-rw-r--r--src/com/android/packageinstaller/PackageUtil.java15
-rw-r--r--src/com/android/packageinstaller/permission/model/AppPermissionGroup.java16
-rw-r--r--src/com/android/packageinstaller/permission/model/Permission.java9
-rw-r--r--src/com/android/packageinstaller/permission/model/PermissionApps.java9
-rw-r--r--src/com/android/packageinstaller/permission/model/PermissionGroups.java2
-rw-r--r--src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java118
-rw-r--r--src/com/android/packageinstaller/permission/service/RuntimePermissionPresenterServiceImpl.java107
-rw-r--r--src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java5
-rw-r--r--src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java7
-rw-r--r--src/com/android/packageinstaller/permission/ui/handheld/AllAppPermissionsFragment.java2
-rw-r--r--src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java7
-rw-r--r--src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java9
-rw-r--r--src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java2
-rw-r--r--src/com/android/packageinstaller/permission/ui/television/AllAppPermissionsFragment.java2
-rw-r--r--src/com/android/packageinstaller/permission/ui/television/AppPermissionsFragment.java7
-rw-r--r--src/com/android/packageinstaller/permission/ui/television/ManagePermissionsFragment.java9
-rw-r--r--src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java2
-rw-r--r--src/com/android/packageinstaller/permission/ui/television/PermissionsFrameFragment.java2
-rw-r--r--src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java6
-rw-r--r--src/com/android/packageinstaller/permission/utils/ArrayUtils.java45
-rw-r--r--src/com/android/packageinstaller/permission/utils/IoUtils.java36
-rw-r--r--src/com/android/packageinstaller/permission/utils/Utils.java (renamed from src/com/android/packageinstaller/util/Utils.java)5
-rw-r--r--src/com/android/packageinstaller/wear/WearPackageUtil.java3
27 files changed, 355 insertions, 87 deletions
diff --git a/Android.mk b/Android.mk
index 2a825f97..d4499c28 100644
--- a/Android.mk
+++ b/Android.mk
@@ -35,6 +35,9 @@ LOCAL_PRIVILEGED_MODULE := true
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
+# Comment for now unitl all private API dependencies are removed
+# LOCAL_SDK_VERSION := system_current
+
include frameworks/base/packages/SettingsLib/common.mk
include $(BUILD_PACKAGE)
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index a750491c..8bfa28cd 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -127,6 +127,13 @@
android:permission="com.google.android.permission.INSTALL_WEARABLE_PACKAGES"
android:exported="true"/>
+ <service android:name=".permission.service.RuntimePermissionPresenterServiceImpl"
+ android:permission="android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE">
+ <intent-filter>
+ <action android:name="android.permissionpresenterservice.RuntimePermissionPresenterService"/>
+ </intent-filter>
+ </service>
+
<provider android:name=".wear.WearPackageIconProvider"
android:authorities="com.google.android.packageinstaller.wear.provider"
android:grantUriPermissions="true"
diff --git a/src/com/android/packageinstaller/InstallAppProgress.java b/src/com/android/packageinstaller/InstallAppProgress.java
index 6b8994f6..38f53e53 100755
--- a/src/com/android/packageinstaller/InstallAppProgress.java
+++ b/src/com/android/packageinstaller/InstallAppProgress.java
@@ -34,7 +34,6 @@ import android.content.pm.PackageInstaller;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
-import android.content.pm.VerificationParams;
import android.graphics.drawable.LevelListDrawable;
import android.net.Uri;
import android.os.Bundle;
@@ -47,8 +46,7 @@ import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
-
-import libcore.io.IoUtils;
+import com.android.packageinstaller.permission.utils.IoUtils;
import java.io.File;
import java.io.FileInputStream;
diff --git a/src/com/android/packageinstaller/PackageInstallerActivity.java b/src/com/android/packageinstaller/PackageInstallerActivity.java
index 801b9c2f..ab4c6045 100644
--- a/src/com/android/packageinstaller/PackageInstallerActivity.java
+++ b/src/com/android/packageinstaller/PackageInstallerActivity.java
@@ -24,7 +24,6 @@ import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.Intent;
-import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageInstaller;
@@ -51,7 +50,7 @@ import android.widget.Button;
import android.widget.ImageView;
import android.widget.TabHost;
import android.widget.TextView;
-import com.android.packageinstaller.util.Utils;
+import com.android.packageinstaller.permission.utils.Utils;
import java.io.File;
import java.io.FileOutputStream;
diff --git a/src/com/android/packageinstaller/PackageUtil.java b/src/com/android/packageinstaller/PackageUtil.java
index ab2b829e..330cbbce 100644
--- a/src/com/android/packageinstaller/PackageUtil.java
+++ b/src/com/android/packageinstaller/PackageUtil.java
@@ -47,25 +47,12 @@ public class PackageUtil {
public static final String INTENT_ATTR_PACKAGE_NAME=PREFIX+"PackageName";
/**
- * Utility method to get application information for a given {@link File}
- */
- public static ApplicationInfo getApplicationInfo(File sourcePath) {
- final PackageParser parser = new PackageParser();
- try {
- PackageParser.Package pkg = parser.parseMonolithicPackage(sourcePath, 0);
- return pkg.applicationInfo;
- } catch (PackageParserException e) {
- return null;
- }
- }
-
- /**
* Utility method to get package information for a given {@link File}
*/
public static PackageParser.Package getPackageInfo(File sourceFile) {
final PackageParser parser = new PackageParser();
try {
- return parser.parseMonolithicPackage(sourceFile, 0);
+ return parser.parsePackage(sourceFile, 0);
} catch (PackageParserException e) {
return null;
}
diff --git a/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java b/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java
index 214571ba..ca66449d 100644
--- a/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java
+++ b/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java
@@ -25,11 +25,12 @@ import android.content.pm.PackageManager;
import android.content.pm.PermissionGroupInfo;
import android.content.pm.PermissionInfo;
import android.os.Build;
+import android.os.Process;
import android.os.UserHandle;
import android.util.ArrayMap;
-import com.android.internal.util.ArrayUtils;
import com.android.packageinstaller.R;
+import com.android.packageinstaller.permission.utils.ArrayUtils;
import com.android.packageinstaller.permission.utils.LocationUtils;
import java.util.ArrayList;
@@ -93,7 +94,7 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
}
return create(context, packageInfo, groupInfo, permissionInfos,
- new UserHandle(context.getUserId()));
+ Process.myUserHandle());
}
public static AppPermissionGroup create(Context context, PackageInfo packageInfo,
@@ -145,11 +146,10 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
final boolean granted = (packageInfo.requestedPermissionsFlags[i]
& PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0;
- final int appOp = PLATFORM_PACKAGE_NAME.equals(requestedPermissionInfo.packageName)
- ? AppOpsManager.permissionToOpCode(requestedPermissionInfo.name)
- : AppOpsManager.OP_NONE;
+ final String appOp = PLATFORM_PACKAGE_NAME.equals(requestedPermissionInfo.packageName)
+ ? AppOpsManager.permissionToOp(requestedPermissionInfo.name) : null;
- final boolean appOpAllowed = appOp != AppOpsManager.OP_NONE
+ final boolean appOpAllowed = appOp != null
&& context.getSystemService(AppOpsManager.class).checkOpNoThrow(appOp,
packageInfo.applicationInfo.uid, packageInfo.packageName)
== AppOpsManager.MODE_ALLOWED;
@@ -308,8 +308,8 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
if (permission.isGranted()) {
return true;
}
- } else if (permission.isGranted() && (permission.getAppOp()
- == AppOpsManager.OP_NONE || permission.isAppOpAllowed())) {
+ } else if (permission.isGranted() && (permission.getAppOp() == null
+ || permission.isAppOpAllowed())) {
return true;
}
}
diff --git a/src/com/android/packageinstaller/permission/model/Permission.java b/src/com/android/packageinstaller/permission/model/Permission.java
index 0425c604..f9dc6e8e 100644
--- a/src/com/android/packageinstaller/permission/model/Permission.java
+++ b/src/com/android/packageinstaller/permission/model/Permission.java
@@ -16,19 +16,18 @@
package com.android.packageinstaller.permission.model;
-import android.app.AppOpsManager;
import android.content.pm.PackageManager;
public final class Permission {
private final String mName;
- private final int mAppOp;
+ private final String mAppOp;
private boolean mGranted;
private boolean mAppOpAllowed;
private int mFlags;
public Permission(String name, boolean granted,
- int appOp, boolean appOpAllowed, int flags) {
+ String appOp, boolean appOpAllowed, int flags) {
mName = name;
mGranted = granted;
mAppOp = appOp;
@@ -40,7 +39,7 @@ public final class Permission {
return mName;
}
- public int getAppOp() {
+ public String getAppOp() {
return mAppOp;
}
@@ -49,7 +48,7 @@ public final class Permission {
}
public boolean hasAppOp() {
- return mAppOp != AppOpsManager.OP_NONE;
+ return mAppOp != null;
}
public boolean isGranted() {
diff --git a/src/com/android/packageinstaller/permission/model/PermissionApps.java b/src/com/android/packageinstaller/permission/model/PermissionApps.java
index 2c0508a5..b40b5b9f 100644
--- a/src/com/android/packageinstaller/permission/model/PermissionApps.java
+++ b/src/com/android/packageinstaller/permission/model/PermissionApps.java
@@ -24,6 +24,7 @@ import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.PermissionInfo;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
+import android.os.Process;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.ArrayMap;
@@ -32,7 +33,7 @@ import android.util.Log;
import android.util.SparseArray;
import com.android.packageinstaller.R;
-import com.android.packageinstaller.util.Utils;
+import com.android.packageinstaller.permission.utils.Utils;
import java.util.ArrayList;
import java.util.Collections;
@@ -148,7 +149,8 @@ public class PermissionApps {
ArrayList<PermissionApp> permApps = new ArrayList<>();
- for (UserHandle user : UserManager.get(mContext).getUserProfiles()) {
+ UserManager userManager = mContext.getSystemService(UserManager.class);
+ for (UserHandle user : userManager.getUserProfiles()) {
List<PackageInfo> apps = mCache != null ? mCache.getPackages(user.getIdentifier())
: mPm.getInstalledPackagesAsUser(PackageManager.GET_PERMISSIONS,
user.getIdentifier());
@@ -250,8 +252,7 @@ public class PermissionApps {
return null;
}
Drawable unbadged = appInfo.loadUnbadgedIcon(mPm);
- return mPm.getUserBadgedIcon(unbadged,
- new UserHandle(UserHandle.getUserId(appInfo.uid)));
+ return mPm.getUserBadgedIcon(unbadged, Process.myUserHandle());
}
private void loadGroupInfo() {
diff --git a/src/com/android/packageinstaller/permission/model/PermissionGroups.java b/src/com/android/packageinstaller/permission/model/PermissionGroups.java
index 04dd07ff..8ca69f24 100644
--- a/src/com/android/packageinstaller/permission/model/PermissionGroups.java
+++ b/src/com/android/packageinstaller/permission/model/PermissionGroups.java
@@ -31,7 +31,7 @@ import android.os.Bundle;
import android.util.ArraySet;
import com.android.packageinstaller.R;
-import com.android.packageinstaller.util.Utils;
+import com.android.packageinstaller.permission.utils.Utils;
import java.util.ArrayList;
import java.util.Collections;
diff --git a/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java b/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java
index d7e4547a..a87976a6 100644
--- a/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java
+++ b/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java
@@ -26,19 +26,117 @@ import android.util.ArrayMap;
import android.util.ArraySet;
import com.android.packageinstaller.permission.model.PermissionApps.PermissionApp;
-import com.android.packageinstaller.util.Utils;
+import com.android.packageinstaller.permission.utils.Utils;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+/**
+ * This class handles backwards compatibility for M. Don't remove
+ * until we decide to drop M support altogether.
+ */
public class PermissionStatusReceiver extends BroadcastReceiver {
+
+ /**
+ * Broadcast action that requests current permission granted information. It will respond
+ * to the request by sending a broadcast with action defined by
+ * {@link #EXTRA_GET_PERMISSIONS_RESPONSE_INTENT}. The response will contain
+ * {@link #EXTRA_GET_PERMISSIONS_COUNT_RESULT}, as well as
+ * {@link #EXTRA_GET_PERMISSIONS_GROUP_LIST_RESULT}, with contents described below or
+ * a null upon failure.
+ *
+ * <p>If {@link Intent#EXTRA_PACKAGE_NAME} is included then the number of permissions granted, the
+ * number of permissions requested and the number of granted additional permissions
+ * by that package will be calculated and included as the first
+ * and second elements respectively of an int[] in the response as
+ * {@link #EXTRA_GET_PERMISSIONS_COUNT_RESULT}. The response will also deliver the list
+ * of localized permission group names that are granted in
+ * {@link #EXTRA_GET_PERMISSIONS_GROUP_LIST_RESULT}.
+ *
+ * <p>If {@link #EXTRA_PACKAGE_NAME} is not included then the number of apps granted any runtime
+ * permissions and the total number of apps requesting runtime permissions will be the first
+ * and second elements respectively of an int[] in the response as
+ * {@link #EXTRA_GET_PERMISSIONS_COUNT_RESULT}.
+ *
+ * @hide
+ */
+ public static final String ACTION_GET_PERMISSIONS_COUNT
+ = "android.intent.action.GET_PERMISSIONS_COUNT";
+
+ /**
+ * Broadcast action that requests list of all apps that have runtime permissions. It will
+ * respond to the request by sending a broadcast with action defined by
+ * {@link #EXTRA_GET_PERMISSIONS_PACKAGES_RESPONSE_INTENT}. The response will contain
+ * {@link #EXTRA_GET_PERMISSIONS_APP_LIST_RESULT}, as well as
+ * {@link #EXTRA_GET_PERMISSIONS_APP_LABEL_LIST_RESULT}, with contents described below or
+ * a null upon failure.
+ *
+ * <p>{@link #EXTRA_GET_PERMISSIONS_APP_LIST_RESULT} will contain a list of package names of
+ * apps that have runtime permissions. {@link #EXTRA_GET_PERMISSIONS_APP_LABEL_LIST_RESULT}
+ * will contain the list of app labels corresponding ot the apps in the first list.
+ *
+ * @hide
+ */
+ public static final String ACTION_GET_PERMISSIONS_PACKAGES
+ = "android.intent.action.GET_PERMISSIONS_PACKAGES";
+
+ /**
+ * Extra included in response to {@link #ACTION_GET_PERMISSIONS_COUNT}.
+ * @hide
+ */
+ public static final String EXTRA_GET_PERMISSIONS_COUNT_RESULT
+ = "android.intent.extra.GET_PERMISSIONS_COUNT_RESULT";
+
+ /**
+ * List of CharSequence of localized permission group labels.
+ * @hide
+ */
+ public static final String EXTRA_GET_PERMISSIONS_GROUP_LIST_RESULT
+ = "android.intent.extra.GET_PERMISSIONS_GROUP_LIST_RESULT";
+
+ /**
+ * String list of apps that have one or more runtime permissions.
+ * @hide
+ */
+ public static final String EXTRA_GET_PERMISSIONS_APP_LIST_RESULT
+ = "android.intent.extra.GET_PERMISSIONS_APP_LIST_RESULT";
+
+ /**
+ * String list of app labels for apps that have one or more runtime permissions.
+ * @hide
+ */
+ public static final String EXTRA_GET_PERMISSIONS_APP_LABEL_LIST_RESULT
+ = "android.intent.extra.GET_PERMISSIONS_APP_LABEL_LIST_RESULT";
+
+ /**
+ * Boolean list describing if the app is a system app for apps that have one or more runtime
+ * permissions.
+ * @hide
+ */
+ public static final String EXTRA_GET_PERMISSIONS_IS_SYSTEM_APP_LIST_RESULT
+ = "android.intent.extra.GET_PERMISSIONS_IS_SYSTEM_APP_LIST_RESULT";
+
+ /**
+ * Required extra to be sent with {@link #ACTION_GET_PERMISSIONS_COUNT} broadcasts.
+ * @hide
+ */
+ public static final String EXTRA_GET_PERMISSIONS_RESPONSE_INTENT
+ = "android.intent.extra.GET_PERMISSIONS_RESONSE_INTENT";
+
+ /**
+ * Required extra to be sent with {@link #ACTION_GET_PERMISSIONS_PACKAGES} broadcasts.
+ * @hide
+ */
+ public static final String EXTRA_GET_PERMISSIONS_PACKAGES_RESPONSE_INTENT
+ = "android.intent.extra.GET_PERMISSIONS_PACKAGES_RESONSE_INTENT";
+
@Override
public void onReceive(Context context, Intent intent) {
- if (Intent.ACTION_GET_PERMISSIONS_COUNT.equals(intent.getAction())) {
+ if (ACTION_GET_PERMISSIONS_COUNT.equals(intent.getAction())) {
Intent responseIntent = new Intent(intent.getStringExtra(
- Intent.EXTRA_GET_PERMISSIONS_RESPONSE_INTENT));
+ EXTRA_GET_PERMISSIONS_RESPONSE_INTENT));
responseIntent.setFlags(Intent.FLAG_RECEIVER_FOREGROUND);
int[] counts = new int[3];
@@ -54,28 +152,28 @@ public class PermissionStatusReceiver extends BroadcastReceiver {
succeeded = getAppsWithPermissionsCount(context, counts);
}
if (succeeded) {
- responseIntent.putExtra(Intent.EXTRA_GET_PERMISSIONS_COUNT_RESULT, counts);
+ responseIntent.putExtra(EXTRA_GET_PERMISSIONS_COUNT_RESULT, counts);
if (isForPackage) {
- responseIntent.putExtra(Intent.EXTRA_GET_PERMISSIONS_GROUP_LIST_RESULT,
+ responseIntent.putExtra(EXTRA_GET_PERMISSIONS_GROUP_LIST_RESULT,
grantedGroups.toArray(new CharSequence[grantedGroups.size()]));
}
}
context.sendBroadcast(responseIntent);
- } else if (Intent.ACTION_GET_PERMISSIONS_PACKAGES.equals(intent.getAction())) {
+ } else if (ACTION_GET_PERMISSIONS_PACKAGES.equals(intent.getAction())) {
Intent responseIntent = new Intent(intent.getStringExtra(
- Intent.EXTRA_GET_PERMISSIONS_PACKAGES_RESPONSE_INTENT));
+ EXTRA_GET_PERMISSIONS_PACKAGES_RESPONSE_INTENT));
responseIntent.setFlags(Intent.FLAG_RECEIVER_FOREGROUND);
List<String> appsList = new ArrayList<>();
List<CharSequence> appLabelsList = new ArrayList<>();
List<Boolean> isSystemAppList = new ArrayList<>();
if (getAppsWithRuntimePermissions(context, appsList, appLabelsList, isSystemAppList)) {
- responseIntent.putExtra(Intent.EXTRA_GET_PERMISSIONS_APP_LIST_RESULT,
+ responseIntent.putExtra(EXTRA_GET_PERMISSIONS_APP_LIST_RESULT,
appsList.toArray(new String[appsList.size()]));
- responseIntent.putExtra(Intent.EXTRA_GET_PERMISSIONS_APP_LABEL_LIST_RESULT,
+ responseIntent.putExtra(EXTRA_GET_PERMISSIONS_APP_LABEL_LIST_RESULT,
appLabelsList.toArray(new String[appLabelsList.size()]));
- responseIntent.putExtra(Intent.EXTRA_GET_PERMISSIONS_IS_SYSTEM_APP_LIST_RESULT,
+ responseIntent.putExtra(EXTRA_GET_PERMISSIONS_IS_SYSTEM_APP_LIST_RESULT,
toPrimitiveBoolArray(isSystemAppList));
}
context.sendBroadcast(responseIntent);
diff --git a/src/com/android/packageinstaller/permission/service/RuntimePermissionPresenterServiceImpl.java b/src/com/android/packageinstaller/permission/service/RuntimePermissionPresenterServiceImpl.java
new file mode 100644
index 00000000..fbd4f10c
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/service/RuntimePermissionPresenterServiceImpl.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.packageinstaller.permission.service;
+
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.permission.RuntimePermissionPresentationInfo;
+import android.permissionpresenterservice.RuntimePermissionPresenterService;
+import android.util.ArraySet;
+import android.util.Log;
+import com.android.packageinstaller.permission.model.AppPermissionGroup;
+import com.android.packageinstaller.permission.model.AppPermissions;
+import com.android.packageinstaller.permission.utils.Utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Service that provides presentation information for runtime permissions.
+ */
+public final class RuntimePermissionPresenterServiceImpl extends RuntimePermissionPresenterService {
+ private static final String LOG_TAG = "PermissionPresenter";
+
+ @Override
+ public List<RuntimePermissionPresentationInfo> onGetAppPermissions(String packageName) {
+ final PackageInfo packageInfo;
+ try {
+ packageInfo = getPackageManager().getPackageInfo(packageName,
+ PackageManager.GET_PERMISSIONS);
+ } catch (PackageManager.NameNotFoundException e) {
+ Log.e(LOG_TAG, "Error getting package:" + packageName, e);
+ return null;
+ }
+
+ List<RuntimePermissionPresentationInfo> permissions = new ArrayList<>();
+
+ AppPermissions appPermissions = new AppPermissions(this, packageInfo, null, false, null);
+ for (AppPermissionGroup group : appPermissions.getPermissionGroups()) {
+ if (Utils.shouldShowPermission(group, packageName)) {
+ final boolean granted = group.areRuntimePermissionsGranted();
+ final boolean standard = Utils.OS_PKG.equals(group.getDeclaringPackage());
+ RuntimePermissionPresentationInfo permission =
+ new RuntimePermissionPresentationInfo(group.getLabel(),
+ granted, standard);
+ permissions.add(permission);
+ }
+ }
+
+ return permissions;
+ }
+
+ @Override
+ public List<ApplicationInfo> onGetAppsUsingPermissions(boolean system) {
+ final List<ApplicationInfo> appInfos = Utils.getAllInstalledApplications(this);
+ if (appInfos == null || appInfos.isEmpty()) {
+ return null;
+ }
+ List<ApplicationInfo> appsResult = new ArrayList<>();
+ ArraySet<String> launcherPackages = Utils.getLauncherPackages(this);
+ final int appInfosSize = appInfos.size();
+ for (int i = 0; i < appInfosSize; i++) {
+ ApplicationInfo appInfo = appInfos.get(i);
+ final String packageName = appInfo.packageName;
+ final PackageInfo packageInfo;
+ try {
+ packageInfo = getPackageManager().getPackageInfo(
+ packageName, PackageManager.GET_PERMISSIONS);
+ } catch (PackageManager.NameNotFoundException e) {
+ Log.e(LOG_TAG, "Error getting package info for:" + packageName, e);
+ continue;
+
+ }
+ AppPermissions appPermissions = new AppPermissions(this,
+ packageInfo, null, false, null);
+ boolean shouldShow = false;
+
+
+ for (AppPermissionGroup group : appPermissions.getPermissionGroups()) {
+ if (Utils.shouldShowPermission(group, packageName)) {
+ shouldShow = true;
+ break;
+ }
+ }
+ if (shouldShow) {
+ if (Utils.isSystem(appPermissions, launcherPackages) == system) {
+ appsResult.add(appInfo);
+ }
+ }
+ }
+ return appsResult;
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
index 944db9a3..78d33d23 100644
--- a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
+++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
@@ -48,7 +48,6 @@ import com.android.packageinstaller.permission.model.AppPermissions;
import com.android.packageinstaller.permission.model.Permission;
import com.android.packageinstaller.permission.ui.handheld.GrantPermissionsViewHandlerImpl;
import com.android.packageinstaller.permission.utils.SafetyNetLogger;
-import libcore.util.EmptyArray;
import java.util.ArrayList;
import java.util.LinkedHashMap;
@@ -111,8 +110,8 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
// Don't allow legacy apps to request runtime permissions.
if (callingPackageInfo.applicationInfo.targetSdkVersion < Build.VERSION_CODES.M) {
// Returning empty arrays means a cancellation.
- mRequestedPermissions = EmptyArray.STRING;
- mGrantResults = EmptyArray.INT;
+ mRequestedPermissions = new String[0];
+ mGrantResults = new int[0];
setResultAndFinish();
return;
}
diff --git a/src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java
index 2bff0e28..0596c19b 100644
--- a/src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java
+++ b/src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java
@@ -16,7 +16,6 @@
package com.android.packageinstaller.permission.ui;
-import android.annotation.Nullable;
import android.app.Activity;
import android.app.DialogFragment;
@@ -46,7 +45,7 @@ import android.widget.TextView;
import com.android.packageinstaller.R;
import com.android.packageinstaller.permission.model.AppPermissionGroup;
import com.android.packageinstaller.permission.model.AppPermissions;
-import com.android.packageinstaller.util.Utils;
+import com.android.packageinstaller.permission.utils.Utils;
import com.android.packageinstaller.permission.ui.ConfirmActionDialogFragment.OnActionConfirmedListener;
import java.util.List;
@@ -117,7 +116,7 @@ public final class ReviewPermissionsActivity extends Activity
}
@Override
- public void onCreate(@Nullable Bundle savedInstanceState) {
+ public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Activity activity = getActivity();
@@ -158,7 +157,7 @@ public final class ReviewPermissionsActivity extends Activity
}
@Override
- public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
bindUi();
}
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/AllAppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/AllAppPermissionsFragment.java
index 540d8765..0c249e55 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/AllAppPermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/AllAppPermissionsFragment.java
@@ -37,7 +37,7 @@ import android.provider.Settings;
import android.util.Log;
import android.view.MenuItem;
import com.android.packageinstaller.R;
-import com.android.packageinstaller.util.Utils;
+import com.android.packageinstaller.permission.utils.Utils;
import java.util.ArrayList;
import java.util.Collections;
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java
index 3716293e..422fb124 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java
@@ -16,7 +16,6 @@
package com.android.packageinstaller.permission.ui.handheld;
-import android.annotation.Nullable;
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
@@ -51,7 +50,7 @@ import com.android.packageinstaller.permission.model.AppPermissionGroup;
import com.android.packageinstaller.permission.model.AppPermissions;
import com.android.packageinstaller.permission.utils.LocationUtils;
import com.android.packageinstaller.permission.utils.SafetyNetLogger;
-import com.android.packageinstaller.util.Utils;
+import com.android.packageinstaller.permission.utils.Utils;
import com.android.settingslib.HelpUtils;
import com.android.settingslib.RestrictedLockUtils;
@@ -144,7 +143,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader
}
@Override
- public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (mAppPermissions != null) {
bindUi(this, mAppPermissions.getPackageInfo());
@@ -378,7 +377,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader
}
@Override
- public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
String packageName = getArguments().getString(Intent.EXTRA_PACKAGE_NAME);
bindUi(this, getPackageInfo(getActivity(), packageName));
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java
index 8994cf5d..238af36d 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java
@@ -15,7 +15,6 @@
*/
package com.android.packageinstaller.permission.ui.handheld;
-import android.annotation.Nullable;
import android.app.ActionBar;
import android.app.FragmentTransaction;
import android.content.ActivityNotFoundException;
@@ -37,7 +36,7 @@ import com.android.packageinstaller.permission.model.PermissionApps;
import com.android.packageinstaller.permission.model.PermissionApps.PmCache;
import com.android.packageinstaller.permission.model.PermissionGroup;
import com.android.packageinstaller.permission.model.PermissionGroups;
-import com.android.packageinstaller.util.Utils;
+import com.android.packageinstaller.permission.utils.Utils;
import java.util.List;
@@ -115,12 +114,12 @@ public final class ManagePermissionsFragment extends PermissionsFrameFragment
}
@Override
- public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
bindPermissionUi(getActivity(), getView());
}
- private static void bindPermissionUi(@Nullable Context context, @Nullable View rootView) {
+ private static void bindPermissionUi(Context context, View rootView) {
if (context == null || rootView == null) {
return;
}
@@ -243,7 +242,7 @@ public final class ManagePermissionsFragment extends PermissionsFrameFragment
}
@Override
- public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
bindPermissionUi(getActivity(), getView());
}
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java
index 1502fcbc..df0bdd46 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java
@@ -45,7 +45,7 @@ import com.android.packageinstaller.permission.model.PermissionApps.Callback;
import com.android.packageinstaller.permission.model.PermissionApps.PermissionApp;
import com.android.packageinstaller.permission.utils.LocationUtils;
import com.android.packageinstaller.permission.utils.SafetyNetLogger;
-import com.android.packageinstaller.util.Utils;
+import com.android.packageinstaller.permission.utils.Utils;
import com.android.settingslib.HelpUtils;
import com.android.settingslib.RestrictedLockUtils;
diff --git a/src/com/android/packageinstaller/permission/ui/television/AllAppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/television/AllAppPermissionsFragment.java
index 7a40856f..0f8cb5b1 100644
--- a/src/com/android/packageinstaller/permission/ui/television/AllAppPermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/television/AllAppPermissionsFragment.java
@@ -45,7 +45,7 @@ import android.view.MenuItem;
import com.android.packageinstaller.R;
import com.android.packageinstaller.permission.model.AppPermissionGroup;
import com.android.packageinstaller.permission.model.AppPermissions;
-import com.android.packageinstaller.util.Utils;
+import com.android.packageinstaller.permission.utils.Utils;
import java.util.ArrayList;
import java.util.Collections;
diff --git a/src/com/android/packageinstaller/permission/ui/television/AppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/television/AppPermissionsFragment.java
index 7b2ff566..be7d159c 100644
--- a/src/com/android/packageinstaller/permission/ui/television/AppPermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/television/AppPermissionsFragment.java
@@ -16,7 +16,6 @@
package com.android.packageinstaller.permission.ui.television;
-import android.annotation.Nullable;
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
@@ -55,7 +54,7 @@ import com.android.packageinstaller.permission.model.AppPermissions;
import com.android.packageinstaller.permission.ui.ReviewPermissionsActivity;
import com.android.packageinstaller.permission.utils.LocationUtils;
import com.android.packageinstaller.permission.utils.SafetyNetLogger;
-import com.android.packageinstaller.util.Utils;
+import com.android.packageinstaller.permission.utils.Utils;
import java.util.ArrayList;
import java.util.List;
@@ -154,7 +153,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader
}
@Override
- public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (mAppPermissions != null) {
bindUi(this, mAppPermissions.getPackageInfo());
@@ -402,7 +401,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader
}
@Override
- public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
String packageName = getArguments().getString(Intent.EXTRA_PACKAGE_NAME);
bindUi(this, getPackageInfo(getActivity(), packageName));
diff --git a/src/com/android/packageinstaller/permission/ui/television/ManagePermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/television/ManagePermissionsFragment.java
index fd84edd7..35f866de 100644
--- a/src/com/android/packageinstaller/permission/ui/television/ManagePermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/television/ManagePermissionsFragment.java
@@ -21,7 +21,6 @@ import android.app.FragmentTransaction;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
-import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v7.preference.Preference;
import android.support.v7.preference.Preference.OnPreferenceClickListener;
@@ -30,15 +29,13 @@ import android.util.ArraySet;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
-import android.widget.ImageView;
-import android.widget.TextView;
import com.android.packageinstaller.R;
import com.android.packageinstaller.permission.model.PermissionApps;
import com.android.packageinstaller.permission.model.PermissionApps.PmCache;
import com.android.packageinstaller.permission.model.PermissionGroup;
import com.android.packageinstaller.permission.model.PermissionGroups;
-import com.android.packageinstaller.util.Utils;
+import com.android.packageinstaller.permission.utils.Utils;
import java.util.List;
@@ -115,7 +112,7 @@ public final class ManagePermissionsFragment extends SettingsWithHeader
}
@Override
- public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
bindPermissionUi(this, getView());
}
@@ -238,7 +235,7 @@ public final class ManagePermissionsFragment extends SettingsWithHeader
}
@Override
- public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
bindPermissionUi(this, getView());
}
diff --git a/src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java b/src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java
index 4fde4756..29839c14 100644
--- a/src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java
@@ -49,7 +49,7 @@ import com.android.packageinstaller.permission.model.PermissionApps.PermissionAp
import com.android.packageinstaller.permission.ui.ReviewPermissionsActivity;
import com.android.packageinstaller.permission.utils.LocationUtils;
import com.android.packageinstaller.permission.utils.SafetyNetLogger;
-import com.android.packageinstaller.util.Utils;
+import com.android.packageinstaller.permission.utils.Utils;
import java.util.ArrayList;
import java.util.List;
diff --git a/src/com/android/packageinstaller/permission/ui/television/PermissionsFrameFragment.java b/src/com/android/packageinstaller/permission/ui/television/PermissionsFrameFragment.java
index 953cde4e..6119f98c 100644
--- a/src/com/android/packageinstaller/permission/ui/television/PermissionsFrameFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/television/PermissionsFrameFragment.java
@@ -73,7 +73,7 @@ public abstract class PermissionsFrameFragment extends PreferenceFragment {
}
@Override
- public void onCreatePreferences(@Nullable Bundle savedInstanceState, String rootKey) {
+ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
PreferenceScreen preferences = getPreferenceScreen();
if (preferences == null) {
preferences = getPreferenceManager().createPreferenceScreen(getActivity());
diff --git a/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java b/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java
index 4b621a64..db1c94d8 100644
--- a/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java
+++ b/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java
@@ -17,11 +17,9 @@
package com.android.packageinstaller.permission.ui.wear;
import android.Manifest;
-import android.annotation.Nullable;
import android.app.Activity;
import android.app.Fragment;
import android.content.Intent;
-import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
@@ -39,7 +37,7 @@ import com.android.packageinstaller.permission.ui.wear.settings.PermissionsSetti
import com.android.packageinstaller.permission.ui.wear.settings.SettingsAdapter;
import com.android.packageinstaller.permission.utils.LocationUtils;
import com.android.packageinstaller.permission.utils.SafetyNetLogger;
-import com.android.packageinstaller.util.Utils;
+import com.android.packageinstaller.permission.utils.Utils;
import java.util.ArrayList;
import java.util.List;
@@ -119,7 +117,7 @@ public final class AppPermissionsFragmentWear extends TitledSettingsFragment {
}
@Override
- public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (mAppPermissions != null) {
initializeLayout(mAdapter);
diff --git a/src/com/android/packageinstaller/permission/utils/ArrayUtils.java b/src/com/android/packageinstaller/permission/utils/ArrayUtils.java
new file mode 100644
index 00000000..4b7a3947
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/utils/ArrayUtils.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.packageinstaller.permission.utils;
+
+import java.util.Objects;
+
+public final class ArrayUtils {
+ private ArrayUtils() { /* cannot be instantiated */ }
+
+ /**
+ * Checks that value is present as at least one of the elements of the array.
+ * @param array the array to check in
+ * @param value the value to check for
+ * @return true if the value is present in the array
+ */
+ public static <T> boolean contains(T[] array, T value) {
+ return indexOf(array, value) != -1;
+ }
+
+ /**
+ * Return first index of {@code value} in {@code array}, or {@code -1} if
+ * not found.
+ */
+ public static <T> int indexOf(T[] array, T value) {
+ if (array == null) return -1;
+ for (int i = 0; i < array.length; i++) {
+ if (Objects.equals(array[i], value)) return i;
+ }
+ return -1;
+ }
+}
diff --git a/src/com/android/packageinstaller/permission/utils/IoUtils.java b/src/com/android/packageinstaller/permission/utils/IoUtils.java
new file mode 100644
index 00000000..ff7d1831
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/utils/IoUtils.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.packageinstaller.permission.utils;
+
+public final class IoUtils {
+ private IoUtils() {
+ }
+
+ /**
+ * Closes 'closeable', ignoring any checked exceptions. Does nothing if 'closeable' is null.
+ */
+ public static void closeQuietly(AutoCloseable closeable) {
+ if (closeable != null) {
+ try {
+ closeable.close();
+ } catch (RuntimeException rethrown) {
+ throw rethrown;
+ } catch (Exception ignored) {
+ }
+ }
+ }
+}
diff --git a/src/com/android/packageinstaller/util/Utils.java b/src/com/android/packageinstaller/permission/utils/Utils.java
index f0d88d32..22663e13 100644
--- a/src/com/android/packageinstaller/util/Utils.java
+++ b/src/com/android/packageinstaller/permission/utils/Utils.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.packageinstaller.util;
+package com.android.packageinstaller.permission.utils;
import android.Manifest;
import android.content.Context;
@@ -32,11 +32,10 @@ import android.util.TypedValue;
import com.android.packageinstaller.permission.model.AppPermissionGroup;
import com.android.packageinstaller.permission.model.AppPermissions;
import com.android.packageinstaller.permission.model.PermissionApps.PermissionApp;
-import com.android.packageinstaller.permission.utils.LocationUtils;
import java.util.List;
-public class Utils {
+public final class Utils {
private static final String LOG_TAG = "Utils";
diff --git a/src/com/android/packageinstaller/wear/WearPackageUtil.java b/src/com/android/packageinstaller/wear/WearPackageUtil.java
index c351277e..e340d627 100644
--- a/src/com/android/packageinstaller/wear/WearPackageUtil.java
+++ b/src/com/android/packageinstaller/wear/WearPackageUtil.java
@@ -16,7 +16,6 @@
package com.android.packageinstaller.wear;
-import android.annotation.Nullable;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -87,7 +86,7 @@ public class WearPackageUtil {
* decompress it here
*/
public static File getFileFromFd(Context context, ParcelFileDescriptor fd,
- String packageName, @Nullable String compressionAlg) {
+ String packageName, String compressionAlg) {
File newFile = getTemporaryFile(context, packageName);
if (fd == null || fd.getFileDescriptor() == null) {
return null;