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

Commit 00fc23e2 authored by android-build-team Robot's avatar android-build-team Robot
Browse files

Snap for 6396587 from e4723928 to mainline-release

Change-Id: Ibed5f664412d6c329a4a82550a2d42644d20b6fb
parents 8ba0c7ed e4723928
Loading
Loading
Loading
Loading
+81 −39
Original line number Diff line number Diff line
@@ -19,10 +19,12 @@ package com.android.server.job.controllers.idle;
import static com.android.server.job.JobSchedulerService.sElapsedRealtimeClock;

import android.app.AlarmManager;
import android.app.UiModeManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.PowerManager;
import android.util.Log;
import android.util.Slog;
import android.util.proto.ProtoOutputStream;
@@ -39,6 +41,7 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id
            || Log.isLoggable(TAG, Log.DEBUG);

    private AlarmManager mAlarm;
    private PowerManager mPowerManager;

    // After construction, mutations of idle/screen-on state will only happen
    // on the main looper thread, either in onReceive() or in an alarm callback.
@@ -47,6 +50,7 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id
    private boolean mIdle;
    private boolean mScreenOn;
    private boolean mDockIdle;
    private boolean mInCarMode;
    private IdlenessListener mIdleListener;

    private AlarmManager.OnAlarmListener mIdleAlarmListener = () -> {
@@ -59,6 +63,7 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id
        mIdle = false;
        mScreenOn = true;
        mDockIdle = false;
        mInCarMode = false;
    }

    @Override
@@ -74,6 +79,7 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id
        mIdleWindowSlop = context.getResources().getInteger(
                com.android.internal.R.integer.config_jobSchedulerIdleWindowSlop);
        mAlarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        mPowerManager = context.getSystemService(PowerManager.class);

        IntentFilter filter = new IntentFilter();

@@ -92,6 +98,10 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id
        filter.addAction(Intent.ACTION_DOCK_IDLE);
        filter.addAction(Intent.ACTION_DOCK_ACTIVE);

        // Car mode
        filter.addAction(UiModeManager.ACTION_ENTER_CAR_MODE_PRIORITIZED);
        filter.addAction(UiModeManager.ACTION_EXIT_CAR_MODE_PRIORITIZED);

        context.registerReceiver(this, filter);
    }

@@ -100,6 +110,8 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id
        pw.print("  mIdle: "); pw.println(mIdle);
        pw.print("  mScreenOn: "); pw.println(mScreenOn);
        pw.print("  mDockIdle: "); pw.println(mDockIdle);
        pw.print("  mInCarMode: ");
        pw.println(mInCarMode);
    }

    @Override
@@ -116,6 +128,9 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id
        proto.write(
                StateControllerProto.IdleController.IdlenessTracker.DeviceIdlenessTracker.IS_DOCK_IDLE,
                mDockIdle);
        proto.write(
                StateControllerProto.IdleController.IdlenessTracker.DeviceIdlenessTracker.IN_CAR_MODE,
                mInCarMode);

        proto.end(diToken);
        proto.end(token);
