1 /* 2 * Copyright (C) 2021 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.android.settings.development.tare; 17 18 import android.annotation.Nullable; 19 import android.app.Fragment; 20 import android.app.tare.EconomyManager; 21 import android.content.res.Resources; 22 import android.os.Bundle; 23 import android.view.LayoutInflater; 24 import android.view.View; 25 import android.view.ViewGroup; 26 import android.widget.ExpandableListView; 27 import android.widget.ExpandableListView.OnChildClickListener; 28 29 import com.android.settings.R; 30 31 /** 32 * Creates the JobScheduler fragment to display all the JobScheduler factors 33 * when the JobScheduler policy is chosen in the dropdown TARE menu. 34 */ 35 public class JobSchedulerFragment extends Fragment implements 36 TareFactorController.DataChangeListener { 37 38 private TareFactorController mFactorController; 39 40 private TareFactorExpandableListAdapter mExpandableListAdapter; 41 42 private String[] mGroups; 43 private String[][] mChildren; 44 private String[][] mKeys; 45 46 @Override onCreate(@ullable Bundle savedInstanceState)47 public void onCreate(@Nullable Bundle savedInstanceState) { 48 super.onCreate(savedInstanceState); 49 50 mFactorController = TareFactorController.getInstance(getContext()); 51 populateArrays(); 52 } 53 54 @Override onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)55 public View onCreateView(LayoutInflater inflater, ViewGroup container, 56 Bundle savedInstanceState) { 57 View v = inflater.inflate(R.layout.tare_policy_fragment, null); 58 ExpandableListView elv = (ExpandableListView) v.findViewById(R.id.factor_list); 59 mExpandableListAdapter = new TareFactorExpandableListAdapter( 60 mFactorController, LayoutInflater.from(getActivity()), mGroups, mChildren, mKeys); 61 elv.setGroupIndicator(null); 62 elv.setAdapter(mExpandableListAdapter); 63 elv.setOnChildClickListener(new OnChildClickListener() { 64 public boolean onChildClick(ExpandableListView parent, View v, 65 int groupPosition, int childPosition, long id) { 66 final String key = mExpandableListAdapter.getKey(groupPosition, childPosition); 67 mFactorController.createDialog(key).show(getFragmentManager(), key); 68 return true; 69 } 70 }); 71 72 return v; 73 } 74 75 @Override onStart()76 public void onStart() { 77 super.onStart(); 78 mFactorController.registerListener(this); 79 } 80 81 @Override onStop()82 public void onStop() { 83 mFactorController.unregisterListener(this); 84 super.onStop(); 85 } 86 87 @Override onDataChanged()88 public void onDataChanged() { 89 mExpandableListAdapter.notifyDataSetChanged(); 90 } 91 populateArrays()92 private void populateArrays() { 93 final Resources resources = getResources(); 94 95 mGroups = new String[]{ 96 resources.getString(R.string.tare_consumption_limits), 97 resources.getString(R.string.tare_balances), 98 // mResources.getString(R.string.tare_modifiers), 99 resources.getString(R.string.tare_actions_ctp), 100 resources.getString(R.string.tare_actions_base_price), 101 resources.getString(R.string.tare_rewards_instantaneous), 102 resources.getString(R.string.tare_rewards_ongoing), 103 resources.getString(R.string.tare_rewards_max) 104 }; 105 106 mChildren = new String[][]{ 107 resources.getStringArray(R.array.tare_consumption_limit_subfactors), 108 resources.getStringArray(R.array.tare_job_scheduler_app_balance_subfactors), 109 // TODO: support 110 // mResources.getStringArray(R.array.tare_modifiers_subfactors), 111 resources.getStringArray(R.array.tare_job_scheduler_actions), 112 resources.getStringArray(R.array.tare_job_scheduler_actions), 113 resources.getStringArray(R.array.tare_job_scheduler_rewards_subfactors), 114 {resources.getString(R.string.tare_top_activity)}, 115 resources.getStringArray(R.array.tare_job_scheduler_rewards_subfactors) 116 }; 117 118 mKeys = new String[][]{ 119 { 120 EconomyManager.KEY_JS_INITIAL_CONSUMPTION_LIMIT, 121 EconomyManager.KEY_JS_MIN_CONSUMPTION_LIMIT, 122 EconomyManager.KEY_JS_MAX_CONSUMPTION_LIMIT, 123 }, 124 { 125 EconomyManager.KEY_JS_MAX_SATIATED_BALANCE, 126 EconomyManager.KEY_JS_MIN_SATIATED_BALANCE_EXEMPTED, 127 EconomyManager.KEY_JS_MIN_SATIATED_BALANCE_HEADLESS_SYSTEM_APP, 128 EconomyManager.KEY_JS_MIN_SATIATED_BALANCE_OTHER_APP, 129 EconomyManager.KEY_JS_MIN_SATIATED_BALANCE_INCREMENT_APP_UPDATER, 130 }, 131 // {}, 132 { 133 EconomyManager.KEY_JS_ACTION_JOB_MAX_START_CTP, 134 EconomyManager.KEY_JS_ACTION_JOB_MAX_RUNNING_CTP, 135 EconomyManager.KEY_JS_ACTION_JOB_HIGH_START_CTP, 136 EconomyManager.KEY_JS_ACTION_JOB_HIGH_RUNNING_CTP, 137 EconomyManager.KEY_JS_ACTION_JOB_DEFAULT_START_CTP, 138 EconomyManager.KEY_JS_ACTION_JOB_DEFAULT_RUNNING_CTP, 139 EconomyManager.KEY_JS_ACTION_JOB_LOW_START_CTP, 140 EconomyManager.KEY_JS_ACTION_JOB_LOW_RUNNING_CTP, 141 EconomyManager.KEY_JS_ACTION_JOB_MIN_START_CTP, 142 EconomyManager.KEY_JS_ACTION_JOB_MIN_RUNNING_CTP, 143 EconomyManager.KEY_JS_ACTION_JOB_TIMEOUT_PENALTY_CTP 144 }, 145 { 146 EconomyManager.KEY_JS_ACTION_JOB_MAX_START_BASE_PRICE, 147 EconomyManager.KEY_JS_ACTION_JOB_MAX_RUNNING_BASE_PRICE, 148 EconomyManager.KEY_JS_ACTION_JOB_HIGH_START_BASE_PRICE, 149 EconomyManager.KEY_JS_ACTION_JOB_HIGH_RUNNING_BASE_PRICE, 150 EconomyManager.KEY_JS_ACTION_JOB_DEFAULT_START_BASE_PRICE, 151 EconomyManager.KEY_JS_ACTION_JOB_DEFAULT_RUNNING_BASE_PRICE, 152 EconomyManager.KEY_JS_ACTION_JOB_LOW_START_BASE_PRICE, 153 EconomyManager.KEY_JS_ACTION_JOB_LOW_RUNNING_BASE_PRICE, 154 EconomyManager.KEY_JS_ACTION_JOB_MIN_START_BASE_PRICE, 155 EconomyManager.KEY_JS_ACTION_JOB_MIN_RUNNING_BASE_PRICE, 156 EconomyManager.KEY_JS_ACTION_JOB_TIMEOUT_PENALTY_BASE_PRICE 157 }, 158 { 159 EconomyManager.KEY_JS_REWARD_TOP_ACTIVITY_INSTANT, 160 EconomyManager.KEY_JS_REWARD_NOTIFICATION_SEEN_INSTANT, 161 EconomyManager.KEY_JS_REWARD_NOTIFICATION_INTERACTION_INSTANT, 162 EconomyManager.KEY_JS_REWARD_WIDGET_INTERACTION_INSTANT, 163 EconomyManager.KEY_JS_REWARD_OTHER_USER_INTERACTION_INSTANT, 164 EconomyManager.KEY_JS_REWARD_APP_INSTALL_INSTANT, 165 }, 166 {EconomyManager.KEY_JS_REWARD_TOP_ACTIVITY_ONGOING}, 167 { 168 EconomyManager.KEY_JS_REWARD_TOP_ACTIVITY_MAX, 169 EconomyManager.KEY_JS_REWARD_NOTIFICATION_SEEN_MAX, 170 EconomyManager.KEY_JS_REWARD_NOTIFICATION_INTERACTION_MAX, 171 EconomyManager.KEY_JS_REWARD_WIDGET_INTERACTION_MAX, 172 EconomyManager.KEY_JS_REWARD_OTHER_USER_INTERACTION_MAX, 173 EconomyManager.KEY_JS_REWARD_APP_INSTALL_MAX, 174 } 175 }; 176 } 177 } 178