Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d16c0161 authored by Joshua Lewis's avatar Joshua Lewis Committed by Android (Google) Code Review
Browse files

Merge "Add JobScheduler support in factor controller"

parents ec94cff0 76ca8923
Loading
Loading
Loading
Loading
+326 −39
Original line number Diff line number Diff line
@@ -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();
@@ -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,
@@ -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;
    }

    /**
@@ -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;
    }

    /**
@@ -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;
        }
    }

    /**
@@ -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);
    }

    /**