@@ -124,33 +139,37 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id
    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();
        if (action.equals(Intent.ACTION_SCREEN_ON)
                || action.equals(Intent.ACTION_DREAMING_STOPPED)
                || action.equals(Intent.ACTION_DOCK_ACTIVE)) {
            if (action.equals(Intent.ACTION_DOCK_ACTIVE)) {
        if (DEBUG) {
            Slog.v(TAG, "Received action: " + action);
        }
        switch (action) {
            case Intent.ACTION_DOCK_ACTIVE:
                if (!mScreenOn) {
                    // Ignore this intent during screen off
                    return;
                } else {
                    mDockIdle = false;
                }
            } else {
                // Intentional fallthrough
            case Intent.ACTION_DREAMING_STOPPED:
                if (!mPowerManager.isInteractive()) {
                    // Ignore this intent if the device isn't interactive.
                    return;
                }
                // Intentional fallthrough
            case Intent.ACTION_SCREEN_ON:
                mScreenOn = true;
                mDockIdle = false;
            }
                if (DEBUG) {
                Slog.v(TAG,"exiting idle : " + action);
                    Slog.v(TAG, "exiting idle");
                }
            //cancel the alarm
            mAlarm.cancel(mIdleAlarmListener);
                cancelIdlenessCheck();
                if (mIdle) {
            // possible transition to not-idle
                    mIdle = false;
                    mIdleListener.reportNewIdleState(mIdle);
                }
        } else if (action.equals(Intent.ACTION_SCREEN_OFF)
                || action.equals(Intent.ACTION_DREAMING_STARTED)
                || action.equals(Intent.ACTION_DOCK_IDLE)) {
                break;
            case Intent.ACTION_SCREEN_OFF:
            case Intent.ACTION_DREAMING_STARTED:
            case Intent.ACTION_DOCK_IDLE:
                // when the screen goes off or dreaming starts or wireless charging dock in idle,
                // we schedule the alarm that will tell us when we have decided the device is
                // truly idle.
@@ -165,22 +184,45 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id
                    mScreenOn = false;
                    mDockIdle = false;
                }
                maybeScheduleIdlenessCheck(action);
                break;
            case UiModeManager.ACTION_ENTER_CAR_MODE_PRIORITIZED:
                mInCarMode = true;
                cancelIdlenessCheck();
                if (mIdle) {
                    mIdle = false;
                    mIdleListener.reportNewIdleState(mIdle);
                }
                break;
            case UiModeManager.ACTION_EXIT_CAR_MODE_PRIORITIZED:
                mInCarMode = false;
                maybeScheduleIdlenessCheck(action);
                break;
            case ActivityManagerService.ACTION_TRIGGER_IDLE:
                handleIdleTrigger();
                break;
        }
    }

    private void maybeScheduleIdlenessCheck(String reason) {
        if ((!mScreenOn || mDockIdle) && !mInCarMode) {
            final long nowElapsed = sElapsedRealtimeClock.millis();
            final long when = nowElapsed + mInactivityIdleThreshold;
            if (DEBUG) {
                Slog.v(TAG, "Scheduling idle : " + action + " now:" + nowElapsed + " when="
                        + when);
                Slog.v(TAG, "Scheduling idle : " + reason + " now:" + nowElapsed + " when=" + when);
            }
            mAlarm.setWindow(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                    when, mIdleWindowSlop, "JS idleness", mIdleAlarmListener, null);
        } else if (action.equals(ActivityManagerService.ACTION_TRIGGER_IDLE)) {
            handleIdleTrigger();
        }
    }

    private void cancelIdlenessCheck() {
        mAlarm.cancel(mIdleAlarmListener);
    }

    private void handleIdleTrigger() {
        // idle time starts now. Do not set mIdle if screen is on.
        if (!mIdle && (!mScreenOn || mDockIdle)) {
        if (!mIdle && (!mScreenOn || mDockIdle) && !mInCarMode) {
            if (DEBUG) {
                Slog.v(TAG, "Idle trigger fired @ " + sElapsedRealtimeClock.millis());
            }
@@ -189,7 +231,7 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id
        } else {
            if (DEBUG) {
                Slog.v(TAG, "TRIGGER_IDLE received but not changing state; idle="
                        + mIdle + " screen=" + mScreenOn);
                        + mIdle + " screen=" + mScreenOn + " car=" + mInCarMode);
            }
        }
    }
+1 −2
Original line number Diff line number Diff line
@@ -172,8 +172,7 @@ public class AppStandbyController implements AppStandbyInternal {
            COMPRESS_TIME ?  1 * ONE_MINUTE : 12 * ONE_HOUR,
            COMPRESS_TIME ?  4 * ONE_MINUTE : 24 * ONE_HOUR,
            COMPRESS_TIME ? 16 * ONE_MINUTE : 48 * ONE_HOUR,
            // TODO(149050681): increase timeout to 30+ days
            COMPRESS_TIME ? 32 * ONE_MINUTE : 4 * ONE_DAY
            COMPRESS_TIME ? 32 * ONE_MINUTE : 30 * ONE_DAY
    };

    /** The minimum allowed values for each index in {@link #ELAPSED_TIME_THRESHOLDS}. */
