Clean up code.

1. Create a method for duplicate code.
2. Address style/lint issues.
3. Properly parse settings constant string. The original iteration
   wouldn't reset values to their default if the constant string didn't
   have a value set.

Bug: 158300259
Test: manual
Change-Id: I994b872ba16f12c8e06ce85aedc526b84e5fa31b
diff --git a/src/com/android/settings/development/tare/TareFactorController.java b/src/com/android/settings/development/tare/TareFactorController.java
index 7e9f314..3cabd8d 100644
--- a/src/com/android/settings/development/tare/TareFactorController.java
+++ b/src/com/android/settings/development/tare/TareFactorController.java
@@ -16,6 +16,10 @@
 
 package com.android.settings.development.tare;
 
+import static android.provider.Settings.Global.TARE_ALARM_MANAGER_CONSTANTS;
+import static android.provider.Settings.Global.TARE_JOB_SCHEDULER_CONSTANTS;
+
+import android.annotation.NonNull;
 import android.app.tare.EconomyManager;
 import android.content.ContentResolver;
 import android.content.Context;
@@ -49,11 +53,10 @@
         mContentResolver = context.getContentResolver();
         mResources = context.getResources();
 
-        mAlarmManagerConstants = Settings.Global
-                .getString(mContentResolver, Settings.Global.TARE_ALARM_MANAGER_CONSTANTS);
-
-        mJobSchedulerConstants = Settings.Global
-                .getString(mContentResolver, Settings.Global.TARE_JOB_SCHEDULER_CONSTANTS);
+        mAlarmManagerConstants =
+                Settings.Global.getString(mContentResolver, TARE_ALARM_MANAGER_CONSTANTS);
+        mJobSchedulerConstants =
+                Settings.Global.getString(mContentResolver, TARE_JOB_SCHEDULER_CONSTANTS);
 
         initAlarmManagerMap();
         parseAlarmManagerGlobalSettings();
@@ -408,8 +411,7 @@
         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,
+                        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),
@@ -425,68 +427,50 @@
                         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, 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;
-    }
-
     /**
      * 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 size = mParser.size();
-
-        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, getFactorType(key)));
-        }
+        parseSettingsIntoMap(mAlarmManagerConstants, mAlarmManagerMap);
     }
 
     /**
      * 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();
+        parseSettingsIntoMap(mJobSchedulerConstants, mJobSchedulerMap);
+    }
 
-        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)));
+    private void parseSettingsIntoMap(String constants, ArrayMap<String, TareFactorData> map) {
+        try {
+            mParser.setString(constants);
+        } catch (Exception e) {
+            Slog.e(TAG, "Bad string constants value", e);
+        }
+
+        for (int i = map.size() - 1; i >= 0; --i) {
+            final String key = map.keyAt(i);
+            final TareFactorData data = map.valueAt(i);
+            data.currentValue = mParser.getInt(key, data.defaultValue);
+        }
+    }
+
+    @NonNull
+    private ArrayMap<String, TareFactorData> getMap(int factorPolicy) {
+        switch (factorPolicy) {
+            case POLICY_ALARM_MANAGER:
+                return mAlarmManagerMap;
+            case POLICY_JOB_SCHEDULER:
+                return mJobSchedulerMap;
+            default:
+                throw new IllegalArgumentException("Invalid factor policy given");
         }
     }
 
     /**
      * 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 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) {
@@ -507,21 +491,11 @@
     /**
      * 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 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, 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");
-        }
+        final ArrayMap<String, TareFactorData> currentMap = getMap(factorPolicy);
         return currentMap.get(key).currentValue;
     }
 
@@ -551,18 +525,14 @@
      * @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;
-                rebuildPolicyConstants(factorPolicy);
-                break;
-            case POLICY_JOB_SCHEDULER:
-                mJobSchedulerMap.get(key).currentValue = editedValue;
-                rebuildPolicyConstants(factorPolicy);
-                break;
-            default:
-                throw new IllegalArgumentException("Invalid factor policy given");
+        final ArrayMap<String, TareFactorData> map = getMap(factorPolicy);
+
+        final TareFactorData data = map.get(key);
+        if (data.currentValue == editedValue) {
+            return;
         }
+        data.currentValue = editedValue;
+        rebuildPolicyConstants(factorPolicy);
     }
 
     /**
@@ -574,16 +544,14 @@
     private void rebuildPolicyConstants(int factorPolicy) {
         switch (factorPolicy) {
             case POLICY_ALARM_MANAGER:
-                writeConstantsToSettings(mAlarmManagerMap,
-                        Settings.Global.TARE_ALARM_MANAGER_CONSTANTS);
+                writeConstantsToSettings(mAlarmManagerMap, TARE_ALARM_MANAGER_CONSTANTS);
 
                 mAlarmManagerConstants = Settings.Global
                         .getString(mContentResolver, Settings.Global
                                 .TARE_ALARM_MANAGER_CONSTANTS);
                 break;
             case POLICY_JOB_SCHEDULER:
-                writeConstantsToSettings(mJobSchedulerMap,
-                        Settings.Global.TARE_JOB_SCHEDULER_CONSTANTS);
+                writeConstantsToSettings(mJobSchedulerMap, TARE_JOB_SCHEDULER_CONSTANTS);
 
                 mJobSchedulerConstants = Settings.Global
                         .getString(mContentResolver, Settings.Global
@@ -623,7 +591,7 @@
     public TareFactorDialogFragment createDialog(String key) {
         int policy = getFactorType(key);
         return new TareFactorDialogFragment(getTitle(key, policy), key,
-                getCurrentValue(key, policy), policy , this);
+                getCurrentValue(key, policy), policy, this);
     }
 
     /**