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

Commit b169ebd4 authored by Winson Chung's avatar Winson Chung
Browse files

Loading activity icons in History view.

Change-Id: I68bbef59d380ce7abe251fca75135775528429d5
parent 06266771
Loading
Loading
Loading
Loading
+23 −8
Original line number Diff line number Diff line
@@ -13,15 +13,30 @@
     See the License for the specific language governing permissions and
     limitations under the License.
-->
<TextView
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:theme="@android:style/Theme.Material"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:paddingLeft="32dp"
    android:orientation="horizontal"
    android:clickable="true"
    android:focusable="true"
    android:background="?android:selectableItemBackground">
    <ImageView
        android:id="@+id/icon"
        android:layout_width="32dp"
        android:layout_height="32dp"
        android:layout_gravity="center"
        android:layout_marginStart="16dp" />
    <TextView
        android:id="@+id/description"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:layout_gravity="end"
        android:paddingStart="16dp"
        android:gravity="start|center_vertical"
        android:textSize="14sp"
        android:textColor="#FFFFFF"
    android:fontFamily="sans-serif-medium"
    android:background="?android:selectableItemBackground"
    android:alpha="1" />
 No newline at end of file
        android:fontFamily="sans-serif-medium" />
</LinearLayout>
 No newline at end of file
+54 −14
Original line number Diff line number Diff line
@@ -23,10 +23,12 @@ import android.text.format.DateFormat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.android.systemui.R;
import com.android.systemui.recents.Recents;
import com.android.systemui.recents.misc.SystemServicesProxy;
import com.android.systemui.recents.model.RecentsTaskLoader;
import com.android.systemui.recents.model.Task;

