blob: 4cf34618a0b1ed9ce90612c4cbe377e167da3d2d [file] [log] [blame]
Gustav Sennton364e1602016-12-14 09:10:50 +00001/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package android.webkit;
17
18import android.content.Context;
19import android.content.pm.ApplicationInfo;
20import android.content.pm.PackageInfo;
21import android.content.pm.PackageManager.NameNotFoundException;
22import android.content.pm.UserInfo;
Gustav Sennton564c2fd2017-01-30 18:08:01 +000023import android.os.Build;
Gustav Sennton364e1602016-12-14 09:10:50 +000024import android.os.UserManager;
25
26import java.util.ArrayList;
27import java.util.List;
28
29/**
30 * Utility class for storing a (user,PackageInfo) mapping.
31 * @hide
32 */
33public class UserPackage {
34 private final UserInfo mUserInfo;
35 private final PackageInfo mPackageInfo;
36
37 public UserPackage(UserInfo user, PackageInfo packageInfo) {
38 this.mUserInfo = user;
39 this.mPackageInfo = packageInfo;
40 }
41
42 /**
43 * Returns a list of (User,PackageInfo) pairs corresponding to the PackageInfos for all
44 * device users for the package named {@param packageName}.
45 */
46 public static List<UserPackage> getPackageInfosAllUsers(Context context,
47 String packageName, int packageFlags) {
48 List<UserInfo> users = getAllUsers(context);
49 List<UserPackage> userPackages = new ArrayList<UserPackage>(users.size());
50 for (UserInfo user : users) {
51 PackageInfo packageInfo = null;
52 try {
53 packageInfo = context.getPackageManager().getPackageInfoAsUser(
54 packageName, packageFlags, user.id);
55 } catch (NameNotFoundException e) {
56 }
57 userPackages.add(new UserPackage(user, packageInfo));
58 }
59 return userPackages;
60 }
61
62 /**
63 * Returns whether the given package is enabled.
64 * This state can be changed by the user from Settings->Apps
65 */
66 public boolean isEnabledPackage() {
67 if (mPackageInfo == null) return false;
68 return mPackageInfo.applicationInfo.enabled;
69 }
70
71 /**
Nate Fischer0a6140d2017-09-05 12:37:49 -070072 * Return {@code true} if the package is installed and not hidden
Gustav Sennton364e1602016-12-14 09:10:50 +000073 */
74 public boolean isInstalledPackage() {
75 if (mPackageInfo == null) return false;
76 return (((mPackageInfo.applicationInfo.flags & ApplicationInfo.FLAG_INSTALLED) != 0)
77 && ((mPackageInfo.applicationInfo.privateFlags
78 & ApplicationInfo.PRIVATE_FLAG_HIDDEN) == 0));
79 }
80
Gustav Sennton564c2fd2017-01-30 18:08:01 +000081 /**
82 * Returns whether the package represented by {@param packageInfo} targets a sdk version
83 * supported by the current framework version.
84 */
85 public static boolean hasCorrectTargetSdkVersion(PackageInfo packageInfo) {
Nate Fischer220d86d2017-08-28 12:15:56 -070086 return packageInfo.applicationInfo.targetSdkVersion >= Build.VERSION_CODES.O_MR1;
Gustav Sennton564c2fd2017-01-30 18:08:01 +000087 }
88
Gustav Sennton364e1602016-12-14 09:10:50 +000089 public UserInfo getUserInfo() {
90 return mUserInfo;
91 }
92
93 public PackageInfo getPackageInfo() {
94 return mPackageInfo;
95 }
96
97
98 private static List<UserInfo> getAllUsers(Context context) {
99 UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
100 return userManager.getUsers(false);
101 }
102
103}