summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2017-01-23 20:20:10 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2017-01-23 20:20:15 +0000
commiteeb4e1d2193a6a070606870b2a3f3dd4ba608017 (patch)
tree185a5ca2f26726f802db30f0a524979b3179c958 /core/java/android
parent4a65687b853a92268f4f0eb52f22e092b16f8ed3 (diff)
parent364e16029017a4e16ed727a5e501f70363d04e5a (diff)
Merge "Change WebView fallback mechanism to consider all users' package states."
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/webkit/UserPackage.java94
1 files changed, 94 insertions, 0 deletions
diff --git a/core/java/android/webkit/UserPackage.java b/core/java/android/webkit/UserPackage.java
new file mode 100644
index 000000000000..404bcf453aaf
--- /dev/null
+++ b/core/java/android/webkit/UserPackage.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2017 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 android.webkit;
+
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.UserInfo;
+import android.os.UserManager;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Utility class for storing a (user,PackageInfo) mapping.
+ * @hide
+ */
+public class UserPackage {
+ private final UserInfo mUserInfo;
+ private final PackageInfo mPackageInfo;
+
+ public UserPackage(UserInfo user, PackageInfo packageInfo) {
+ this.mUserInfo = user;
+ this.mPackageInfo = packageInfo;
+ }
+
+ /**
+ * Returns a list of (User,PackageInfo) pairs corresponding to the PackageInfos for all
+ * device users for the package named {@param packageName}.
+ */
+ public static List<UserPackage> getPackageInfosAllUsers(Context context,
+ String packageName, int packageFlags) {
+ List<UserInfo> users = getAllUsers(context);
+ List<UserPackage> userPackages = new ArrayList<UserPackage>(users.size());
+ for (UserInfo user : users) {
+ PackageInfo packageInfo = null;
+ try {
+ packageInfo = context.getPackageManager().getPackageInfoAsUser(
+ packageName, packageFlags, user.id);
+ } catch (NameNotFoundException e) {
+ }
+ userPackages.add(new UserPackage(user, packageInfo));
+ }
+ return userPackages;
+ }
+
+ /**
+ * Returns whether the given package is enabled.
+ * This state can be changed by the user from Settings->Apps
+ */
+ public boolean isEnabledPackage() {
+ if (mPackageInfo == null) return false;
+ return mPackageInfo.applicationInfo.enabled;
+ }
+
+ /**
+ * Return true if the package is installed and not hidden
+ */
+ public boolean isInstalledPackage() {
+ if (mPackageInfo == null) return false;
+ return (((mPackageInfo.applicationInfo.flags & ApplicationInfo.FLAG_INSTALLED) != 0)
+ && ((mPackageInfo.applicationInfo.privateFlags
+ & ApplicationInfo.PRIVATE_FLAG_HIDDEN) == 0));
+ }
+
+ public UserInfo getUserInfo() {
+ return mUserInfo;
+ }
+
+ public PackageInfo getPackageInfo() {
+ return mPackageInfo;
+ }
+
+
+ private static List<UserInfo> getAllUsers(Context context) {
+ UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
+ return userManager.getUsers(false);
+ }
+
+}