Parse AM Constants to get keys:value for Dialog

Takes the AlarmManager csv string and parsees it for key:value
pairs. These key value pairs are then used to fill in information that
the DialogFragment class needs to display information. An ArrayMap is
used to initialize and store a key and the values associated with it
through a data object class. This data can be retrived in updated by
providing only a key.

Bug: 195056296
Bug: 195056102
Bug: 195055428

Test: Manual
Change-Id: Ia11f41bdd1790f7f3483d33148c251c58243e890
This commit is contained in:
Joshua
2021-08-11 22:20:48 +00:00
parent fc69958a51
commit 7b2293ef9a
2 changed files with 272 additions and 4 deletions

View File

@@ -0,0 +1,266 @@
/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.development.tare;
import android.app.tare.EconomyManager;
import android.content.ContentResolver;
import android.content.Context;
import android.content.res.Resources;
import android.provider.Settings;
import android.util.ArrayMap;
import android.util.KeyValueListParser;
import android.util.Slog;
import com.android.settings.R;
/**
* Takes an AlarmManager or JobScheduler csv string and parses it to get key:value pairs.
* This allows us to populate a dialog with the correct information.
*/
public class TareFactorController {
private static final String TAG = "TareFactorController";
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();
mAlarmManagerConstants = Settings.Global
.getString(mContentResolver, Settings.Global.TARE_ALARM_MANAGER_CONSTANTS);
initAlarmManagerMap();
parseAlarmManagerGlobalSettings();
}
/**
* Initialization for AlarmManager Map that sets a AM factor key to a default value and title
* in the form of a string.
*/
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));
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));
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));
mAlarmManagerMap.put(EconomyManager.KEY_AM_MAX_SATIATED_BALANCE,
new TareFactorData(mResources.getString(R.string.tare_max_satiated_balance),
EconomyManager.DEFAULT_AM_MAX_SATIATED_BALANCE));
mAlarmManagerMap.put(EconomyManager.KEY_AM_MAX_CIRCULATION,
new TareFactorData(mResources.getString(R.string.tare_max_circulation),
EconomyManager.DEFAULT_AM_MAX_CIRCULATION));
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));
// 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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
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));
}
/**
* Takes a key 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
*/
private int getDefaultValue(String key) {
return mAlarmManagerMap.get(key).defaultValue;
}
/**
* Parses the AM constant from Settings.Global to get to the current value.
*/
private void parseAlarmManagerGlobalSettings() {
try {
mParser.setString(mAlarmManagerConstants);
} catch (Exception e) {
Slog.e(TAG, "Bad value string constants", e);
}
int mSize = mParser.size();
for (int i = 0; i < mSize - 1; i++) {
String key = mParser.keyAt(i);
TareFactorData data = mAlarmManagerMap.get(key);
data.currentValue = mParser.getInt(key, getDefaultValue(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 default value of
*/
private String getTitle(String key) {
return mAlarmManagerMap.get(key).title;
}
/**
* Takes a key 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
*/
private int getCurrentValue(String key) {
return mAlarmManagerMap.get(key).currentValue;
}
/**
* 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);
}
/**
* Data object that holds a title,default value,and current value for a key.
*/
private static class TareFactorData {
public final String title;
public final int defaultValue;
public int currentValue;
TareFactorData(String title, int defaultValue) {
this.title = title;
this.defaultValue = defaultValue;
currentValue = defaultValue;
}
}
}

View File

@@ -45,24 +45,26 @@ public class TareFactorDialogFragment extends DialogFragment {
private int mFactorEditedValue;
private EditText mFactorValueView;
private TareFactorController mTareFactorController;
/**
* @param title the title that will show at the top of the Dialog for the Factor
* @param key the key of the Factor being initialized.
* @param defaultValue the initial value set for the Factor before any changes
*/
public TareFactorDialogFragment(@NonNull String title, @NonNull String key, int defaultValue) {
public TareFactorDialogFragment(@NonNull String title, @NonNull String key, int defaultValue,
TareFactorController tareFactorController) {
mFactorTitle = title;
mFactorKey = key;
mFactorValue = defaultValue;
mTareFactorController = tareFactorController;
}
/**
* Gets the current value of the Factor
*/
private String getFactorValue() {
// TODO: Get value from locally cached copy
return Integer.toString(mFactorEditedValue);
return Integer.toString(mFactorValue);
}
@NonNull
@@ -85,7 +87,7 @@ public class TareFactorDialogFragment extends DialogFragment {
// TODO: Update csv with new factor value
})
.setNegativeButton(android.R.string.cancel, (dialog, which) -> {
// TODO: Add proper dismiss for negative button press
// When the negative button is clicked do nothing
});
return builder.create();