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

Commit 4c2a7e15 authored by Zak Cohen's avatar Zak Cohen Committed by Automerger Merge Worker
Browse files

Merge "ContentSuggestions - restore snapshots when needed" into rvc-dev am:...

Merge "ContentSuggestions - restore snapshots when needed" into rvc-dev am: 93032f6f am: 796d1efb am: 32ccfdaf am: 4cfe28cf

Change-Id: Idefd4a5eae2c0dee06f46779fd9df4360de69312
parents b37ceb83 4cfe28cf
Loading
Loading
Loading
Loading
+24 −2
Original line number Diff line number Diff line
@@ -21,13 +21,17 @@ import static android.content.pm.PackageManager.PERMISSION_GRANTED;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.contentsuggestions.ClassificationsRequest;
import android.app.contentsuggestions.ContentSuggestionsManager;
import android.app.contentsuggestions.IClassificationsCallback;
import android.app.contentsuggestions.IContentSuggestionsManager;
import android.app.contentsuggestions.ISelectionsCallback;
import android.app.contentsuggestions.SelectionsRequest;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.ColorSpace;
import android.graphics.GraphicBuffer;
import android.os.Binder;
import android.os.Bundle;
import android.os.RemoteException;
@@ -133,7 +137,7 @@ public class ContentSuggestionsManagerService extends
                if (service != null) {
                    // TODO(b/147324195): Temporarily pass bitmap until we change the service API.
                    imageContextRequestExtras.putParcelable(EXTRA_BITMAP, bitmap);
                    service.provideContextImageLocked(/* taskId = */ -1, imageContextRequestExtras);
                    service.provideContextImageFromBitmapLocked(imageContextRequestExtras);
                } else {
                    if (VERBOSE) {
                        Slog.v(TAG, "provideContextImageLocked: no service for " + userId);
@@ -152,10 +156,28 @@ public class ContentSuggestionsManagerService extends
            }
            enforceCaller(UserHandle.getCallingUserId(), "provideContextImage");

            GraphicBuffer snapshotBuffer = null;
            int colorSpaceId = 0;

            // Skip taking TaskSnapshot when bitmap is provided.
            if (!imageContextRequestExtras.containsKey(ContentSuggestionsManager.EXTRA_BITMAP)) {
                // Can block, so call before acquiring the lock.
                ActivityManager.TaskSnapshot snapshot =
                        mActivityTaskManagerInternal.getTaskSnapshotBlocking(taskId, false);
                if (snapshot != null) {
                    snapshotBuffer = snapshot.getSnapshot();
                    ColorSpace colorSpace = snapshot.getColorSpace();
                    if (colorSpace != null) {
                        colorSpaceId = colorSpace.getId();
                    }
                }
            }

            synchronized (mLock) {
                final ContentSuggestionsPerUserService service = getServiceForUserLocked(userId);
                if (service != null) {
                    service.provideContextImageLocked(taskId, imageContextRequestExtras);
                    service.provideContextImageLocked(taskId, snapshotBuffer, colorSpaceId,
                            imageContextRequestExtras);
                } else {
                    if (VERBOSE) {
                        Slog.v(TAG, "provideContextImageLocked: no service for " + userId);
+9 −21
Original line number Diff line number Diff line
@@ -19,17 +19,14 @@ package com.android.server.contentsuggestions;
import android.Manifest;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.AppGlobals;
import android.app.contentsuggestions.ClassificationsRequest;
import android.app.contentsuggestions.ContentSuggestionsManager;
import android.app.contentsuggestions.IClassificationsCallback;
import android.app.contentsuggestions.ISelectionsCallback;
import android.app.contentsuggestions.SelectionsRequest;
import android.content.ComponentName;
import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo;
import android.graphics.ColorSpace;
import android.graphics.GraphicBuffer;
import android.os.Bundle;
import android.os.RemoteException;
@@ -95,26 +92,17 @@ public final class ContentSuggestionsPerUserService extends
    }

    @GuardedBy("mLock")
    void provideContextImageLocked(int taskId, @NonNull Bundle imageContextRequestExtras) {
        RemoteContentSuggestionsService service = ensureRemoteServiceLocked();
        if (service != null) {
            GraphicBuffer snapshotBuffer = null;
            int colorSpaceId = 0;

            // Skip taking TaskSnapshot when bitmap is provided.
            if (!imageContextRequestExtras.containsKey(ContentSuggestionsManager.EXTRA_BITMAP)) {
                ActivityManager.TaskSnapshot snapshot =
                        mActivityTaskManagerInternal.getTaskSnapshotNoRestore(taskId, false);
                if (snapshot != null) {
                    snapshotBuffer = snapshot.getSnapshot();
                    ColorSpace colorSpace = snapshot.getColorSpace();
                    if (colorSpace != null) {
                        colorSpaceId = colorSpace.getId();
                    }
                }
    void provideContextImageFromBitmapLocked(@NonNull Bundle bitmapContainingExtras) {
        // No task or snapshot provided, the bitmap is contained in the extras
        provideContextImageLocked(-1, null, 0, bitmapContainingExtras);
    }

            service.provideContextImage(taskId, snapshotBuffer, colorSpaceId,
    @GuardedBy("mLock")
    void provideContextImageLocked(int taskId, @Nullable GraphicBuffer snapshot,
            int colorSpaceIdForSnapshot, @NonNull Bundle imageContextRequestExtras) {
        RemoteContentSuggestionsService service = ensureRemoteServiceLocked();
        if (service != null) {
            service.provideContextImage(taskId, snapshot, colorSpaceIdForSnapshot,
                    imageContextRequestExtras);
        }
    }
+4 −1
Original line number Diff line number Diff line
@@ -548,8 +548,11 @@ public abstract class ActivityTaskManagerInternal {

    /**
     * Gets bitmap snapshot of the provided task id.
     *
     * <p>Warning! this may restore the snapshot from disk so can block, don't call in a latency
     * sensitive environment.
     */
    public abstract ActivityManager.TaskSnapshot getTaskSnapshotNoRestore(int taskId,
    public abstract ActivityManager.TaskSnapshot getTaskSnapshotBlocking(int taskId,
            boolean isLowResolution);

    /** Returns true if uid is considered foreground for activity start purposes. */
+3 −3
Original line number Diff line number Diff line
@@ -7477,10 +7477,10 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
        }

        @Override
        public ActivityManager.TaskSnapshot getTaskSnapshotNoRestore(int taskId,
                boolean isLowResolution) {
        public ActivityManager.TaskSnapshot getTaskSnapshotBlocking(
                int taskId, boolean isLowResolution) {
            return ActivityTaskManagerService.this.getTaskSnapshot(taskId, isLowResolution,
                    false /* restoreFromDisk */);
                    true /* restoreFromDisk */);
        }

        @Override