• 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 
17 package android.app.tare;
18 
19 import android.annotation.Nullable;
20 import android.annotation.SystemService;
21 import android.content.Context;
22 import android.util.Log;
23 
24 /**
25  * Provides access to the resource economy service.
26  *
27  * @hide
28  */
29 @SystemService(Context.RESOURCE_ECONOMY_SERVICE)
30 public class EconomyManager {
31     private static final String TAG = "TARE-" + EconomyManager.class.getSimpleName();
32 
33     /**
34      * 1 ARC = 1 GIGA-CAKE!
35      *
36      * @hide
37      */
38     public static final long CAKE_IN_ARC = 1_000_000_000L;
39 
40     /** @hide */
arcToCake(int arcs)41     public static long arcToCake(int arcs) {
42         return arcs * CAKE_IN_ARC;
43     }
44 
45     /**
46      * Parses a configuration string to get the value in cakes.
47      *
48      * @hide
49      */
parseCreditValue(@ullable final String val, final long defaultValCakes)50     public static long parseCreditValue(@Nullable final String val, final long defaultValCakes) {
51         String trunc;
52         if (val == null || (trunc = val.trim()).isEmpty()) {
53             return defaultValCakes;
54         }
55         long multiplier;
56         if (trunc.endsWith("c")) {
57             trunc = trunc.substring(0, trunc.length() - 1);
58             multiplier = 1;
59         } else if (trunc.endsWith("ck")) {
60             trunc = trunc.substring(0, trunc.length() - 2);
61             multiplier = 1;
62         } else if (trunc.endsWith("A")) {
63             trunc = trunc.substring(0, trunc.length() - 1);
64             multiplier = CAKE_IN_ARC;
65         } else if (trunc.endsWith("ARC")) {
66             trunc = trunc.substring(0, trunc.length() - 3);
67             multiplier = CAKE_IN_ARC;
68         } else {
69             // Don't risk using the wrong units
70             Log.e(TAG, "Couldn't determine units of credit value: " + val);
71             return defaultValCakes;
72         }
73 
74         // Allow people to shorten notation (eg. Mc for Megacake).
75         if (trunc.endsWith("k")) {
76             trunc = trunc.substring(0, trunc.length() - 1);
77             multiplier *= 1_000;
78         } else if (trunc.endsWith("M")) {
79             trunc = trunc.substring(0, trunc.length() - 1);
80             multiplier *= 1_000_000;
81         } else if (trunc.endsWith("G")) {
82             trunc = trunc.substring(0, trunc.length() - 1);
83             multiplier *= 1_000_000_000;
84         }
85 
86         try {
87             return Long.parseLong(trunc) * multiplier;
88         } catch (NumberFormatException e) {
89             Log.e(TAG, "Malformed config string: " + val + " to " + trunc, e);
90             return defaultValCakes;
91         }
92     }
93 
94     // Keys for AlarmManager TARE factors
95     /** @hide */
96     public static final String KEY_AM_MIN_SATIATED_BALANCE_EXEMPTED =
97             "am_min_satiated_balance_exempted";
98     /** @hide */
99     public static final String KEY_AM_MIN_SATIATED_BALANCE_HEADLESS_SYSTEM_APP =
100             "am_min_satiated_balance_headless_system_app";
101     /** @hide */
102     public static final String KEY_AM_MIN_SATIATED_BALANCE_OTHER_APP =
103             "am_min_satiated_balance_other_app";
104     /** @hide */
105     public static final String KEY_AM_MAX_SATIATED_BALANCE = "am_max_satiated_balance";
106     /** @hide */
107     public static final String KEY_AM_INITIAL_CONSUMPTION_LIMIT = "am_initial_consumption_limit";
108     /** @hide */
109     public static final String KEY_AM_HARD_CONSUMPTION_LIMIT = "am_hard_consumption_limit";
110     // TODO: Add AlarmManager modifier keys
111     /** @hide */
112     public static final String KEY_AM_REWARD_TOP_ACTIVITY_INSTANT =
113             "am_reward_top_activity_instant";
114     /** @hide */
115     public static final String KEY_AM_REWARD_TOP_ACTIVITY_ONGOING =
116             "am_reward_top_activity_ongoing";
117     /** @hide */
118     public static final String KEY_AM_REWARD_TOP_ACTIVITY_MAX = "am_reward_top_activity_max";
119     /** @hide */
120     public static final String KEY_AM_REWARD_NOTIFICATION_SEEN_INSTANT =
121             "am_reward_notification_seen_instant";
122     /** @hide */
123     public static final String KEY_AM_REWARD_NOTIFICATION_SEEN_ONGOING =
124             "am_reward_notification_seen_ongoing";
125     /** @hide */
126     public static final String KEY_AM_REWARD_NOTIFICATION_SEEN_MAX =
127             "am_reward_notification_seen_max";
128     /** @hide */
129     public static final String KEY_AM_REWARD_NOTIFICATION_SEEN_WITHIN_15_INSTANT =
130             "am_reward_notification_seen_within_15_instant";
131     /** @hide */
132     public static final String KEY_AM_REWARD_NOTIFICATION_SEEN_WITHIN_15_ONGOING =
133             "am_reward_notification_seen_within_15_ongoing";
134     /** @hide */
135     public static final String KEY_AM_REWARD_NOTIFICATION_SEEN_WITHIN_15_MAX =
136             "am_reward_notification_seen_within_15_max";
137     /** @hide */
138     public static final String KEY_AM_REWARD_NOTIFICATION_INTERACTION_INSTANT =
139             "am_reward_notification_interaction_instant";
140     /** @hide */
141     public static final String KEY_AM_REWARD_NOTIFICATION_INTERACTION_ONGOING =
142             "am_reward_notification_interaction_ongoing";
143     /** @hide */
144     public static final String KEY_AM_REWARD_NOTIFICATION_INTERACTION_MAX =
145             "am_reward_notification_interaction_max";
146     /** @hide */
147     public static final String KEY_AM_REWARD_WIDGET_INTERACTION_INSTANT =
148             "am_reward_widget_interaction_instant";
149     /** @hide */
150     public static final String KEY_AM_REWARD_WIDGET_INTERACTION_ONGOING =
151             "am_reward_widget_interaction_ongoing";
152     /** @hide */
153     public static final String KEY_AM_REWARD_WIDGET_INTERACTION_MAX =
154             "am_reward_widget_interaction_max";
155     /** @hide */
156     public static final String KEY_AM_REWARD_OTHER_USER_INTERACTION_INSTANT =
157             "am_reward_other_user_interaction_instant";
158     /** @hide */
159     public static final String KEY_AM_REWARD_OTHER_USER_INTERACTION_ONGOING =
160             "am_reward_other_user_interaction_ongoing";
161     /** @hide */
162     public static final String KEY_AM_REWARD_OTHER_USER_INTERACTION_MAX =
163             "am_reward_other_user_interaction_max";
164     /** @hide */
165     public static final String KEY_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_EXACT_WAKEUP_CTP =
166             "am_action_alarm_allow_while_idle_exact_wakeup_ctp";
167     /** @hide */
168     public static final String KEY_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_WAKEUP_CTP =
169             "am_action_alarm_allow_while_idle_inexact_wakeup_ctp";
170     /** @hide */
171     public static final String KEY_AM_ACTION_ALARM_EXACT_WAKEUP_CTP =
172             "am_action_alarm_exact_wakeup_ctp";
173     /** @hide */
174     public static final String KEY_AM_ACTION_ALARM_INEXACT_WAKEUP_CTP =
175             "am_action_alarm_inexact_wakeup_ctp";
176     /** @hide */
177     public static final String KEY_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_EXACT_NONWAKEUP_CTP =
178             "am_action_alarm_allow_while_idle_exact_nonwakeup_ctp";
179     /** @hide */
180     public static final String KEY_AM_ACTION_ALARM_EXACT_NONWAKEUP_CTP =
181             "am_action_alarm_exact_nonwakeup_ctp";
182     /** @hide */
183     public static final String KEY_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_NONWAKEUP_CTP =
184             "am_action_alarm_allow_while_idle_inexact_nonwakeup_ctp";
185     /** @hide */
186     public static final String KEY_AM_ACTION_ALARM_INEXACT_NONWAKEUP_CTP =
187             "am_action_alarm_inexact_nonwakeup_ctp";
188     /** @hide */
189     public static final String KEY_AM_ACTION_ALARM_ALARMCLOCK_CTP =
190             "am_action_alarm_alarmclock_ctp";
191     /** @hide */
192     public static final String KEY_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_EXACT_WAKEUP_BASE_PRICE =
193             "am_action_alarm_allow_while_idle_exact_wakeup_base_price";
194     /** @hide */
195     public static final String KEY_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_WAKEUP_BASE_PRICE =
196             "am_action_alarm_allow_while_idle_inexact_wakeup_base_price";
197     /** @hide */
198     public static final String KEY_AM_ACTION_ALARM_EXACT_WAKEUP_BASE_PRICE =
199             "am_action_alarm_exact_wakeup_base_price";
200     /** @hide */
201     public static final String KEY_AM_ACTION_ALARM_INEXACT_WAKEUP_BASE_PRICE =
202             "am_action_alarm_inexact_wakeup_base_price";
203     /** @hide */
204     public static final String KEY_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_EXACT_NONWAKEUP_BASE_PRICE =
205             "am_action_alarm_allow_while_idle_exact_nonwakeup_base_price";
206     /** @hide */
207     public static final String KEY_AM_ACTION_ALARM_EXACT_NONWAKEUP_BASE_PRICE =
208             "am_action_alarm_exact_nonwakeup_base_price";
209     /** @hide */
210     public static final String KEY_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_NONWAKEUP_BASE_PRICE =
211             "am_action_alarm_allow_while_idle_inexact_nonwakeup_base_price";
212     /** @hide */
213     public static final String KEY_AM_ACTION_ALARM_INEXACT_NONWAKEUP_BASE_PRICE =
214             "am_action_alarm_inexact_nonwakeup_base_price";
215     /** @hide */
216     public static final String KEY_AM_ACTION_ALARM_ALARMCLOCK_BASE_PRICE =
217             "am_action_alarm_alarmclock_base_price";
218 
219 // Keys for JobScheduler TARE factors
220     /** @hide */
221     public static final String KEY_JS_MIN_SATIATED_BALANCE_EXEMPTED =
222             "js_min_satiated_balance_exempted";
223     /** @hide */
224     public static final String KEY_JS_MIN_SATIATED_BALANCE_HEADLESS_SYSTEM_APP =
225             "js_min_satiated_balance_headless_system_app";
226     /** @hide */
227     public static final String KEY_JS_MIN_SATIATED_BALANCE_OTHER_APP =
228             "js_min_satiated_balance_other_app";
229     /** @hide */
230     public static final String KEY_JS_MAX_SATIATED_BALANCE =
231             "js_max_satiated_balance";
232     /** @hide */
233     public static final String KEY_JS_INITIAL_CONSUMPTION_LIMIT = "js_initial_consumption_limit";
234     /** @hide */
235     public static final String KEY_JS_HARD_CONSUMPTION_LIMIT = "js_hard_consumption_limit";
236     // TODO: Add JobScheduler modifier keys
237     /** @hide */
238     public static final String KEY_JS_REWARD_TOP_ACTIVITY_INSTANT =
239             "js_reward_top_activity_instant";
240     /** @hide */
241     public static final String KEY_JS_REWARD_TOP_ACTIVITY_ONGOING =
242             "js_reward_top_activity_ongoing";
243     /** @hide */
244     public static final String KEY_JS_REWARD_TOP_ACTIVITY_MAX =
245             "js_reward_top_activity_max";
246     /** @hide */
247     public static final String KEY_JS_REWARD_NOTIFICATION_SEEN_INSTANT =
248             "js_reward_notification_seen_instant";
249     /** @hide */
250     public static final String KEY_JS_REWARD_NOTIFICATION_SEEN_ONGOING =
251             "js_reward_notification_seen_ongoing";
252     /** @hide */
253     public static final String KEY_JS_REWARD_NOTIFICATION_SEEN_MAX =
254             "js_reward_notification_seen_max";
255     /** @hide */
256     public static final String KEY_JS_REWARD_NOTIFICATION_INTERACTION_INSTANT =
257             "js_reward_notification_interaction_instant";
258     /** @hide */
259     public static final String KEY_JS_REWARD_NOTIFICATION_INTERACTION_ONGOING =
260             "js_reward_notification_interaction_ongoing";
261     /** @hide */
262     public static final String KEY_JS_REWARD_NOTIFICATION_INTERACTION_MAX =
263             "js_reward_notification_interaction_max";
264     /** @hide */
265     public static final String KEY_JS_REWARD_WIDGET_INTERACTION_INSTANT =
266             "js_reward_widget_interaction_instant";
267     /** @hide */
268     public static final String KEY_JS_REWARD_WIDGET_INTERACTION_ONGOING =
269             "js_reward_widget_interaction_ongoing";
270     /** @hide */
271     public static final String KEY_JS_REWARD_WIDGET_INTERACTION_MAX =
272             "js_reward_widget_interaction_max";
273     /** @hide */
274     public static final String KEY_JS_REWARD_OTHER_USER_INTERACTION_INSTANT =
275             "js_reward_other_user_interaction_instant";
276     /** @hide */
277     public static final String KEY_JS_REWARD_OTHER_USER_INTERACTION_ONGOING =
278             "js_reward_other_user_interaction_ongoing";
279     /** @hide */
280     public static final String KEY_JS_REWARD_OTHER_USER_INTERACTION_MAX =
281             "js_reward_other_user_interaction_max";
282     /** @hide */
283     public static final String KEY_JS_ACTION_JOB_MAX_START_CTP = "js_action_job_max_start_ctp";
284     /** @hide */
285     public static final String KEY_JS_ACTION_JOB_MAX_RUNNING_CTP = "js_action_job_max_running_ctp";
286     /** @hide */
287     public static final String KEY_JS_ACTION_JOB_HIGH_START_CTP = "js_action_job_high_start_ctp";
288     /** @hide */
289     public static final String KEY_JS_ACTION_JOB_HIGH_RUNNING_CTP =
290             "js_action_job_high_running_ctp";
291     /** @hide */
292     public static final String KEY_JS_ACTION_JOB_DEFAULT_START_CTP =
293             "js_action_job_default_start_ctp";
294     /** @hide */
295     public static final String KEY_JS_ACTION_JOB_DEFAULT_RUNNING_CTP =
296             "js_action_job_default_running_ctp";
297     /** @hide */
298     public static final String KEY_JS_ACTION_JOB_LOW_START_CTP = "js_action_job_low_start_ctp";
299     /** @hide */
300     public static final String KEY_JS_ACTION_JOB_LOW_RUNNING_CTP = "js_action_job_low_running_ctp";
301     /** @hide */
302     public static final String KEY_JS_ACTION_JOB_MIN_START_CTP = "js_action_job_min_start_ctp";
303     /** @hide */
304     public static final String KEY_JS_ACTION_JOB_MIN_RUNNING_CTP = "js_action_job_min_running_ctp";
305     /** @hide */
306     public static final String KEY_JS_ACTION_JOB_TIMEOUT_PENALTY_CTP =
307             "js_action_job_timeout_penalty_ctp";
308     /** @hide */
309     public static final String KEY_JS_ACTION_JOB_MAX_START_BASE_PRICE =
310             "js_action_job_max_start_base_price";
311     /** @hide */
312     public static final String KEY_JS_ACTION_JOB_MAX_RUNNING_BASE_PRICE =
313             "js_action_job_max_running_base_price";
314     /** @hide */
315     public static final String KEY_JS_ACTION_JOB_HIGH_START_BASE_PRICE =
316             "js_action_job_high_start_base_price";
317     /** @hide */
318     public static final String KEY_JS_ACTION_JOB_HIGH_RUNNING_BASE_PRICE =
319             "js_action_job_high_running_base_price";
320     /** @hide */
321     public static final String KEY_JS_ACTION_JOB_DEFAULT_START_BASE_PRICE =
322             "js_action_job_default_start_base_price";
323     /** @hide */
324     public static final String KEY_JS_ACTION_JOB_DEFAULT_RUNNING_BASE_PRICE =
325             "js_action_job_default_running_base_price";
326     /** @hide */
327     public static final String KEY_JS_ACTION_JOB_LOW_START_BASE_PRICE =
328             "js_action_job_low_start_base_price";
329     /** @hide */
330     public static final String KEY_JS_ACTION_JOB_LOW_RUNNING_BASE_PRICE =
331             "js_action_job_low_running_base_price";
332     /** @hide */
333     public static final String KEY_JS_ACTION_JOB_MIN_START_BASE_PRICE =
334             "js_action_job_min_start_base_price";
335     /** @hide */
336     public static final String KEY_JS_ACTION_JOB_MIN_RUNNING_BASE_PRICE =
337             "js_action_job_min_running_base_price";
338     /** @hide */
339     public static final String KEY_JS_ACTION_JOB_TIMEOUT_PENALTY_BASE_PRICE =
340             "js_action_job_timeout_penalty_base_price";
341 
342     // Default values AlarmManager factors
343     /** @hide */
344     public static final long DEFAULT_AM_MIN_SATIATED_BALANCE_EXEMPTED_CAKES = arcToCake(500);
345     /** @hide */
346     public static final long DEFAULT_AM_MIN_SATIATED_BALANCE_HEADLESS_SYSTEM_APP_CAKES =
347             arcToCake(256);
348     /** @hide */
349     public static final long DEFAULT_AM_MIN_SATIATED_BALANCE_OTHER_APP_CAKES = arcToCake(160);
350     /** @hide */
351     public static final long DEFAULT_AM_MAX_SATIATED_BALANCE_CAKES = arcToCake(960);
352     /** @hide */
353     public static final long DEFAULT_AM_INITIAL_CONSUMPTION_LIMIT_CAKES = arcToCake(2880);
354     /** @hide */
355     public static final long DEFAULT_AM_HARD_CONSUMPTION_LIMIT_CAKES = arcToCake(15_000);
356     // TODO: add AlarmManager modifier default values
357     /** @hide */
358     public static final long DEFAULT_AM_REWARD_TOP_ACTIVITY_INSTANT_CAKES = arcToCake(0);
359     /** @hide */
360     // 10 megacakes = .01 ARC
361     public static final long DEFAULT_AM_REWARD_TOP_ACTIVITY_ONGOING_CAKES = 10_000_000;
362     /** @hide */
363     public static final long DEFAULT_AM_REWARD_TOP_ACTIVITY_MAX_CAKES = arcToCake(500);
364     /** @hide */
365     public static final long DEFAULT_AM_REWARD_NOTIFICATION_SEEN_INSTANT_CAKES = arcToCake(3);
366     /** @hide */
367     public static final long DEFAULT_AM_REWARD_NOTIFICATION_SEEN_ONGOING_CAKES = arcToCake(0);
368     /** @hide */
369     public static final long DEFAULT_AM_REWARD_NOTIFICATION_SEEN_MAX_CAKES = arcToCake(60);
370     /** @hide */
371     public static final long DEFAULT_AM_REWARD_NOTIFICATION_SEEN_WITHIN_15_INSTANT_CAKES =
372             arcToCake(5);
373     /** @hide */
374     public static final long DEFAULT_AM_REWARD_NOTIFICATION_SEEN_WITHIN_15_ONGOING_CAKES =
375             arcToCake(0);
376     /** @hide */
377     public static final long DEFAULT_AM_REWARD_NOTIFICATION_SEEN_WITHIN_15_MAX_CAKES =
378             arcToCake(500);
379     /** @hide */
380     public static final long DEFAULT_AM_REWARD_NOTIFICATION_INTERACTION_INSTANT_CAKES =
381             arcToCake(5);
382     /** @hide */
383     public static final long DEFAULT_AM_REWARD_NOTIFICATION_INTERACTION_ONGOING_CAKES =
384             arcToCake(0);
385     /** @hide */
386     public static final long DEFAULT_AM_REWARD_NOTIFICATION_INTERACTION_MAX_CAKES = arcToCake(500);
387     /** @hide */
388     public static final long DEFAULT_AM_REWARD_WIDGET_INTERACTION_INSTANT_CAKES = arcToCake(10);
389     /** @hide */
390     public static final long DEFAULT_AM_REWARD_WIDGET_INTERACTION_ONGOING_CAKES = arcToCake(0);
391     /** @hide */
392     public static final long DEFAULT_AM_REWARD_WIDGET_INTERACTION_MAX_CAKES = arcToCake(500);
393     /** @hide */
394     public static final long DEFAULT_AM_REWARD_OTHER_USER_INTERACTION_INSTANT_CAKES = arcToCake(10);
395     /** @hide */
396     public static final long DEFAULT_AM_REWARD_OTHER_USER_INTERACTION_ONGOING_CAKES = arcToCake(0);
397     /** @hide */
398     public static final long DEFAULT_AM_REWARD_OTHER_USER_INTERACTION_MAX_CAKES = arcToCake(500);
399     /** @hide */
400     public static final long DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_EXACT_WAKEUP_CTP_CAKES =
401             arcToCake(3);
402     /** @hide */
403     public static final long DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_WAKEUP_CTP_CAKES =
404             arcToCake(3);
405     /** @hide */
406     public static final long DEFAULT_AM_ACTION_ALARM_EXACT_WAKEUP_CTP_CAKES = arcToCake(3);
407     /** @hide */
408     public static final long DEFAULT_AM_ACTION_ALARM_INEXACT_WAKEUP_CTP_CAKES = arcToCake(3);
409     /** @hide */
410     public static final long DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_EXACT_NONWAKEUP_CTP_CAKES =
411             arcToCake(1);
412     /** @hide */
413     public static final long DEFAULT_AM_ACTION_ALARM_EXACT_NONWAKEUP_CTP_CAKES = arcToCake(1);
414     /** @hide */
415     public static final long DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_NONWAKEUP_CTP_CAKES =
416             arcToCake(1);
417     /** @hide */
418     public static final long DEFAULT_AM_ACTION_ALARM_INEXACT_NONWAKEUP_CTP_CAKES = arcToCake(1);
419     /** @hide */
420     public static final long DEFAULT_AM_ACTION_ALARM_ALARMCLOCK_CTP_CAKES = arcToCake(5);
421     /** @hide */
422     public static final long
423             DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_EXACT_WAKEUP_BASE_PRICE_CAKES = arcToCake(5);
424     /** @hide */
425     public static final long
426             DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_WAKEUP_BASE_PRICE_CAKES = arcToCake(4);
427     /** @hide */
428     public static final long DEFAULT_AM_ACTION_ALARM_EXACT_WAKEUP_BASE_PRICE_CAKES = arcToCake(4);
429     /** @hide */
430     public static final long DEFAULT_AM_ACTION_ALARM_INEXACT_WAKEUP_BASE_PRICE_CAKES = arcToCake(3);
431     /** @hide */
432     public static final long
433             DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_EXACT_NONWAKEUP_BASE_PRICE_CAKES =
434             arcToCake(3);
435     /** @hide */
436     public static final long DEFAULT_AM_ACTION_ALARM_EXACT_NONWAKEUP_BASE_PRICE_CAKES =
437             arcToCake(2);
438     /** @hide */
439     public static final long
440             DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_NONWAKEUP_BASE_PRICE_CAKES =
441             arcToCake(2);
442     /** @hide */
443     public static final long DEFAULT_AM_ACTION_ALARM_INEXACT_NONWAKEUP_BASE_PRICE_CAKES =
444             arcToCake(1);
445     /** @hide */
446     public static final long DEFAULT_AM_ACTION_ALARM_ALARMCLOCK_BASE_PRICE_CAKES = arcToCake(10);
447 
448     // Default values JobScheduler factors
449     // TODO: add time_since_usage variable to min satiated balance factors
450     /** @hide */
451     public static final long DEFAULT_JS_MIN_SATIATED_BALANCE_EXEMPTED_CAKES = arcToCake(15000);
452     /** @hide */
453     public static final long DEFAULT_JS_MIN_SATIATED_BALANCE_HEADLESS_SYSTEM_APP_CAKES =
454             arcToCake(7500);
455     /** @hide */
456     public static final long DEFAULT_JS_MIN_SATIATED_BALANCE_OTHER_APP_CAKES = arcToCake(2000);
457     /** @hide */
458     public static final long DEFAULT_JS_MAX_SATIATED_BALANCE_CAKES = arcToCake(60000);
459     /** @hide */
460     public static final long DEFAULT_JS_INITIAL_CONSUMPTION_LIMIT_CAKES = arcToCake(29_000);
461     /** @hide */
462     // TODO: set hard limit based on device type (phone vs tablet vs etc) + battery size
463     public static final long DEFAULT_JS_HARD_CONSUMPTION_LIMIT_CAKES = arcToCake(250_000);
464     // TODO: add JobScheduler modifier default values
465     /** @hide */
466     public static final long DEFAULT_JS_REWARD_TOP_ACTIVITY_INSTANT_CAKES = arcToCake(0);
467     /** @hide */
468     public static final long DEFAULT_JS_REWARD_TOP_ACTIVITY_ONGOING_CAKES = CAKE_IN_ARC / 2;
469     /** @hide */
470     public static final long DEFAULT_JS_REWARD_TOP_ACTIVITY_MAX_CAKES = arcToCake(15000);
471     /** @hide */
472     public static final long DEFAULT_JS_REWARD_NOTIFICATION_SEEN_INSTANT_CAKES = arcToCake(1);
473     /** @hide */
474     public static final long DEFAULT_JS_REWARD_NOTIFICATION_SEEN_ONGOING_CAKES = arcToCake(0);
475     /** @hide */
476     public static final long DEFAULT_JS_REWARD_NOTIFICATION_SEEN_MAX_CAKES = arcToCake(10);
477     /** @hide */
478     public static final long DEFAULT_JS_REWARD_NOTIFICATION_INTERACTION_INSTANT_CAKES =
479             arcToCake(5);
480     /** @hide */
481     public static final long DEFAULT_JS_REWARD_NOTIFICATION_INTERACTION_ONGOING_CAKES =
482             arcToCake(0);
483     /** @hide */
484     public static final long DEFAULT_JS_REWARD_NOTIFICATION_INTERACTION_MAX_CAKES = arcToCake(5000);
485     /** @hide */
486     public static final long DEFAULT_JS_REWARD_WIDGET_INTERACTION_INSTANT_CAKES = arcToCake(10);
487     /** @hide */
488     public static final long DEFAULT_JS_REWARD_WIDGET_INTERACTION_ONGOING_CAKES = arcToCake(0);
489     /** @hide */
490     public static final long DEFAULT_JS_REWARD_WIDGET_INTERACTION_MAX_CAKES = arcToCake(5000);
491     /** @hide */
492     public static final long DEFAULT_JS_REWARD_OTHER_USER_INTERACTION_INSTANT_CAKES = arcToCake(10);
493     /** @hide */
494     public static final long DEFAULT_JS_REWARD_OTHER_USER_INTERACTION_ONGOING_CAKES = arcToCake(0);
495     /** @hide */
496     public static final long DEFAULT_JS_REWARD_OTHER_USER_INTERACTION_MAX_CAKES = arcToCake(5000);
497     /** @hide */
498     public static final long DEFAULT_JS_ACTION_JOB_MAX_START_CTP_CAKES = arcToCake(3);
499     /** @hide */
500     public static final long DEFAULT_JS_ACTION_JOB_MAX_RUNNING_CTP_CAKES = arcToCake(2);
501     /** @hide */
502     public static final long DEFAULT_JS_ACTION_JOB_HIGH_START_CTP_CAKES = arcToCake(3);
503     /** @hide */
504     public static final long DEFAULT_JS_ACTION_JOB_HIGH_RUNNING_CTP_CAKES = arcToCake(2);
505     /** @hide */
506     public static final long DEFAULT_JS_ACTION_JOB_DEFAULT_START_CTP_CAKES = arcToCake(3);
507     /** @hide */
508     public static final long DEFAULT_JS_ACTION_JOB_DEFAULT_RUNNING_CTP_CAKES = arcToCake(2);
509     /** @hide */
510     public static final long DEFAULT_JS_ACTION_JOB_LOW_START_CTP_CAKES = arcToCake(3);
511     /** @hide */
512     public static final long DEFAULT_JS_ACTION_JOB_LOW_RUNNING_CTP_CAKES = arcToCake(2);
513     /** @hide */
514     public static final long DEFAULT_JS_ACTION_JOB_MIN_START_CTP_CAKES = arcToCake(3);
515     /** @hide */
516     public static final long DEFAULT_JS_ACTION_JOB_MIN_RUNNING_CTP_CAKES = arcToCake(2);
517     /** @hide */
518     public static final long DEFAULT_JS_ACTION_JOB_TIMEOUT_PENALTY_CTP_CAKES = arcToCake(30);
519     /** @hide */
520     public static final long DEFAULT_JS_ACTION_JOB_MAX_START_BASE_PRICE_CAKES = arcToCake(10);
521     /** @hide */
522     public static final long DEFAULT_JS_ACTION_JOB_MAX_RUNNING_BASE_PRICE_CAKES = arcToCake(5);
523     /** @hide */
524     public static final long DEFAULT_JS_ACTION_JOB_HIGH_START_BASE_PRICE_CAKES = arcToCake(8);
525     /** @hide */
526     public static final long DEFAULT_JS_ACTION_JOB_HIGH_RUNNING_BASE_PRICE_CAKES = arcToCake(4);
527     /** @hide */
528     public static final long DEFAULT_JS_ACTION_JOB_DEFAULT_START_BASE_PRICE_CAKES = arcToCake(6);
529     /** @hide */
530     public static final long DEFAULT_JS_ACTION_JOB_DEFAULT_RUNNING_BASE_PRICE_CAKES = arcToCake(3);
531     /** @hide */
532     public static final long DEFAULT_JS_ACTION_JOB_LOW_START_BASE_PRICE_CAKES = arcToCake(4);
533     /** @hide */
534     public static final long DEFAULT_JS_ACTION_JOB_LOW_RUNNING_BASE_PRICE_CAKES = arcToCake(2);
535     /** @hide */
536     public static final long DEFAULT_JS_ACTION_JOB_MIN_START_BASE_PRICE_CAKES = arcToCake(2);
537     /** @hide */
538     public static final long DEFAULT_JS_ACTION_JOB_MIN_RUNNING_BASE_PRICE_CAKES = arcToCake(1);
539     /** @hide */
540     public static final long DEFAULT_JS_ACTION_JOB_TIMEOUT_PENALTY_BASE_PRICE_CAKES = arcToCake(60);
541 }
542