Merge "Add a fall back for when the thumbnail is not generated for a task" into nyc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
ac5a240f05
@@ -16,7 +16,7 @@
|
|||||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:shape="rectangle">
|
android:shape="rectangle">
|
||||||
<gradient
|
<gradient
|
||||||
android:startColor="#99000000"
|
android:startColor="#4C000000"
|
||||||
android:endColor="#E6000000"
|
android:endColor="#72000000"
|
||||||
android:angle="90"/>
|
android:angle="90"/>
|
||||||
</shape>
|
</shape>
|
||||||
@@ -19,7 +19,8 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:clipChildren="false"
|
android:clipChildren="false"
|
||||||
android:clipToPadding="false">
|
android:clipToPadding="false"
|
||||||
|
android:background="@drawable/recents_tv_background_gradient">
|
||||||
<com.android.systemui.recents.tv.views.TaskStackHorizontalGridView
|
<com.android.systemui.recents.tv.views.TaskStackHorizontalGridView
|
||||||
android:id="@+id/task_list"
|
android:id="@+id/task_list"
|
||||||
android:layout_width="wrap_content"
|
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>
|
<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_card_title_text_color">#CCEEEEEE</color>
|
||||||
<color name="recents_tv_dismiss_text_color">#7FEEEEEE</color>
|
<color name="recents_tv_dismiss_text_color">#7FEEEEEE</color>
|
||||||
|
<color name="recents_tv_text_shadow_color">#7F000000</color>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -21,11 +21,13 @@
|
|||||||
<dimen name="recents_tv_card_width">240dip</dimen>
|
<dimen name="recents_tv_card_width">240dip</dimen>
|
||||||
<dimen name="recents_tv_screenshot_height">135dip</dimen>
|
<dimen name="recents_tv_screenshot_height">135dip</dimen>
|
||||||
<dimen name="recents_tv_card_extra_badge_size">20dip</dimen>
|
<dimen name="recents_tv_card_extra_badge_size">20dip</dimen>
|
||||||
<dimen name="recents_tv_banner_width">114dip</dimen>
|
<dimen name="recents_tv_banner_width">130dip</dimen>
|
||||||
<dimen name="recents_tv_banner_height">64dip</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_banner_margin_top">16dip</dimen>
|
||||||
<dimen name="recents_tv_icon_padding_bottom">8dip</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>
|
<dimen name="recents_tv_text_padding_bottom">12dip</dimen>
|
||||||
|
|
||||||
<!-- Padding for grid view in recents view on tv -->
|
<!-- 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.animation.Animator;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
import android.view.View;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import com.android.systemui.Interpolators;
|
import com.android.systemui.Interpolators;
|
||||||
import com.android.systemui.recents.tv.views.TaskCardView;
|
import com.android.systemui.recents.tv.views.TaskCardView;
|
||||||
@@ -26,15 +27,16 @@ import com.android.systemui.R;
|
|||||||
|
|
||||||
public class DismissAnimationsHolder {
|
public class DismissAnimationsHolder {
|
||||||
private LinearLayout mDismissArea;
|
private LinearLayout mDismissArea;
|
||||||
private LinearLayout mRecentsTvCard;
|
private LinearLayout mInfoField;
|
||||||
|
private View mThumbnailView;
|
||||||
private int mCardYDelta;
|
private int mCardYDelta;
|
||||||
private long mShortDuration;
|
private long mShortDuration;
|
||||||
private long mLongDuration;
|
private long mLongDuration;
|
||||||
|
|
||||||
public DismissAnimationsHolder(TaskCardView taskCardView) {
|
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);
|
mDismissArea = (LinearLayout) taskCardView.findViewById(R.id.card_dismiss);
|
||||||
|
mThumbnailView = taskCardView.findViewById(R.id.card_view_thumbnail);
|
||||||
Resources res = taskCardView.getResources();
|
Resources res = taskCardView.getResources();
|
||||||
mCardYDelta = res.getDimensionPixelOffset(R.dimen.recents_tv_dismiss_shift_down);
|
mCardYDelta = res.getDimensionPixelOffset(R.dimen.recents_tv_dismiss_shift_down);
|
||||||
mShortDuration = res.getInteger(R.integer.dismiss_short_duration);
|
mShortDuration = res.getInteger(R.integer.dismiss_short_duration);
|
||||||
@@ -47,7 +49,13 @@ public class DismissAnimationsHolder {
|
|||||||
.setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
|
.setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
|
||||||
.alpha(1.0f);
|
.alpha(1.0f);
|
||||||
|
|
||||||
mRecentsTvCard.animate()
|
mInfoField.animate()
|
||||||
|
.setDuration(mShortDuration)
|
||||||
|
.setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
|
||||||
|
.translationYBy(mCardYDelta)
|
||||||
|
.alpha(0.5f);
|
||||||
|
|
||||||
|
mThumbnailView.animate()
|
||||||
.setDuration(mShortDuration)
|
.setDuration(mShortDuration)
|
||||||
.setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
|
.setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
|
||||||
.translationYBy(mCardYDelta)
|
.translationYBy(mCardYDelta)
|
||||||
@@ -60,7 +68,13 @@ public class DismissAnimationsHolder {
|
|||||||
.setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
|
.setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
|
||||||
.alpha(0.0f);
|
.alpha(0.0f);
|
||||||
|
|
||||||
mRecentsTvCard.animate()
|
mInfoField.animate()
|
||||||
|
.setDuration(mShortDuration)
|
||||||
|
.setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
|
||||||
|
.translationYBy(-mCardYDelta)
|
||||||
|
.alpha(1.0f);
|
||||||
|
|
||||||
|
mThumbnailView.animate()
|
||||||
.setDuration(mShortDuration)
|
.setDuration(mShortDuration)
|
||||||
.setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
|
.setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
|
||||||
.translationYBy(-mCardYDelta)
|
.translationYBy(-mCardYDelta)
|
||||||
@@ -73,17 +87,25 @@ public class DismissAnimationsHolder {
|
|||||||
.setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
|
.setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
|
||||||
.alpha(0.0f);
|
.alpha(0.0f);
|
||||||
|
|
||||||
mRecentsTvCard.animate()
|
mInfoField.animate()
|
||||||
.setDuration(mLongDuration)
|
.setDuration(mLongDuration)
|
||||||
.setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
|
.setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
|
||||||
.translationYBy(mCardYDelta)
|
.translationYBy(mCardYDelta)
|
||||||
.alpha(0.0f)
|
.alpha(0.0f)
|
||||||
.setListener(listener);
|
.setListener(listener);
|
||||||
|
|
||||||
|
mThumbnailView.animate()
|
||||||
|
.setDuration(mLongDuration)
|
||||||
|
.setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
|
||||||
|
.translationYBy(mCardYDelta)
|
||||||
|
.alpha(0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reset() {
|
public void reset() {
|
||||||
mRecentsTvCard.setAlpha(1.0f);
|
mInfoField.setAlpha(1.0f);
|
||||||
mRecentsTvCard.setTranslationY(0);
|
mInfoField.setTranslationY(0);
|
||||||
mRecentsTvCard.animate().setListener(null);
|
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++) {
|
for(int i = 0; i < mGridView.getChildCount(); i++) {
|
||||||
TaskCardView view = (TaskCardView) mGridView.getChildAt(i);
|
TaskCardView view = (TaskCardView) mGridView.getChildAt(i);
|
||||||
view.setTranslationX(-mTranslationX);
|
view.setTranslationX(-mTranslationX);
|
||||||
view.setAlpha(0.0f);
|
|
||||||
view.animate()
|
view.animate()
|
||||||
.alpha(1.0f)
|
.alpha(1.0f)
|
||||||
.translationX(0)
|
.translationX(0)
|
||||||
@@ -76,7 +75,7 @@ public class HomeRecentsEnterExitAnimationHolder {
|
|||||||
public void setEnterFromHomeStartingAnimationValues() {
|
public void setEnterFromHomeStartingAnimationValues() {
|
||||||
for(int i = 0; i < mGridView.getChildCount(); i++) {
|
for(int i = 0; i < mGridView.getChildCount(); i++) {
|
||||||
TaskCardView view = (TaskCardView) mGridView.getChildAt(i);
|
TaskCardView view = (TaskCardView) mGridView.getChildAt(i);
|
||||||
view.setTranslationX(-mTranslationX);
|
view.setTranslationX(0);
|
||||||
view.setAlpha(0.0f);
|
view.setAlpha(0.0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import android.view.animation.AccelerateDecelerateInterpolator;
|
|||||||
import android.view.animation.Interpolator;
|
import android.view.animation.Interpolator;
|
||||||
|
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
|
import com.android.systemui.recents.tv.views.TaskCardView;
|
||||||
|
|
||||||
public class ViewFocusAnimator implements View.OnFocusChangeListener {
|
public class ViewFocusAnimator implements View.OnFocusChangeListener {
|
||||||
private final float mUnselectedScale;
|
private final float mUnselectedScale;
|
||||||
@@ -94,10 +95,13 @@ public class ViewFocusAnimator implements View.OnFocusChangeListener {
|
|||||||
|
|
||||||
mTargetView.setScaleX(scale);
|
mTargetView.setScaleX(scale);
|
||||||
mTargetView.setScaleY(scale);
|
mTargetView.setScaleY(scale);
|
||||||
mTargetView.setZ(z);
|
|
||||||
|
|
||||||
mTargetView.setPadding((int) spacing, mTargetView.getPaddingTop(),
|
mTargetView.setPadding((int) spacing, mTargetView.getPaddingTop(),
|
||||||
(int) spacing, mTargetView.getPaddingBottom());
|
(int) spacing, mTargetView.getPaddingBottom());
|
||||||
|
|
||||||
|
if (mTargetView instanceof TaskCardView) {
|
||||||
|
((TaskCardView) mTargetView).getThumbnailView().setZ(z);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public float getFocusProgress() {
|
public float getFocusProgress() {
|
||||||
|
|||||||
@@ -16,7 +16,6 @@
|
|||||||
package com.android.systemui.recents.tv.views;
|
package com.android.systemui.recents.tv.views;
|
||||||
|
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.app.Activity;
|
|
||||||
import android.app.ActivityOptions;
|
import android.app.ActivityOptions;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ package com.android.systemui.recents.tv.views;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.support.v7.widget.DefaultItemAnimator;
|
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.util.Log;
|
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.EventBus;
|
||||||
import com.android.systemui.recents.events.activity.CancelEnterRecentsWindowAnimationEvent;
|
import com.android.systemui.recents.events.activity.CancelEnterRecentsWindowAnimationEvent;
|
||||||
import com.android.systemui.recents.events.activity.DismissRecentsToHomeAnimationStarted;
|
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.activity.LaunchTvTaskEvent;
|
||||||
import com.android.systemui.recents.events.component.RecentsVisibilityChangedEvent;
|
import com.android.systemui.recents.events.component.RecentsVisibilityChangedEvent;
|
||||||
import com.android.systemui.recents.misc.SystemServicesProxy;
|
import com.android.systemui.recents.misc.SystemServicesProxy;
|
||||||
|
|||||||
@@ -17,10 +17,15 @@ package com.android.systemui.recents.tv.views;
|
|||||||
|
|
||||||
import android.animation.Animator;
|
import android.animation.Animator;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
|
import android.content.res.Configuration;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.Point;
|
import android.graphics.Point;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
|
import android.util.Log;
|
||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
import android.view.Display;
|
import android.view.Display;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
@@ -38,7 +43,8 @@ import com.android.systemui.recents.model.Task;
|
|||||||
|
|
||||||
public class TaskCardView extends LinearLayout {
|
public class TaskCardView extends LinearLayout {
|
||||||
|
|
||||||
private ImageView mThumbnailView;
|
private static final String TAG = "TaskCardView";
|
||||||
|
private View mThumbnailView;
|
||||||
private TextView mTitleTextView;
|
private TextView mTitleTextView;
|
||||||
private ImageView mBadgeView;
|
private ImageView mBadgeView;
|
||||||
private Task mTask;
|
private Task mTask;
|
||||||
@@ -58,26 +64,28 @@ public class TaskCardView extends LinearLayout {
|
|||||||
|
|
||||||
public TaskCardView(Context context, AttributeSet attrs, int defStyleAttr) {
|
public TaskCardView(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||||
super(context, attrs, defStyleAttr);
|
super(context, attrs, defStyleAttr);
|
||||||
mViewFocusAnimator = new ViewFocusAnimator(this);
|
|
||||||
mDismissState = false;
|
mDismissState = false;
|
||||||
|
Configuration config = getResources().getConfiguration();
|
||||||
|
setLayoutDirection(config.getLayoutDirection());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onFinishInflate() {
|
protected void onFinishInflate() {
|
||||||
super.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);
|
mTitleTextView = (TextView) findViewById(R.id.card_title_text);
|
||||||
mBadgeView = (ImageView) findViewById(R.id.card_extra_badge);
|
mBadgeView = (ImageView) findViewById(R.id.card_extra_badge);
|
||||||
mDismissAnimationsHolder = new DismissAnimationsHolder(this);
|
mDismissAnimationsHolder = new DismissAnimationsHolder(this);
|
||||||
View title = findViewById(R.id.card_info_field);
|
View title = findViewById(R.id.card_info_field);
|
||||||
mRecentsRowFocusAnimationHolder = new RecentsRowFocusAnimationHolder(this, title);
|
mRecentsRowFocusAnimationHolder = new RecentsRowFocusAnimationHolder(this, title);
|
||||||
|
mViewFocusAnimator = new ViewFocusAnimator(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void init(Task task) {
|
public void init(Task task) {
|
||||||
mTask = task;
|
mTask = task;
|
||||||
mThumbnailView.setImageBitmap(task.thumbnail);
|
|
||||||
mTitleTextView.setText(task.title);
|
mTitleTextView.setText(task.title);
|
||||||
mBadgeView.setImageDrawable(task.icon);
|
mBadgeView.setImageDrawable(task.icon);
|
||||||
|
setThumbnailView();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task getTask() {
|
public Task getTask() {
|
||||||
@@ -238,4 +246,64 @@ public class TaskCardView extends LinearLayout {
|
|||||||
mRecentsRowFocusAnimationHolder.reset();
|
mRecentsRowFocusAnimationHolder.reset();
|
||||||
mDismissAnimationsHolder.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.model.TaskStack.TaskStackCallbacks;
|
||||||
import com.android.systemui.recents.views.AnimationProps;
|
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.
|
* 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.EventBus;
|
||||||
import com.android.systemui.recents.events.activity.LaunchTvTaskEvent;
|
import com.android.systemui.recents.events.activity.LaunchTvTaskEvent;
|
||||||
import com.android.systemui.recents.events.ui.DeleteTaskDataEvent;
|
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.model.Task;
|
||||||
import com.android.systemui.recents.views.AnimationProps;
|
import com.android.systemui.recents.views.AnimationProps;
|
||||||
|
|
||||||
@@ -47,6 +46,7 @@ public class TaskStackHorizontalViewAdapter extends
|
|||||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
|
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
|
||||||
private TaskCardView mTaskCardView;
|
private TaskCardView mTaskCardView;
|
||||||
private Task mTask;
|
private Task mTask;
|
||||||
|
private boolean mShouldReset;
|
||||||
public ViewHolder(View v) {
|
public ViewHolder(View v) {
|
||||||
super(v);
|
super(v);
|
||||||
if(v instanceof TaskCardView) {
|
if(v instanceof TaskCardView) {
|
||||||
@@ -69,7 +69,6 @@ public class TaskStackHorizontalViewAdapter extends
|
|||||||
} else {
|
} else {
|
||||||
EventBus.getDefault().send(new LaunchTvTaskEvent(mTaskCardView, mTask,
|
EventBus.getDefault().send(new LaunchTvTaskEvent(mTaskCardView, mTask,
|
||||||
null, INVALID_STACK_ID));
|
null, INVALID_STACK_ID));
|
||||||
((Activity) (v.getContext())).finish();
|
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.e(TAG, v.getContext()
|
Log.e(TAG, v.getContext()
|
||||||
@@ -89,6 +88,7 @@ public class TaskStackHorizontalViewAdapter extends
|
|||||||
public void onAnimationEnd(Animator animation) {
|
public void onAnimationEnd(Animator animation) {
|
||||||
removeAt(position);
|
removeAt(position);
|
||||||
EventBus.getDefault().send(new DeleteTaskDataEvent(task));
|
EventBus.getDefault().send(new DeleteTaskDataEvent(task));
|
||||||
|
mShouldReset = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -114,9 +114,9 @@ public class TaskStackHorizontalViewAdapter extends
|
|||||||
@Override
|
@Override
|
||||||
public TaskStackHorizontalViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
|
public TaskStackHorizontalViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
|
||||||
int viewType) {
|
int viewType) {
|
||||||
View view = LayoutInflater.from(parent.getContext())
|
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
|
||||||
.inflate(R.layout.recents_tv_task_card_view, parent, false);
|
ViewHolder viewHolder = new ViewHolder(
|
||||||
ViewHolder viewHolder = new ViewHolder(view);
|
inflater.inflate(R.layout.recents_tv_task_card_view, parent, false));
|
||||||
return viewHolder;
|
return viewHolder;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -127,7 +127,12 @@ public class TaskStackHorizontalViewAdapter extends
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onViewDetachedFromWindow(ViewHolder holder) {
|
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
|
@Override
|
||||||
@@ -157,6 +162,7 @@ public class TaskStackHorizontalViewAdapter extends
|
|||||||
return (position >= 0) ? position : 0;
|
return (position >= 0) ? position : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void setTaskStackHorizontalGridView(TaskStackHorizontalGridView gridView) {
|
public void setTaskStackHorizontalGridView(TaskStackHorizontalGridView gridView) {
|
||||||
mGridView = gridView;
|
mGridView = gridView;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user