void resetProcessCrashTimeLocked(boolean resetEntireUser, int appId, int userId) {
   final ArrayMap<String, SparseArray<Long>> pmap = mProcessCrashTimes.getMap();
   for (int ip = pmap.size() - 1; ip >= 0; ip--) {
     SparseArray<Long> ba = pmap.valueAt(ip);
     for (int i = ba.size() - 1; i >= 0; i--) {
       boolean remove = false;
       final int entUid = ba.keyAt(i);
       if (!resetEntireUser) {
         if (userId == UserHandle.USER_ALL) {
           if (UserHandle.getAppId(entUid) == appId) {
             remove = true;
           }
         } else {
           if (entUid == UserHandle.getUid(userId, appId)) {
             remove = true;
           }
         }
       } else if (UserHandle.getUserId(entUid) == userId) {
         remove = true;
       }
       if (remove) {
         ba.removeAt(i);
       }
     }
     if (ba.size() == 0) {
       pmap.removeAt(ip);
     }
   }
 }
 private void update(Set<Integer> users, Map<Integer, Boolean> apps, boolean add) {
   List<Integer> network = new ArrayList<Integer>();
   List<Integer> system = new ArrayList<Integer>();
   for (Entry<Integer, Boolean> app : apps.entrySet()) {
     List<Integer> list = app.getValue() ? system : network;
     for (int user : users) {
       list.add(UserHandle.getUid(user, app.getKey()));
     }
   }
   try {
     if (add) {
       mNetd.setPermission("NETWORK", toIntArray(network));
       mNetd.setPermission("SYSTEM", toIntArray(system));
     } else {
       mNetd.clearPermission(toIntArray(network));
       mNetd.clearPermission(toIntArray(system));
     }
   } catch (RemoteException e) {
     loge("Exception when updating permissions: " + e);
   }
 }