diff --git a/src/com/android/settings/development/tare/TareFactorController.java b/src/com/android/settings/development/tare/TareFactorController.java index 9dd0fdae81a..50531a09895 100644 --- a/src/com/android/settings/development/tare/TareFactorController.java +++ b/src/com/android/settings/development/tare/TareFactorController.java @@ -41,7 +41,9 @@ public class TareFactorController { private final KeyValueListParser mParser = new KeyValueListParser(','); private final Resources mResources; private final ArrayMap mAlarmManagerMap = new ArrayMap<>(); + private final ArrayMap mJobSchedulerMap = new ArrayMap<>(); private String mAlarmManagerConstants; + private String mJobSchedulerConstants; public TareFactorController(Context context) { mContentResolver = context.getContentResolver(); @@ -50,13 +52,19 @@ public class TareFactorController { mAlarmManagerConstants = Settings.Global .getString(mContentResolver, Settings.Global.TARE_ALARM_MANAGER_CONSTANTS); + mJobSchedulerConstants = Settings.Global + .getString(mContentResolver, Settings.Global.TARE_JOB_SCHEDULER_CONSTANTS); + initAlarmManagerMap(); parseAlarmManagerGlobalSettings(); + + initJobSchedulerMap(); + parseJobSchedulerGlobalSettings(); } /** - * Initialization for AlarmManager Map that sets a AM factor key to a default value and title - * in the form of a string. + * Initialization for AlarmManager Map that sets a AM factor key to a title, default value, and + * policy type in a data object. */ private void initAlarmManagerMap() { mAlarmManagerMap.put(EconomyManager.KEY_AM_MIN_SATIATED_BALANCE_EXEMPTED, @@ -237,12 +245,206 @@ public class TareFactorController { } /** - * Takes a key as input and grabs the default value linked to it. + * Initialization for JobScheduler Map that sets a JS factor key to a title, default value, and + * policy type in a data object. + */ + private void initJobSchedulerMap() { + mJobSchedulerMap.put(EconomyManager.KEY_JS_MIN_SATIATED_BALANCE_EXEMPTED, + new TareFactorData(mResources.getString(R.string.tare_min_satiated_balance), + EconomyManager.DEFAULT_JS_MIN_SATIATED_BALANCE_EXEMPTED, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_MIN_SATIATED_BALANCE_HEADLESS_SYSTEM_APP, + new TareFactorData(mResources.getString(R.string.tare_headless_app), + EconomyManager.DEFAULT_JS_MIN_SATIATED_BALANCE_HEADLESS_SYSTEM_APP, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_MIN_SATIATED_BALANCE_OTHER_APP, + new TareFactorData(mResources.getString(R.string.tare_other_app), + EconomyManager.DEFAULT_JS_MIN_SATIATED_BALANCE_OTHER_APP, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_MAX_SATIATED_BALANCE, + new TareFactorData(mResources.getString(R.string.tare_max_satiated_balance), + EconomyManager.DEFAULT_JS_MAX_SATIATED_BALANCE, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_MAX_CIRCULATION, + new TareFactorData(mResources.getString(R.string.tare_max_circulation), + EconomyManager.DEFAULT_JS_MAX_CIRCULATION, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_REWARD_TOP_ACTIVITY_INSTANT, + new TareFactorData(mResources.getString(R.string.tare_top_activity), + EconomyManager.DEFAULT_JS_REWARD_TOP_ACTIVITY_INSTANT, + POLICY_JOB_SCHEDULER)); + // TODO: Add support to handle floats + // mAlarmManagerMap.put(EconomyManager.KEY_JS_REWARD_TOP_ACTIVITY_ONGOING, + // new TareFactorData(mResources.getString(R.string.tare_top_activity), + // EconomyManager.DEFAULT_JS_REWARD_TOP_ACTIVITY_ONGOING)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_REWARD_TOP_ACTIVITY_MAX, + new TareFactorData(mResources.getString(R.string.tare_top_activity), + EconomyManager.DEFAULT_JS_REWARD_TOP_ACTIVITY_MAX, POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_REWARD_NOTIFICATION_SEEN_INSTANT, + new TareFactorData(mResources.getString(R.string.tare_notification_seen), + EconomyManager.DEFAULT_JS_REWARD_NOTIFICATION_SEEN_INSTANT, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_REWARD_NOTIFICATION_SEEN_ONGOING, + new TareFactorData(mResources.getString(R.string.tare_notification_seen), + EconomyManager.DEFAULT_JS_REWARD_NOTIFICATION_SEEN_ONGOING, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_REWARD_NOTIFICATION_SEEN_MAX, + new TareFactorData(mResources.getString(R.string.tare_notification_seen), + EconomyManager.DEFAULT_JS_REWARD_NOTIFICATION_SEEN_MAX, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_REWARD_NOTIFICATION_INTERACTION_INSTANT, + new TareFactorData(mResources.getString(R.string.tare_notification_interaction), + EconomyManager.DEFAULT_JS_REWARD_NOTIFICATION_INTERACTION_INSTANT, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_REWARD_NOTIFICATION_INTERACTION_ONGOING, + new TareFactorData(mResources.getString(R.string.tare_notification_interaction), + EconomyManager.DEFAULT_JS_REWARD_NOTIFICATION_INTERACTION_ONGOING, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_REWARD_NOTIFICATION_INTERACTION_MAX, + new TareFactorData(mResources.getString(R.string.tare_notification_interaction), + EconomyManager.DEFAULT_JS_REWARD_NOTIFICATION_INTERACTION_MAX, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_REWARD_WIDGET_INTERACTION_INSTANT, + new TareFactorData(mResources.getString(R.string.tare_widget_interaction), + EconomyManager.DEFAULT_JS_REWARD_WIDGET_INTERACTION_INSTANT, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_REWARD_WIDGET_INTERACTION_ONGOING, + new TareFactorData(mResources.getString(R.string.tare_widget_interaction), + EconomyManager.DEFAULT_JS_REWARD_WIDGET_INTERACTION_ONGOING, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_REWARD_WIDGET_INTERACTION_MAX, + new TareFactorData(mResources.getString(R.string.tare_widget_interaction), + EconomyManager.DEFAULT_JS_REWARD_WIDGET_INTERACTION_MAX, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_REWARD_OTHER_USER_INTERACTION_INSTANT, + new TareFactorData(mResources.getString(R.string.tare_other_interaction), + EconomyManager.DEFAULT_JS_REWARD_OTHER_USER_INTERACTION_INSTANT, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_REWARD_OTHER_USER_INTERACTION_ONGOING, + new TareFactorData(mResources.getString(R.string.tare_other_interaction), + EconomyManager.DEFAULT_JS_REWARD_OTHER_USER_INTERACTION_ONGOING, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_REWARD_OTHER_USER_INTERACTION_MAX, + new TareFactorData(mResources.getString(R.string.tare_other_interaction), + EconomyManager.DEFAULT_JS_REWARD_OTHER_USER_INTERACTION_MAX, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_ACTION_JOB_MAX_START_CTP, + new TareFactorData(mResources.getString(R.string.tare_job_max_start), + EconomyManager.DEFAULT_JS_ACTION_JOB_MAX_START_CTP, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_ACTION_JOB_MAX_RUNNING_CTP, + new TareFactorData(mResources.getString(R.string.tare_job_max_running), + EconomyManager.DEFAULT_JS_ACTION_JOB_MAX_RUNNING_CTP, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_ACTION_JOB_HIGH_START_CTP, + new TareFactorData(mResources.getString(R.string.tare_job_high_start), + EconomyManager.DEFAULT_JS_ACTION_JOB_HIGH_START_CTP, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_ACTION_JOB_HIGH_RUNNING_CTP, + new TareFactorData(mResources.getString(R.string.tare_job_high_running), + EconomyManager.DEFAULT_JS_ACTION_JOB_HIGH_RUNNING_CTP, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_ACTION_JOB_DEFAULT_START_CTP, + new TareFactorData(mResources.getString(R.string.tare_job_default_start), + EconomyManager.DEFAULT_JS_ACTION_JOB_DEFAULT_START_CTP, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_ACTION_JOB_DEFAULT_RUNNING_CTP, + new TareFactorData(mResources.getString(R.string.tare_job_default_running), + EconomyManager.DEFAULT_JS_ACTION_JOB_DEFAULT_RUNNING_CTP, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_ACTION_JOB_LOW_START_CTP, + new TareFactorData(mResources.getString(R.string.tare_job_low_start), + EconomyManager.DEFAULT_JS_ACTION_JOB_LOW_START_CTP, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put( + EconomyManager.KEY_JS_ACTION_JOB_LOW_RUNNING_CTP, + new TareFactorData(mResources.getString(R.string.tare_job_low_running), + EconomyManager.DEFAULT_JS_ACTION_JOB_LOW_RUNNING_CTP, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_ACTION_JOB_MIN_START_CTP, + new TareFactorData(mResources.getString(R.string.tare_job_min_start), + EconomyManager.DEFAULT_JS_ACTION_JOB_MIN_START_CTP, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put( + EconomyManager.KEY_JS_ACTION_JOB_MIN_RUNNING_CTP, + new TareFactorData(mResources.getString(R.string.tare_job_min_running), + EconomyManager.DEFAULT_JS_ACTION_JOB_MIN_RUNNING_CTP, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_ACTION_JOB_TIMEOUT_PENALTY_CTP, + new TareFactorData(mResources.getString(R.string.tare_job_timeout_penalty), + EconomyManager.DEFAULT_JS_ACTION_JOB_TIMEOUT_PENALTY_CTP, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_ACTION_JOB_MAX_START_BASE_PRICE, + new TareFactorData(mResources.getString(R.string.tare_job_max_start), + EconomyManager.DEFAULT_JS_ACTION_JOB_MAX_START_BASE_PRICE, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put( + EconomyManager.KEY_JS_ACTION_JOB_MAX_RUNNING_BASE_PRICE, + new TareFactorData(mResources.getString(R.string.tare_job_max_running), + EconomyManager.DEFAULT_JS_ACTION_JOB_MAX_RUNNING_BASE_PRICE, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put( + EconomyManager.KEY_JS_ACTION_JOB_HIGH_START_BASE_PRICE, + new TareFactorData(mResources.getString(R.string.tare_job_high_start), + EconomyManager.DEFAULT_JS_ACTION_JOB_HIGH_START_BASE_PRICE, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_ACTION_JOB_HIGH_RUNNING_BASE_PRICE, + new TareFactorData(mResources.getString(R.string.tare_job_high_running), + EconomyManager.DEFAULT_JS_ACTION_JOB_HIGH_RUNNING_BASE_PRICE, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_ACTION_JOB_DEFAULT_START_BASE_PRICE, + new TareFactorData(mResources.getString(R.string.tare_job_default_start), + EconomyManager.DEFAULT_JS_ACTION_JOB_DEFAULT_START_BASE_PRICE, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put( + EconomyManager.KEY_JS_ACTION_JOB_DEFAULT_RUNNING_BASE_PRICE, + new TareFactorData(mResources.getString(R.string.tare_job_default_running), + EconomyManager.DEFAULT_JS_ACTION_JOB_DEFAULT_RUNNING_BASE_PRICE, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_ACTION_JOB_LOW_START_BASE_PRICE, + new TareFactorData(mResources.getString(R.string.tare_job_low_start), + EconomyManager.DEFAULT_JS_ACTION_JOB_LOW_START_BASE_PRICE, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put( + EconomyManager.KEY_JS_ACTION_JOB_LOW_RUNNING_BASE_PRICE, + new TareFactorData(mResources.getString(R.string.tare_job_low_running), + EconomyManager + .DEFAULT_JS_ACTION_JOB_LOW_RUNNING_BASE_PRICE, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_ACTION_JOB_MIN_START_BASE_PRICE, + new TareFactorData(mResources.getString(R.string.tare_job_min_start), + EconomyManager.DEFAULT_JS_ACTION_JOB_MIN_START_BASE_PRICE, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_ACTION_JOB_MIN_RUNNING_BASE_PRICE, + new TareFactorData(mResources.getString(R.string.tare_job_min_running), + EconomyManager.DEFAULT_JS_ACTION_JOB_MIN_RUNNING_BASE_PRICE, + POLICY_JOB_SCHEDULER)); + mJobSchedulerMap.put(EconomyManager.KEY_JS_ACTION_JOB_TIMEOUT_PENALTY_BASE_PRICE, + new TareFactorData(mResources.getString(R.string.tare_job_timeout_penalty), + EconomyManager.DEFAULT_JS_ACTION_JOB_TIMEOUT_PENALTY_BASE_PRICE, + POLICY_JOB_SCHEDULER)); + } + + + /** + * Takes a key and factor policy as input and grabs the default value linked to it. * * @param key the key of the factor you want to get the default value of + * @param factorPolicy the policy you want the default value of */ - private int getDefaultValue(String key) { - return mAlarmManagerMap.get(key).defaultValue; + private int getDefaultValue(String key, int factorPolicy) { + ArrayMap currentMap; + switch (factorPolicy) { + case POLICY_ALARM_MANAGER: + currentMap = mAlarmManagerMap; + break; + case POLICY_JOB_SCHEDULER: + currentMap = mJobSchedulerMap; + break; + default: + throw new IllegalArgumentException("Invalid factor policy given"); + } + return currentMap.get(key).defaultValue; } /** @@ -259,26 +461,68 @@ public class TareFactorController { for (int i = 0; i < size - 1; i++) { String key = mParser.keyAt(i); TareFactorData data = mAlarmManagerMap.get(key); - data.currentValue = mParser.getInt(key, getDefaultValue(key)); + data.currentValue = mParser.getInt(key, getDefaultValue(key, getFactorType(key))); } } /** - * Takes a key as input and grabs the title linked to it. - * - * @param key the key of the factor you want to get the title of + * Parses the JS constant from Settings.Global to get to the current value. */ - private String getTitle(String key) { - return mAlarmManagerMap.get(key).title; + private void parseJobSchedulerGlobalSettings() { + try { + mParser.setString(mJobSchedulerConstants); + } catch (Exception e) { + Slog.e(TAG, "Bad value string constants", e); + } + int size = mParser.size(); + + for (int i = 0; i < size - 1; i++) { + String key = mParser.keyAt(i); + TareFactorData data = mJobSchedulerMap.get(key); + data.currentValue = mParser.getInt(key, getDefaultValue(key, getFactorType(key))); + } } /** - * Takes a key as input and grabs the current value linked to it. + * Takes a key and factor policy as input and grabs the title linked to it. + * + * @param key the key of the factor you want to get the title of + * @param factorPolicy the policy you want the title of + */ + private String getTitle(String key, int factorPolicy) { + ArrayMap currentMap; + switch (factorPolicy) { + case POLICY_ALARM_MANAGER: + currentMap = mAlarmManagerMap; + break; + case POLICY_JOB_SCHEDULER: + currentMap = mJobSchedulerMap; + break; + default: + throw new IllegalArgumentException("Invalid factor policy given"); + } + return currentMap.get(key).title; + } + + /** + * Takes a key and factor policy as input and grabs the current value linked to it. * * @param key the key of the factor you want to get the default value of + * @param factorPolicy the policy you want the current value of */ - private int getCurrentValue(String key) { - return mAlarmManagerMap.get(key).currentValue; + private int getCurrentValue(String key, int factorPolicy) { + ArrayMap currentMap; + switch (factorPolicy) { + case POLICY_ALARM_MANAGER: + currentMap = mAlarmManagerMap; + break; + case POLICY_JOB_SCHEDULER: + currentMap = mJobSchedulerMap; + break; + default: + throw new IllegalArgumentException("Invalid factor policy given"); + } + return currentMap.get(key).currentValue; } /** @@ -287,56 +531,98 @@ public class TareFactorController { * @param key the key of the factor you want to get the factor type of */ private int getFactorType(String key) { - return mAlarmManagerMap.get(key).factorPolicy; + ArrayMap currentMap; + if (mAlarmManagerMap.containsKey(key)) { + currentMap = mAlarmManagerMap; + } else if (mJobSchedulerMap.containsKey(key)) { + currentMap = mJobSchedulerMap; + } else { + throw new IllegalArgumentException("Couldn't link key to policy map"); + } + return currentMap.get(key).factorPolicy; } /** - * Takes a key and edited value as input and assigns the new edited value to be the new current - * value for that factors key. + * Takes a key,edited value, and factor policy as input and assigns the new edited value to + * be the new current value for that factors key. * - * @param key the key of the factor you want to get the default value of - * @param editedValue the value entered by the user in the dialog + * @param key the key of the factor you want to get the default value of + * @param editedValue the value entered by the user in the dialog + * @param factorPolicy policy being updated */ public void updateValue(String key, int editedValue, int factorPolicy) { switch (factorPolicy) { case POLICY_ALARM_MANAGER: mAlarmManagerMap.get(key).currentValue = editedValue; - rebuildAlarmManagerConstants(); + rebuildPolicyConstants(factorPolicy); break; case POLICY_JOB_SCHEDULER: - // TODO: Add JobScheduler + mJobSchedulerMap.get(key).currentValue = editedValue; + rebuildPolicyConstants(factorPolicy); break; default: - Slog.e(TAG, "Invalid factor policy given"); - break; + throw new IllegalArgumentException("Invalid factor policy given"); } } + /** - * Iterates through the AM map for keys and current values to rebuild a current string that is - * then assigned to be the new global settings string. + * Iterates through the factor policy map for keys and current values to + * rebuild a current string that is then assigned to be the new global settings string. + * + * @param factorPolicy policy being updated */ - private void rebuildAlarmManagerConstants() { + private void rebuildPolicyConstants(int factorPolicy) { StringBuilder newConstantsStringBuilder = new StringBuilder(); - int size = mAlarmManagerMap.size(); + switch (factorPolicy) { + case POLICY_ALARM_MANAGER: + int sizeAM = mAlarmManagerMap.size(); - for (int i = 0; i < size; i++) { - if (i > 0) { - newConstantsStringBuilder.append(","); - } + for (int i = 0; i < sizeAM; i++) { + if (i > 0) { + newConstantsStringBuilder.append(","); + } - String key = mAlarmManagerMap.keyAt(i); - newConstantsStringBuilder.append(key + "=" + mAlarmManagerMap.get(key).currentValue); + String key = mAlarmManagerMap.keyAt(i); + newConstantsStringBuilder.append(key + "=" + mAlarmManagerMap.get(key) + .currentValue); + } + + String newAMConstantsString = newConstantsStringBuilder.toString(); + + Settings.Global.putString(mContentResolver, Settings.Global + .TARE_ALARM_MANAGER_CONSTANTS, + newAMConstantsString); + + mAlarmManagerConstants = Settings.Global + .getString(mContentResolver, Settings.Global + .TARE_ALARM_MANAGER_CONSTANTS); + break; + case POLICY_JOB_SCHEDULER: + int sizeJS = mJobSchedulerMap.size(); + + for (int i = 0; i < sizeJS; i++) { + if (i > 0) { + newConstantsStringBuilder.append(","); + } + + String key = mJobSchedulerMap.keyAt(i); + newConstantsStringBuilder.append(key + "=" + mJobSchedulerMap.get(key) + .currentValue); + } + + String newJSConstantsString = newConstantsStringBuilder.toString(); + + Settings.Global.putString(mContentResolver, Settings.Global + .TARE_JOB_SCHEDULER_CONSTANTS, + newJSConstantsString); + + mJobSchedulerConstants = Settings.Global + .getString(mContentResolver, Settings.Global + .TARE_JOB_SCHEDULER_CONSTANTS); + break; } - - String newConstantsString = newConstantsStringBuilder.toString(); - - Settings.Global.putString(mContentResolver, Settings.Global.TARE_ALARM_MANAGER_CONSTANTS, - newConstantsString); - - mAlarmManagerConstants = Settings.Global - .getString(mContentResolver, Settings.Global.TARE_ALARM_MANAGER_CONSTANTS); } /** @@ -345,8 +631,9 @@ public class TareFactorController { * @param key the key of the factor you want to get the default value of */ public TareFactorDialogFragment createDialog(String key) { - return new TareFactorDialogFragment(getTitle(key), key, getCurrentValue(key), - getFactorType(key), this); + int policy = getFactorType(key); + return new TareFactorDialogFragment(getTitle(key, policy), key, + getCurrentValue(key, policy), policy , this); } /**