Update AlarmManager Global Settings String

Implements methods that update the AlarmManager Global Settings String
when the user confirms a value in the Dialog. updateAlarmManagerValue
takes the key of the factor being edited and the edited value enterd by
the user in the dialog assigning it as the current value of the key.
This a new string is then rebuilt with the updated values and assigned
to be the new Settings Global String.

Bug: 195056102
Bug: 195055895

Test: Manual
Change-Id: I5776822c665bdfa052f23099d367ba8cf29743df
This commit is contained in:
Joshua
2021-08-11 22:20:48 +00:00
parent 7b2293ef9a
commit 347f58ad6e
2 changed files with 155 additions and 50 deletions

View File

@@ -34,13 +34,15 @@ import com.android.settings.R;
public class TareFactorController {
private static final String TAG = "TareFactorController";
private static final int POLICY_ALARM_MANAGER = 0;
private static final int POLICY_JOB_SCHEDULER = 1;
private final ContentResolver mContentResolver;
private final KeyValueListParser mParser = new KeyValueListParser(',');
private final Resources mResources;
private final ArrayMap<String, TareFactorData> mAlarmManagerMap = new ArrayMap<>();
private String mAlarmManagerConstants;
public TareFactorController(Context context) {
mContentResolver = context.getContentResolver();
mResources = context.getResources();
@@ -59,140 +61,179 @@ public class TareFactorController {
private void initAlarmManagerMap() {
mAlarmManagerMap.put(EconomyManager.KEY_AM_MIN_SATIATED_BALANCE_EXEMPTED,
new TareFactorData(mResources.getString(R.string.tare_min_satiated_balance),
EconomyManager.DEFAULT_AM_MIN_SATIATED_BALANCE_EXEMPTED));
EconomyManager.DEFAULT_AM_MIN_SATIATED_BALANCE_EXEMPTED,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_MIN_SATIATED_BALANCE_HEADLESS_SYSTEM_APP,
new TareFactorData(mResources.getString(R.string.tare_headless_app),
EconomyManager.DEFAULT_AM_MIN_SATIATED_BALANCE_HEADLESS_SYSTEM_APP));
EconomyManager.DEFAULT_AM_MIN_SATIATED_BALANCE_HEADLESS_SYSTEM_APP,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_MIN_SATIATED_BALANCE_OTHER_APP,
new TareFactorData(mResources.getString(R.string.tare_other_app),
EconomyManager.DEFAULT_AM_MIN_SATIATED_BALANCE_OTHER_APP));
EconomyManager.DEFAULT_AM_MIN_SATIATED_BALANCE_OTHER_APP,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_MAX_SATIATED_BALANCE,
new TareFactorData(mResources.getString(R.string.tare_max_satiated_balance),
EconomyManager.DEFAULT_AM_MAX_SATIATED_BALANCE));
EconomyManager.DEFAULT_AM_MAX_SATIATED_BALANCE,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_MAX_CIRCULATION,
new TareFactorData(mResources.getString(R.string.tare_max_circulation),
EconomyManager.DEFAULT_AM_MAX_CIRCULATION));
EconomyManager.DEFAULT_AM_MAX_CIRCULATION,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_REWARD_TOP_ACTIVITY_INSTANT,
new TareFactorData(mResources.getString(R.string.tare_top_activity),
EconomyManager.DEFAULT_AM_REWARD_TOP_ACTIVITY_INSTANT));
EconomyManager.DEFAULT_AM_REWARD_TOP_ACTIVITY_INSTANT,
POLICY_ALARM_MANAGER));
// TODO: Add support to handle floats
// mAlarmManagerMap.put(EconomyManager.KEY_AM_REWARD_TOP_ACTIVITY_ONGOING,
// new TareFactorData(mResources.getString(R.string.tare_top_activity),
// EconomyManager.DEFAULT_AM_REWARD_TOP_ACTIVITY_ONGOING));
mAlarmManagerMap.put(EconomyManager.KEY_AM_REWARD_TOP_ACTIVITY_MAX,
new TareFactorData(mResources.getString(R.string.tare_top_activity),
EconomyManager.DEFAULT_AM_REWARD_TOP_ACTIVITY_MAX));
EconomyManager.DEFAULT_AM_REWARD_TOP_ACTIVITY_MAX, POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_REWARD_NOTIFICATION_SEEN_INSTANT,
new TareFactorData(mResources.getString(R.string.tare_notification_seen),
EconomyManager.DEFAULT_AM_REWARD_NOTIFICATION_SEEN_INSTANT));
EconomyManager.DEFAULT_AM_REWARD_NOTIFICATION_SEEN_INSTANT,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_REWARD_NOTIFICATION_SEEN_ONGOING,
new TareFactorData(mResources.getString(R.string.tare_notification_seen),
EconomyManager.DEFAULT_AM_REWARD_NOTIFICATION_SEEN_ONGOING));
EconomyManager.DEFAULT_AM_REWARD_NOTIFICATION_SEEN_ONGOING,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_REWARD_NOTIFICATION_SEEN_MAX,
new TareFactorData(mResources.getString(R.string.tare_notification_seen),
EconomyManager.DEFAULT_AM_REWARD_NOTIFICATION_SEEN_MAX));
EconomyManager.DEFAULT_AM_REWARD_NOTIFICATION_SEEN_MAX,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_REWARD_NOTIFICATION_SEEN_WITHIN_15_INSTANT,
new TareFactorData(mResources.getString(R.string.tare_notification_seen_15_min),
EconomyManager.DEFAULT_AM_REWARD_NOTIFICATION_SEEN_WITHIN_15_INSTANT));
EconomyManager.DEFAULT_AM_REWARD_NOTIFICATION_SEEN_WITHIN_15_INSTANT,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_REWARD_NOTIFICATION_SEEN_WITHIN_15_ONGOING,
new TareFactorData(mResources.getString(R.string.tare_notification_seen_15_min),
EconomyManager.DEFAULT_AM_REWARD_NOTIFICATION_SEEN_WITHIN_15_ONGOING));
EconomyManager.DEFAULT_AM_REWARD_NOTIFICATION_SEEN_WITHIN_15_ONGOING,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_REWARD_NOTIFICATION_SEEN_WITHIN_15_MAX,
new TareFactorData(mResources.getString(R.string.tare_notification_seen_15_min),
EconomyManager.DEFAULT_AM_REWARD_NOTIFICATION_SEEN_WITHIN_15_MAX));
EconomyManager.DEFAULT_AM_REWARD_NOTIFICATION_SEEN_WITHIN_15_MAX,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_REWARD_NOTIFICATION_INTERACTION_INSTANT,
new TareFactorData(mResources.getString(R.string.tare_notification_interaction),
EconomyManager.DEFAULT_AM_REWARD_NOTIFICATION_INTERACTION_INSTANT));
EconomyManager.DEFAULT_AM_REWARD_NOTIFICATION_INTERACTION_INSTANT,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_REWARD_NOTIFICATION_INTERACTION_ONGOING,
new TareFactorData(mResources.getString(R.string.tare_notification_interaction),
EconomyManager.DEFAULT_AM_REWARD_NOTIFICATION_INTERACTION_ONGOING));
EconomyManager.DEFAULT_AM_REWARD_NOTIFICATION_INTERACTION_ONGOING,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_REWARD_NOTIFICATION_INTERACTION_MAX,
new TareFactorData(mResources.getString(R.string.tare_notification_interaction),
EconomyManager.DEFAULT_AM_REWARD_NOTIFICATION_INTERACTION_MAX));
EconomyManager.DEFAULT_AM_REWARD_NOTIFICATION_INTERACTION_MAX,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_REWARD_WIDGET_INTERACTION_INSTANT,
new TareFactorData(mResources.getString(R.string.tare_widget_interaction),
EconomyManager.DEFAULT_AM_REWARD_WIDGET_INTERACTION_INSTANT));
EconomyManager.DEFAULT_AM_REWARD_WIDGET_INTERACTION_INSTANT,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_REWARD_WIDGET_INTERACTION_ONGOING,
new TareFactorData(mResources.getString(R.string.tare_widget_interaction),
EconomyManager.DEFAULT_AM_REWARD_WIDGET_INTERACTION_ONGOING));
EconomyManager.DEFAULT_AM_REWARD_WIDGET_INTERACTION_ONGOING,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_REWARD_WIDGET_INTERACTION_MAX,
new TareFactorData(mResources.getString(R.string.tare_widget_interaction),
EconomyManager.DEFAULT_AM_REWARD_WIDGET_INTERACTION_MAX));
EconomyManager.DEFAULT_AM_REWARD_WIDGET_INTERACTION_MAX,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_REWARD_OTHER_USER_INTERACTION_INSTANT,
new TareFactorData(mResources.getString(R.string.tare_other_interaction),
EconomyManager.DEFAULT_AM_REWARD_OTHER_USER_INTERACTION_INSTANT));
EconomyManager.DEFAULT_AM_REWARD_OTHER_USER_INTERACTION_INSTANT,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_REWARD_OTHER_USER_INTERACTION_ONGOING,
new TareFactorData(mResources.getString(R.string.tare_other_interaction),
EconomyManager.DEFAULT_AM_REWARD_OTHER_USER_INTERACTION_ONGOING));
EconomyManager.DEFAULT_AM_REWARD_OTHER_USER_INTERACTION_ONGOING,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_REWARD_OTHER_USER_INTERACTION_MAX,
new TareFactorData(mResources.getString(R.string.tare_other_interaction),
EconomyManager.DEFAULT_AM_REWARD_OTHER_USER_INTERACTION_MAX));
EconomyManager.DEFAULT_AM_REWARD_OTHER_USER_INTERACTION_MAX,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_EXACT_WAKEUP_CTP,
new TareFactorData(mResources.getString(R.string.tare_wakeup_exact_idle),
EconomyManager.DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_EXACT_WAKEUP_CTP));
EconomyManager.DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_EXACT_WAKEUP_CTP,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_WAKEUP_CTP,
new TareFactorData(mResources.getString(R.string.tare_wakeup_inexact_idle),
EconomyManager
.DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_WAKEUP_CTP));
.DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_WAKEUP_CTP,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_ACTION_ALARM_EXACT_WAKEUP_CTP,
new TareFactorData(mResources.getString(R.string.tare_wakeup_exact),
EconomyManager.DEFAULT_AM_ACTION_ALARM_EXACT_WAKEUP_CTP));
EconomyManager.DEFAULT_AM_ACTION_ALARM_EXACT_WAKEUP_CTP,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_ACTION_ALARM_INEXACT_WAKEUP_CTP,
new TareFactorData(mResources.getString(R.string.tare_wakeup_inexact),
EconomyManager.DEFAULT_AM_ACTION_ALARM_INEXACT_WAKEUP_CTP));
EconomyManager.DEFAULT_AM_ACTION_ALARM_INEXACT_WAKEUP_CTP,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(
EconomyManager.KEY_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_EXACT_NONWAKEUP_CTP,
new TareFactorData(mResources.getString(R.string.tare_nonwakeup_exact_idle),
EconomyManager
.DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_EXACT_NONWAKEUP_CTP));
.DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_EXACT_NONWAKEUP_CTP,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_ACTION_ALARM_EXACT_NONWAKEUP_CTP,
new TareFactorData(mResources.getString(R.string.tare_nonwakeup_exact),
EconomyManager.DEFAULT_AM_ACTION_ALARM_EXACT_NONWAKEUP_CTP));
EconomyManager.DEFAULT_AM_ACTION_ALARM_EXACT_NONWAKEUP_CTP,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(
EconomyManager.KEY_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_NONWAKEUP_CTP,
new TareFactorData(mResources.getString(R.string.tare_nonwakeup_inexact_idle),
EconomyManager
.DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_NONWAKEUP_CTP));
.DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_NONWAKEUP_CTP,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_ACTION_ALARM_INEXACT_NONWAKEUP_CTP,
new TareFactorData(mResources.getString(R.string.tare_nonwakeup_inexact),
EconomyManager.DEFAULT_AM_ACTION_ALARM_INEXACT_NONWAKEUP_CTP));
EconomyManager.DEFAULT_AM_ACTION_ALARM_INEXACT_NONWAKEUP_CTP,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_ACTION_ALARM_ALARMCLOCK_CTP,
new TareFactorData(mResources.getString(R.string.tare_alarm_clock),
EconomyManager.DEFAULT_AM_ACTION_ALARM_ALARMCLOCK_CTP));
EconomyManager.DEFAULT_AM_ACTION_ALARM_ALARMCLOCK_CTP,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(
EconomyManager.KEY_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_EXACT_WAKEUP_BASE_PRICE,
new TareFactorData(mResources.getString(R.string.tare_alarm_clock),
EconomyManager
.DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_EXACT_WAKEUP_BASE_PRICE));
.DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_EXACT_WAKEUP_BASE_PRICE,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(
EconomyManager.KEY_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_WAKEUP_BASE_PRICE,
new TareFactorData(mResources.getString(R.string.tare_alarm_clock),
EconomyManager
.DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_WAKEUP_BASE_PRICE));
.DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_WAKEUP_BASE_PRICE,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_ACTION_ALARM_EXACT_WAKEUP_BASE_PRICE,
new TareFactorData(mResources.getString(R.string.tare_alarm_clock),
EconomyManager.DEFAULT_AM_ACTION_ALARM_EXACT_WAKEUP_BASE_PRICE));
EconomyManager.DEFAULT_AM_ACTION_ALARM_EXACT_WAKEUP_BASE_PRICE,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_ACTION_ALARM_INEXACT_WAKEUP_BASE_PRICE,
new TareFactorData(mResources.getString(R.string.tare_alarm_clock),
EconomyManager.DEFAULT_AM_ACTION_ALARM_EXACT_WAKEUP_BASE_PRICE));
EconomyManager.DEFAULT_AM_ACTION_ALARM_EXACT_WAKEUP_BASE_PRICE,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(
EconomyManager.KEY_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_EXACT_NONWAKEUP_BASE_PRICE,
new TareFactorData(mResources.getString(R.string.tare_alarm_clock),
EconomyManager.DEFAULT_AM_ACTION_ALARM_EXACT_WAKEUP_BASE_PRICE));
EconomyManager.DEFAULT_AM_ACTION_ALARM_EXACT_WAKEUP_BASE_PRICE,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_ACTION_ALARM_EXACT_NONWAKEUP_BASE_PRICE,
new TareFactorData(mResources.getString(R.string.tare_alarm_clock),
EconomyManager.DEFAULT_AM_ACTION_ALARM_EXACT_WAKEUP_BASE_PRICE));
EconomyManager.DEFAULT_AM_ACTION_ALARM_EXACT_WAKEUP_BASE_PRICE,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(
EconomyManager.KEY_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_NONWAKEUP_BASE_PRICE,
new TareFactorData(mResources.getString(R.string.tare_alarm_clock),
EconomyManager
.DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_NONWAKEUP_BASE_PRICE));
.DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_NONWAKEUP_BASE_PRICE,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_ACTION_ALARM_INEXACT_NONWAKEUP_BASE_PRICE,
new TareFactorData(mResources.getString(R.string.tare_alarm_clock),
EconomyManager.DEFAULT_AM_ACTION_ALARM_INEXACT_NONWAKEUP_BASE_PRICE));
EconomyManager.DEFAULT_AM_ACTION_ALARM_INEXACT_NONWAKEUP_BASE_PRICE,
POLICY_ALARM_MANAGER));
mAlarmManagerMap.put(EconomyManager.KEY_AM_ACTION_ALARM_ALARMCLOCK_BASE_PRICE,
new TareFactorData(mResources.getString(R.string.tare_alarm_clock),
EconomyManager.DEFAULT_AM_ACTION_ALARM_ALARMCLOCK_BASE_PRICE));
EconomyManager.DEFAULT_AM_ACTION_ALARM_ALARMCLOCK_BASE_PRICE,
POLICY_ALARM_MANAGER));
}
/**
@@ -213,9 +254,9 @@ public class TareFactorController {
} catch (Exception e) {
Slog.e(TAG, "Bad value string constants", e);
}
int mSize = mParser.size();
int size = mParser.size();
for (int i = 0; i < mSize - 1; i++) {
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));
@@ -225,7 +266,7 @@ public class TareFactorController {
/**
* Takes a key as input and grabs the title linked to it.
*
* @param key the key of the factor you want to get the default value of
* @param key the key of the factor you want to get the title of
*/
private String getTitle(String key) {
return mAlarmManagerMap.get(key).title;
@@ -240,13 +281,72 @@ public class TareFactorController {
return mAlarmManagerMap.get(key).currentValue;
}
/**
* Takes a key as input and grabs the factor type linked to it.
*
* @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;
}
/**
* Takes a key and edited value 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
*/
public void updateValue(String key, int editedValue, int factorPolicy) {
switch (factorPolicy) {
case POLICY_ALARM_MANAGER:
mAlarmManagerMap.get(key).currentValue = editedValue;
rebuildAlarmManagerConstants();
break;
case POLICY_JOB_SCHEDULER:
// TODO: Add JobScheduler
break;
default:
Slog.e(TAG, "Invalid factor policy given");
break;
}
}
/**
* 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.
*/
private void rebuildAlarmManagerConstants() {
StringBuilder newConstantsStringBuilder = new StringBuilder();
int size = mAlarmManagerMap.size();
for (int i = 0; i < size; i++) {
if (i > 0) {
newConstantsStringBuilder.append(",");
}
String key = mAlarmManagerMap.keyAt(i);
newConstantsStringBuilder.append(key + "=" + mAlarmManagerMap.get(key).currentValue);
}
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);
}
/**
* Creates a dialog with the values linked to the key.
*
* @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), this);
return new TareFactorDialogFragment(getTitle(key), key, getCurrentValue(key),
getFactorType(key), this);
}
/**
@@ -255,12 +355,14 @@ public class TareFactorController {
private static class TareFactorData {
public final String title;
public final int defaultValue;
public final int factorPolicy;
public int currentValue;
TareFactorData(String title, int defaultValue) {
TareFactorData(String title, int defaultValue, int factorPolicy) {
this.title = title;
this.defaultValue = defaultValue;
currentValue = defaultValue;
this.factorPolicy = factorPolicy;
this.currentValue = defaultValue;
}
}
}
}