Home | History | Annotate | Download | only in pm
      1 /*
      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  */
     16 package com.android.server.pm;
     17 
     18 import android.annotation.NonNull;
     19 import android.annotation.Nullable;
     20 import android.util.ArrayMap;
     21 import android.util.ArraySet;
     22 
     23 import com.android.server.pm.ShortcutService.DumpFilter;
     24 
     25 import 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  */
     33 public 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 }
     99