blob: 7f6f684e0b6808be861770cf4d81dd0c1233a62d [file] [log] [blame]
Makoto Onuki708703b2017-12-11 16:38:11 -08001/*
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 com.android.server.pm;
17
18import android.annotation.NonNull;
19import android.annotation.Nullable;
20import android.util.ArrayMap;
21import android.util.ArraySet;
22
23import com.android.server.pm.ShortcutService.DumpFilter;
24
25import java.io.PrintWriter;
26
27/**
28 * This class holds per-user information for {@link ShortcutService} that doesn't have to be
29 * persisted and is kept in-memory.
30 *
31 * The access to it must be guarded with the shortcut manager lock.
32 */
33public class ShortcutNonPersistentUser {
34 private final ShortcutService mService;
35
36 private final int mUserId;
37
38 /**
39 * Keep track of additional packages that other parts of the system have said are
40 * allowed to access shortcuts. The key is the part of the system it came from,
41 * the value is the package name that has access. We don't persist these because
42 * at boot all relevant system services will push this data back to us they do their
43 * normal evaluation of the state of the world.
44 */
45 private final ArrayMap<String, String> mHostPackages = new ArrayMap<>();
46
47 /**
48 * Set of package name values from above.
49 */
50 private final ArraySet<String> mHostPackageSet = new ArraySet<>();
51
52 public ShortcutNonPersistentUser(ShortcutService service, int userId) {
53 mService = service;
54 mUserId = userId;
55 }
56
57 public int getUserId() {
58 return mUserId;
59 }
60
61 public void setShortcutHostPackage(@NonNull String type, @Nullable String packageName) {
62 if (packageName != null) {
63 mHostPackages.put(type, packageName);
64 } else {
65 mHostPackages.remove(type);
66 }
67
68 mHostPackageSet.clear();
69 for (int i = 0; i < mHostPackages.size(); i++) {
70 mHostPackageSet.add(mHostPackages.valueAt(i));
71 }
72 }
73
74 public boolean hasHostPackage(@NonNull String packageName) {
75 return mHostPackageSet.contains(packageName);
76 }
77
78 public void dump(@NonNull PrintWriter pw, @NonNull String prefix, DumpFilter filter) {
79 if (filter.shouldDumpDetails()) {
80 if (mHostPackages.size() > 0) {
81 pw.print(prefix);
82 pw.print("Non-persistent: user ID:");
83 pw.println(mUserId);
84
85 pw.print(prefix);
86 pw.println(" Host packages:");
87 for (int i = 0; i < mHostPackages.size(); i++) {
88 pw.print(prefix);
89 pw.print(" ");
90 pw.print(mHostPackages.keyAt(i));
91 pw.print(": ");
92 pw.println(mHostPackages.valueAt(i));
93 }
94 pw.println();
95 }
96 }
97 }
98}