import java.util.ArrayList;
@@ -49,14 +51,34 @@ public class RecentsHistoryAdapter extends RecyclerView.Adapter<RecentsHistoryAd
    static final int TASK_ROW_VIEW_TYPE = 1;

    /**
     * View holder implementation.
     * View holder implementation.  The {@param TaskCallbacks} are only called for TaskRow view
     * holders.
     */
    public static class ViewHolder extends RecyclerView.ViewHolder {
        public View mContent;
    public static class ViewHolder extends RecyclerView.ViewHolder implements Task.TaskCallbacks {
        public final View content;

        public ViewHolder(View v) {
            super(v);
            mContent = v;
            content = v;
        }

        @Override
        public void onTaskDataLoaded(Task task) {
            // This callback is only made for TaskRow view holders
            ImageView iv = (ImageView) content.findViewById(R.id.icon);
            iv.setImageDrawable(task.applicationIcon);
        }

        @Override
        public void onTaskDataUnloaded() {
            // This callback is only made for TaskRow view holders
            ImageView iv = (ImageView) content.findViewById(R.id.icon);
            iv.setImageBitmap(null);
        }

        @Override
        public void onTaskStackIdChanged() {
            // Do nothing, this callback is only made for TaskRow view holders
        }
    }

@@ -89,18 +111,16 @@ public class RecentsHistoryAdapter extends RecyclerView.Adapter<RecentsHistoryAd
     */
    private static class TaskRow implements Row, View.OnClickListener {

        public final String description;
        private final int mTaskId;
        public final Task task;

        public TaskRow(Task task) {
            mTaskId = task.key.id;
            description = task.activityLabel;
            this.task = task;
        }

        @Override
        public void onClick(View v) {
            SystemServicesProxy ssp = Recents.getSystemServices();
            ssp.startActivityFromRecents(v.getContext(), mTaskId, description,
            ssp.startActivityFromRecents(v.getContext(), task.key.id, task.activityLabel,
                    ActivityOptions.makeBasic());
        }

@@ -184,24 +204,44 @@ public class RecentsHistoryAdapter extends RecyclerView.Adapter<RecentsHistoryAd

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        RecentsTaskLoader loader = Recents.getTaskLoader();

        Row row = mRows.get(position);
        int viewType = mRows.get(position).getViewType();
        int viewType = row.getViewType();
        switch (viewType) {
            case DATE_ROW_VIEW_TYPE: {
                TextView tv = (TextView) holder.mContent;
                TextView tv = (TextView) holder.content;
                tv.setText(((DateRow) row).date);
                break;
            }
            case TASK_ROW_VIEW_TYPE: {
                TextView tv = (TextView) holder.mContent;
                TaskRow taskRow = (TaskRow) row;
                tv.setText(taskRow.description);
                tv.setOnClickListener(taskRow);
                taskRow.task.addCallback(holder);
                TextView tv = (TextView) holder.content.findViewById(R.id.description);
                tv.setText(taskRow.task.activityLabel);
                holder.content.setOnClickListener(taskRow);
                loader.loadTaskData(taskRow.task);
                break;
            }
        }
    }

    @Override
    public void onViewRecycled(ViewHolder holder) {
        RecentsTaskLoader loader = Recents.getTaskLoader();

        int position = holder.getAdapterPosition();
        if (position != RecyclerView.NO_POSITION) {
            Row row = mRows.get(position);
            int viewType = row.getViewType();
            if (viewType == TASK_ROW_VIEW_TYPE) {
                TaskRow taskRow = (TaskRow) row;
                taskRow.task.removeCallback(holder);
                loader.unloadTaskData(taskRow.task);
            }
        }
    }

    @Override
    public int getItemCount() {
        return mRows.size();
+26 −11
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import com.android.systemui.recents.Recents;
import com.android.systemui.recents.misc.SystemServicesProxy;
import com.android.systemui.recents.misc.Utilities;

import java.util.ArrayList;
import java.util.Objects;


@@ -36,7 +37,7 @@ public class Task {
    /* Task callbacks */
    public interface TaskCallbacks {
        /* Notifies when a task has been bound */
        public void onTaskDataLoaded();
        public void onTaskDataLoaded(Task task);
        /* Notifies when a task has been unbound */
        public void onTaskDataUnloaded();
        /* Notifies when a task's stack id has changed. */
@@ -110,7 +111,7 @@ public class Task {
    public String iconFilename;
    public Rect bounds;

    private TaskCallbacks mCb;
    private ArrayList<TaskCallbacks> mCallbacks = new ArrayList<>();

    public Task() {
        // Do nothing
@@ -157,9 +158,20 @@ public class Task {
        this.bounds = o.bounds;
    }

    /** Set the callbacks */
    public void setCallbacks(TaskCallbacks cb) {
        mCb = cb;
    /**
     * Add a callback.
     */
    public void addCallback(TaskCallbacks cb) {
        if (!mCallbacks.contains(cb)) {
            mCallbacks.add(cb);
        }
    }

    /**
     * Remove a callback.
     */
    public void removeCallback(TaskCallbacks cb) {
        mCallbacks.remove(cb);
    }

    /** Set the grouping */
@@ -175,8 +187,9 @@ public class Task {
     */
    public void setStackId(int stackId) {
        key.stackId = stackId;
        if (mCb != null) {
            mCb.onTaskStackIdChanged();
        int callbackCount = mCallbacks.size();
        for (int i = 0; i < callbackCount; i++) {
            mCallbacks.get(i).onTaskStackIdChanged();
        }
    }

@@ -192,8 +205,9 @@ public class Task {
    public void notifyTaskDataLoaded(Bitmap thumbnail, Drawable applicationIcon) {
        this.applicationIcon = applicationIcon;
        this.thumbnail = thumbnail;
        if (mCb != null) {
            mCb.onTaskDataLoaded();
        int callbackCount = mCallbacks.size();
        for (int i = 0; i < callbackCount; i++) {
            mCallbacks.get(i).onTaskDataLoaded(this);
        }
    }

@@ -201,8 +215,9 @@ public class Task {
    public void notifyTaskDataUnloaded(Bitmap defaultThumbnail, Drawable defaultApplicationIcon) {
        applicationIcon = defaultApplicationIcon;
        thumbnail = defaultThumbnail;
        if (mCb != null) {
            mCb.onTaskDataUnloaded();
        int callbackCount = mCallbacks.size();
        for (int i = 0; i < callbackCount; i++) {
            mCallbacks.get(i).onTaskDataUnloaded();
        }
    }

+3 −3
Original line number Diff line number Diff line
@@ -678,7 +678,7 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks,
    /** Binds this task view to the task */
    public void onTaskBound(Task t) {
        mTask = t;
        mTask.setCallbacks(this);
        mTask.addCallback(this);

        // Hide the action button if lock to app is disabled for this view
        int lockButtonVisibility = (!t.lockToTaskEnabled || !t.lockToThisTask) ? GONE : VISIBLE;
@@ -689,7 +689,7 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks,
    }

    @Override
    public void onTaskDataLoaded() {
    public void onTaskDataLoaded(Task task) {
        if (mThumbnailView != null && mHeaderView != null) {
            // Bind each of the views to the new task data
            mThumbnailView.rebindToTask(mTask);
@@ -706,7 +706,7 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks,
    public void onTaskDataUnloaded() {
        if (mThumbnailView != null && mHeaderView != null) {
            // Unbind each of the views from the task data and remove the task callback
            mTask.setCallbacks(null);
            mTask.removeCallback(this);
            mThumbnailView.unbindFromTask();
            mHeaderView.unbindFromTask();
            // Unbind any listeners