diff options
| author | 2016-04-11 16:41:03 -0700 | |
|---|---|---|
| committer | 2016-04-13 18:31:18 -0700 | |
| commit | bda1b17d45267c7e6efd9b03a5ec2b5356aa5eb7 (patch) | |
| tree | 98f23350ab2ea45627e965f1a3154d73a0ede2f2 | |
| parent | 3a2bce6e51b08d276806cc60fb1a410e63b4e17e (diff) | |
Add a fall back for when the thumbnail is not generated for a task
Re-add scrim and shadows to cards.
This can happen on TV when an App is mid launch and the HOME button
is pressed. The Banner of the App is used as a fallback, with the
icon of the app as a final fallback. The icon should not be used
normally, since an App would fail review for not providing a banner.
BUG: 27349208
BUG: 27857124
BUG: 27953609
Change-Id: I50f6ee714eeddee1ea2b5ae31f23ea68d230bc59
16 files changed, 268 insertions, 132 deletions
diff --git a/packages/SystemUI/res/drawable/recents_tv_background_gradient.xml b/packages/SystemUI/res/drawable/recents_tv_background_gradient.xml index e98d43f595ae..1e52a91b8944 100644 --- a/packages/SystemUI/res/drawable/recents_tv_background_gradient.xml +++ b/packages/SystemUI/res/drawable/recents_tv_background_gradient.xml @@ -16,7 +16,7 @@ <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient - android:startColor="#99000000" - android:endColor="#E6000000" + android:startColor="#4C000000" + android:endColor="#72000000" android:angle="90"/> </shape>
\ No newline at end of file diff --git a/packages/SystemUI/res/layout/recents_on_tv.xml b/packages/SystemUI/res/layout-television/recents_on_tv.xml index 28ea66d8345d..280fd204bda6 100644 --- a/packages/SystemUI/res/layout/recents_on_tv.xml +++ b/packages/SystemUI/res/layout-television/recents_on_tv.xml @@ -19,7 +19,8 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:clipChildren="false" - android:clipToPadding="false"> + android:clipToPadding="false" + android:background="@drawable/recents_tv_background_gradient"> <com.android.systemui.recents.tv.views.TaskStackHorizontalGridView android:id="@+id/task_list" android:layout_width="wrap_content" diff --git a/packages/SystemUI/res/layout-television/recents_tv_card_dismiss.xml b/packages/SystemUI/res/layout-television/recents_tv_card_dismiss.xml new file mode 100644 index 000000000000..186a0589e6d0 --- /dev/null +++ b/packages/SystemUI/res/layout-television/recents_tv_card_dismiss.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- 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. +--> +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/card_dismiss" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:layout_gravity="center_horizontal" + android:alpha="0.0" + tools:showIn="@layout/recents_tv_task_card_view"> + <ImageView + android:id="@+id/card_dismiss_icon" + android:layout_width="@dimen/recents_tv_dismiss_icon_size" + android:layout_height="@dimen/recents_tv_dismiss_icon_size" + android:layout_gravity="center_horizontal" + android:layout_marginTop="@dimen/recents_tv_dismiss_icon_top_margin" + android:layout_marginBottom="@dimen/recents_tv_dismiss_icon_bottom_margin" + android:src="@drawable/ic_cancel_white_24dp"/> + <TextView + android:id="@+id/card_dismiss_text" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textSize="@dimen/recents_tv_dismiss_text_size" + android:fontFamily="@string/font_roboto_light" + android:textColor="@color/recents_tv_dismiss_text_color" + android:text="@string/recents_tv_dismiss" + android:layout_gravity="center_horizontal"/> +</LinearLayout>
\ No newline at end of file diff --git a/packages/SystemUI/res/layout-television/recents_tv_card_info_field.xml b/packages/SystemUI/res/layout-television/recents_tv_card_info_field.xml new file mode 100644 index 000000000000..20397c353d03 --- /dev/null +++ b/packages/SystemUI/res/layout-television/recents_tv_card_info_field.xml @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- 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. +--> +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/card_info_field" + android:layout_width="match_parent" + android:layout_height="wrap_content" + tools:showIn="@layout/recents_tv_task_card_view_fallback_banner"> + <ImageView + android:id="@+id/card_extra_badge" + android:layout_width="@dimen/recents_tv_card_extra_badge_size" + android:layout_height="@dimen/recents_tv_card_extra_badge_size" + android:layout_marginBottom="@dimen/recents_tv_icon_padding_bottom" + android:scaleType="fitCenter" + android:layout_centerVertical="true" + android:layout_alignParentEnd="true"/> + <TextView + android:id="@+id/card_title_text" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:includeFontPadding="true" + android:singleLine="true" + android:shadowColor="@color/recents_tv_text_shadow_color" + android:shadowRadius="5" + android:shadowDx="0" + android:shadowDy="0" + android:textColor="@color/recents_tv_card_title_text_color" + android:fontFamily="@string/font_roboto_regular" + android:textSize="@dimen/recents_tv_title_text_size" + android:paddingStart="@dimen/recents_tv_text_padding_start" + android:layout_marginBottom="@dimen/recents_tv_text_padding_bottom" + android:ellipsize="end"/> +</LinearLayout>
\ No newline at end of file diff --git a/packages/SystemUI/res/layout-television/recents_tv_task_card_view.xml b/packages/SystemUI/res/layout-television/recents_tv_task_card_view.xml new file mode 100644 index 000000000000..9b89aa0a90f1 --- /dev/null +++ b/packages/SystemUI/res/layout-television/recents_tv_task_card_view.xml @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- 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. +--> +<com.android.systemui.recents.tv.views.TaskCardView + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:focusable="true" + android:focusableInTouchMode="true" + android:layout_gravity="center" + android:layout_centerInParent="true" + android:clipToPadding="false" + android:orientation="vertical" > + <include layout="@layout/recents_tv_card_info_field"/> + <LinearLayout + android:id="@+id/card_view_thumbnail" + android:layout_width="@dimen/recents_tv_card_width" + android:layout_height="@dimen/recents_tv_screenshot_height" + android:gravity="center" + android:orientation="vertical" + android:background="@color/recents_tv_card_background_color" + android:layout_centerHorizontal="true" > + + <ImageView + android:id="@+id/card_view_banner_icon" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_centerHorizontal="true" + android:scaleType="centerCrop" + android:gravity="center" /> + + </LinearLayout> + <include layout="@layout/recents_tv_card_dismiss"/> +</com.android.systemui.recents.tv.views.TaskCardView>
\ No newline at end of file diff --git a/packages/SystemUI/res/layout/recents_tv_task_card_view.xml b/packages/SystemUI/res/layout/recents_tv_task_card_view.xml deleted file mode 100644 index 766ef602293a..000000000000 --- a/packages/SystemUI/res/layout/recents_tv_task_card_view.xml +++ /dev/null @@ -1,97 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- 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. ---> -<com.android.systemui.recents.tv.views.TaskCardView - xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:focusable="true" - android:focusableInTouchMode="true" - android:layout_gravity="center" - android:layout_centerInParent="true" - android:orientation="vertical" - android:layoutDirection="ltr"> - - <LinearLayout - android:id="@+id/recents_tv_card" - android:layout_width="@dimen/recents_tv_card_width" - android:layout_height="wrap_content" - android:layout_centerInParent="true" - android:layout_gravity="center" - android:orientation="vertical" > - <LinearLayout - android:id="@+id/card_info_field" - android:layout_width="match_parent" - android:layout_height="wrap_content"> - <ImageView - android:id="@+id/card_extra_badge" - android:layout_width="@dimen/recents_tv_card_extra_badge_size" - android:layout_height="@dimen/recents_tv_card_extra_badge_size" - android:layout_marginBottom="@dimen/recents_tv_icon_padding_bottom" - android:layout_marginEnd="@dimen/recents_tv_icon_padding_end" - android:scaleType="fitCenter" - android:layout_centerVertical="true" - android:layout_alignParentRight="true" /> - <TextView - android:id="@+id/card_title_text" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_alignParentTop="false" - android:includeFontPadding="true" - android:minLines="1" - android:maxLines="1" - android:textColor="@color/recents_tv_card_title_text_color" - 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"/> - </LinearLayout> - <ImageView - android:id="@+id/card_view_thumbnail" - android:layout_width="match_parent" - android:layout_height="@dimen/recents_tv_screenshot_height" - android:scaleType="centerCrop" - android:gravity="center" - android:layout_alignParentTop="true" - android:layout_centerHorizontal="true" - android:layout_below="@id/card_title_text" /> - </LinearLayout> - <LinearLayout - android:id="@+id/card_dismiss" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical" - android:layout_gravity="center_horizontal" - android:layout_below="@id/recents_tv_card" - android:alpha="0.0"> - <ImageView - android:id="@+id/card_dismiss_icon" - android:layout_width="@dimen/recents_tv_dismiss_icon_size" - android:layout_height="@dimen/recents_tv_dismiss_icon_size" - android:layout_gravity="center_horizontal" - android:layout_marginTop="@dimen/recents_tv_dismiss_icon_top_margin" - android:layout_marginBottom="@dimen/recents_tv_dismiss_icon_bottom_margin" - android:src="@drawable/ic_cancel_white_24dp" /> - <TextView - android:id="@+id/card_dismiss_text" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:textSize="@dimen/recents_tv_dismiss_text_size" - android:fontFamily="@string/font_roboto_light" - android:textColor="@color/recents_tv_dismiss_text_color" - android:text="@string/recents_tv_dismiss" - android:layout_gravity="center_horizontal" /> - </LinearLayout> -</com.android.systemui.recents.tv.views.TaskCardView>
\ 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 4126d3cdad68..3817da017426 100644 --- a/packages/SystemUI/res/values/colors_tv.xml +++ b/packages/SystemUI/res/values/colors_tv.xml @@ -17,7 +17,8 @@ */ --> <resources> - <color name="recents_tv_card_background_color">#FF37474F</color> + <color name="recents_tv_card_background_color">#FF263238</color> <color name="recents_tv_card_title_text_color">#CCEEEEEE</color> <color name="recents_tv_dismiss_text_color">#7FEEEEEE</color> + <color name="recents_tv_text_shadow_color">#7F000000</color> </resources>
\ 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 f536f86a40a0..16d27f220775 100644 --- a/packages/SystemUI/res/values/dimens_tv.xml +++ b/packages/SystemUI/res/values/dimens_tv.xml @@ -21,11 +21,13 @@ <dimen name="recents_tv_card_width">240dip</dimen> <dimen name="recents_tv_screenshot_height">135dip</dimen> <dimen name="recents_tv_card_extra_badge_size">20dip</dimen> - <dimen name="recents_tv_banner_width">114dip</dimen> - <dimen name="recents_tv_banner_height">64dip</dimen> + <dimen name="recents_tv_banner_width">130dip</dimen> + <dimen name="recents_tv_banner_height">72dip</dimen> + <dimen name="recents_tv_fallback_icon_width">40dip</dimen> + <dimen name="recents_tv_fallback_icon_height">40dip</dimen> <dimen name="recents_tv_banner_margin_top">16dip</dimen> <dimen name="recents_tv_icon_padding_bottom">8dip</dimen> - <dimen name="recents_tv_icon_padding_end">12dip</dimen> + <dimen name="recents_tv_text_padding_start">12dip</dimen> <dimen name="recents_tv_text_padding_bottom">12dip</dimen> <!-- Padding for grid view in recents view on tv --> diff --git a/packages/SystemUI/src/com/android/systemui/recents/tv/animations/DismissAnimationsHolder.java b/packages/SystemUI/src/com/android/systemui/recents/tv/animations/DismissAnimationsHolder.java index 3e668afbb47e..ae8d800cea3b 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/tv/animations/DismissAnimationsHolder.java +++ b/packages/SystemUI/src/com/android/systemui/recents/tv/animations/DismissAnimationsHolder.java @@ -18,6 +18,7 @@ package com.android.systemui.recents.tv.animations; import android.animation.Animator; import android.content.res.Resources; +import android.view.View; import android.widget.LinearLayout; import com.android.systemui.Interpolators; import com.android.systemui.recents.tv.views.TaskCardView; @@ -26,15 +27,16 @@ import com.android.systemui.R; public class DismissAnimationsHolder { private LinearLayout mDismissArea; - private LinearLayout mRecentsTvCard; + private LinearLayout mInfoField; + private View mThumbnailView; private int mCardYDelta; private long mShortDuration; private long mLongDuration; public DismissAnimationsHolder(TaskCardView taskCardView) { - mRecentsTvCard = (LinearLayout) taskCardView.findViewById(R.id.recents_tv_card); + mInfoField = (LinearLayout) taskCardView.findViewById(R.id.card_info_field); mDismissArea = (LinearLayout) taskCardView.findViewById(R.id.card_dismiss); - + mThumbnailView = taskCardView.findViewById(R.id.card_view_thumbnail); Resources res = taskCardView.getResources(); mCardYDelta = res.getDimensionPixelOffset(R.dimen.recents_tv_dismiss_shift_down); mShortDuration = res.getInteger(R.integer.dismiss_short_duration); @@ -47,7 +49,13 @@ public class DismissAnimationsHolder { .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .alpha(1.0f); - mRecentsTvCard.animate() + mInfoField.animate() + .setDuration(mShortDuration) + .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) + .translationYBy(mCardYDelta) + .alpha(0.5f); + + mThumbnailView.animate() .setDuration(mShortDuration) .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .translationYBy(mCardYDelta) @@ -60,7 +68,13 @@ public class DismissAnimationsHolder { .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .alpha(0.0f); - mRecentsTvCard.animate() + mInfoField.animate() + .setDuration(mShortDuration) + .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) + .translationYBy(-mCardYDelta) + .alpha(1.0f); + + mThumbnailView.animate() .setDuration(mShortDuration) .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .translationYBy(-mCardYDelta) @@ -73,17 +87,25 @@ public class DismissAnimationsHolder { .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .alpha(0.0f); - mRecentsTvCard.animate() + mInfoField.animate() .setDuration(mLongDuration) .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .translationYBy(mCardYDelta) .alpha(0.0f) .setListener(listener); + + mThumbnailView.animate() + .setDuration(mLongDuration) + .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) + .translationYBy(mCardYDelta) + .alpha(0.0f); } public void reset() { - mRecentsTvCard.setAlpha(1.0f); - mRecentsTvCard.setTranslationY(0); - mRecentsTvCard.animate().setListener(null); + mInfoField.setAlpha(1.0f); + mInfoField.setTranslationY(0); + mInfoField.animate().setListener(null); + mThumbnailView.setAlpha(1.0f); + mThumbnailView.setTranslationY(0); } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/tv/animations/HomeRecentsEnterExitAnimationHolder.java b/packages/SystemUI/src/com/android/systemui/recents/tv/animations/HomeRecentsEnterExitAnimationHolder.java index 278de870e5a5..497a0a3d3ab8 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/tv/animations/HomeRecentsEnterExitAnimationHolder.java +++ b/packages/SystemUI/src/com/android/systemui/recents/tv/animations/HomeRecentsEnterExitAnimationHolder.java @@ -46,7 +46,6 @@ public class HomeRecentsEnterExitAnimationHolder { for(int i = 0; i < mGridView.getChildCount(); i++) { TaskCardView view = (TaskCardView) mGridView.getChildAt(i); view.setTranslationX(-mTranslationX); - view.setAlpha(0.0f); view.animate() .alpha(1.0f) .translationX(0) @@ -76,7 +75,7 @@ public class HomeRecentsEnterExitAnimationHolder { public void setEnterFromHomeStartingAnimationValues() { for(int i = 0; i < mGridView.getChildCount(); i++) { TaskCardView view = (TaskCardView) mGridView.getChildAt(i); - view.setTranslationX(-mTranslationX); + view.setTranslationX(0); view.setAlpha(0.0f); } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/tv/animations/ViewFocusAnimator.java b/packages/SystemUI/src/com/android/systemui/recents/tv/animations/ViewFocusAnimator.java index 888561c2172b..9edd5af487cc 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/tv/animations/ViewFocusAnimator.java +++ b/packages/SystemUI/src/com/android/systemui/recents/tv/animations/ViewFocusAnimator.java @@ -26,6 +26,7 @@ import android.view.animation.AccelerateDecelerateInterpolator; import android.view.animation.Interpolator; import com.android.systemui.R; +import com.android.systemui.recents.tv.views.TaskCardView; public class ViewFocusAnimator implements View.OnFocusChangeListener { private final float mUnselectedScale; @@ -94,10 +95,13 @@ public class ViewFocusAnimator implements View.OnFocusChangeListener { mTargetView.setScaleX(scale); mTargetView.setScaleY(scale); - mTargetView.setZ(z); mTargetView.setPadding((int) spacing, mTargetView.getPaddingTop(), (int) spacing, mTargetView.getPaddingBottom()); + + if (mTargetView instanceof TaskCardView) { + ((TaskCardView) mTargetView).getThumbnailView().setZ(z); + } } public float getFocusProgress() { 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 index fb1127ed1859..5b94ebe4e239 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/tv/views/RecentsTvTransitionHelper.java +++ b/packages/SystemUI/src/com/android/systemui/recents/tv/views/RecentsTvTransitionHelper.java @@ -16,7 +16,6 @@ package com.android.systemui.recents.tv.views; import android.annotation.Nullable; -import android.app.Activity; import android.app.ActivityOptions; import android.content.Context; import android.graphics.Bitmap; 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 b876fc701372..594f6bc14dd8 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 @@ -18,7 +18,6 @@ package com.android.systemui.recents.tv.views; import android.content.Context; import android.graphics.Rect; import android.os.Handler; -import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.RecyclerView; import android.util.AttributeSet; import android.util.Log; @@ -35,7 +34,6 @@ 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.ExitRecentsWindowFirstAnimationFrameEvent; import com.android.systemui.recents.events.activity.LaunchTvTaskEvent; import com.android.systemui.recents.events.component.RecentsVisibilityChangedEvent; import com.android.systemui.recents.misc.SystemServicesProxy; 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 d3bc4b6ea888..a72a7e611ae7 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 @@ -17,10 +17,15 @@ package com.android.systemui.recents.tv.views; import android.animation.Animator; import android.content.Context; +import android.content.pm.PackageManager; +import android.content.res.Configuration; import android.content.res.Resources; +import android.graphics.Bitmap; import android.graphics.Point; import android.graphics.Rect; +import android.graphics.drawable.Drawable; import android.util.AttributeSet; +import android.util.Log; import android.util.TypedValue; import android.view.Display; import android.view.KeyEvent; @@ -38,7 +43,8 @@ import com.android.systemui.recents.model.Task; public class TaskCardView extends LinearLayout { - private ImageView mThumbnailView; + private static final String TAG = "TaskCardView"; + private View mThumbnailView; private TextView mTitleTextView; private ImageView mBadgeView; private Task mTask; @@ -58,26 +64,28 @@ public class TaskCardView extends LinearLayout { public TaskCardView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); - mViewFocusAnimator = new ViewFocusAnimator(this); mDismissState = false; + Configuration config = getResources().getConfiguration(); + setLayoutDirection(config.getLayoutDirection()); } @Override protected void onFinishInflate() { super.onFinishInflate(); - mThumbnailView = (ImageView) findViewById(R.id.card_view_thumbnail); + mThumbnailView = findViewById(R.id.card_view_thumbnail); mTitleTextView = (TextView) findViewById(R.id.card_title_text); mBadgeView = (ImageView) findViewById(R.id.card_extra_badge); mDismissAnimationsHolder = new DismissAnimationsHolder(this); View title = findViewById(R.id.card_info_field); mRecentsRowFocusAnimationHolder = new RecentsRowFocusAnimationHolder(this, title); + mViewFocusAnimator = new ViewFocusAnimator(this); } public void init(Task task) { mTask = task; - mThumbnailView.setImageBitmap(task.thumbnail); mTitleTextView.setText(task.title); mBadgeView.setImageDrawable(task.icon); + setThumbnailView(); } public Task getTask() { @@ -238,4 +246,64 @@ public class TaskCardView extends LinearLayout { mRecentsRowFocusAnimationHolder.reset(); mDismissAnimationsHolder.reset(); } + + private void setThumbnailView() { + ImageView screenshotView = (ImageView) findViewById(R.id.card_view_banner_icon); + PackageManager pm = getContext().getPackageManager(); + if (mTask.thumbnail != null) { + setAsScreenShotView(mTask.thumbnail, screenshotView); + } else { + try { + Drawable banner = null; + if (mTask.key != null) { + banner = pm.getActivityBanner(mTask.key.baseIntent); + } + if (banner != null) { + setAsBannerView(banner, screenshotView); + } else { + setAsIconView(mTask.icon, screenshotView); + } + } catch (PackageManager.NameNotFoundException e) { + Log.e(TAG, "Package not found : " + e); + setAsIconView(mTask.icon, screenshotView); + } + } + } + + private void setAsScreenShotView(Bitmap screenshot, ImageView screenshotView) { + LayoutParams lp = (LayoutParams) screenshotView.getLayoutParams(); + lp.width = getResources() + .getDimensionPixelSize(R.dimen.recents_tv_card_width); + lp.height = getResources() + .getDimensionPixelSize(R.dimen.recents_tv_screenshot_height); + + screenshotView.setLayoutParams(lp); + screenshotView.setImageBitmap(screenshot); + } + + private void setAsBannerView(Drawable banner, ImageView bannerView) { + LayoutParams lp = (LayoutParams) bannerView.getLayoutParams(); + lp.width = getResources() + .getDimensionPixelSize(R.dimen.recents_tv_banner_width); + lp.height = getResources() + .getDimensionPixelSize(R.dimen.recents_tv_banner_height); + + bannerView.setLayoutParams(lp); + bannerView.setImageDrawable(banner); + } + + private void setAsIconView(Drawable icon, ImageView iconView) { + LayoutParams lp = (LayoutParams) iconView.getLayoutParams(); + lp.width = getResources() + .getDimensionPixelSize(R.dimen.recents_tv_fallback_icon_width); + lp.height = getResources() + .getDimensionPixelSize(R.dimen.recents_tv_fallback_icon_height); + + iconView.setLayoutParams(lp); + iconView.setImageDrawable(icon); + } + + public View getThumbnailView() { + return mThumbnailView; + } } 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 77ab8c1c1f8c..9f52abdad287 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 @@ -33,9 +33,6 @@ import com.android.systemui.recents.model.TaskStack; import com.android.systemui.recents.model.TaskStack.TaskStackCallbacks; import com.android.systemui.recents.views.AnimationProps; -import java.util.ArrayList; -import java.util.List; - /** * Horizontal Grid View Implementation to show the Task Stack for TV. */ 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 eff184507740..eb3b02d155eb 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 @@ -27,7 +27,6 @@ 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.events.ui.DeleteTaskDataEvent; -import com.android.systemui.recents.events.ui.TaskViewDismissedEvent; import com.android.systemui.recents.model.Task; import com.android.systemui.recents.views.AnimationProps; @@ -47,6 +46,7 @@ public class TaskStackHorizontalViewAdapter extends public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ private TaskCardView mTaskCardView; private Task mTask; + private boolean mShouldReset; public ViewHolder(View v) { super(v); if(v instanceof TaskCardView) { @@ -69,7 +69,6 @@ public class TaskStackHorizontalViewAdapter extends } else { EventBus.getDefault().send(new LaunchTvTaskEvent(mTaskCardView, mTask, null, INVALID_STACK_ID)); - ((Activity) (v.getContext())).finish(); } } catch (Exception e) { Log.e(TAG, v.getContext() @@ -89,6 +88,7 @@ public class TaskStackHorizontalViewAdapter extends public void onAnimationEnd(Animator animation) { removeAt(position); EventBus.getDefault().send(new DeleteTaskDataEvent(task)); + mShouldReset = true; } @Override @@ -114,9 +114,9 @@ public class TaskStackHorizontalViewAdapter extends @Override public TaskStackHorizontalViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View view = LayoutInflater.from(parent.getContext()) - .inflate(R.layout.recents_tv_task_card_view, parent, false); - ViewHolder viewHolder = new ViewHolder(view); + LayoutInflater inflater = LayoutInflater.from(parent.getContext()); + ViewHolder viewHolder = new ViewHolder( + inflater.inflate(R.layout.recents_tv_task_card_view, parent, false)); return viewHolder; } @@ -127,7 +127,12 @@ public class TaskStackHorizontalViewAdapter extends @Override public void onViewDetachedFromWindow(ViewHolder holder) { - holder.mTaskCardView.reset(); + // We only want to reset on view detach if this is the last task being dismissed. + // This is so that we do not reset when shifting to apps etc, as it is not needed. + if (holder.mShouldReset) { + holder.mTaskCardView.reset(); + holder.mShouldReset = false; + } } @Override @@ -157,6 +162,7 @@ public class TaskStackHorizontalViewAdapter extends return (position >= 0) ? position : 0; } + public void setTaskStackHorizontalGridView(TaskStackHorizontalGridView gridView) { mGridView = gridView; } |