Loading src/com/android/settings/development/tare/TareFactorController.java +326 −39 Original line number Diff line number Diff line Loading @@ -41,7 +41,9 @@ public class TareFactorController { private final KeyValueListParser mParser = new KeyValueListParser(','); private final Resources mResources; private final ArrayMap<String, TareFactorData> mAlarmManagerMap = new ArrayMap<>(); private final ArrayMap<String, TareFactorData> mJobSchedulerMap = new ArrayMap<>(); private String mAlarmManagerConstants; private String mJobSchedulerConstants; public TareFactorController(Context context) { mContentResolver = context.getContentResolver(); Loading @@ -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, Loading Loading @@ -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<String, TareFactorData> 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; } /** Loading @@ -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. * Parses the JS constant from Settings.Global to get to the current value. */ 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 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) { return mAlarmManagerMap.get(key).title; private String getTitle(String key, int factorPolicy) { ArrayMap<String, TareFactorData> 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 as input and grabs the current value linked to it. * 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<String, TareFactorData> 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; } /** Loading @@ -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<String, TareFactorData> 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 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++) { for (int i = 0; i < sizeAM; i++) { if (i > 0) { newConstantsStringBuilder.append(","); } String key = mAlarmManagerMap.keyAt(i); newConstantsStringBuilder.append(key + "=" + mAlarmManagerMap.get(key).currentValue); newConstantsStringBuilder.append(key + "=" + mAlarmManagerMap.get(key) .currentValue); } String newConstantsString = newConstantsStringBuilder.toString(); String newAMConstantsString = newConstantsStringBuilder.toString(); Settings.Global.putString(mContentResolver, Settings.Global.TARE_ALARM_MANAGER_CONSTANTS, newConstantsString); Settings.Global.putString(mContentResolver, Settings.Global .TARE_ALARM_MANAGER_CONSTANTS, newAMConstantsString); mAlarmManagerConstants = Settings.Global .getString(mContentResolver, Settings.Global.TARE_ALARM_MANAGER_CONSTANTS); .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; } } /** Loading @@ -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); } /** Loading Loading
src/com/android/settings/development/tare/TareFactorController.java +326 −39 Original line number Diff line number Diff line Loading @@ -41,7 +41,9 @@ public class TareFactorController { private final KeyValueListParser mParser = new KeyValueListParser(','); private final Resources mResources; private final ArrayMap<String, TareFactorData> mAlarmManagerMap = new ArrayMap<>(); private final ArrayMap<String, TareFactorData> mJobSchedulerMap = new ArrayMap<>(); private String mAlarmManagerConstants; private String mJobSchedulerConstants; public TareFactorController(Context context) { mContentResolver = context.getContentResolver(); Loading @@ -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, Loading Loading @@ -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<String, TareFactorData> 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; } /** Loading @@ -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. * Parses the JS constant from Settings.Global to get to the current value. */ 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 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) { return mAlarmManagerMap.get(key).title; private String getTitle(String key, int factorPolicy) { ArrayMap<String, TareFactorData> 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 as input and grabs the current value linked to it. * 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<String, TareFactorData> 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; } /** Loading @@ -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<String, TareFactorData> 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 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++) { for (int i = 0; i < sizeAM; i++) { if (i > 0) { newConstantsStringBuilder.append(","); } String key = mAlarmManagerMap.keyAt(i); newConstantsStringBuilder.append(key + "=" + mAlarmManagerMap.get(key).currentValue); newConstantsStringBuilder.append(key + "=" + mAlarmManagerMap.get(key) .currentValue); } String newConstantsString = newConstantsStringBuilder.toString(); String newAMConstantsString = newConstantsStringBuilder.toString(); Settings.Global.putString(mContentResolver, Settings.Global.TARE_ALARM_MANAGER_CONSTANTS, newConstantsString); Settings.Global.putString(mContentResolver, Settings.Global .TARE_ALARM_MANAGER_CONSTANTS, newAMConstantsString); mAlarmManagerConstants = Settings.Global .getString(mContentResolver, Settings.Global.TARE_ALARM_MANAGER_CONSTANTS); .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; } } /** Loading @@ -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); } /** Loading