Loading apex/jobscheduler/framework/java/android/app/tare/EconomyManager.java +15 −0 Original line number Diff line number Diff line Loading @@ -235,6 +235,15 @@ public class EconomyManager { public static final String KEY_JS_HARD_CONSUMPTION_LIMIT = "js_hard_consumption_limit"; // TODO: Add JobScheduler modifier keys /** @hide */ public static final String KEY_JS_REWARD_APP_INSTALL_INSTANT = "js_reward_app_install_instant"; /** @hide */ public static final String KEY_JS_REWARD_APP_INSTALL_ONGOING = "js_reward_app_install_ongoing"; /** @hide */ public static final String KEY_JS_REWARD_APP_INSTALL_MAX = "js_reward_app_install_max"; /** @hide */ public static final String KEY_JS_REWARD_TOP_ACTIVITY_INSTANT = "js_reward_top_activity_instant"; /** @hide */ Loading Loading @@ -463,6 +472,12 @@ public class EconomyManager { public static final long DEFAULT_JS_HARD_CONSUMPTION_LIMIT_CAKES = arcToCake(250_000); // TODO: add JobScheduler modifier default values /** @hide */ public static final long DEFAULT_JS_REWARD_APP_INSTALL_INSTANT_CAKES = arcToCake(408); /** @hide */ public static final long DEFAULT_JS_REWARD_APP_INSTALL_ONGOING_CAKES = arcToCake(0); /** @hide */ public static final long DEFAULT_JS_REWARD_APP_INSTALL_MAX_CAKES = arcToCake(4000); /** @hide */ public static final long DEFAULT_JS_REWARD_TOP_ACTIVITY_INSTANT_CAKES = arcToCake(0); /** @hide */ public static final long DEFAULT_JS_REWARD_TOP_ACTIVITY_ONGOING_CAKES = CAKE_IN_ARC / 2; Loading apex/jobscheduler/service/java/com/android/server/tare/EconomicPolicy.java +3 −0 Original line number Diff line number Diff line Loading @@ -120,6 +120,7 @@ public abstract class EconomicPolicy { REWARD_NOTIFICATION_INTERACTION, REWARD_WIDGET_INTERACTION, REWARD_OTHER_USER_INTERACTION, JobSchedulerEconomicPolicy.REWARD_APP_INSTALL, }) @Retention(RetentionPolicy.SOURCE) public @interface UtilityReward { Loading Loading @@ -430,6 +431,8 @@ public abstract class EconomicPolicy { return "REWARD_WIDGET_INTERACTION"; case REWARD_OTHER_USER_INTERACTION: return "REWARD_OTHER_USER_INTERACTION"; case JobSchedulerEconomicPolicy.REWARD_APP_INSTALL: return "REWARD_JOB_APP_INSTALL"; } return "UNKNOWN_REWARD:" + Integer.toHexString(eventId); } Loading apex/jobscheduler/service/java/com/android/server/tare/InstalledPackageInfo.java +17 −4 Original line number Diff line number Diff line Loading @@ -17,9 +17,12 @@ package com.android.server.tare; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.AppGlobals; import android.content.pm.ApplicationInfo; import android.content.pm.InstallSourceInfo; import android.content.pm.PackageInfo; import android.os.UserHandle; import android.os.RemoteException; /** POJO to cache only the information about installed packages that TARE cares about. */ class InstalledPackageInfo { Loading @@ -28,11 +31,21 @@ class InstalledPackageInfo { public final int uid; public final String packageName; public final boolean hasCode; @Nullable public final String installerPackageName; InstalledPackageInfo(@NonNull PackageInfo packageInfo) { final ApplicationInfo applicationInfo = packageInfo.applicationInfo; this.uid = applicationInfo == null ? NO_UID : applicationInfo.uid; this.packageName = packageInfo.packageName; this.hasCode = applicationInfo != null && applicationInfo.hasCode(); uid = applicationInfo == null ? NO_UID : applicationInfo.uid; packageName = packageInfo.packageName; hasCode = applicationInfo != null && applicationInfo.hasCode(); InstallSourceInfo installSourceInfo = null; try { installSourceInfo = AppGlobals.getPackageManager().getInstallSourceInfo(packageName); } catch (RemoteException e) { // Shouldn't happen. } installerPackageName = installSourceInfo == null ? null : installSourceInfo.getInstallingPackageName(); } } apex/jobscheduler/service/java/com/android/server/tare/InternalResourceService.java +6 −1 Original line number Diff line number Diff line Loading @@ -524,10 +524,15 @@ public class InternalResourceService extends SystemService { mPackageToUidCache.add(userId, pkgName, uid); } synchronized (mLock) { mPkgCache.add(userId, pkgName, new InstalledPackageInfo(packageInfo)); final InstalledPackageInfo ipo = new InstalledPackageInfo(packageInfo); mPkgCache.add(userId, pkgName, ipo); mUidToPackageCache.add(uid, pkgName); // TODO: only do this when the user first launches the app (app leaves stopped state) mAgent.grantBirthrightLocked(userId, pkgName); if (ipo.installerPackageName != null) { mAgent.noteInstantaneousEventLocked(userId, ipo.installerPackageName, JobSchedulerEconomicPolicy.REWARD_APP_INSTALL, null); } } } Loading apex/jobscheduler/service/java/com/android/server/tare/JobSchedulerEconomicPolicy.java +19 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,9 @@ import static android.app.tare.EconomyManager.DEFAULT_JS_INITIAL_CONSUMPTION_LIM import static android.app.tare.EconomyManager.DEFAULT_JS_MAX_SATIATED_BALANCE_CAKES; import static android.app.tare.EconomyManager.DEFAULT_JS_MIN_SATIATED_BALANCE_EXEMPTED_CAKES; import static android.app.tare.EconomyManager.DEFAULT_JS_MIN_SATIATED_BALANCE_OTHER_APP_CAKES; import static android.app.tare.EconomyManager.DEFAULT_JS_REWARD_APP_INSTALL_INSTANT_CAKES; import static android.app.tare.EconomyManager.DEFAULT_JS_REWARD_APP_INSTALL_MAX_CAKES; import static android.app.tare.EconomyManager.DEFAULT_JS_REWARD_APP_INSTALL_ONGOING_CAKES; import static android.app.tare.EconomyManager.DEFAULT_JS_REWARD_NOTIFICATION_INTERACTION_INSTANT_CAKES; import static android.app.tare.EconomyManager.DEFAULT_JS_REWARD_NOTIFICATION_INTERACTION_MAX_CAKES; import static android.app.tare.EconomyManager.DEFAULT_JS_REWARD_NOTIFICATION_INTERACTION_ONGOING_CAKES; Loading Loading @@ -85,6 +88,9 @@ import static android.app.tare.EconomyManager.KEY_JS_INITIAL_CONSUMPTION_LIMIT; import static android.app.tare.EconomyManager.KEY_JS_MAX_SATIATED_BALANCE; import static android.app.tare.EconomyManager.KEY_JS_MIN_SATIATED_BALANCE_EXEMPTED; import static android.app.tare.EconomyManager.KEY_JS_MIN_SATIATED_BALANCE_OTHER_APP; import static android.app.tare.EconomyManager.KEY_JS_REWARD_APP_INSTALL_INSTANT; import static android.app.tare.EconomyManager.KEY_JS_REWARD_APP_INSTALL_MAX; import static android.app.tare.EconomyManager.KEY_JS_REWARD_APP_INSTALL_ONGOING; import static android.app.tare.EconomyManager.KEY_JS_REWARD_NOTIFICATION_INTERACTION_INSTANT; import static android.app.tare.EconomyManager.KEY_JS_REWARD_NOTIFICATION_INTERACTION_MAX; import static android.app.tare.EconomyManager.KEY_JS_REWARD_NOTIFICATION_INTERACTION_ONGOING; Loading Loading @@ -137,6 +143,8 @@ public class JobSchedulerEconomicPolicy extends EconomicPolicy { public static final int ACTION_JOB_MIN_RUNNING = TYPE_ACTION | POLICY_JS | 9; public static final int ACTION_JOB_TIMEOUT = TYPE_ACTION | POLICY_JS | 10; public static final int REWARD_APP_INSTALL = TYPE_REWARD | POLICY_JS | 0; private static final int[] COST_MODIFIERS = new int[]{ COST_MODIFIER_CHARGING, COST_MODIFIER_DEVICE_IDLE, Loading Loading @@ -374,6 +382,17 @@ public class JobSchedulerEconomicPolicy extends EconomicPolicy { getConstantAsCake(mParser, properties, KEY_JS_REWARD_OTHER_USER_INTERACTION_MAX, DEFAULT_JS_REWARD_OTHER_USER_INTERACTION_MAX_CAKES))); mRewards.put(REWARD_APP_INSTALL, new Reward(REWARD_APP_INSTALL, getConstantAsCake(mParser, properties, KEY_JS_REWARD_APP_INSTALL_INSTANT, DEFAULT_JS_REWARD_APP_INSTALL_INSTANT_CAKES), getConstantAsCake(mParser, properties, KEY_JS_REWARD_APP_INSTALL_ONGOING, DEFAULT_JS_REWARD_APP_INSTALL_ONGOING_CAKES), getConstantAsCake(mParser, properties, KEY_JS_REWARD_APP_INSTALL_MAX, DEFAULT_JS_REWARD_APP_INSTALL_MAX_CAKES))); } @Override Loading Loading
apex/jobscheduler/framework/java/android/app/tare/EconomyManager.java +15 −0 Original line number Diff line number Diff line Loading @@ -235,6 +235,15 @@ public class EconomyManager { public static final String KEY_JS_HARD_CONSUMPTION_LIMIT = "js_hard_consumption_limit"; // TODO: Add JobScheduler modifier keys /** @hide */ public static final String KEY_JS_REWARD_APP_INSTALL_INSTANT = "js_reward_app_install_instant"; /** @hide */ public static final String KEY_JS_REWARD_APP_INSTALL_ONGOING = "js_reward_app_install_ongoing"; /** @hide */ public static final String KEY_JS_REWARD_APP_INSTALL_MAX = "js_reward_app_install_max"; /** @hide */ public static final String KEY_JS_REWARD_TOP_ACTIVITY_INSTANT = "js_reward_top_activity_instant"; /** @hide */ Loading Loading @@ -463,6 +472,12 @@ public class EconomyManager { public static final long DEFAULT_JS_HARD_CONSUMPTION_LIMIT_CAKES = arcToCake(250_000); // TODO: add JobScheduler modifier default values /** @hide */ public static final long DEFAULT_JS_REWARD_APP_INSTALL_INSTANT_CAKES = arcToCake(408); /** @hide */ public static final long DEFAULT_JS_REWARD_APP_INSTALL_ONGOING_CAKES = arcToCake(0); /** @hide */ public static final long DEFAULT_JS_REWARD_APP_INSTALL_MAX_CAKES = arcToCake(4000); /** @hide */ public static final long DEFAULT_JS_REWARD_TOP_ACTIVITY_INSTANT_CAKES = arcToCake(0); /** @hide */ public static final long DEFAULT_JS_REWARD_TOP_ACTIVITY_ONGOING_CAKES = CAKE_IN_ARC / 2; Loading
apex/jobscheduler/service/java/com/android/server/tare/EconomicPolicy.java +3 −0 Original line number Diff line number Diff line Loading @@ -120,6 +120,7 @@ public abstract class EconomicPolicy { REWARD_NOTIFICATION_INTERACTION, REWARD_WIDGET_INTERACTION, REWARD_OTHER_USER_INTERACTION, JobSchedulerEconomicPolicy.REWARD_APP_INSTALL, }) @Retention(RetentionPolicy.SOURCE) public @interface UtilityReward { Loading Loading @@ -430,6 +431,8 @@ public abstract class EconomicPolicy { return "REWARD_WIDGET_INTERACTION"; case REWARD_OTHER_USER_INTERACTION: return "REWARD_OTHER_USER_INTERACTION"; case JobSchedulerEconomicPolicy.REWARD_APP_INSTALL: return "REWARD_JOB_APP_INSTALL"; } return "UNKNOWN_REWARD:" + Integer.toHexString(eventId); } Loading
apex/jobscheduler/service/java/com/android/server/tare/InstalledPackageInfo.java +17 −4 Original line number Diff line number Diff line Loading @@ -17,9 +17,12 @@ package com.android.server.tare; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.AppGlobals; import android.content.pm.ApplicationInfo; import android.content.pm.InstallSourceInfo; import android.content.pm.PackageInfo; import android.os.UserHandle; import android.os.RemoteException; /** POJO to cache only the information about installed packages that TARE cares about. */ class InstalledPackageInfo { Loading @@ -28,11 +31,21 @@ class InstalledPackageInfo { public final int uid; public final String packageName; public final boolean hasCode; @Nullable public final String installerPackageName; InstalledPackageInfo(@NonNull PackageInfo packageInfo) { final ApplicationInfo applicationInfo = packageInfo.applicationInfo; this.uid = applicationInfo == null ? NO_UID : applicationInfo.uid; this.packageName = packageInfo.packageName; this.hasCode = applicationInfo != null && applicationInfo.hasCode(); uid = applicationInfo == null ? NO_UID : applicationInfo.uid; packageName = packageInfo.packageName; hasCode = applicationInfo != null && applicationInfo.hasCode(); InstallSourceInfo installSourceInfo = null; try { installSourceInfo = AppGlobals.getPackageManager().getInstallSourceInfo(packageName); } catch (RemoteException e) { // Shouldn't happen. } installerPackageName = installSourceInfo == null ? null : installSourceInfo.getInstallingPackageName(); } }
apex/jobscheduler/service/java/com/android/server/tare/InternalResourceService.java +6 −1 Original line number Diff line number Diff line Loading @@ -524,10 +524,15 @@ public class InternalResourceService extends SystemService { mPackageToUidCache.add(userId, pkgName, uid); } synchronized (mLock) { mPkgCache.add(userId, pkgName, new InstalledPackageInfo(packageInfo)); final InstalledPackageInfo ipo = new InstalledPackageInfo(packageInfo); mPkgCache.add(userId, pkgName, ipo); mUidToPackageCache.add(uid, pkgName); // TODO: only do this when the user first launches the app (app leaves stopped state) mAgent.grantBirthrightLocked(userId, pkgName); if (ipo.installerPackageName != null) { mAgent.noteInstantaneousEventLocked(userId, ipo.installerPackageName, JobSchedulerEconomicPolicy.REWARD_APP_INSTALL, null); } } } Loading
apex/jobscheduler/service/java/com/android/server/tare/JobSchedulerEconomicPolicy.java +19 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,9 @@ import static android.app.tare.EconomyManager.DEFAULT_JS_INITIAL_CONSUMPTION_LIM import static android.app.tare.EconomyManager.DEFAULT_JS_MAX_SATIATED_BALANCE_CAKES; import static android.app.tare.EconomyManager.DEFAULT_JS_MIN_SATIATED_BALANCE_EXEMPTED_CAKES; import static android.app.tare.EconomyManager.DEFAULT_JS_MIN_SATIATED_BALANCE_OTHER_APP_CAKES; import static android.app.tare.EconomyManager.DEFAULT_JS_REWARD_APP_INSTALL_INSTANT_CAKES; import static android.app.tare.EconomyManager.DEFAULT_JS_REWARD_APP_INSTALL_MAX_CAKES; import static android.app.tare.EconomyManager.DEFAULT_JS_REWARD_APP_INSTALL_ONGOING_CAKES; import static android.app.tare.EconomyManager.DEFAULT_JS_REWARD_NOTIFICATION_INTERACTION_INSTANT_CAKES; import static android.app.tare.EconomyManager.DEFAULT_JS_REWARD_NOTIFICATION_INTERACTION_MAX_CAKES; import static android.app.tare.EconomyManager.DEFAULT_JS_REWARD_NOTIFICATION_INTERACTION_ONGOING_CAKES; Loading Loading @@ -85,6 +88,9 @@ import static android.app.tare.EconomyManager.KEY_JS_INITIAL_CONSUMPTION_LIMIT; import static android.app.tare.EconomyManager.KEY_JS_MAX_SATIATED_BALANCE; import static android.app.tare.EconomyManager.KEY_JS_MIN_SATIATED_BALANCE_EXEMPTED; import static android.app.tare.EconomyManager.KEY_JS_MIN_SATIATED_BALANCE_OTHER_APP; import static android.app.tare.EconomyManager.KEY_JS_REWARD_APP_INSTALL_INSTANT; import static android.app.tare.EconomyManager.KEY_JS_REWARD_APP_INSTALL_MAX; import static android.app.tare.EconomyManager.KEY_JS_REWARD_APP_INSTALL_ONGOING; import static android.app.tare.EconomyManager.KEY_JS_REWARD_NOTIFICATION_INTERACTION_INSTANT; import static android.app.tare.EconomyManager.KEY_JS_REWARD_NOTIFICATION_INTERACTION_MAX; import static android.app.tare.EconomyManager.KEY_JS_REWARD_NOTIFICATION_INTERACTION_ONGOING; Loading Loading @@ -137,6 +143,8 @@ public class JobSchedulerEconomicPolicy extends EconomicPolicy { public static final int ACTION_JOB_MIN_RUNNING = TYPE_ACTION | POLICY_JS | 9; public static final int ACTION_JOB_TIMEOUT = TYPE_ACTION | POLICY_JS | 10; public static final int REWARD_APP_INSTALL = TYPE_REWARD | POLICY_JS | 0; private static final int[] COST_MODIFIERS = new int[]{ COST_MODIFIER_CHARGING, COST_MODIFIER_DEVICE_IDLE, Loading Loading @@ -374,6 +382,17 @@ public class JobSchedulerEconomicPolicy extends EconomicPolicy { getConstantAsCake(mParser, properties, KEY_JS_REWARD_OTHER_USER_INTERACTION_MAX, DEFAULT_JS_REWARD_OTHER_USER_INTERACTION_MAX_CAKES))); mRewards.put(REWARD_APP_INSTALL, new Reward(REWARD_APP_INSTALL, getConstantAsCake(mParser, properties, KEY_JS_REWARD_APP_INSTALL_INSTANT, DEFAULT_JS_REWARD_APP_INSTALL_INSTANT_CAKES), getConstantAsCake(mParser, properties, KEY_JS_REWARD_APP_INSTALL_ONGOING, DEFAULT_JS_REWARD_APP_INSTALL_ONGOING_CAKES), getConstantAsCake(mParser, properties, KEY_JS_REWARD_APP_INSTALL_MAX, DEFAULT_JS_REWARD_APP_INSTALL_MAX_CAKES))); } @Override Loading