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