+10 −16
Original line number Diff line number Diff line
@@ -166,13 +166,6 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
    }

    private static void informAllUids(Context context) {
        UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);
        PackageManager pm = context.getPackageManager();
        final List<UserHandle> users = um.getUserHandles(true);
        if (DEBUG) {
            Log.d(TAG, "Iterating over " + users.size() + " userHandles.");
        }

        ParcelFileDescriptor[] fds;
        try {
            fds = ParcelFileDescriptor.createPipe();
@@ -185,6 +178,12 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
        backgroundThread.start();
        Handler handler = new Handler(backgroundThread.getLooper());
        handler.post(() -> {
            UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);
            PackageManager pm = context.getPackageManager();
            final List<UserHandle> users = um.getUserHandles(true);
            if (DEBUG) {
                Log.d(TAG, "Iterating over " + users.size() + " userHandles.");
            }
            IStatsd statsd = getStatsdNonblocking();
            if (statsd == null) {
                return;
@@ -699,8 +698,6 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
            deathRecipient.addRegisteredBroadcastReceivers(
                    List.of(appUpdateReceiver, userUpdateReceiver, shutdownEventReceiver));

            final long token = Binder.clearCallingIdentity();

            // Used so we can call statsd.bootComplete() outside of the lock.
            boolean shouldSendBootComplete = false;
            synchronized (sStatsdLock) {
@@ -713,13 +710,10 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
                statsd.bootCompleted();
            }

            try {
            // Pull the latest state of UID->app name, version mapping when
            // statsd starts.
            informAllUids(mContext);
            } finally {
                Binder.restoreCallingIdentity(token);
            }

            Log.i(TAG, "Told statsd that StatsCompanionService is alive.");
        } catch (RemoteException e) {
            Log.e(TAG, "Failed to inform statsd that statscompanion is ready", e);
+3 −2
Original line number Diff line number Diff line
@@ -9249,12 +9249,13 @@ message SharesheetStarted {
    optional bool is_workprofile = 7;

    enum SharesheetPreviewType {  // Constants from ChooserActivity.java
        CONTENT_PREVIEW_TYPE_UNKNOWN = 0;  // Default for proto 2 / 3 compatibility.
        CONTENT_PREVIEW_IMAGE = 1;  // The preview shown in the sharesheet is an image.
        CONTENT_PREVIEW_FILE = 2;  // The preview shown in the sharesheet is a file.
        CONTENT_PREVIEW_TEXT = 3;  // The preview shown in the sharesheet is text.
    }
    // How the sharesheet preview is presented.
    optional SharesheetPreviewType previewType = 8;
    optional SharesheetPreviewType preview_type = 8;

    enum ResolverActivityIntent { // Intents handled by ResolverActivity.java
        INTENT_DEFAULT = 0;
@@ -9267,7 +9268,7 @@ message SharesheetStarted {
        INTENT_ACTION_MAIN = 7;
    }
    // The intent being processed (only SEND and SEND_MULTIPLE are system sharesheet)
    optional ResolverActivityIntent intentType = 9;
    optional ResolverActivityIntent intent_type = 9;
}

/**
+2 −3
Original line number Diff line number Diff line
@@ -78,10 +78,9 @@ interface INotificationManager
    boolean shouldHideSilentStatusIcons(String callingPkg);
    void setHideSilentStatusIcons(boolean hide);

    void setBubblesAllowed(String pkg, int uid, boolean allowed);
    void setBubblesAllowed(String pkg, int uid, int bubblePreference);
    boolean areBubblesAllowed(String pkg);
    boolean areBubblesAllowedForPackage(String pkg, int uid);
    boolean hasUserApprovedBubblesForPackage(String pkg, int uid);
    int getBubblePreferenceForPackage(String pkg, int uid);

    void createNotificationChannelGroups(String pkg, in ParceledListSlice channelGroupList);
    void createNotificationChannels(String pkg, in ParceledListSlice channelsList);
Loading