From 7b2293ef9a3a9bac6f9d942cad7a5bd9ee5d351e Mon Sep 17 00:00:00 2001 From: Joshua Date: Wed, 11 Aug 2021 22:20:48 +0000 Subject: [PATCH] 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 --- .../tare/TareFactorController.java | 266 ++++++++++++++++++ .../tare/TareFactorDialogFragment.java | 10 +- 2 files changed, 272 insertions(+), 4 deletions(-) create mode 100644 src/com/android/settings/development/tare/TareFactorController.java diff --git a/src/com/android/settings/development/tare/TareFactorController.java b/src/com/android/settings/development/tare/TareFactorController.java new file mode 100644 index 00000000000..95803b57ac5 --- /dev/null +++ b/src/com/android/settings/development/tare/TareFactorController.java @@ -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 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; + } + } +} diff --git a/src/com/android/settings/development/tare/TareFactorDialogFragment.java b/src/com/android/settings/development/tare/TareFactorDialogFragment.java index d6ef22d7ed7..515eb8f0a47 100644 --- a/src/com/android/settings/development/tare/TareFactorDialogFragment.java +++ b/src/com/android/settings/development/tare/TareFactorDialogFragment.java @@ -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();