Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8fdf92ef authored by Kweku Adams's avatar Kweku Adams Committed by Android (Google) Code Review
Browse files

Merge "Reward installers for each install."

parents 64992eb9 d157f52c
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -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;
+3 −0
Original line number Diff line number Diff line
@@ -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);
    }
+17 −4
Original line number Diff line number Diff line
@@ -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();
    }
}
+6 −1
Original line number Diff line number Diff line
@@ -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);
            }
        }
    }

+19 −0
Original line number Diff line number Diff line
@@ -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