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

Commit 87dd782e authored by Winson Chung's avatar Winson Chung Committed by Android (Google) Code Review
Browse files

Merge "Unloading thumbnails from task views once recents is hidden" into ub-launcher3-master

parents 7c7be8c2 c7c51589
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -152,5 +152,9 @@ public class RecentsViewStateController implements StateHandler {

    private void applyProgress() {
        mRecentsView.setAlpha(mTransitionProgress.value * mVisibilityMultiplier.value);
        if (mIsRecentsSlidingInOrOut) {
            // While animating into recents, update the visible task data as needed
            mRecentsView.loadVisibleTaskData();
        }
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -210,13 +210,13 @@ public class RecentsModel extends TaskStackChangeListener {

    public void onStart() {
        mRecentsTaskLoader.startLoader(mContext);
//        mRecentsTaskLoader.getHighResThumbnailLoader().setVisible(true);
        mRecentsTaskLoader.getHighResThumbnailLoader().setVisible(true);
    }

    public void onTrimMemory(int level) {
        if (level == ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) {
            // We already stop the loader in UI_HIDDEN, so stop the high res loader as well
//            mRecentsTaskLoader.getHighResThumbnailLoader().setVisible(false);
            mRecentsTaskLoader.getHighResThumbnailLoader().setVisible(false);
        }
        mRecentsTaskLoader.onTrimMemory(level);
    }
+51 −19
Original line number Diff line number Diff line
@@ -111,7 +111,9 @@ public class RecentsView extends PagedView implements Insettable, OnSharedPrefer
    private boolean mScrimOnLeft;

    private boolean mFirstTaskIconScaledDown = false;
    private SparseBooleanArray mPrevVisibleTasks = new SparseBooleanArray();

    // Keeps track of the previously known visible tasks for purposes of loading/unloading task data
    private SparseBooleanArray mHasVisibleTaskData = new SparseBooleanArray();

    public RecentsView(Context context) {
        this(context, null);
@@ -216,6 +218,20 @@ public class RecentsView extends PagedView implements Insettable, OnSharedPrefer
        Utilities.getPrefs(getContext()).unregisterOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onViewRemoved(View child) {
        super.onViewRemoved(child);

        // Clear the task data for the removed child if it was visible
        Task task = ((TaskView) child).getTask();
        if (mHasVisibleTaskData.get(task.key.id)) {
            mHasVisibleTaskData.delete(task.key.id);
            RecentsTaskLoader loader = mModel.getRecentsTaskLoader();
            loader.unloadTaskData(task);
            loader.getHighResThumbnailLoader().onTaskInvisible(task);
        }
    }

    @Override
    public void setInsets(Rect insets) {
        mInsets.set(insets);
@@ -295,7 +311,6 @@ public class RecentsView extends PagedView implements Insettable, OnSharedPrefer
    }

    private void applyLoadPlan(RecentsTaskLoadPlan loadPlan) {
        final RecentsTaskLoader loader = mModel.getRecentsTaskLoader();
        TaskStack stack = loadPlan != null ? loadPlan.getTaskStack() : null;
        if (stack == null) {
            removeAllViews();
@@ -317,13 +332,13 @@ public class RecentsView extends PagedView implements Insettable, OnSharedPrefer
        }
        while (getChildCount() > requiredChildCount) {
            final TaskView taskView = (TaskView) getChildAt(getChildCount() - 1);
            final Task task = taskView.getTask();
            removeView(taskView);
            loader.unloadTaskData(task);
//            loader.getHighResThumbnailLoader().onTaskInvisible(task);
        }
        setLayoutTransition(mLayoutTransition);

        // Unload existing visible task data
        unloadVisibleTaskData();

        // Rebind and reset all task views
        for (int i = requiredChildCount - 1; i >= 0; i--) {
            final int pageIndex = requiredChildCount - i - 1;
@@ -333,8 +348,8 @@ public class RecentsView extends PagedView implements Insettable, OnSharedPrefer
            taskView.resetVisualProperties();
        }
        updateCurveProperties();
        // Reload the set of visible task's data
        mPrevVisibleTasks.clear();

        // Update the set of visible task's data
        loadVisibleTaskData();
        applyIconScale(false /* animate */);

@@ -421,7 +436,7 @@ public class RecentsView extends PagedView implements Insettable, OnSharedPrefer

        // Update the high res thumbnail loader
        RecentsTaskLoader loader = mModel.getRecentsTaskLoader();
//        loader.getHighResThumbnailLoader().setFlingingFast(isFlingingFast);
        loader.getHighResThumbnailLoader().setFlingingFast(isFlingingFast);
        return scrolling;
    }

@@ -453,28 +468,48 @@ public class RecentsView extends PagedView implements Insettable, OnSharedPrefer
     * Iterates through all thet asks, and loads the associated task data for newly visible tasks,
     * and unloads the associated task data for tasks that are no longer visible.
     */
    private void loadVisibleTaskData() {
    public void loadVisibleTaskData() {
        RecentsTaskLoader loader = mModel.getRecentsTaskLoader();
        int centerPageIndex = getPageNearestToCenterOfScreen();
        int lower = Math.max(0, centerPageIndex - 2);
        int upper = Math.min(centerPageIndex + 2, getChildCount() - 1);
        for (int i = 0; i < getChildCount(); i++) {
        int numChildren = getChildCount();

        // Update the task data for the in/visible children
        for (int i = 0; i < numChildren; i++) {
            TaskView taskView = (TaskView) getChildAt(i);
            Task task = taskView.getTask();
            boolean visible = lower <= i && i <= upper;
            if (visible) {
                if (!mPrevVisibleTasks.get(i)) {
                if (!mHasVisibleTaskData.get(task.key.id)) {
                    loader.loadTaskData(task);
//                    loader.getHighResThumbnailLoader().onTaskVisible(task);
                    loader.getHighResThumbnailLoader().onTaskVisible(task);
                }
                mHasVisibleTaskData.put(task.key.id, visible);
            } else {
                if (mPrevVisibleTasks.get(i)) {
                if (mHasVisibleTaskData.get(task.key.id)) {
                    loader.unloadTaskData(task);
//                    loader.getHighResThumbnailLoader().onTaskInvisible(task);
                    loader.getHighResThumbnailLoader().onTaskInvisible(task);
                }
                mHasVisibleTaskData.delete(task.key.id);
            }
        }
    }
            mPrevVisibleTasks.put(i, visible);

    /**
     * Unloads any associated data from the currently visible tasks
     */
    private void unloadVisibleTaskData() {
        RecentsTaskLoader loader = mModel.getRecentsTaskLoader();
        for (int i = 0; i < mHasVisibleTaskData.size(); i++) {
            if (mHasVisibleTaskData.valueAt(i)) {
                TaskView taskView = getTaskView(mHasVisibleTaskData.keyAt(i));
                Task task = taskView.getTask();
                loader.unloadTaskData(task);
                loader.getHighResThumbnailLoader().onTaskInvisible(task);
            }
        }
        mHasVisibleTaskData.clear();
    }

    public void onTaskDismissed(TaskView taskView) {
@@ -486,14 +521,11 @@ public class RecentsView extends PagedView implements Insettable, OnSharedPrefer
    }

    public void reset() {
        unloadVisibleTaskData();
        mRunningTaskId = -1;
        setCurrentPage(0);
    }

    public int getRunningTaskId() {
        return mRunningTaskId;
    }

    /**
     * Reloads the view if anything in recents changed.
     */
+2 −0
Original line number Diff line number Diff line
@@ -648,11 +648,13 @@ public abstract class PagedView<T extends View & PageIndicator> extends ViewGrou

    @Override
    public void onViewAdded(View child) {
        super.onViewAdded(child);
        dispatchPageCountChanged();
    }

    @Override
    public void onViewRemoved(View child) {
        super.onViewRemoved(child);
        mCurrentPage = validateNewPage(mCurrentPage);
        dispatchPageCountChanged();
    }