Exemple #1
0
 /**
  * Set policy bundle.
  *
  * @param code - Operation code.
  */
 public void setPolicyBundle(String code) {
   try {
     resultBuilder.build(code, new JSONObject(bundleParams.toString()));
   } catch (JSONException e) {
     Log.e(TAG, "Invalid JSON format." + e);
   }
 }
Exemple #2
0
  /**
   * Configure device WIFI profile.
   *
   * @param code - Operation code.
   * @param data - Data required(SSID, Password).
   * @param requestMode - Request mode(Normal mode or policy bundle mode).
   */
  public void configureWifi(String code, String data) {
    boolean wifistatus = false;
    String ssid = null;
    String password = null;

    try {
      JSONObject wifiData = new JSONObject(data);
      if (!wifiData.isNull(resources.getString(R.string.intent_extra_ssid))) {
        ssid = (String) wifiData.get(resources.getString(R.string.intent_extra_ssid));
      }
      if (!wifiData.isNull(resources.getString(R.string.intent_extra_password))) {
        password = (String) wifiData.get(resources.getString(R.string.intent_extra_password));
      }
    } catch (JSONException e) {
      Log.e(TAG, "Invalid JSON format " + e.toString());
    }

    WiFiConfig config = new WiFiConfig(context.getApplicationContext());

    wifistatus = config.saveWEPConfig(ssid, password);

    String status = null;
    if (wifistatus) {
      status = resources.getString(R.string.shared_pref_default_status);
    } else {
      status = resources.getString(R.string.shared_pref_false_status);
    }

    resultBuilder.build(code, status);
  }
Exemple #3
0
  /**
   * Disable/Enable device camera.
   *
   * @param code - Operation code.
   * @param data - Data required(Camera enable/disable switch).
   * @param requestMode - Request mode(Normal mode or policy bundle mode).
   */
  public void disableCamera(String code, String data) {
    boolean camFunc = false;
    try {
      JSONObject inputData = new JSONObject(data);
      if (!inputData.isNull(resources.getString(R.string.intent_extra_function))
          && inputData
              .get(resources.getString(R.string.intent_extra_function))
              .toString()
              .equalsIgnoreCase(resources.getString(R.string.intent_extra_enable))) {
        camFunc = false;
      } else if (!inputData.isNull(resources.getString(R.string.intent_extra_function))
          && inputData
              .get(resources.getString(R.string.intent_extra_function))
              .toString()
              .equalsIgnoreCase(resources.getString(R.string.intent_extra_disable))) {
        camFunc = true;
      } else if (!inputData.isNull(resources.getString(R.string.intent_extra_function))) {
        camFunc =
            Boolean.parseBoolean(
                inputData.get(resources.getString(R.string.intent_extra_function)).toString());
      }

      ComponentName cameraAdmin = new ComponentName(context, AgentDeviceAdminReceiver.class);

      resultBuilder.build(code);

      devicePolicyManager.setCameraDisabled(cameraAdmin, camFunc);
    } catch (JSONException e) {
      Log.e(TAG, "Invalid JSON format." + e);
    }
  }
Exemple #4
0
  /**
   * Wipe the device.
   *
   * @param code - Operation code.
   * @param data - Data required by the operation(PIN).
   */
  public void wipeDevice(String code, String data) {
    String inputPin;
    String savedPin = Preference.getString(context, resources.getString(R.string.shared_pref_pin));

    try {
      JSONObject wipeKey = new JSONObject(data);
      inputPin = (String) wipeKey.get(resources.getString(R.string.shared_pref_pin));
      String status;
      if (inputPin.trim().equals(savedPin.trim())) {
        status = resources.getString(R.string.shared_pref_default_status);
      } else {
        status = resources.getString(R.string.shared_pref_false_status);
      }

      resultBuilder.build(code, status);

      if (inputPin.trim().equals(savedPin.trim())) {
        Toast.makeText(context, resources.getString(R.string.toast_message_wipe), Toast.LENGTH_LONG)
            .show();
        try {
          Thread.sleep(PRE_WIPE_WAIT_TIME);
        } catch (InterruptedException e) {
          Log.e(TAG, "Wipe pause interrupted :" + e.toString());
        }
        devicePolicyManager.wipeData(ACTIVATION_REQUEST);
      } else {
        Toast.makeText(
                context, resources.getString(R.string.toast_message_wipe_failed), Toast.LENGTH_LONG)
            .show();
      }
    } catch (JSONException e) {
      Log.e(TAG, "Invalid JSON format." + e);
    }
  }
