diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index b5b7bcd743d58..637551c68a744 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -245,7 +245,7 @@ android:stateNotNeeded="true" android:resumeWhilePausing="true" android:screenOrientation="behind" - android:theme="@style/RecentsTheme.Wallpaper"> + android:theme="@style/RecentsTvTheme.Wallpaper"> diff --git a/packages/SystemUI/res/drawable/recents_tv_background_gradient.xml b/packages/SystemUI/res/drawable/recents_tv_background_gradient.xml new file mode 100644 index 0000000000000..e98d43f595ae0 --- /dev/null +++ b/packages/SystemUI/res/drawable/recents_tv_background_gradient.xml @@ -0,0 +1,22 @@ + + + + + \ No newline at end of file diff --git a/packages/SystemUI/res/layout/recents_on_tv.xml b/packages/SystemUI/res/layout/recents_on_tv.xml index 94b099e5f4460..3a7c1d10e642b 100644 --- a/packages/SystemUI/res/layout/recents_on_tv.xml +++ b/packages/SystemUI/res/layout/recents_on_tv.xml @@ -18,9 +18,10 @@ android:id="@+id/recents_view" android:layout_width="match_parent" android:layout_height="match_parent" + android:background="@drawable/recents_tv_background_gradient" android:clipChildren="false" - android:clipToPadding="false" > - + android:clipToPadding="false" + android:layoutDirection="rtl"> + android:layout_centerInParent="true" + android:layoutDirection="ltr"> - - - - + + android:layout_height="wrap_content"> + - - - - + android:fontFamily="@string/font_roboto_regular" + android:textSize="@dimen/recents_tv_title_text_size" + android:layout_marginBottom="@dimen/recents_tv_text_padding_bottom" + android:ellipsize="end"/> + + + \ No newline at end of file diff --git a/packages/SystemUI/res/values/colors_tv.xml b/packages/SystemUI/res/values/colors_tv.xml index 6f4c983586a43..af99aaecf62a8 100644 --- a/packages/SystemUI/res/values/colors_tv.xml +++ b/packages/SystemUI/res/values/colors_tv.xml @@ -18,7 +18,5 @@ --> #FF37474F - #FFEEEEEE - #99EEEEEE - #99EEEEEE + #CCEEEEEE \ No newline at end of file diff --git a/packages/SystemUI/res/values/dimens_tv.xml b/packages/SystemUI/res/values/dimens_tv.xml index bf32cc7505b71..b5891107297e5 100644 --- a/packages/SystemUI/res/values/dimens_tv.xml +++ b/packages/SystemUI/res/values/dimens_tv.xml @@ -18,15 +18,21 @@ --> - 150dip - 85dip - 16dip + 268dip + 151dip + 20dip + 114dip + 64dip + 16dip + 8dip + 12dip + 12dip 56dip 57dip - 200dip - 8dip + 268dip + 20dip 6dp @@ -34,4 +40,7 @@ 3dp + + + 12sp diff --git a/packages/SystemUI/res/values/strings_tv.xml b/packages/SystemUI/res/values/strings_tv.xml index 4f382eae93989..59cfb1ee8db30 100644 --- a/packages/SystemUI/res/values/strings_tv.xml +++ b/packages/SystemUI/res/values/strings_tv.xml @@ -31,11 +31,13 @@ Cancel Hold HOME to control PIP - Press and hold the HOME\nbutton to close or control it Got it + + + sans-serif diff --git a/packages/SystemUI/res/values/styles_tv.xml b/packages/SystemUI/res/values/styles_tv.xml index 3f0caab23ab47..263e1a4cccf42 100644 --- a/packages/SystemUI/res/values/styles_tv.xml +++ b/packages/SystemUI/res/values/styles_tv.xml @@ -22,4 +22,11 @@ @android:color/transparent false + + diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java index 58219bf6eeaa0..1458d7bbffc57 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java @@ -66,6 +66,7 @@ import com.android.systemui.recents.model.RecentsTaskLoader; import com.android.systemui.recents.model.Task; import com.android.systemui.recents.model.TaskGrouping; import com.android.systemui.recents.model.TaskStack; +import com.android.systemui.recents.tv.views.TaskStackHorizontalGridView; import com.android.systemui.recents.views.TaskStackLayoutAlgorithm; import com.android.systemui.recents.views.TaskStackView; import com.android.systemui.recents.views.TaskStackViewScroller; diff --git a/packages/SystemUI/src/com/android/systemui/recents/events/activity/LaunchTvTaskEvent.java b/packages/SystemUI/src/com/android/systemui/recents/events/activity/LaunchTvTaskEvent.java new file mode 100644 index 0000000000000..04ca68f293f22 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/recents/events/activity/LaunchTvTaskEvent.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2016 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.systemui.recents.events.activity; + + +import android.graphics.Rect; +import com.android.systemui.recents.events.EventBus; +import com.android.systemui.recents.model.Task; +import com.android.systemui.recents.tv.views.TaskCardView; + +public class LaunchTvTaskEvent extends EventBus.Event { + + public final TaskCardView taskView; + public final Task task; + public final Rect targetTaskBounds; + public final int targetTaskStack; + + public LaunchTvTaskEvent(TaskCardView taskView, Task task, Rect targetTaskBounds, + int targetTaskStack) { + this.taskView = taskView; + this.task = task; + this.targetTaskBounds = targetTaskBounds; + this.targetTaskStack = targetTaskStack; + } + +} diff --git a/packages/SystemUI/src/com/android/systemui/recents/events/activity/LaunchTvTaskStartedEvent.java b/packages/SystemUI/src/com/android/systemui/recents/events/activity/LaunchTvTaskStartedEvent.java new file mode 100644 index 0000000000000..75d3efacc4a39 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/recents/events/activity/LaunchTvTaskStartedEvent.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2016 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.systemui.recents.events.activity; + +import com.android.systemui.recents.events.EventBus; +import com.android.systemui.recents.tv.views.TaskCardView; + +/** + * This event is sent following {@link LaunchTvTaskEvent} after the call to the system is made to + * start the task, only used on TV. + */ +public class LaunchTvTaskStartedEvent extends EventBus.AnimatedEvent { + + public final TaskCardView taskView; + + public LaunchTvTaskStartedEvent(TaskCardView taskView) { + this.taskView = taskView; + } + +} diff --git a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java index 7c5a931eee09d..532e79661c6ae 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java +++ b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java @@ -694,6 +694,37 @@ public class SystemServicesProxy { return icon; } + /** + * Returns a banner used on TV for the specified Activity. + */ + public Drawable getActivityBanner(ActivityInfo info) { + if (mPm == null) return null; + + // If we are mocking, then return a mock banner + if (RecentsDebugFlags.Static.EnableMockTasks) { + return new ColorDrawable(0xFF666666); + } + + Drawable banner = info.loadBanner(mPm); + return banner; + } + + /** + * Returns a logo used on TV for the specified Activity. + */ + public Drawable getActivityLogo(ActivityInfo info) { + if (mPm == null) return null; + + // If we are mocking, then return a mock logo + if (RecentsDebugFlags.Static.EnableMockTasks) { + return new ColorDrawable(0xFF666666); + } + + Drawable logo = info.loadLogo(mPm); + return logo; + } + + /** * Returns the given label for a user, badging if necessary. */ diff --git a/packages/SystemUI/src/com/android/systemui/recents/tv/RecentsTvActivity.java b/packages/SystemUI/src/com/android/systemui/recents/tv/RecentsTvActivity.java index 4ba9efada9de2..02c8d962f4115 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/tv/RecentsTvActivity.java +++ b/packages/SystemUI/src/com/android/systemui/recents/tv/RecentsTvActivity.java @@ -59,6 +59,8 @@ import com.android.systemui.statusbar.BaseStatusBar; import com.android.systemui.tv.pip.PipManager; import java.util.ArrayList; +import java.util.Collections; +import java.util.List; /** * The main TV recents activity started by the RecentsImpl. @@ -156,11 +158,13 @@ public class RecentsTvActivity extends Activity implements OnPreDrawListener { mRecentsView.setTaskStack(stack); + List stackTasks = stack.getStackTasks(); + Collections.reverse(stackTasks); if (mTaskStackViewAdapter == null) { - mTaskStackViewAdapter = new TaskStackHorizontalViewAdapter(stack.getStackTasks()); + mTaskStackViewAdapter = new TaskStackHorizontalViewAdapter(stackTasks); mRecentsView.setTaskStackViewAdapter(mTaskStackViewAdapter); } else { - mTaskStackViewAdapter.setNewStackTasks(stack.getStackTasks()); + mTaskStackViewAdapter.setNewStackTasks(stackTasks); } if (launchState.launchedToTaskId != -1) { diff --git a/packages/SystemUI/src/com/android/systemui/recents/tv/views/RecentsTvTransitionHelper.java b/packages/SystemUI/src/com/android/systemui/recents/tv/views/RecentsTvTransitionHelper.java new file mode 100644 index 0000000000000..ef8d48e7f2cf3 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/recents/tv/views/RecentsTvTransitionHelper.java @@ -0,0 +1,132 @@ +/* + * Copyright (C) 2016 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.systemui.recents.tv.views; + +import android.annotation.Nullable; +import android.app.ActivityManager; +import android.app.ActivityOptions; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Rect; +import android.os.Bundle; +import android.os.Handler; +import android.os.IRemoteCallback; +import android.os.RemoteException; +import android.util.Log; +import android.view.WindowManagerGlobal; +import com.android.internal.annotations.GuardedBy; +import com.android.systemui.recents.Recents; +import com.android.systemui.recents.events.EventBus; +import com.android.systemui.recents.events.activity.*; +import com.android.systemui.recents.misc.SystemServicesProxy; +import com.android.systemui.recents.model.Task; +import com.android.systemui.recents.model.TaskStack; + + +public class RecentsTvTransitionHelper { + private static final String TAG = "RecentsTvTransitionHelper"; + + private Context mContext; + private Handler mHandler; + + public RecentsTvTransitionHelper(Context context, Handler handler) { + mContext = context; + mHandler = handler; + } + + public void launchTaskFromRecents(final TaskStack stack, @Nullable final Task task, + final TaskStackHorizontalGridView stackView, final TaskCardView taskView, + final Rect bounds, int destinationStack) { + final ActivityOptions opts = ActivityOptions.makeBasic(); + if (bounds != null) { + opts.setLaunchBounds(bounds.isEmpty() ? null : bounds); + } + + final ActivityOptions.OnAnimationStartedListener animStartedListener; + if (task.thumbnail != null && task.thumbnail.getWidth() > 0 && + task.thumbnail.getHeight() > 0) { + animStartedListener = new ActivityOptions.OnAnimationStartedListener() { + @Override + public void onAnimationStarted() { + // If we are launching into another task, cancel the previous task's + // window transition + EventBus.getDefault().send(new CancelEnterRecentsWindowAnimationEvent(task)); + EventBus.getDefault().send(new ExitRecentsWindowFirstAnimationFrameEvent()); + } + }; + } else { + // This is only the case if the task is not on screen (scrolled offscreen for example) + animStartedListener = new ActivityOptions.OnAnimationStartedListener() { + @Override + public void onAnimationStarted() { + EventBus.getDefault().send(new ExitRecentsWindowFirstAnimationFrameEvent()); + } + }; + } + + if (taskView == null) { + // If there is no task view, then we do not need to worry about animating out occluding + // task views, and we can launch immediately + startTaskActivity(stack, task, taskView, opts, animStartedListener); + } else { + LaunchTvTaskStartedEvent launchStartedEvent = new LaunchTvTaskStartedEvent(taskView); + EventBus.getDefault().send(launchStartedEvent); + startTaskActivity(stack, task, taskView, opts, animStartedListener); + } + } + + private void startTaskActivity(TaskStack stack, Task task, @Nullable TaskCardView taskView, + ActivityOptions opts,final ActivityOptions.OnAnimationStartedListener animStartedListener) { + SystemServicesProxy ssp = Recents.getSystemServices(); + if (ssp.startActivityFromRecents(mContext, task.key.id, task.title, opts)) { + // Keep track of the index of the task launch + int taskIndexFromFront = 0; + int taskIndex = stack.indexOfStackTask(task); + if (taskIndex > -1) { + taskIndexFromFront = stack.getTaskCount() - taskIndex - 1; + } + EventBus.getDefault().send(new LaunchTaskSucceededEvent(taskIndexFromFront)); + } else { + // Keep track of failed launches + EventBus.getDefault().send(new LaunchTaskFailedEvent()); + } + + IRemoteCallback.Stub callback = null; + if (animStartedListener != null) { + callback = new IRemoteCallback.Stub() { + @Override + public void sendResult(Bundle data) throws RemoteException { + mHandler.post(new Runnable() { + @Override + public void run() { + if (animStartedListener != null) { + animStartedListener.onAnimationStarted(); + } + } + }); + } + }; + } + try { + Rect taskRect = taskView.getGlobalRect(); + WindowManagerGlobal.getWindowManagerService() + .overridePendingAppTransitionThumb(task.thumbnail, taskRect.left, + taskRect.top, callback, true); + } catch (RemoteException e) { + Log.w(TAG, "Failed to override transition: " + e); + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/recents/tv/views/RecentsTvView.java b/packages/SystemUI/src/com/android/systemui/recents/tv/views/RecentsTvView.java index 8e768a27f7d88..bf6229cc0307d 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/tv/views/RecentsTvView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/tv/views/RecentsTvView.java @@ -17,6 +17,7 @@ package com.android.systemui.recents.tv.views; import android.content.Context; import android.graphics.Rect; +import android.os.Handler; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; @@ -31,7 +32,7 @@ import com.android.systemui.recents.RecentsConfiguration; import com.android.systemui.recents.events.EventBus; import com.android.systemui.recents.events.activity.CancelEnterRecentsWindowAnimationEvent; import com.android.systemui.recents.events.activity.DismissRecentsToHomeAnimationStarted; -import com.android.systemui.recents.events.activity.TaskStackUpdatedEvent; +import com.android.systemui.recents.events.activity.LaunchTvTaskEvent; import com.android.systemui.recents.events.component.RecentsVisibilityChangedEvent; import com.android.systemui.recents.misc.SystemServicesProxy; import com.android.systemui.recents.model.Task; @@ -53,7 +54,8 @@ public class RecentsTvView extends FrameLayout { private View mEmptyView; private boolean mAwaitingFirstLayout = true; private Rect mSystemInsets = new Rect(); - + private RecentsTvTransitionHelper mTransitionHelper; + private Handler mHandler; public RecentsTvView(Context context) { this(context, null); @@ -75,6 +77,8 @@ public class RecentsTvView extends FrameLayout { LayoutInflater inflater = LayoutInflater.from(context); mEmptyView = inflater.inflate(R.layout.recents_empty, this, false); addView(mEmptyView); + mHandler = new Handler(); + mTransitionHelper = new RecentsTvTransitionHelper(mContext, mHandler); } public void setTaskStack(TaskStack stack) { @@ -209,6 +213,11 @@ public class RecentsTvView extends FrameLayout { /**** EventBus Events ****/ + public final void onBusEvent(LaunchTvTaskEvent event) { + mTransitionHelper.launchTaskFromRecents(mStack, event.task, mTaskStackHorizontalView, + event.taskView, event.targetTaskBounds, event.targetTaskStack); + } + public final void onBusEvent(DismissRecentsToHomeAnimationStarted event) { // If we are going home, cancel the previous task's window transition EventBus.getDefault().send(new CancelEnterRecentsWindowAnimationEvent(null)); diff --git a/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskCardView.java b/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskCardView.java index e275f22024ba3..7d8a3ce32f450 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskCardView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskCardView.java @@ -16,20 +16,20 @@ package com.android.systemui.recents.tv.views; import android.content.Context; +import android.graphics.Rect; import android.util.AttributeSet; import android.widget.ImageView; -import android.widget.RelativeLayout; +import android.widget.LinearLayout; import android.widget.TextView; import com.android.systemui.R; -import com.android.systemui.recents.model.Task; import com.android.systemui.recents.tv.animations.ViewFocusAnimator; +import com.android.systemui.recents.model.Task; -public class TaskCardView extends RelativeLayout { +public class TaskCardView extends LinearLayout { private ImageView mThumbnailView; private TextView mTitleTextView; - private TextView mContentTextView; private ImageView mBadgeView; private Task mTask; @@ -52,7 +52,6 @@ public class TaskCardView extends RelativeLayout { protected void onFinishInflate() { mThumbnailView = (ImageView) findViewById(R.id.card_view_thumbnail); mTitleTextView = (TextView) findViewById(R.id.card_title_text); - mContentTextView = (TextView) findViewById(R.id.card_content_text); mBadgeView = (ImageView) findViewById(R.id.card_extra_badge); } @@ -60,11 +59,27 @@ public class TaskCardView extends RelativeLayout { mTask = task; mThumbnailView.setImageBitmap(task.thumbnail); mTitleTextView.setText(task.title); - mContentTextView.setText(task.contentDescription); mBadgeView.setImageDrawable(task.icon); } public Task getTask() { return mTask; } + + @Override + public void getFocusedRect(Rect r) { + mThumbnailView.getFocusedRect(r); + } + + public Rect getFocusedRect() { + Rect r = new Rect(); + getFocusedRect(r); + return r; + } + + public Rect getGlobalRect() { + Rect r = new Rect(); + getGlobalVisibleRect(r); + return r; + } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskStackHorizontalGridView.java b/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskStackHorizontalGridView.java index 58ec8521ec7b6..4458639acfad6 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskStackHorizontalGridView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskStackHorizontalGridView.java @@ -15,7 +15,6 @@ */ package com.android.systemui.recents.tv.views; - import android.content.Context; import android.support.v17.leanback.widget.HorizontalGridView; import android.util.AttributeSet; @@ -36,13 +35,17 @@ import java.util.List; /** * Horizontal Grid View Implementation to show the Task Stack for TV. */ -public class TaskStackHorizontalGridView extends HorizontalGridView implements TaskStackCallbacks{ +public class TaskStackHorizontalGridView extends HorizontalGridView implements TaskStackCallbacks { private TaskStack mStack; private ArrayList mTaskViews = new ArrayList<>(); private Task mFocusedTask; + public TaskStackHorizontalGridView(Context context) { + this(context, null); + } + public TaskStackHorizontalGridView(Context context, AttributeSet attrs) { super(context, attrs); } @@ -64,8 +67,6 @@ public class TaskStackHorizontalGridView extends HorizontalGridView implements T * Resets this view for reuse. */ public void reset() { - // Reset the focused task - resetFocusedTask(getFocusedTask()); requestLayout(); } @@ -73,12 +74,6 @@ public class TaskStackHorizontalGridView extends HorizontalGridView implements T * @param task - Task to reset */ private void resetFocusedTask(Task task) { - if (task != null) { - TaskCardView tv = getChildViewForTask(task); - if (tv != null) { - tv.requestFocus(); - } - } mFocusedTask = null; } @@ -107,6 +102,9 @@ public class TaskStackHorizontalGridView extends HorizontalGridView implements T * @return - The focused task. */ public Task getFocusedTask() { + if (findFocus() != null) { + mFocusedTask = ((TaskCardView)findFocus()).getTask(); + } return mFocusedTask; } diff --git a/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskStackHorizontalViewAdapter.java b/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskStackHorizontalViewAdapter.java index f154331c4878f..fba424ee2ee33 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskStackHorizontalViewAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskStackHorizontalViewAdapter.java @@ -16,7 +16,6 @@ package com.android.systemui.recents.tv.views; import android.app.Activity; -import android.app.ActivityManagerNative; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; @@ -24,15 +23,20 @@ import android.view.View; import android.view.ViewGroup; import com.android.systemui.R; +import com.android.systemui.recents.events.EventBus; +import com.android.systemui.recents.events.activity.LaunchTvTaskEvent; import com.android.systemui.recents.model.Task; import java.util.ArrayList; import java.util.List; +import static android.app.ActivityManager.StackId.INVALID_STACK_ID; + public class TaskStackHorizontalViewAdapter extends RecyclerView.Adapter { - private static final String TAG = "TaskStackHorizontalViewAdapter"; + //Full class name is 30 characters + private static final String TAG = "TaskStackViewAdapter"; private List mTaskList; static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ @@ -54,7 +58,8 @@ public class TaskStackHorizontalViewAdapter extends @Override public void onClick(View v) { try { - ActivityManagerNative.getDefault().startActivityFromRecents(mTask.key.id, null); + EventBus.getDefault().send(new LaunchTvTaskEvent(mTaskCardView, mTask, + null, INVALID_STACK_ID)); ((Activity)(v.getContext())).finish(); } catch (Exception e) { Log.e(TAG, v.getContext() @@ -73,11 +78,12 @@ public class TaskStackHorizontalViewAdapter extends mTaskList.addAll(tasks); notifyDataSetChanged(); } + @Override public TaskStackHorizontalViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) - .inflate(R.layout.recents_task_card_view, parent, false); + .inflate(R.layout.recents_tv_task_card_view, parent, false); ViewHolder viewHolder = new ViewHolder(view); return viewHolder; }