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

Commit 2c6ebe09 authored by android-build-team Robot's avatar android-build-team Robot
Browse files

Snap for 6634012 from 0538863c to rvc-release

Change-Id: I42139e15919d784ec4f52dab3c37f1b05f3907a2
parents e2dc8541 0538863c
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -101,7 +101,8 @@ public class QuickstepOnboardingPrefs extends OnboardingPrefs<BaseQuickstepLaunc
            });
        }

        if (!hasReachedMaxCount(HOTSEAT_DISCOVERY_TIP_COUNT)) {
        if (FeatureFlags.ENABLE_HYBRID_HOTSEAT.get() && !hasReachedMaxCount(
                HOTSEAT_DISCOVERY_TIP_COUNT)) {
            stateManager.addStateListener(new StateListener<LauncherState>() {
                boolean mFromAllApps = false;

+14 −7
Original line number Diff line number Diff line
@@ -182,7 +182,7 @@ public class CellLayout extends ViewGroup {
    private static final Paint sPaint = new Paint();

    // Related to accessible drag and drop
    private boolean mUseTouchHelper = false;
    DragAndDropAccessibilityDelegate mTouchHelper;

    public CellLayout(Context context) {
        this(context, null);
@@ -290,17 +290,15 @@ public class CellLayout extends ViewGroup {
        addView(mShortcutsAndWidgets);
    }


    /**
     * Sets or clears a delegate used for accessible drag and drop
     */
    public void setDragAndDropAccessibilityDelegate(DragAndDropAccessibilityDelegate delegate) {
        setOnClickListener(delegate);
        setOnHoverListener(delegate);
        ViewCompat.setAccessibilityDelegate(this, delegate);

        mUseTouchHelper = delegate != null;
        int accessibilityFlag = mUseTouchHelper
        mTouchHelper = delegate;
        int accessibilityFlag = mTouchHelper != null
                ? IMPORTANT_FOR_ACCESSIBILITY_YES : IMPORTANT_FOR_ACCESSIBILITY_NO;
        setImportantForAccessibility(accessibilityFlag);
        getShortcutsAndWidgets().setImportantForAccessibility(accessibilityFlag);
@@ -312,10 +310,19 @@ public class CellLayout extends ViewGroup {
        }
    }

    @Override
    public boolean dispatchHoverEvent(MotionEvent event) {
        // Always attempt to dispatch hover events to accessibility first.
        if (mTouchHelper != null && mTouchHelper.dispatchHoverEvent(event)) {
            return true;
        }
        return super.dispatchHoverEvent(event);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        if (mUseTouchHelper ||
                (mInterceptTouchListener != null && mInterceptTouchListener.onTouch(this, ev))) {
        if (mTouchHelper != null
                || (mInterceptTouchListener != null && mInterceptTouchListener.onTouch(this, ev))) {
            return true;
        }
        return false;
+0 −3
Original line number Diff line number Diff line
@@ -138,9 +138,6 @@ public final class FeatureFlags {
    public static final BooleanFlag ENABLE_LAUNCHER_PREVIEW_IN_GRID_PICKER = getDebugFlag(
            "ENABLE_LAUNCHER_PREVIEW_IN_GRID_PICKER", true, "Show launcher preview in grid picker");

    public static final BooleanFlag USE_SURFACE_VIEW_FOR_GRID_PREVIEW = getDebugFlag(
            "USE_SURFACE_VIEW_FOR_GRID_PREVIEW", true, "Use surface view for grid preview");

    public static final BooleanFlag ENABLE_OVERVIEW_ACTIONS = getDebugFlag(
            "ENABLE_OVERVIEW_ACTIONS", true, "Show app actions instead of the shelf in Overview."
            + " As part of this decoupling, also distinguish swipe up from nav bar vs above it.");
+0 −61
Original line number Diff line number Diff line
package com.android.launcher3.graphics;

import static com.android.launcher3.config.FeatureFlags.USE_SURFACE_VIEW_FOR_GRID_PREVIEW;
import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.pm.PackageManager;
import android.content.res.XmlResourceParser;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Binder;
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
import android.os.ParcelFileDescriptor.AutoCloseOutputStream;
import android.text.TextUtils;
import android.util.Log;
import android.util.Xml;

@@ -26,12 +19,10 @@ import com.android.launcher3.R;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.Future;

/**
 * Exposes various launcher grid options and allows the caller to change them.
@@ -62,24 +53,7 @@ public class GridOptionsProvider extends ContentProvider {
    private static final String KEY_LIST_OPTIONS = "/list_options";
    private static final String KEY_DEFAULT_GRID = "/default_grid";

    private static final String KEY_PREVIEW = "preview";
    private static final String MIME_TYPE_PNG = "image/png";

    private static final String METHOD_GET_PREVIEW = "get_preview";
    private static final String METADATA_KEY_PREVIEW_VERSION = "preview_version";

    public static final PipeDataWriter<Future<Bitmap>> BITMAP_WRITER =
            new PipeDataWriter<Future<Bitmap>>() {
                @Override
                public void writeDataToPipe(ParcelFileDescriptor output, Uri uri, String s,
                        Bundle bundle, Future<Bitmap> bitmap) {
                    try (AutoCloseOutputStream os = new AutoCloseOutputStream(output)) {
                        bitmap.get().compress(Bitmap.CompressFormat.PNG, 100, os);
                    } catch (Exception e) {
                        Log.w(TAG, "fail to write to pipe", e);
                    }
                }
            };

    @Override
    public boolean onCreate() {
@@ -104,10 +78,6 @@ public class GridOptionsProvider extends ContentProvider {
                    .add(KEY_IS_DEFAULT, idp.numColumns == gridOption.numColumns
                            && idp.numRows == gridOption.numRows);
        }
        Bundle metadata = new Bundle();
        metadata.putString(METADATA_KEY_PREVIEW_VERSION,
                USE_SURFACE_VIEW_FOR_GRID_PREVIEW.get() ? "V2" : "V1");
        cursor.setExtras(metadata);
        return cursor;
    }

@@ -132,10 +102,6 @@ public class GridOptionsProvider extends ContentProvider {

    @Override
    public String getType(Uri uri) {
        List<String> segments = uri.getPathSegments();
        if (segments.size() > 0 && KEY_PREVIEW.equals(segments.get(0))) {
            return MIME_TYPE_PNG;
        }
        return "vnd.android.cursor.dir/launcher_grid";
    }

@@ -172,33 +138,6 @@ public class GridOptionsProvider extends ContentProvider {
        return 1;
    }

    @Override
    public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
        List<String> segments = uri.getPathSegments();
        if (segments.size() < 2 || !KEY_PREVIEW.equals(segments.get(0))) {
            throw new FileNotFoundException("Invalid preview url");
        }
        String profileName = segments.get(1);
        if (TextUtils.isEmpty(profileName)) {
            throw new FileNotFoundException("Invalid preview url");
        }

        InvariantDeviceProfile idp;
        try {
            idp = new InvariantDeviceProfile(getContext(), profileName);
        } catch (Exception e) {
            throw new FileNotFoundException(e.getMessage());
        }

        try {
            return openPipeHelper(uri, MIME_TYPE_PNG, null,
                    UI_HELPER_EXECUTOR.submit(new LauncherPreviewRenderer(getContext(), idp)),
                    BITMAP_WRITER);
        } catch (Exception e) {
            throw new FileNotFoundException(e.getMessage());
        }
    }

    @Override
    public Bundle call(String method, String arg, Bundle extras) {
        if (getContext().checkPermission("android.permission.BIND_WALLPAPER",
+5 −50
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import static android.view.View.MeasureSpec.makeMeasureSpec;
import static android.view.View.VISIBLE;

import static com.android.launcher3.config.FeatureFlags.ENABLE_LAUNCHER_PREVIEW_IN_GRID_PICKER;
import static com.android.launcher3.config.FeatureFlags.MULTI_DB_GRID_MIRATION_ALGO;
import static com.android.launcher3.model.ModelUtils.filterCurrentWorkspaceItems;
import static com.android.launcher3.model.ModelUtils.getMissingHotseatRanks;
import static com.android.launcher3.model.ModelUtils.sortWorkspaceItemsSpatially;
@@ -34,8 +33,6 @@ import android.content.ContextWrapper;
import android.content.Intent;
import android.content.pm.ShortcutInfo;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.drawable.AdaptiveIconDrawable;
@@ -63,20 +60,16 @@ import com.android.launcher3.LauncherModel;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.LauncherSettings.Favorites;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.WorkspaceLayoutManager;
import com.android.launcher3.allapps.SearchUiManager;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.folder.FolderIcon;
import com.android.launcher3.icons.BaseIconFactory;
import com.android.launcher3.icons.BitmapInfo;
import com.android.launcher3.icons.BitmapRenderer;
import com.android.launcher3.icons.LauncherIcons;
import com.android.launcher3.model.AllAppsList;
import com.android.launcher3.model.BgDataModel;
import com.android.launcher3.model.BgDataModel.Callbacks;
import com.android.launcher3.model.GridSizeMigrationTask;
import com.android.launcher3.model.GridSizeMigrationTaskV2;
import com.android.launcher3.model.LoaderResults;
import com.android.launcher3.model.LoaderTask;
import com.android.launcher3.model.WidgetItem;
@@ -105,7 +98,6 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
import java.util.concurrent.FutureTask;
@@ -121,7 +113,7 @@ import java.util.concurrent.TimeoutException;
 *   4) Measure and draw the view on a canvas
 */
@TargetApi(Build.VERSION_CODES.O)
public class LauncherPreviewRenderer implements Callable<Bitmap> {
public class LauncherPreviewRenderer {

    private static final String TAG = "LauncherPreviewRenderer";

@@ -213,15 +205,17 @@ public class LauncherPreviewRenderer implements Callable<Bitmap> {
    private final Context mContext;
    private final InvariantDeviceProfile mIdp;
    private final DeviceProfile mDp;
    private final boolean mMigrated;
    private final Rect mInsets;

    private final WorkspaceItemInfo mWorkspaceItemInfo;

    public LauncherPreviewRenderer(Context context, InvariantDeviceProfile idp) {
    public LauncherPreviewRenderer(Context context, InvariantDeviceProfile idp, boolean migrated) {
        mUiHandler = new Handler(Looper.getMainLooper());
        mContext = context;
        mIdp = idp;
        mDp = idp.portraitProfile.copy(context);
        mMigrated = migrated;

        // TODO: get correct insets once display cutout API is available.
        mInsets = new Rect();
@@ -243,28 +237,6 @@ public class LauncherPreviewRenderer implements Callable<Bitmap> {
                context.getString(R.string.label_application);
    }

    @Override
    public Bitmap call() {
        return BitmapRenderer.createHardwareBitmap(mDp.widthPx, mDp.heightPx, c -> {

            if (Looper.myLooper() == Looper.getMainLooper()) {
                new MainThreadRenderer(mContext).renderScreenShot(c);
            } else {
                CountDownLatch latch = new CountDownLatch(1);
                Utilities.postAsyncCallback(mUiHandler, () -> {
                    new MainThreadRenderer(mContext).renderScreenShot(c);
                    latch.countDown();
                });

                try {
                    latch.await();
                } catch (Exception e) {
                    Log.e(TAG, "Error drawing on main thread", e);
                }
            }
        });
    }

    /** Populate preview and render it. */
    public View getRenderedView() {
        MainThreadRenderer renderer = new MainThreadRenderer(mContext);
@@ -407,20 +379,9 @@ public class LauncherPreviewRenderer implements Callable<Bitmap> {

        private void populate() {
            if (ENABLE_LAUNCHER_PREVIEW_IN_GRID_PICKER.get()) {
                boolean needsToMigrate =
                        MULTI_DB_GRID_MIRATION_ALGO.get()
                                ? GridSizeMigrationTaskV2.needsToMigrate(mContext, mIdp)
                                : GridSizeMigrationTask.needsToMigrate(mContext, mIdp);
                boolean success = false;
                if (needsToMigrate) {
                    success = MULTI_DB_GRID_MIRATION_ALGO.get()
                            ? GridSizeMigrationTaskV2.migrateGridIfNeeded(mContext, mIdp)
                            : GridSizeMigrationTask.migrateGridIfNeeded(mContext, mIdp);
                }

                WorkspaceFetcher fetcher;
                PreviewContext previewContext = null;
                if (needsToMigrate && success) {
                if (mMigrated) {
                    previewContext = new PreviewContext(mContext, mIdp);
                    LauncherAppState appForPreview = new LauncherAppState(
                            previewContext, null /* iconCacheFileName */);
@@ -535,12 +496,6 @@ public class LauncherPreviewRenderer implements Callable<Bitmap> {
            // Additional measure for views which use auto text size API
            measureView(mRootView, mDp.widthPx, mDp.heightPx);
        }

        private void renderScreenShot(Canvas canvas) {
            populate();
            mRootView.draw(canvas);
            dispatchVisibilityAggregated(mRootView, false);
        }
    }

    private static void measureView(View view, int width, int height) {
Loading