Exemple #5
0
  /**
   * Display notification.
   *
   * @param code - Operation code.
   */
  public void displayNotification(String code) {
    String notification = null;

    try {
      JSONObject inputData = new JSONObject(code);
      if (inputData.get(resources.getString(R.string.intent_extra_notification)).toString() != null
          && !inputData
              .get(resources.getString(R.string.intent_extra_notification))
              .toString()
              .isEmpty()) {
        notification =
            inputData.get(resources.getString(R.string.intent_extra_notification)).toString();
      }

      resultBuilder.build(code);

      if (notification != null) {
        Intent intent = new Intent(context, AlertActivity.class);
        intent.putExtra(resources.getString(R.string.intent_extra_message), notification);
        intent.setFlags(
            Intent.FLAG_ACTIVITY_CLEAR_TASK
                | Intent.FLAG_ACTIVITY_CLEAR_TOP
                | Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
      }
    } catch (JSONException e) {
      Log.e(TAG, "Invalid JSON format." + e);
    }
  }
Exemple #6
0
  /**
   * Blacklisting apps.
   *
   * @param code - Operation code.
   * @param data - Data required(Application data).
   */
  public void blacklistApps(String code, String data) {
    ArrayList<DeviceAppInfo> apps = appList.getInstalledApps();
    JSONArray appList = new JSONArray();
    String identity = null;
    try {
      JSONObject resultApp = new JSONObject(data);
      if (!resultApp.isNull(resources.getString(R.string.intent_extra_data))) {
        resultApp = (JSONObject) resultApp.get(resources.getString(R.string.intent_extra_data));
      }

      identity = (String) resultApp.get(resources.getString(R.string.intent_extra_identity));
    } catch (JSONException e) {
      Log.e(TAG, "Invalid JSON format." + e);
    }

    for (DeviceAppInfo app : apps) {
      JSONObject result = new JSONObject();
      try {
        result.put(resources.getString(R.string.intent_extra_name), app.getAppname());
        result.put(resources.getString(R.string.intent_extra_package), app.getPackagename());
        if (identity.trim().equals(app.getPackagename())) {
          result.put(resources.getString(R.string.intent_extra_not_violated), false);
          result.put(resources.getString(R.string.intent_extra_package), app.getPackagename());
        } else {
          result.put(resources.getString(R.string.intent_extra_not_violated), true);
        }

      } catch (JSONException e) {
        Log.e(TAG, "Invalid JSON format." + e);
      }
      appList.put(result);
    }

    resultBuilder.build(code, appList);
  }
Exemple #7
0
  /**
   * Encrypt/Decrypt device storage.
   *
   * @param code - Operation code.
   * @param data - Data required(Encryption enable/disable switch).
   * @param requestMode - Request mode(Normal mode or policy bundle mode).
   */
  public void encryptStorage(String code, String data) {
    boolean doEncrypt = true;
    try {
      JSONObject encryptData = new JSONObject(data);
      if (!encryptData.isNull(resources.getString(R.string.intent_extra_function))
          && encryptData
              .get(resources.getString(R.string.intent_extra_function))
              .toString()
              .equalsIgnoreCase(resources.getString(R.string.intent_extra_encrypt))) {
        doEncrypt = true;
      } else if (!encryptData.isNull(resources.getString(R.string.intent_extra_function))
          && encryptData
              .get(resources.getString(R.string.intent_extra_function))
              .toString()
              .equalsIgnoreCase(resources.getString(R.string.intent_extra_decrypt))) {
        doEncrypt = false;
      } else if (!encryptData.isNull(resources.getString(R.string.intent_extra_function))) {
        doEncrypt =
            Boolean.parseBoolean(
                encryptData.get(resources.getString(R.string.intent_extra_function)).toString());
      }
    } catch (JSONException e) {
      Log.e(TAG, "Invalid JSON format." + e);
    }

    ComponentName admin = new ComponentName(context, AgentDeviceAdminReceiver.class);

    if (doEncrypt
        && devicePolicyManager.getStorageEncryptionStatus()
            != DevicePolicyManager.ENCRYPTION_STATUS_UNSUPPORTED
        && (devicePolicyManager.getStorageEncryptionStatus()
            == DevicePolicyManager.ENCRYPTION_STATUS_INACTIVE)) {

      devicePolicyManager.setStorageEncryption(admin, doEncrypt);
      Intent intent = new Intent(DevicePolicyManager.ACTION_START_ENCRYPTION);
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      context.startActivity(intent);

    } else if (!doEncrypt
        && devicePolicyManager.getStorageEncryptionStatus()
            != DevicePolicyManager.ENCRYPTION_STATUS_UNSUPPORTED
        && (devicePolicyManager.getStorageEncryptionStatus()
                == DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE
            || devicePolicyManager.getStorageEncryptionStatus()
                == DevicePolicyManager.ENCRYPTION_STATUS_ACTIVATING)) {

      devicePolicyManager.setStorageEncryption(admin, doEncrypt);
    }

    String status;
    if (devicePolicyManager.getStorageEncryptionStatus()
        != DevicePolicyManager.ENCRYPTION_STATUS_UNSUPPORTED) {
      status = resources.getString(R.string.shared_pref_default_status);
    } else {
      status = resources.getString(R.string.shared_pref_false_status);
    }

    resultBuilder.build(code, status);
  }
Exemple #8
0
  /**
   * Enterprise wipe the device.
   *
   * @param code - Operation code.
   */
  public void enterpriseWipe(String code) {
    resultBuilder.build(code);

    CommonUtils.clearAppData(context);
    Intent intent = new Intent(context, ServerDetails.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
  }
Exemple #9
0
  /**
   * Install google play applications.
   *
   * @param code - Operation code.
   * @param data - Data required(App data).
   */
  public void installGooglePlayApp(String code, String data) {
    String packageName = null;
    try {
      JSONObject appData = new JSONObject(data);
      packageName = (String) appData.get(resources.getString(R.string.intent_extra_package));

    } catch (JSONException e) {
      Log.e(TAG, "Invalid JSON format." + e);
    }

    resultBuilder.build(code);
    triggerGooglePlayApp(packageName);
  }
Exemple #10
0
  /**
   * Uninstall application.
   *
   * @param code - Operation code.
   * @param data - Data required(App package).
   */
  public void uninstallApplication(String code, String data) {
    String packageName;
    try {
      JSONObject appData = new JSONObject(data);
      packageName = (String) appData.get(resources.getString(R.string.intent_extra_identity));

      resultBuilder.build(code);

      appList.uninstallApplication(packageName);
    } catch (JSONException e) {
      Log.e(TAG, "Invalid JSON format." + e);
    }
  }
Exemple #11
0
  /**
   * Clear device password.
   *
   * @param code - Operation code.
   * @param requestMode - Request mode(Normal mode or policy bundle mode).
   */
  public void clearPassword(String code) {
    ComponentName demoDeviceAdmin = new ComponentName(context, AgentDeviceAdminReceiver.class);
    resultBuilder.build(code);

    devicePolicyManager.setPasswordQuality(
        demoDeviceAdmin, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
    devicePolicyManager.setPasswordMinimumLength(demoDeviceAdmin, DEFAULT_PASSWORD_LENGTH);
    devicePolicyManager.resetPassword(
        resources.getString(R.string.shared_pref_default_string),
        DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY);
    devicePolicyManager.lockNow();
    devicePolicyManager.setPasswordQuality(
        demoDeviceAdmin, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
  }
Exemple #12
0
  /**
   * Retrieve device information.
   *
   * @param code - Operation code.
   */
  public void getLocationInfo(String code) {
    double latitude;
    double longitude;
    JSONObject result = new JSONObject();
    GPSTracker gps = new GPSTracker(context);

    try {
      latitude = gps.getLatitude();
      longitude = gps.getLongitude();
      result.put(LOCATION_INFO_TAG_LATITUDE, latitude);
      result.put(LOCATION_INFO_TAG_LONGITUDE, longitude);
      resultBuilder.build(code, result);
    } catch (JSONException e) {
      Log.e(TAG, "Invalid JSON format." + e);
    }
  }
Exemple #13
0
  /**
   * Create web clip (Web app shortcut on device home screen).
   *
   * @param code - Operation code.
   * @param data - Data required(Web app data).
   */
  public void createWebClip(String code, String data) {
    String appUrl = null;
    String title = null;

    try {
      JSONObject webClipData = new JSONObject(code);
      appUrl = (String) webClipData.get(resources.getString(R.string.intent_extra_identity));
      title = (String) webClipData.get(resources.getString(R.string.intent_extra_title));
    } catch (JSONException e) {
      Log.e(TAG, "Invalid JSON format. " + e);
    }

    resultBuilder.build(data);

    if (appUrl != null && title != null) {
      appList.createWebAppBookmark(appUrl, title);
    }
  }
Exemple #14
0
  /**
   * Retrieve device information.
   *
   * @param code - Operation code.
   */
  public void getDeviceInfo(String code) {
    DeviceInfo deviceInfo = new DeviceInfo(context.getApplicationContext());
    DeviceState phoneState =
        DeviceStateFactory.getDeviceState(
            context.getApplicationContext(), deviceInfo.getSdkVersion());
    GPSTracker gps = new GPSTracker(context.getApplicationContext());
    JSONObject result = new JSONObject();
    JSONObject batteryInfo = new JSONObject();
    JSONObject internalMemoryInfo = new JSONObject();
    JSONObject externalMemoryInfo = new JSONObject();
    JSONObject locationInfo = new JSONObject();
    double latitude;
    double longitude;

    try {
      latitude = gps.getLatitude();
      longitude = gps.getLongitude();
      int batteryLevel = (int) Math.floor(phoneState.getBatteryLevel());
      batteryInfo.put(BATTERY_INFO_TAG_LEVEL, batteryLevel);

      internalMemoryInfo.put(MEMORY_INFO_TAG_TOTAL, phoneState.getTotalInternalMemorySize());
      internalMemoryInfo.put(
          MEMORY_INFO_TAG_AVAILABLE, phoneState.getAvailableInternalMemorySize());
      externalMemoryInfo.put(MEMORY_INFO_TAG_TOTAL, phoneState.getTotalExternalMemorySize());
      externalMemoryInfo.put(
          MEMORY_INFO_TAG_AVAILABLE, phoneState.getAvailableExternalMemorySize());
      locationInfo.put(LOCATION_INFO_TAG_LATITUDE, latitude);
      locationInfo.put(LOCATION_INFO_TAG_LONGITUDE, longitude);

      result.put(BATTERY_INFO_TAG, batteryInfo);
      result.put(MEMORY_INFO_TAG_INTERNAL, internalMemoryInfo);
      result.put(MEMORY_INFO_TAG_EXTERNAL, externalMemoryInfo);
      if (latitude != 0 && longitude != 0) {
        result.put(LOCATION_INFO_TAG, locationInfo);
      }
      result.put(NETWORK_OPERATOR_TAG, deviceInfo.getNetworkOperatorName());

      resultBuilder.build(code, result);

    } catch (JSONException e) {
      Log.e(TAG, "Invalid JSON format." + e);
    }
  }
Exemple #15
0
  /**
   * Retrieve device application information.
   *
   * @param code - Operation code.
   */
  public void getApplicationList(String code) {
    ArrayList<DeviceAppInfo> apps = appList.getInstalledApps();

    JSONArray result = new JSONArray();
    int size = apps.size();

    for (int i = 0; i < size; i++) {
      JSONObject app = new JSONObject();
      try {
        app.put(APP_INFO_TAG_NAME, Uri.encode(apps.get(i).getAppname()));
        app.put(APP_INFO_TAG_PACKAGE, apps.get(i).getPackagename());
        app.put(APP_INFO_TAG_ICON, apps.get(i).getIcon());
        result.put(app);
      } catch (JSONException e) {
        Log.e(TAG, "Invalid JSON format." + e);
      }
    }

    resultBuilder.build(code, result);
  }
Exemple #16
0
  /**
   * Install application/bundle.
   *
   * @param code - Operation code.
   * @param data - Data required(App data).
   */
  public void installAppBundle(String code, String data) {
    try {
      resultBuilder.build(code);

      if (code.equals(Constants.OPERATION_INSTALL_APPLICATION)) {
        JSONObject appData = new JSONObject(data);
        installApplication(appData, code);
      } else if (code.equals(Constants.OPERATION_INSTALL_APPLICATION_BUNDLE)) {
        JSONArray jArray = null;
        jArray = new JSONArray(data);
        for (int i = 0; i < jArray.length(); i++) {
          JSONObject appObj = (JSONObject) jArray.getJSONObject(i);
          installApplication(appObj, code);
        }
      }

    } catch (JSONException e) {
      Log.e(TAG, "Invalid JSON format." + e);
    }
  }
Exemple #17
0
  /**
   * Change device lock code.
   *
   * @param code - Operation code.
   * @param data - Data required(Lock code).
   */
  public void changeLockCode(String code, String data) {
    ComponentName demoDeviceAdmin = new ComponentName(context, AgentDeviceAdminReceiver.class);
    devicePolicyManager.setPasswordMinimumLength(demoDeviceAdmin, DEFAULT_PASSWORD_MIN_LENGTH);
    String password = null;

    try {
      JSONObject lockData = new JSONObject(data);
      if (!lockData.isNull(resources.getString(R.string.intent_extra_password))) {
        password = (String) lockData.get(resources.getString(R.string.intent_extra_password));
      }

      resultBuilder.build(code);

      if (password != null && !password.isEmpty()) {
        devicePolicyManager.resetPassword(
            password, DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY);
        devicePolicyManager.lockNow();
      }
    } catch (JSONException e) {
      Log.e(TAG, "Invalid JSON format." + e);
    }
  }
Exemple #18
0
  /**
   * Executes device management operations on the device.
   *
   * @param operationCode - Device management operation code.
   * @param operationData - Operation data if required(ex:WIFI configuration).
   * @param requestMode - Request mode (GCM/Local).
   * @return Operation/Policy status list.
   */
  public JSONArray doTask(String operationCode, String operationData) {

    switch (operationCode) {
      case Constants.OPERATION_DEVICE_INFO:
        getDeviceInfo(operationCode);
        break;
      case Constants.OPERATION_DEVICE_LOCATION:
        getLocationInfo(operationCode);
        break;
      case Constants.OPERATION_GET_APPLICATION_LIST:
        getApplicationList(operationCode);
        break;
      case Constants.OPERATION_LOCK_DEVICE:
        lockDevice(operationCode);
        break;
      case Constants.OPERATION_WIPE_DATA:
        wipeDevice(operationCode, operationData);
        break;
      case Constants.OPERATION_CLEAR_PASSWORD:
        clearPassword(operationCode);
        break;
      case Constants.OPERATION_NOTIFICATION:
        displayNotification(operationCode);
        break;
      case Constants.OPERATION_WIFI:
        configureWifi(operationCode, operationData);
        break;
      case Constants.OPERATION_DISABLE_CAMERA:
        disableCamera(operationCode, operationData);
        break;
      case Constants.OPERATION_INSTALL_APPLICATION:
        installAppBundle(operationCode, operationData);
        break;
      case Constants.OPERATION_INSTALL_APPLICATION_BUNDLE:
        installAppBundle(operationCode, operationData);
        break;
      case Constants.OPERATION_UNINSTALL_APPLICATION:
        uninstallApplication(operationCode, operationData);
        break;
      case Constants.OPERATION_ENCRYPT_STORAGE:
        encryptStorage(operationCode, operationData);
        break;
      case Constants.OPERATION_RING:
        ringDevice(operationCode);
        break;
      case Constants.OPERATION_MUTE:
        muteDevice(operationCode);
        break;
      case Constants.OPERATION_WEBCLIP:
        createWebClip(operationCode, operationData);
        break;
      case Constants.OPERATION_PASSWORD_POLICY:
        setPasswordPolicy(operationCode, operationData);
        break;
      case Constants.OPERATION_INSTALL_GOOGLE_APP:
        installGooglePlayApp(operationCode, operationData);
        break;
      case Constants.OPERATION_CHANGE_LOCK_CODE:
        changeLockCode(operationCode, operationData);
        break;
      case Constants.OPERATION_POLICY_BUNDLE:
        setPolicyBundle(operationCode);
        break;
      case Constants.OPERATION_ENTERPRISE_WIPE_DATA:
        enterpriseWipe(operationCode);
        break;
      case Constants.OPERATION_BLACKLIST_APPS:
        blacklistApps(operationCode, operationData);
        break;
      default:
        Log.e(TAG, "Invalid operation code receieved");
        break;
    }

    return resultBuilder.getResultPayload();
  }
Exemple #19
0
 /**
  * Ring the device.
  *
  * @param code - Operation code.
  */
 public void ringDevice(String code) {
   resultBuilder.build(code);
   devicePolicyManager.lockNow();
 }
Exemple #20
0
  /**
   * Mute the device.
   *
   * @param code - Operation code.
   * @param requestMode - Request mode(Normal mode or policy bundle mode).
   */
  private void muteDevice(String code) {
    resultBuilder.build(code);

    AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
    audioManager.setStreamVolume(AudioManager.STREAM_RING, DEFAULT_VOLUME, DEFAULT_FLAG);
  }
Exemple #21
0
  /**
   * Set device password policy.
   *
   * @param code - Operation code.
   * @param data - Data required (Password policy parameters).
   * @param requestMode - Request mode(Normal mode or policy bundle mode).
   */
  public void setPasswordPolicy(String code, String data) {
    ComponentName demoDeviceAdmin = new ComponentName(context, AgentDeviceAdminReceiver.class);

    int attempts, length, history, specialChars;
    String alphanumeric, complex;
    boolean isAlphanumeric, isComplex;
    long timout;

    resultBuilder.build(code);

    try {
      JSONObject policyData = new JSONObject(data);
      if (!policyData.isNull(resources.getString(R.string.policy_password_max_failed_attempts))
          && policyData.get(resources.getString(R.string.policy_password_max_failed_attempts))
              != null) {
        attempts =
            Integer.parseInt(
                (String)
                    policyData.get(
                        resources.getString(R.string.policy_password_max_failed_attempts)));
        devicePolicyManager.setMaximumFailedPasswordsForWipe(demoDeviceAdmin, attempts);
      }

      if (!policyData.isNull(resources.getString(R.string.policy_password_min_length))
          && policyData.get(resources.getString(R.string.policy_password_min_length)) != null) {
        length =
            Integer.parseInt(
                (String) policyData.get(resources.getString(R.string.policy_password_min_length)));
        devicePolicyManager.setPasswordMinimumLength(demoDeviceAdmin, length);
      }

      if (!policyData.isNull(resources.getString(R.string.policy_password_pin_history))
          && policyData.get(resources.getString(R.string.policy_password_pin_history)) != null) {
        history =
            Integer.parseInt(
                (String) policyData.get(resources.getString(R.string.policy_password_pin_history)));
        devicePolicyManager.setPasswordHistoryLength(demoDeviceAdmin, history);
      }

      if (!policyData.isNull(resources.getString(R.string.policy_password_min_complex_chars))
          && policyData.get(resources.getString(R.string.policy_password_min_complex_chars))
              != null) {
        specialChars =
            Integer.parseInt(
                (String)
                    policyData.get(
                        resources.getString(R.string.policy_password_min_complex_chars)));
        devicePolicyManager.setPasswordMinimumSymbols(demoDeviceAdmin, specialChars);
      }

      if (!policyData.isNull(resources.getString(R.string.policy_password_require_alphanumeric))
          && policyData.get(resources.getString(R.string.policy_password_require_alphanumeric))
              != null) {
        if (policyData.get(resources.getString(R.string.policy_password_require_alphanumeric))
            instanceof String) {
          alphanumeric =
              (String)
                  policyData.get(
                      resources.getString(R.string.policy_password_require_alphanumeric));
          if (alphanumeric.equals(resources.getString(R.string.shared_pref_default_status))) {
            devicePolicyManager.setPasswordQuality(
                demoDeviceAdmin, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC);
          }
        } else if (policyData.get(
                resources.getString(R.string.policy_password_require_alphanumeric))
            instanceof Boolean) {
          isAlphanumeric =
              policyData.getBoolean(
                  resources.getString(R.string.policy_password_require_alphanumeric));
          if (isAlphanumeric) {
            devicePolicyManager.setPasswordQuality(
                demoDeviceAdmin, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC);
          }
        }
      }

      if (!policyData.isNull(resources.getString(R.string.policy_password_allow_simple))
          && policyData.get(resources.getString(R.string.policy_password_allow_simple)) != null) {
        if (policyData.get(resources.getString(R.string.policy_password_allow_simple))
            instanceof String) {
          complex =
              (String) policyData.get(resources.getString(R.string.policy_password_allow_simple));
          if (!complex.equals(resources.getString(R.string.shared_pref_default_status))) {
            devicePolicyManager.setPasswordQuality(
                demoDeviceAdmin, DevicePolicyManager.PASSWORD_QUALITY_COMPLEX);
          }
        } else if (policyData.get(resources.getString(R.string.policy_password_allow_simple))
            instanceof Boolean) {
          isComplex =
              policyData.getBoolean(resources.getString(R.string.policy_password_allow_simple));
          if (!isComplex) {
            devicePolicyManager.setPasswordQuality(
                demoDeviceAdmin, DevicePolicyManager.PASSWORD_QUALITY_COMPLEX);
          }
        }
      }

      if (!policyData.isNull(resources.getString(R.string.policy_password_pin_age_in_days))
          && policyData.get(resources.getString(R.string.policy_password_pin_age_in_days))
              != null) {
        int daysOfExp =
            Integer.parseInt(
                (String)
                    policyData.get(resources.getString(R.string.policy_password_pin_age_in_days)));
        timout = (long) (daysOfExp * DAY_MILLISECONDS_MULTIPLIER);
        devicePolicyManager.setPasswordExpirationTimeout(demoDeviceAdmin, timout);
      }

    } catch (JSONException e) {
      Log.e(TAG, "Invalid JSON format." + e);
    }
  }