public boolean isAccessPermitted(ClientAppInfo appInfo) {
   Integer restrictedRuleCount = _managedAppsMap.get(appInfo);
   boolean result = false;
   if (restrictedRuleCount != null) {
     result = (restrictedRuleCount == 0);
   } else {
     Logger.w(TAG, appInfo.getIndexingKey() + " is NOT managed by this category.");
   }
   return result;
 }
  public void adjustRestrictedRuleCount(ClientAppInfo appInfo, int delta) {
    if (appInfo == null || delta == 0) return;

    if (_managedAppsMap.containsKey(appInfo) == false) {
      Logger.w(TAG, "_managedAppsMap NOT contains AppInfo: " + appInfo.getAppName());
    }

    synchronized (_managedAppsMap) {
      Integer oldCnt = _managedAppsMap.get(appInfo);
      Integer newCnt = oldCnt + delta;
      if (newCnt < 0) {
        newCnt = 0;
      }
      Logger.v(
          TAG,
          "Putting counter " + newCnt + " to _managedAppsMap for AppInfo: " + appInfo.getAppName());
      _managedAppsMap.put(appInfo, newCnt);
    }
  }
 public void removeManagedApp(ClientAppInfo appInfo) {
   if (appInfo != null) {
     synchronized (_managedAppsMap) {
       if (null == _managedAppsMap.remove(appInfo)) {
         Logger.w(TAG, "_managedAppsMap return NULL for AppInfo " + appInfo.getAppClassname());
       }
     }
   } else {
     Logger.w(TAG, "Input parameter ClientAppInfo is NULL!");
   }
 }
  @Override
  public String toString() {
    StringBuffer buff = new StringBuffer();
    buff.append("\nCate ID: " + _id).append("\tCate Name: " + _name);
    for (AccessRule rule : _rulesList) {
      buff.append("\nRule auth type: " + rule.getAccessType())
          .append("\nRule recur type: " + rule.getRecurrence().getName())
          .append("\tRecur value: " + rule.getRecurrence().getRecurValue());

      for (TimeRange tr : rule.getTimeRangeList()) {
        buff.append("\nStart Time: " + tr.getStartTime().toString())
            .append("\tEnd Time: " + tr.getEndTime().toString());
      }
    }

    for (ClientAppInfo appInfo : _managedAppsMap.keySet()) {
      buff.append("\nManaged App: " + appInfo.getAppName())
          .append(", " + appInfo.getAppPkgname())
          .append(", " + appInfo.getAppClassname());
    }

    return buff.toString();
  }