• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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