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

Commit ec304d20 authored by The Android Open Source Project's avatar The Android Open Source Project
Browse files

Merge SP1A.211105.004 to stage-aosp-master - DO NOT MERGE

Merged-In: I92ba4bd46f2671c0bc33a71631ce1b0290198c67
Change-Id: I9f61cd1e3a3feebf6fc2aaa020e65a8909662712
parents 526386b2 84a3c1e7
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -1146,20 +1146,24 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
        }
        updateTaskSize();

        int targetPage = -1;
        if (mNextPage == INVALID_PAGE) {
            // Set the current page to the running task, but not if settling on new task.
            TaskView runningTaskView = getRunningTaskView();
            if (runningTaskView != null) {
                setCurrentPage(indexOfChild(runningTaskView));
                targetPage = indexOfChild(runningTaskView);
            } else if (getTaskViewCount() > 0) {
                setCurrentPage(indexOfChild(getTaskViewAt(0)));
                targetPage = indexOfChild(getTaskViewAt(0));
            }
        } else if (currentTaskId != -1) {
            currentTaskView = getTaskView(currentTaskId);
            if (currentTaskView != null) {
                setCurrentPage(indexOfChild(currentTaskView));
                targetPage = indexOfChild(currentTaskView);
            }
        }
        if (targetPage != -1 && mCurrentPage != targetPage) {
            setCurrentPage(targetPage);
        }

        if (mIgnoreResetTaskId != -1 && getTaskView(mIgnoreResetTaskId) != ignoreResetTaskView) {
            // If the taskView mapping is changing, do not preserve the visuals. Since we are
+16 −17
Original line number Diff line number Diff line
@@ -72,6 +72,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.concurrent.CancellationException;
import java.util.concurrent.Executor;
import java.util.function.Consumer;
import java.util.function.Supplier;

/**
@@ -376,7 +377,13 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi
                    loaderResults.bindWidgets();
                    return true;
                } else {
                    startLoaderForResults(loaderResults);
                    stopLoader();
                    mLoaderTask = new LoaderTask(
                            mApp, mBgAllAppsList, mBgDataModel, mModelDelegate, loaderResults);

                    // Always post the loader task, instead of running directly
                    // (even on same thread) so that we exit any nested synchronized blocks
                    MODEL_EXECUTOR.post(mLoaderTask);
                }
            }
        }
@@ -399,25 +406,17 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi
        }
    }

    public void startLoaderForResults(LoaderResults results) {
        synchronized (mLock) {
            stopLoader();
            mLoaderTask = new LoaderTask(
                    mApp, mBgAllAppsList, mBgDataModel, mModelDelegate, results);

            // Always post the loader task, instead of running directly (even on same thread) so
            // that we exit any nested synchronized blocks
            MODEL_EXECUTOR.post(mLoaderTask);
        }
    }

    public void startLoaderForResultsIfNotLoaded(LoaderResults results) {
    /**
     * Loads the model if not loaded
     * @param callback called with the data model upon successful load or null on model thread.
     */
    public void loadAsync(Consumer<BgDataModel> callback) {
        synchronized (mLock) {
            if (!isModelLoaded()) {
                Log.d(TAG, "Workspace not loaded, loading now");
                startLoaderForResults(results);
            if (!mModelLoaded && !mIsLoaderTaskRunning) {
                startLoader();
            }
        }
        MODEL_EXECUTOR.post(() -> callback.accept(isModelLoaded() ? mBgDataModel : null));
    }

    @Override
+6 −12
Original line number Diff line number Diff line
@@ -49,7 +49,6 @@ import com.android.launcher3.model.GridSizeMigrationTask;
import com.android.launcher3.model.GridSizeMigrationTaskV2;
import com.android.launcher3.model.LoaderTask;
import com.android.launcher3.model.ModelDelegate;
import com.android.launcher3.model.ModelPreload;
import com.android.launcher3.util.ComponentKey;
import com.android.launcher3.util.RunnableList;
import com.android.launcher3.util.Themes;
@@ -174,18 +173,13 @@ public class PreviewSurfaceRenderer {
                }
            }.run();
        } else {
            new ModelPreload() {

                @Override
                public void onComplete(boolean isSuccess) {
                    if (isSuccess) {
                        MAIN_EXECUTOR.execute(() ->
                                renderView(inflationContext, getBgDataModel(), null));
            LauncherAppState.getInstance(inflationContext).getModel().loadAsync(dataModel -> {
                if (dataModel != null) {
                    MAIN_EXECUTOR.execute(() -> renderView(inflationContext, dataModel, null));
                } else {
                    Log.e(TAG, "Model loading failed");
                }
                }
            }.start(inflationContext);
            });
        }
    }

+0 −76
Original line number Diff line number Diff line
/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.android.launcher3.model;

import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;

import android.content.Context;
import android.util.Log;

import androidx.annotation.WorkerThread;

import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherModel;
import com.android.launcher3.LauncherModel.ModelUpdateTask;
import com.android.launcher3.model.BgDataModel.Callbacks;

import java.util.concurrent.Executor;

/**
 * Utility class to preload LauncherModel
 */
public class ModelPreload implements ModelUpdateTask {

    private static final String TAG = "ModelPreload";

    private LauncherAppState mApp;
    private LauncherModel mModel;
    private BgDataModel mBgDataModel;
    private AllAppsList mAllAppsList;

    @Override
    public final void init(LauncherAppState app, LauncherModel model, BgDataModel dataModel,
            AllAppsList allAppsList, Executor uiExecutor) {
        mApp = app;
        mModel = model;
        mBgDataModel = dataModel;
        mAllAppsList = allAppsList;
    }

    @Override
    public final void run() {
        mModel.startLoaderForResultsIfNotLoaded(
                new LoaderResults(mApp, mBgDataModel, mAllAppsList, new Callbacks[0]));
        MODEL_EXECUTOR.post(() -> {
            Log.d(TAG, "Preload completed : " + mModel.isModelLoaded());
            onComplete(mModel.isModelLoaded());
        });
    }

    public BgDataModel getBgDataModel() {
        return mBgDataModel;
    }

    /**
     * Called when the task is complete
     */
    @WorkerThread
    public void onComplete(boolean isSuccess) { }

    public void start(Context context) {
        LauncherAppState.getInstance(context).getModel().enqueueModelUpdateTask(this);
    }
}
 No newline at end of file