Reward installers for each install.
Give installers a one-time reward for each app install/update they perform. This should help them mostly when they're performing bulk updates. Bug: 243987091 Test: install apps and verify the requesting app is credited Change-Id: I9800ee1adae6b7039eb3dcb15c1cd7bb1a4aa9e3
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -119,6 +119,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 {
|
||||
@@ -429,6 +430,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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user