Merge "Reward installers for each install."

This commit is contained in:
Kweku Adams
2022-09-14 23:45:29 +00:00
committed by Android (Google) Code Review
5 changed files with 60 additions and 5 deletions

View File

@@ -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 */
@@ -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;

View File

@@ -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 {
@@ -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);
}

View File

@@ -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 {
@@ -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();
}
}

View File

@@ -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);
}
}
}

View File

@@ -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;
@@ -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;
@@ -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,
@@ -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