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
This commit is contained in:
@@ -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>
|
||||
@@ -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"
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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 -->
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user