diff options
Diffstat (limited to 'packages/SystemUI')
80 files changed, 848 insertions, 428 deletions
diff --git a/packages/SystemUI/res/drawable-hdpi/recents_bg_protect_tile.png b/packages/SystemUI/res/drawable-hdpi/recents_bg_protect_tile.png Binary files differdeleted file mode 100644 index 87c7be6..0000000 --- a/packages/SystemUI/res/drawable-hdpi/recents_bg_protect_tile.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/recents_blue_glow.9.png b/packages/SystemUI/res/drawable-hdpi/recents_blue_glow.9.png Binary files differindex 4f4ae78..4362836 100644 --- a/packages/SystemUI/res/drawable-hdpi/recents_blue_glow.9.png +++ b/packages/SystemUI/res/drawable-hdpi/recents_blue_glow.9.png diff --git a/packages/SystemUI/res/drawable-hdpi/recents_callout_line.9.png b/packages/SystemUI/res/drawable-hdpi/recents_callout_line.9.png Binary files differnew file mode 100644 index 0000000..335d5a8 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/recents_callout_line.9.png diff --git a/packages/SystemUI/res/drawable-hdpi/recents_callout_line.png b/packages/SystemUI/res/drawable-hdpi/recents_callout_line.png Binary files differdeleted file mode 100644 index 5f4c035..0000000 --- a/packages/SystemUI/res/drawable-hdpi/recents_callout_line.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/recents_thumbnail_bg.9.png b/packages/SystemUI/res/drawable-hdpi/recents_thumbnail_bg.9.png Binary files differnew file mode 100644 index 0000000..1ad16f7 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/recents_thumbnail_bg.9.png diff --git a/packages/SystemUI/res/drawable-hdpi/recents_thumbnail_bg.png b/packages/SystemUI/res/drawable-hdpi/recents_thumbnail_bg.png Binary files differdeleted file mode 100644 index 23aabce..0000000 --- a/packages/SystemUI/res/drawable-hdpi/recents_thumbnail_bg.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/recents_thumbnail_bg_press.9.png b/packages/SystemUI/res/drawable-hdpi/recents_thumbnail_bg_press.9.png Binary files differnew file mode 100644 index 0000000..6e806ee --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/recents_thumbnail_bg_press.9.png diff --git a/packages/SystemUI/res/drawable-hdpi/recents_thumbnail_bg_press.png b/packages/SystemUI/res/drawable-hdpi/recents_thumbnail_bg_press.png Binary files differdeleted file mode 100644 index 0b0765b..0000000 --- a/packages/SystemUI/res/drawable-hdpi/recents_thumbnail_bg_press.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/app_icon.png b/packages/SystemUI/res/drawable-large-hdpi/app_icon.png Binary files differdeleted file mode 100644 index 52354bd..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/app_icon.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/recents_bg_protect_tile.png b/packages/SystemUI/res/drawable-large-hdpi/recents_bg_protect_tile.png Binary files differdeleted file mode 100644 index ce01276..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/recents_bg_protect_tile.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/recents_blue_glow.9.png b/packages/SystemUI/res/drawable-large-hdpi/recents_blue_glow.9.png Binary files differdeleted file mode 100644 index 1848fcd..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/recents_blue_glow.9.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/recents_callout_line.png b/packages/SystemUI/res/drawable-large-hdpi/recents_callout_line.png Binary files differdeleted file mode 100644 index 61a3f87..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/recents_callout_line.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/recents_thumbnail_bg.png b/packages/SystemUI/res/drawable-large-hdpi/recents_thumbnail_bg.png Binary files differdeleted file mode 100644 index b6aca49..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/recents_thumbnail_bg.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-hdpi/recents_thumbnail_bg_press.png b/packages/SystemUI/res/drawable-large-hdpi/recents_thumbnail_bg_press.png Binary files differdeleted file mode 100644 index 226aaac..0000000 --- a/packages/SystemUI/res/drawable-large-hdpi/recents_thumbnail_bg_press.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/app_icon.png b/packages/SystemUI/res/drawable-large-mdpi/app_icon.png Binary files differdeleted file mode 100644 index 001811f..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/app_icon.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/recents_bg_protect_tile.png b/packages/SystemUI/res/drawable-large-mdpi/recents_bg_protect_tile.png Binary files differdeleted file mode 100644 index 3d0fbf2..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/recents_bg_protect_tile.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/recents_blue_glow.9.png b/packages/SystemUI/res/drawable-large-mdpi/recents_blue_glow.9.png Binary files differdeleted file mode 100644 index 4362836..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/recents_blue_glow.9.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/recents_callout_line.png b/packages/SystemUI/res/drawable-large-mdpi/recents_callout_line.png Binary files differdeleted file mode 100644 index f4ccd7e..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/recents_callout_line.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/recents_thumbnail_bg.png b/packages/SystemUI/res/drawable-large-mdpi/recents_thumbnail_bg.png Binary files differdeleted file mode 100644 index 6392fa1..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/recents_thumbnail_bg.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-large-mdpi/recents_thumbnail_bg_press.png b/packages/SystemUI/res/drawable-large-mdpi/recents_thumbnail_bg_press.png Binary files differdeleted file mode 100644 index f6ee596..0000000 --- a/packages/SystemUI/res/drawable-large-mdpi/recents_thumbnail_bg_press.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/recents_bg_protect_tile.png b/packages/SystemUI/res/drawable-mdpi/recents_bg_protect_tile.png Binary files differdeleted file mode 100644 index 87c7be6..0000000 --- a/packages/SystemUI/res/drawable-mdpi/recents_bg_protect_tile.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/recents_blue_glow.9.png b/packages/SystemUI/res/drawable-mdpi/recents_blue_glow.9.png Binary files differindex 4f4ae78..4362836 100644 --- a/packages/SystemUI/res/drawable-mdpi/recents_blue_glow.9.png +++ b/packages/SystemUI/res/drawable-mdpi/recents_blue_glow.9.png diff --git a/packages/SystemUI/res/drawable-mdpi/recents_callout_line.9.png b/packages/SystemUI/res/drawable-mdpi/recents_callout_line.9.png Binary files differnew file mode 100644 index 0000000..724a5cd --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/recents_callout_line.9.png diff --git a/packages/SystemUI/res/drawable-mdpi/recents_callout_line.png b/packages/SystemUI/res/drawable-mdpi/recents_callout_line.png Binary files differdeleted file mode 100644 index 5f4c035..0000000 --- a/packages/SystemUI/res/drawable-mdpi/recents_callout_line.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/recents_thumbnail_bg.9.png b/packages/SystemUI/res/drawable-mdpi/recents_thumbnail_bg.9.png Binary files differnew file mode 100644 index 0000000..82ba091 --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/recents_thumbnail_bg.9.png diff --git a/packages/SystemUI/res/drawable-mdpi/recents_thumbnail_bg.png b/packages/SystemUI/res/drawable-mdpi/recents_thumbnail_bg.png Binary files differdeleted file mode 100644 index 23aabce..0000000 --- a/packages/SystemUI/res/drawable-mdpi/recents_thumbnail_bg.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/recents_thumbnail_bg_press.9.png b/packages/SystemUI/res/drawable-mdpi/recents_thumbnail_bg_press.9.png Binary files differnew file mode 100644 index 0000000..7376085 --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/recents_thumbnail_bg_press.9.png diff --git a/packages/SystemUI/res/drawable-mdpi/recents_thumbnail_bg_press.png b/packages/SystemUI/res/drawable-mdpi/recents_thumbnail_bg_press.png Binary files differdeleted file mode 100644 index 0b0765b..0000000 --- a/packages/SystemUI/res/drawable-mdpi/recents_thumbnail_bg_press.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/recents_blue_glow.9.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/recents_blue_glow.9.png Binary files differnew file mode 100644 index 0000000..4ac131a --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/recents_blue_glow.9.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_blue_glow.9.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_blue_glow.9.png Binary files differindex 4f4ae78..4362836 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_blue_glow.9.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_blue_glow.9.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_callout_line.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_callout_line.png Binary files differdeleted file mode 100644 index 5f4c035..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_callout_line.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_thumbnail_bg.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_thumbnail_bg.png Binary files differdeleted file mode 100644 index 87a67c9..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_thumbnail_bg.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_thumbnail_bg_press.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_thumbnail_bg_press.png Binary files differdeleted file mode 100644 index a1c39e6..0000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_thumbnail_bg_press.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/recents_bg_protect_tile.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/recents_bg_protect_tile.png Binary files differnew file mode 100644 index 0000000..59908ad --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/recents_bg_protect_tile.png diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/recents_blue_glow.9.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/recents_blue_glow.9.png Binary files differnew file mode 100644 index 0000000..3938502 --- /dev/null +++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/recents_blue_glow.9.png diff --git a/packages/SystemUI/res/drawable-xhdpi/recents_blue_glow.9.png b/packages/SystemUI/res/drawable-xhdpi/recents_blue_glow.9.png Binary files differnew file mode 100644 index 0000000..e1e08c6 --- /dev/null +++ b/packages/SystemUI/res/drawable-xhdpi/recents_blue_glow.9.png diff --git a/packages/SystemUI/res/drawable-xhdpi/recents_callout_line.9.png b/packages/SystemUI/res/drawable-xhdpi/recents_callout_line.9.png Binary files differnew file mode 100644 index 0000000..1bd018a --- /dev/null +++ b/packages/SystemUI/res/drawable-xhdpi/recents_callout_line.9.png diff --git a/packages/SystemUI/res/drawable-xhdpi/recents_thumbnail_bg.9.png b/packages/SystemUI/res/drawable-xhdpi/recents_thumbnail_bg.9.png Binary files differnew file mode 100644 index 0000000..0352aca --- /dev/null +++ b/packages/SystemUI/res/drawable-xhdpi/recents_thumbnail_bg.9.png diff --git a/packages/SystemUI/res/drawable-xhdpi/recents_thumbnail_bg_press.9.png b/packages/SystemUI/res/drawable-xhdpi/recents_thumbnail_bg_press.9.png Binary files differnew file mode 100644 index 0000000..507ee22 --- /dev/null +++ b/packages/SystemUI/res/drawable-xhdpi/recents_thumbnail_bg_press.9.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/app_icon.png b/packages/SystemUI/res/drawable-xlarge-hdpi/app_icon.png Binary files differdeleted file mode 100644 index 52354bd..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/app_icon.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/recents_bg_protect_tile.png b/packages/SystemUI/res/drawable-xlarge-hdpi/recents_bg_protect_tile.png Binary files differdeleted file mode 100644 index ce01276..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/recents_bg_protect_tile.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/recents_blue_glow.9.png b/packages/SystemUI/res/drawable-xlarge-hdpi/recents_blue_glow.9.png Binary files differdeleted file mode 100644 index 1848fcd..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/recents_blue_glow.9.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/recents_callout_line.png b/packages/SystemUI/res/drawable-xlarge-hdpi/recents_callout_line.png Binary files differdeleted file mode 100644 index 846bc49..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/recents_callout_line.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/recents_thumbnail_bg.png b/packages/SystemUI/res/drawable-xlarge-hdpi/recents_thumbnail_bg.png Binary files differdeleted file mode 100644 index a983e12..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/recents_thumbnail_bg.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/recents_thumbnail_bg_press.png b/packages/SystemUI/res/drawable-xlarge-hdpi/recents_thumbnail_bg_press.png Binary files differdeleted file mode 100644 index 7c6e44e..0000000 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/recents_thumbnail_bg_press.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/app_icon.png b/packages/SystemUI/res/drawable-xlarge-mdpi/app_icon.png Binary files differdeleted file mode 100644 index 001811f..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/app_icon.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/recents_bg_protect_tile.png b/packages/SystemUI/res/drawable-xlarge-mdpi/recents_bg_protect_tile.png Binary files differdeleted file mode 100644 index 3d0fbf2..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/recents_bg_protect_tile.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/recents_blue_glow.9.png b/packages/SystemUI/res/drawable-xlarge-mdpi/recents_blue_glow.9.png Binary files differdeleted file mode 100644 index 4362836..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/recents_blue_glow.9.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/recents_callout_line.png b/packages/SystemUI/res/drawable-xlarge-mdpi/recents_callout_line.png Binary files differdeleted file mode 100644 index f4ccd7e..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/recents_callout_line.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/recents_thumbnail_bg.png b/packages/SystemUI/res/drawable-xlarge-mdpi/recents_thumbnail_bg.png Binary files differdeleted file mode 100644 index 6392fa1..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/recents_thumbnail_bg.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/recents_thumbnail_bg_press.png b/packages/SystemUI/res/drawable-xlarge-mdpi/recents_thumbnail_bg_press.png Binary files differdeleted file mode 100644 index f6ee596..0000000 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/recents_thumbnail_bg_press.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable/recents_thumbnail_overlay.xml b/packages/SystemUI/res/drawable/recents_thumbnail_overlay.xml index 200bac4..6d05095 100644 --- a/packages/SystemUI/res/drawable/recents_thumbnail_overlay.xml +++ b/packages/SystemUI/res/drawable/recents_thumbnail_overlay.xml @@ -15,5 +15,6 @@ --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/recents_thumbnail_bg_press" android:state_pressed="true" /> + <item android:drawable="@drawable/recents_thumbnail_bg" android:state_activated="true" /> <item android:drawable="@*android:color/transparent"/> </selector> diff --git a/packages/SystemUI/res/layout-land/status_bar_recent_item.xml b/packages/SystemUI/res/layout-land/status_bar_recent_item.xml index 16008a3..e99888c 100644 --- a/packages/SystemUI/res/layout-land/status_bar_recent_item.xml +++ b/packages/SystemUI/res/layout-land/status_bar_recent_item.xml @@ -19,70 +19,74 @@ --> <!-- android:background="@drawable/status_bar_closed_default_background" --> -<RelativeLayout +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_height="wrap_content" - android:layout_width="@dimen/status_bar_recents_thumbnail_view_width"> + android:layout_height="match_parent" + android:layout_width="wrap_content"> - <FrameLayout android:id="@+id/app_thumbnail" - android:layout_width="wrap_content" + <RelativeLayout android:id="@+id/recent_item" + android:layout_gravity="bottom" android:layout_height="wrap_content" - android:layout_alignParentLeft="true" - android:layout_alignParentTop="true" - android:layout_marginLeft="@dimen/status_bar_recents_thumbnail_left_margin" - android:scaleType="center" - android:clickable="true" - android:background="@drawable/recents_thumbnail_bg" - android:foreground="@drawable/recents_thumbnail_overlay"> - <ImageView android:id="@+id/app_thumbnail_image" - android:layout_width="match_parent" - android:layout_height="match_parent" + android:layout_width="wrap_content" + android:paddingBottom="@*android:dimen/status_bar_height"> + + <FrameLayout android:id="@+id/app_thumbnail" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentLeft="true" + android:layout_alignParentTop="true" + android:layout_marginLeft="@dimen/status_bar_recents_thumbnail_left_margin" + android:scaleType="center" + android:clickable="true" + android:background="@drawable/recents_thumbnail_overlay"> + <ImageView android:id="@+id/app_thumbnail_image" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="invisible" + /> + </FrameLayout> + + <ImageView android:id="@+id/app_icon" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignLeft="@id/app_thumbnail" + android:layout_alignTop="@id/app_thumbnail" + android:layout_marginTop="@dimen/status_bar_recents_app_icon_top_margin" + android:layout_marginLeft="@dimen/status_bar_recents_app_icon_left_margin" + android:maxWidth="@dimen/status_bar_recents_app_icon_max_width" + android:maxHeight="@dimen/status_bar_recents_app_icon_max_height" + android:adjustViewBounds="true" android:visibility="invisible" /> - </FrameLayout> - - <ImageView android:id="@+id/app_icon" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignLeft="@id/app_thumbnail" - android:layout_alignTop="@id/app_thumbnail" - android:layout_marginTop="@dimen/status_bar_recents_app_icon_top_margin" - android:layout_marginLeft="@dimen/status_bar_recents_app_icon_left_margin" - android:maxWidth="@dimen/status_bar_recents_thumbnail_max_width" - android:maxHeight="@dimen/status_bar_recents_thumbnail_max_height" - android:adjustViewBounds="true" - android:visibility="invisible" - /> - <TextView android:id="@+id/app_label" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:textSize="@dimen/status_bar_recents_app_label_text_size" - android:fadingEdge="horizontal" - android:fadingEdgeLength="@dimen/status_bar_recents_fading_edge_length" - android:scrollHorizontally="true" - android:layout_alignLeft="@id/app_thumbnail" - android:layout_below="@id/app_thumbnail" - android:layout_marginTop="@dimen/status_bar_recents_text_description_padding" - android:layout_marginLeft="@dimen/recents_thumbnail_bg_padding_left" - android:singleLine="true" - android:ellipsize="marquee" - android:visibility="invisible" - /> + <TextView android:id="@+id/app_label" + android:layout_width="@dimen/status_bar_recents_app_label_width" + android:layout_height="wrap_content" + android:textSize="@dimen/status_bar_recents_app_label_text_size" + android:fadingEdge="horizontal" + android:fadingEdgeLength="@dimen/status_bar_recents_fading_edge_length" + android:scrollHorizontally="true" + android:layout_alignLeft="@id/app_thumbnail" + android:layout_below="@id/app_thumbnail" + android:layout_marginTop="@dimen/status_bar_recents_text_description_padding" + android:singleLine="true" + android:ellipsize="marquee" + android:visibility="invisible" + /> - <TextView android:id="@+id/app_description" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:textSize="@dimen/status_bar_recents_app_description_text_size" - android:fadingEdge="horizontal" - android:fadingEdgeLength="@dimen/status_bar_recents_fading_edge_length" - android:scrollHorizontally="true" - android:layout_alignLeft="@id/app_thumbnail" - android:layout_below="@id/app_label" - android:layout_marginTop="@dimen/status_bar_recents_text_description_padding" - android:layout_marginLeft="@dimen/recents_thumbnail_bg_padding_left" - android:singleLine="true" - android:ellipsize="marquee" - /> + <TextView android:id="@+id/app_description" + android:layout_width="@dimen/status_bar_recents_app_label_width" + android:layout_height="wrap_content" + android:textSize="@dimen/status_bar_recents_app_description_text_size" + android:fadingEdge="horizontal" + android:fadingEdgeLength="@dimen/status_bar_recents_fading_edge_length" + android:scrollHorizontally="true" + android:layout_alignLeft="@id/app_thumbnail" + android:layout_below="@id/app_label" + android:layout_marginTop="@dimen/status_bar_recents_text_description_padding" + android:singleLine="true" + android:ellipsize="marquee" + /> -</RelativeLayout> + </RelativeLayout> +</FrameLayout> diff --git a/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml b/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml index 20ef7cf..f84cc19 100644 --- a/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml +++ b/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml @@ -30,13 +30,12 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentBottom="true" - android:paddingBottom="@*android:dimen/status_bar_height" android:clipToPadding="false" android:clipChildren="false"> <LinearLayout android:id="@+id/recents_glow" android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:layout_height="match_parent" android:layout_gravity="bottom|right" android:orientation="horizontal" android:clipToPadding="false" @@ -44,7 +43,7 @@ > <com.android.systemui.recent.RecentsHorizontalScrollView android:id="@+id/recents_container" android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:layout_height="match_parent" android:layout_marginRight="@dimen/status_bar_recents_right_glow_margin" android:divider="@null" android:stackFromBottom="true" @@ -58,7 +57,7 @@ <LinearLayout android:id="@+id/recents_linear_layout" android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:layout_height="match_parent" android:orientation="horizontal" android:clipToPadding="false" android:clipChildren="false"> diff --git a/packages/SystemUI/res/layout-port/status_bar_recent_item.xml b/packages/SystemUI/res/layout-port/status_bar_recent_item.xml index c0fce71..73ca335 100644 --- a/packages/SystemUI/res/layout-port/status_bar_recent_item.xml +++ b/packages/SystemUI/res/layout-port/status_bar_recent_item.xml @@ -19,79 +19,83 @@ --> <!-- android:background="@drawable/status_bar_closed_default_background" --> -<RelativeLayout +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" - android:layout_width="@dimen/status_bar_recents_thumbnail_view_width"> + android:layout_width="match_parent"> - <FrameLayout android:id="@+id/app_thumbnail" - android:layout_width="wrap_content" + <RelativeLayout android:id="@+id/recent_item" android:layout_height="wrap_content" - android:layout_alignParentLeft="true" - android:layout_alignParentTop="true" - android:clickable="true" - android:layout_marginLeft="@dimen/status_bar_recents_thumbnail_left_margin" - android:scaleType="center" - android:background="@drawable/recents_thumbnail_bg" - android:foreground="@drawable/recents_thumbnail_overlay"> - <ImageView android:id="@+id/app_thumbnail_image" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:visibility="invisible" - /> - </FrameLayout> + android:layout_width="match_parent"> - <ImageView android:id="@+id/app_icon" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignLeft="@id/app_thumbnail" - android:layout_alignTop="@id/app_thumbnail" - android:layout_marginLeft="@dimen/status_bar_recents_app_icon_left_margin" - android:layout_marginTop="@dimen/status_bar_recents_app_icon_top_margin" - android:maxWidth="@dimen/status_bar_recents_thumbnail_max_width" - android:maxHeight="@dimen/status_bar_recents_thumbnail_max_height" - android:adjustViewBounds="true" - /> + <FrameLayout android:id="@+id/app_thumbnail" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentLeft="true" + android:layout_alignParentTop="true" + android:clickable="true" + android:layout_marginLeft="@dimen/status_bar_recents_thumbnail_left_margin" + android:scaleType="center" + android:background="@drawable/recents_thumbnail_overlay"> + <ImageView android:id="@+id/app_thumbnail_image" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="invisible" + /> + </FrameLayout> - <TextView android:id="@+id/app_label" - android:layout_width="@dimen/status_bar_recents_app_label_width" - android:layout_height="wrap_content" - android:textSize="@dimen/status_bar_recents_app_label_text_size" - android:fadingEdge="horizontal" - android:fadingEdgeLength="@dimen/status_bar_recents_fading_edge_length" - android:scrollHorizontally="true" - android:layout_alignParentLeft="true" - android:layout_alignTop="@id/app_icon" - android:layout_marginLeft="@dimen/status_bar_recents_app_label_left_margin" - android:singleLine="true" - android:ellipsize="marquee" - /> + <ImageView android:id="@+id/app_icon" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignLeft="@id/app_thumbnail" + android:layout_alignTop="@id/app_thumbnail" + android:layout_marginLeft="@dimen/status_bar_recents_app_icon_left_margin" + android:layout_marginTop="@dimen/status_bar_recents_app_icon_top_margin" + android:maxWidth="@dimen/status_bar_recents_app_icon_max_width" + android:maxHeight="@dimen/status_bar_recents_app_icon_max_height" + android:adjustViewBounds="true" + /> - <View android:id="@+id/recents_callout_line" - android:layout_width="@dimen/status_bar_recents_app_label_width" - android:layout_height="1dip" - android:layout_alignParentLeft="true" - android:layout_marginLeft="@dimen/status_bar_recents_app_label_left_margin" - android:layout_toLeftOf="@id/app_thumbnail" - android:layout_below="@id/app_label" - android:layout_marginRight="3dip" - android:layout_marginTop="3dip" - android:background="@drawable/recents_callout_line" - /> + <TextView android:id="@+id/app_label" + android:layout_width="@dimen/status_bar_recents_app_label_width" + android:layout_height="wrap_content" + android:textSize="@dimen/status_bar_recents_app_label_text_size" + android:fadingEdge="horizontal" + android:fadingEdgeLength="@dimen/status_bar_recents_fading_edge_length" + android:scrollHorizontally="true" + android:layout_alignParentLeft="true" + android:layout_alignTop="@id/app_icon" + android:layout_marginLeft="@dimen/status_bar_recents_app_label_left_margin" + android:singleLine="true" + android:ellipsize="marquee" + /> - <TextView android:id="@+id/app_description" - android:layout_width="@dimen/status_bar_recents_app_label_width" - android:layout_height="wrap_content" - android:textSize="@dimen/status_bar_recents_app_description_text_size" - android:fadingEdge="horizontal" - android:fadingEdgeLength="@dimen/status_bar_recents_fading_edge_length" - android:scrollHorizontally="true" - android:layout_alignParentLeft="true" - android:layout_marginLeft="@dimen/status_bar_recents_app_label_left_margin" - android:layout_below="@id/recents_callout_line" - android:layout_marginTop="3dip" - android:singleLine="true" - android:ellipsize="marquee" - /> + <View android:id="@+id/recents_callout_line" + android:layout_width="@dimen/status_bar_recents_app_label_width" + android:layout_height="1dip" + android:layout_alignParentLeft="true" + android:layout_marginLeft="@dimen/status_bar_recents_app_label_left_margin" + android:layout_toLeftOf="@id/app_thumbnail" + android:layout_below="@id/app_label" + android:layout_marginRight="3dip" + android:layout_marginTop="3dip" + android:background="@drawable/recents_callout_line" + /> + + <TextView android:id="@+id/app_description" + android:layout_width="@dimen/status_bar_recents_app_label_width" + android:layout_height="wrap_content" + android:textSize="@dimen/status_bar_recents_app_description_text_size" + android:fadingEdge="horizontal" + android:fadingEdgeLength="@dimen/status_bar_recents_fading_edge_length" + android:scrollHorizontally="true" + android:layout_alignParentLeft="true" + android:layout_marginLeft="@dimen/status_bar_recents_app_label_left_margin" + android:layout_below="@id/recents_callout_line" + android:layout_marginTop="3dip" + android:singleLine="true" + android:ellipsize="marquee" + /> -</RelativeLayout> + </RelativeLayout> +</FrameLayout> diff --git a/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml b/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml index c680b8e..dd25cf9 100644 --- a/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml +++ b/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml @@ -40,7 +40,7 @@ android:layout_marginTop="@*android:dimen/status_bar_height"> <com.android.systemui.recent.RecentsVerticalScrollView android:id="@+id/recents_container" - android:layout_width="@dimen/status_bar_recents_width" + android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginRight="0dp" android:divider="@null" @@ -53,7 +53,7 @@ android:clipChildren="false"> <LinearLayout android:id="@+id/recents_linear_layout" - android:layout_width="wrap_content" + android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:clipToPadding="false" diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_recent_item.xml b/packages/SystemUI/res/layout-sw600dp/status_bar_recent_item.xml index 5306508..cab90fd 100644 --- a/packages/SystemUI/res/layout-sw600dp/status_bar_recent_item.xml +++ b/packages/SystemUI/res/layout-sw600dp/status_bar_recent_item.xml @@ -19,21 +19,20 @@ --> <!-- android:background="@drawable/status_bar_closed_default_background" --> -<RelativeLayout +<RelativeLayout android:id="@+id/recent_item" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" - android:layout_width="@dimen/status_bar_recents_thumbnail_view_width"> + android:layout_width="wrap_content"> <FrameLayout android:id="@+id/app_thumbnail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" + android:clickable="true" android:layout_marginLeft="@dimen/status_bar_recents_thumbnail_left_margin" android:scaleType="center" - android:clickable="true" - android:background="@drawable/recents_thumbnail_bg" - android:foreground="@drawable/recents_thumbnail_overlay"> + android:background="@drawable/recents_thumbnail_overlay"> <ImageView android:id="@+id/app_thumbnail_image" android:layout_width="match_parent" android:layout_height="match_parent" @@ -48,8 +47,8 @@ android:layout_alignTop="@id/app_thumbnail" android:layout_marginLeft="@dimen/status_bar_recents_app_icon_left_margin" android:layout_marginTop="@dimen/status_bar_recents_app_icon_top_margin" - android:maxWidth="@dimen/status_bar_recents_thumbnail_max_width" - android:maxHeight="@dimen/status_bar_recents_thumbnail_max_height" + android:maxWidth="@dimen/status_bar_recents_app_icon_max_width" + android:maxHeight="@dimen/status_bar_recents_app_icon_max_height" android:adjustViewBounds="true" /> diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_recent_panel.xml b/packages/SystemUI/res/layout-sw600dp/status_bar_recent_panel.xml index 2c9a152..4ef602e 100644 --- a/packages/SystemUI/res/layout-sw600dp/status_bar_recent_panel.xml +++ b/packages/SystemUI/res/layout-sw600dp/status_bar_recent_panel.xml @@ -47,7 +47,7 @@ android:clipChildren="false" > <com.android.systemui.recent.RecentsVerticalScrollView android:id="@+id/recents_container" - android:layout_width="@dimen/status_bar_recents_width" + android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="@dimen/status_bar_recents_right_glow_margin" android:divider="@null" diff --git a/packages/SystemUI/res/values-hdpi/dimens.xml b/packages/SystemUI/res/values-hdpi/dimens.xml index 287e0d1..6b6fd4d 100644 --- a/packages/SystemUI/res/values-hdpi/dimens.xml +++ b/packages/SystemUI/res/values-hdpi/dimens.xml @@ -16,12 +16,6 @@ */ --> <resources> - <!-- Offsets for rendering thumbnails over drawable recents_thumbnail_bg --> - <dimen name="recents_thumbnail_bg_padding_left">6px</dimen> - <dimen name="recents_thumbnail_bg_padding_top">7px</dimen> - <dimen name="recents_thumbnail_bg_padding_right">6px</dimen> - <dimen name="recents_thumbnail_bg_padding_bottom">6px</dimen> - <!-- thickness (height) of each notification row, including any separators or padding --> <!-- Note: this is 64dip + 1px divider = 97px. --> <dimen name="notification_height">97px</dimen> diff --git a/packages/SystemUI/res/values-land/dimens.xml b/packages/SystemUI/res/values-land/dimens.xml index 3919685..ca74b8b 100644 --- a/packages/SystemUI/res/values-land/dimens.xml +++ b/packages/SystemUI/res/values-land/dimens.xml @@ -20,18 +20,14 @@ <dimen name="navigation_bar_size">@*android:dimen/navigation_bar_width</dimen> <!-- Recent Applications parameters --> - <!-- Width of a recent app view, including all content --> - <dimen name="status_bar_recents_thumbnail_view_width">156dp</dimen> <!-- How far the thumbnail for a recent app appears from left edge --> <dimen name="status_bar_recents_thumbnail_left_margin">8dp</dimen> <!-- How far the thumbnail for a recent app appears from top edge --> <dimen name="status_bar_recents_thumbnail_top_margin">12dp</dimen> - <!-- Width of scrollable area in recents --> - <dimen name="status_bar_recents_width">128dp</dimen> <!-- Padding for text descriptions --> <dimen name="status_bar_recents_text_description_padding">8dp</dimen> <!-- Width of application label text --> - <dimen name="status_bar_recents_app_label_width">97dip</dimen> + <dimen name="status_bar_recents_app_label_width">156dip</dimen> <!-- Left margin of application label text --> <dimen name="status_bar_recents_app_label_left_margin">16dip</dimen> <!-- Margin between recents container and glow on the right --> diff --git a/packages/SystemUI/res/values-mdpi/dimens.xml b/packages/SystemUI/res/values-mdpi/dimens.xml deleted file mode 100644 index 741b75a..0000000 --- a/packages/SystemUI/res/values-mdpi/dimens.xml +++ /dev/null @@ -1,24 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - * Copyright (c) 2011, 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. -*/ ---> -<resources> - <!-- Offsets for rendering thumbnails over drawable recents_thumbnail_bg --> - <dimen name="recents_thumbnail_bg_padding_left">6px</dimen> - <dimen name="recents_thumbnail_bg_padding_top">7px</dimen> - <dimen name="recents_thumbnail_bg_padding_right">6px</dimen> - <dimen name="recents_thumbnail_bg_padding_bottom">6px</dimen> -</resources> diff --git a/packages/SystemUI/res/values-port/dimens.xml b/packages/SystemUI/res/values-port/dimens.xml index 54c25fa..b89a610 100644 --- a/packages/SystemUI/res/values-port/dimens.xml +++ b/packages/SystemUI/res/values-port/dimens.xml @@ -17,18 +17,14 @@ --> <resources> <!-- Recent Applications parameters --> - <!-- Width of a recent app view, including all content --> - <dimen name="status_bar_recents_thumbnail_view_width">156dp</dimen> <!-- How far the thumbnail for a recent app appears from left edge --> <dimen name="status_bar_recents_thumbnail_left_margin">110dp</dimen> - <!-- Width of scrollable area in recents --> - <dimen name="status_bar_recents_width">356dp</dimen> <!-- Padding for text descriptions --> <dimen name="status_bar_recents_text_description_padding">8dp</dimen> <!-- Width of application label text --> <dimen name="status_bar_recents_app_label_width">97dip</dimen> <!-- Left margin of application label text --> - <dimen name="status_bar_recents_app_label_left_margin">16dip</dimen> + <dimen name="status_bar_recents_app_label_left_margin">8dip</dimen> <!-- Margin between recents container and glow on the right --> <dimen name="status_bar_recents_right_glow_margin">100dip</dimen> </resources> diff --git a/packages/SystemUI/res/values-sw600dp/config.xml b/packages/SystemUI/res/values-sw600dp/config.xml new file mode 100644 index 0000000..3e2ec59 --- /dev/null +++ b/packages/SystemUI/res/values-sw600dp/config.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2011, 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. +*/ +--> + +<resources> + + <!-- Whether we're using the tablet-optimized recents interface (we use this + value at runtime for some things) --> + <bool name="config_recents_interface_for_tablets">true</bool> +</resources> diff --git a/packages/SystemUI/res/values-sw600dp/dimens.xml b/packages/SystemUI/res/values-sw600dp/dimens.xml index a5bea5c..fe9245d 100644 --- a/packages/SystemUI/res/values-sw600dp/dimens.xml +++ b/packages/SystemUI/res/values-sw600dp/dimens.xml @@ -30,16 +30,19 @@ <dimen name="panel_float">56dp</dimen> <!-- Recent Applications parameters --> - <!-- Width of a recent app view, including all content --> - <dimen name="status_bar_recents_thumbnail_view_width">156dp</dimen> <!-- How far the thumbnail for a recent app appears from left edge --> - <dimen name="status_bar_recents_thumbnail_left_margin">110dp</dimen> + <dimen name="status_bar_recents_thumbnail_left_margin">121dp</dimen> <!-- Upper width limit for application icon --> - <dimen name="status_bar_recents_thumbnail_max_width">64dp</dimen> + <dimen name="status_bar_recents_app_icon_max_width">64dp</dimen> <!-- Upper height limit for application icon --> - <dimen name="status_bar_recents_thumbnail_max_height">64dp</dimen> - <!-- Width of scrollable area in recents --> - <dimen name="status_bar_recents_width">356dp</dimen> + <dimen name="status_bar_recents_app_icon_max_height">64dp</dimen> + + <!-- Size of application icon --> + <dimen name="status_bar_recents_thumbnail_width">245dp</dimen> + <dimen name="status_bar_recents_thumbnail_height">144dp</dimen> + + <!-- Width of recents panel --> + <dimen name="status_bar_recents_width">600dp</dimen> <!-- Padding for text descriptions --> <dimen name="status_bar_recents_text_description_padding">8dp</dimen> <!-- Size of application label text --> @@ -55,12 +58,6 @@ <!-- Margin between recents container and glow on the right --> <dimen name="status_bar_recents_right_glow_margin">100dip</dimen> - <!-- Offsets for rendering thumbnails over drawable recents_thumbnail_bg --> - <dimen name="recents_thumbnail_bg_padding_left">15px</dimen> - <dimen name="recents_thumbnail_bg_padding_top">8px</dimen> - <dimen name="recents_thumbnail_bg_padding_right">12px</dimen> - <dimen name="recents_thumbnail_bg_padding_bottom">8px</dimen> - <!-- Where to place the app icon over the thumbnail --> <dimen name="status_bar_recents_app_icon_left_margin">13dp</dimen> <dimen name="status_bar_recents_app_icon_top_margin">13dp</dimen> diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml index 5d14fa8..4c222f9 100644 --- a/packages/SystemUI/res/values/colors.xml +++ b/packages/SystemUI/res/values/colors.xml @@ -22,5 +22,6 @@ <drawable name="ticker_background_color">#ff1d1d1d</drawable> <drawable name="status_bar_background">#ff000000</drawable> <drawable name="status_bar_recents_background">#b3000000</drawable> + <drawable name="status_bar_recents_app_thumbnail_background">#88000000</drawable> <drawable name="status_bar_notification_row_background_color">#ff000000</drawable> </resources> diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index d7d7817..4ac89b2 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -21,6 +21,10 @@ for different hardware and product builds. --> <resources> + <!-- Whether we're using the tablet-optimized recents interface (we use this + value at runtime for some things) --> + <bool name="config_recents_interface_for_tablets">false</bool> + <!-- Control whether status bar should distinguish HSPA data icon form UMTS data icon on devices --> <bool name="config_hspa_data_distinguishable">false</bool> diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index f633825..d0ece6c 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -21,17 +21,21 @@ <!-- Recent Applications parameters --> <!-- Upper width limit for application icon --> - <dimen name="status_bar_recents_thumbnail_max_width">64dp</dimen> + <dimen name="status_bar_recents_app_icon_max_width">64dp</dimen> <!-- Upper height limit for application icon --> - <dimen name="status_bar_recents_thumbnail_max_height">64dp</dimen> + <dimen name="status_bar_recents_app_icon_max_height">64dp</dimen> <!-- Where to place the app icon over the thumbnail --> <dimen name="status_bar_recents_app_icon_left_margin">13dp</dimen> <dimen name="status_bar_recents_app_icon_top_margin">13dp</dimen> + <!-- Size of application thumbnail --> + <dimen name="status_bar_recents_thumbnail_width">164dp</dimen> + <dimen name="status_bar_recents_thumbnail_height">164dp</dimen> + <!-- Size of application label text --> - <dimen name="status_bar_recents_app_label_text_size">18dip</dimen> + <dimen name="status_bar_recents_app_label_text_size">16dip</dimen> <!-- Size of application description text --> - <dimen name="status_bar_recents_app_description_text_size">18dip</dimen> + <dimen name="status_bar_recents_app_description_text_size">16dip</dimen> <!-- Size of fading edge for scroll effect --> <dimen name="status_bar_recents_fading_edge_length">20dip</dimen> <!-- Margin between recents container and glow on the right --> diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 7779703..bad7e1f 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -36,10 +36,10 @@ <string name="status_bar_please_disturb_button">Show notifications</string> <!-- Title shown in recents popup for removing an application from the list --> - <string name="status_bar_recent_remove_item_title">Remove</string> + <string name="status_bar_recent_remove_item_title">Remove from list</string> <!-- Title shown in recents popup for inspecting an application's properties --> - <string name="status_bar_recent_inspect_item_title">Inspect</string> + <string name="status_bar_recent_inspect_item_title">App info</string> <!-- The label in the bar at the top of the status bar when there are no notifications showing. [CHAR LIMIT=40]--> diff --git a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java index e7ed052..14743f4 100644 --- a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java +++ b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java @@ -33,20 +33,19 @@ public class SwipeHelper { private static final boolean DEBUG = false; private static final boolean DEBUG_INVALIDATE = false; private static final boolean SLOW_ANIMATIONS = false; // DEBUG; + private static final boolean CONSTRAIN_SWIPE = true; + private static final boolean FADE_OUT_DURING_SWIPE = true; + private static final boolean DISMISS_IF_SWIPED_FAR_ENOUGH = true; public static final int X = 0; public static final int Y = 1; - private boolean CONSTRAIN_SWIPE = true; - private boolean FADE_OUT_DURING_SWIPE = true; - private boolean DISMISS_IF_SWIPED_FAR_ENOUGH = true; - private float SWIPE_ESCAPE_VELOCITY = 100f; // dp/sec private int MAX_ESCAPE_ANIMATION_DURATION = 500; // ms private int MAX_DISMISS_VELOCITY = 1000; // dp/sec private static final int SNAP_ANIM_LEN = SLOW_ANIMATIONS ? 1000 : 250; // ms - public static float ALPHA_FADE_START = 0.8f; // fraction of thumbnail width + public static float ALPHA_FADE_START = 0f; // fraction of thumbnail width // where fade starts static final float ALPHA_FADE_END = 0.5f; // fraction of thumbnail width // beyond which alpha->0 @@ -59,6 +58,8 @@ public class SwipeHelper { private float mInitialTouchPos; private boolean mDragging; private View mCurrView; + private View mCurrAnimView; + private boolean mCanCurrViewBeDimissed; private float mDensityScale; public SwipeHelper(int swipeDirection, Callback callback, float densityScale, @@ -82,8 +83,8 @@ public class SwipeHelper { return mSwipeDirection == X ? ev.getX() : ev.getY(); } - private float getPos(View v) { - return mSwipeDirection == X ? v.getX() : v.getY(); + private float getTranslation(View v) { + return mSwipeDirection == X ? v.getTranslationX() : v.getTranslationY(); } private float getVelocity(VelocityTracker vt) { @@ -115,19 +116,15 @@ public class SwipeHelper { v.getMeasuredHeight(); } - private float getContentSize(View v) { - View content = mCallback.getChildContentView(v); - return getSize(content); - } - - private float getAlphaForOffset(View view, float thumbSize) { - final float fadeSize = ALPHA_FADE_END * thumbSize; + private float getAlphaForOffset(View view) { + float viewSize = getSize(view); + final float fadeSize = ALPHA_FADE_END * viewSize; float result = 1.0f; - float pos = getPos(view); - if (pos >= thumbSize * ALPHA_FADE_START) { - result = 1.0f - (pos - thumbSize * ALPHA_FADE_START) / fadeSize; - } else if (pos < thumbSize * (1.0f - ALPHA_FADE_START)) { - result = 1.0f + (thumbSize * ALPHA_FADE_START + pos) / fadeSize; + float pos = getTranslation(view); + if (pos >= viewSize * ALPHA_FADE_START) { + result = 1.0f - (pos - viewSize * ALPHA_FADE_START) / fadeSize; + } else if (pos < viewSize * (1.0f - ALPHA_FADE_START)) { + result = 1.0f + (viewSize * ALPHA_FADE_START + pos) / fadeSize; } return result; } @@ -168,6 +165,8 @@ public class SwipeHelper { case MotionEvent.ACTION_DOWN: mDragging = false; mCurrView = mCallback.getChildAtPosition(ev); + mCurrAnimView = mCallback.getChildContentView(mCurrView); + mCanCurrViewBeDimissed = mCallback.canChildBeDismissed(mCurrView); mVelocityTracker.clear(); mVelocityTracker.addMovement(ev); mInitialTouchPos = getPos(ev); @@ -180,21 +179,24 @@ public class SwipeHelper { if (Math.abs(delta) > mPagingTouchSlop) { mCallback.onBeginDrag(mCurrView); mDragging = true; - mInitialTouchPos = getPos(ev) - getPos(mCurrView); + mInitialTouchPos = getPos(ev) - getTranslation(mCurrAnimView); } } break; case MotionEvent.ACTION_UP: mDragging = false; mCurrView = null; + mCurrAnimView = null; break; } return mDragging; } - public void dismissChild(final View animView, float velocity) { + public void dismissChild(final View view, float velocity) { + final View animView = mCallback.getChildContentView(view); + final boolean canAnimViewBeDismissed = mCallback.canChildBeDismissed(view); float newPos; - if (velocity < 0 || (velocity == 0 && getPos(animView) < 0)) { + if (velocity < 0 || (velocity == 0 && getTranslation(animView) < 0)) { newPos = -getSize(animView); } else { newPos = getSize(animView); @@ -202,7 +204,7 @@ public class SwipeHelper { int duration = MAX_ESCAPE_ANIMATION_DURATION; if (velocity != 0) { duration = Math.min(duration, - (int) (Math.abs(newPos - getPos(animView)) * 1000f / Math + (int) (Math.abs(newPos - getTranslation(animView)) * 1000f / Math .abs(velocity))); } ObjectAnimator anim = createTranslationAnimation(animView, newPos); @@ -216,17 +218,17 @@ public class SwipeHelper { } public void onAnimationEnd(Animator animation) { - mCallback.onChildDismissed(animView); + mCallback.onChildDismissed(view); } public void onAnimationCancel(Animator animation) { - mCallback.onChildDismissed(animView); + mCallback.onChildDismissed(view); } }); anim.addUpdateListener(new AnimatorUpdateListener() { public void onAnimationUpdate(ValueAnimator animation) { - if (FADE_OUT_DURING_SWIPE) { - animView.setAlpha(getAlphaForOffset(animView, getContentSize(animView))); + if (FADE_OUT_DURING_SWIPE && canAnimViewBeDismissed) { + animView.setAlpha(getAlphaForOffset(animView)); } invalidateGlobalRegion(animView); } @@ -234,14 +236,16 @@ public class SwipeHelper { anim.start(); } - public void snapChild(final View animView, float velocity) { + public void snapChild(final View view, float velocity) { + final View animView = mCallback.getChildContentView(view); + final boolean canAnimViewBeDismissed = mCallback.canChildBeDismissed(animView); ObjectAnimator anim = createTranslationAnimation(animView, 0); int duration = SNAP_ANIM_LEN; anim.setDuration(duration); anim.addUpdateListener(new AnimatorUpdateListener() { public void onAnimationUpdate(ValueAnimator animation) { - if (FADE_OUT_DURING_SWIPE) { - animView.setAlpha(getAlphaForOffset(animView, getContentSize(animView))); + if (FADE_OUT_DURING_SWIPE && canAnimViewBeDismissed) { + animView.setAlpha(getAlphaForOffset(animView)); } invalidateGlobalRegion(animView); } @@ -264,7 +268,7 @@ public class SwipeHelper { // don't let items that can't be dismissed be dragged more than // maxScrollDistance if (CONSTRAIN_SWIPE && !mCallback.canChildBeDismissed(mCurrView)) { - float size = getSize(mCurrView); + float size = getSize(mCurrAnimView); float maxScrollDistance = 0.15f * size; if (Math.abs(delta) >= size) { delta = delta > 0 ? maxScrollDistance : -maxScrollDistance; @@ -272,9 +276,9 @@ public class SwipeHelper { delta = maxScrollDistance * (float) Math.sin((delta/size)*(Math.PI/2)); } } - setTranslation(mCurrView, delta); - if (FADE_OUT_DURING_SWIPE) { - mCurrView.setAlpha(getAlphaForOffset(mCurrView, getContentSize(mCurrView))); + setTranslation(mCurrAnimView, delta); + if (FADE_OUT_DURING_SWIPE && mCanCurrViewBeDimissed) { + mCurrAnimView.setAlpha(getAlphaForOffset(mCurrAnimView)); } invalidateGlobalRegion(mCurrView); } @@ -290,10 +294,10 @@ public class SwipeHelper { // Decide whether to dismiss the current view boolean childSwipedFarEnough = DISMISS_IF_SWIPED_FAR_ENOUGH && - Math.abs(getPos(mCurrView)) > 0.4 * getSize(mCurrView); + Math.abs(getTranslation(mCurrAnimView)) > 0.4 * getSize(mCurrAnimView); boolean childSwipedFastEnough = (Math.abs(velocity) > escapeVelocity) && (Math.abs(velocity) > Math.abs(perpendicularVelocity)) && - (velocity > 0) == (getPos(mCurrView) > 0); + (velocity > 0) == (getTranslation(mCurrAnimView) > 0); boolean dismissChild = mCallback.canChildBeDismissed(mCurrView) && (childSwipedFastEnough || childSwipedFarEnough); @@ -303,6 +307,7 @@ public class SwipeHelper { dismissChild(mCurrView, childSwipedFastEnough ? velocity : 0f); } else { // snappity + mCallback.onDragCancelled(mCurrView); snapChild(mCurrView, velocity); } } @@ -321,5 +326,7 @@ public class SwipeHelper { void onBeginDrag(View v); void onChildDismissed(View v); + + void onDragCancelled(View v); } } diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsCallback.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsCallback.java index 5609ead..2de4185 100644 --- a/packages/SystemUI/src/com/android/systemui/recent/RecentsCallback.java +++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsCallback.java @@ -27,4 +27,8 @@ public interface RecentsCallback { void handleOnClick(View selectedView); void handleSwipe(View selectedView); void handleLongPress(View selectedView, View anchorView); + void handleShowBackground(boolean show); + + // TODO: find another way to get this info from RecentsPanelView + boolean isRecentsVisible(); } diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java index 8da2db6..85cde7c 100644 --- a/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java +++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java @@ -20,6 +20,7 @@ import android.animation.LayoutTransition; import android.content.Context; import android.content.res.Configuration; import android.database.DataSetObserver; +import android.graphics.Canvas; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; @@ -41,6 +42,8 @@ public class RecentsHorizontalScrollView extends HorizontalScrollView private RecentsCallback mCallback; protected int mLastScrollPosition; private SwipeHelper mSwipeHelper; + private RecentsScrollViewPerformanceHelper mPerformanceHelper; + private OnLongClickListener mOnLongClick = new OnLongClickListener() { public boolean onLongClick(View v) { final View anchorView = v.findViewById(R.id.app_description); @@ -49,15 +52,12 @@ public class RecentsHorizontalScrollView extends HorizontalScrollView } }; - public RecentsHorizontalScrollView(Context context) { - this(context, null); - } - public RecentsHorizontalScrollView(Context context, AttributeSet attrs) { super(context, attrs, 0); float densityScale = getResources().getDisplayMetrics().density; float pagingTouchSlop = ViewConfiguration.get(mContext).getScaledPagingTouchSlop(); mSwipeHelper = new SwipeHelper(SwipeHelper.Y, this, densityScale, pagingTouchSlop); + mPerformanceHelper = RecentsScrollViewPerformanceHelper.create(context, attrs, this, false); } private int scrollPositionOfMostRecent() { @@ -71,7 +71,11 @@ public class RecentsHorizontalScrollView extends HorizontalScrollView view.setLongClickable(true); view.setOnLongClickListener(mOnLongClick); - final View thumbnail = getChildContentView(view); + if (mPerformanceHelper != null) { + mPerformanceHelper.addViewCallback(view); + } + + final View thumbnail = view.findViewById(R.id.app_thumbnail); // thumbnail is set to clickable in the layout file thumbnail.setOnClickListener(new OnClickListener() { public void onClick(View v) { @@ -123,6 +127,11 @@ public class RecentsHorizontalScrollView extends HorizontalScrollView // We do this so the underlying ScrollView knows that it won't get // the chance to intercept events anymore requestDisallowInterceptTouchEvent(true); + v.setActivated(true); + } + + public void onDragCancelled(View v) { + v.setActivated(false); } public View getChildAtPosition(MotionEvent ev) { @@ -139,7 +148,60 @@ public class RecentsHorizontalScrollView extends HorizontalScrollView } public View getChildContentView(View v) { - return v.findViewById(R.id.app_thumbnail); + return v.findViewById(R.id.recent_item); + } + + @Override + protected void onLayout (boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + if (mPerformanceHelper != null) { + mPerformanceHelper.onLayoutCallback(); + } + } + + @Override + public void draw(Canvas canvas) { + super.draw(canvas); + + if (mPerformanceHelper != null) { + int paddingLeft = mPaddingLeft; + final boolean offsetRequired = isPaddingOffsetRequired(); + if (offsetRequired) { + paddingLeft += getLeftPaddingOffset(); + } + + int left = mScrollX + paddingLeft; + int right = left + mRight - mLeft - mPaddingRight - paddingLeft; + int top = mScrollY + getFadeTop(offsetRequired); + int bottom = top + getFadeHeight(offsetRequired); + + if (offsetRequired) { + right += getRightPaddingOffset(); + bottom += getBottomPaddingOffset(); + } + mPerformanceHelper.drawCallback(canvas, + left, right, top, bottom, mScrollX, mScrollY, + 0, 0, + getLeftFadingEdgeStrength(), getRightFadingEdgeStrength()); + } + } + + @Override + public int getVerticalFadingEdgeLength() { + if (mPerformanceHelper != null) { + return mPerformanceHelper.getVerticalFadingEdgeLengthCallback(); + } else { + return super.getVerticalFadingEdgeLength(); + } + } + + @Override + public int getHorizontalFadingEdgeLength() { + if (mPerformanceHelper != null) { + return mPerformanceHelper.getHorizontalFadingEdgeLengthCallback(); + } else { + return super.getHorizontalFadingEdgeLength(); + } } @Override @@ -153,6 +215,14 @@ public class RecentsHorizontalScrollView extends HorizontalScrollView } @Override + public void onAttachedToWindow() { + if (mPerformanceHelper != null) { + mPerformanceHelper.onAttachedToWindowCallback( + mCallback, mLinearLayout, isHardwareAccelerated()); + } + } + + @Override protected void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); float densityScale = getResources().getDisplayMetrics().density; @@ -192,6 +262,12 @@ public class RecentsHorizontalScrollView extends HorizontalScrollView }); } + public void onRecentsVisibilityChanged() { + if (mPerformanceHelper != null) { + mPerformanceHelper.updateShowBackground(); + } + } + @Override protected void onVisibilityChanged(View changedView, int visibility) { super.onVisibilityChanged(changedView, visibility); @@ -220,6 +296,9 @@ public class RecentsHorizontalScrollView extends HorizontalScrollView @Override public void setLayoutTransition(LayoutTransition transition) { + if (mPerformanceHelper != null) { + mPerformanceHelper.setLayoutTransitionCallback(transition); + } // The layout transition applies to our embedded LinearLayout mLinearLayout.setLayoutTransition(transition); } diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsListView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsListView.java deleted file mode 100644 index d8b086b..0000000 --- a/packages/SystemUI/src/com/android/systemui/recent/RecentsListView.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.systemui.recent; - -import android.content.Context; -import android.util.AttributeSet; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.ListView; - -import com.android.systemui.R; - -public class RecentsListView extends ListView { - private int mLastVisiblePosition; - private RecentsCallback mCallback; - - public RecentsListView(Context context) { - this(context, null); - } - - public RecentsListView(Context context, AttributeSet attrs) { - super(context, attrs, 0); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - LayoutInflater inflater = (LayoutInflater) - mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - - View footer = inflater.inflate(R.layout.status_bar_recent_panel_footer, this, false); - setScrollbarFadingEnabled(true); - addFooterView(footer, null, false); - final int leftPadding = mContext.getResources() - .getDimensionPixelOffset(R.dimen.status_bar_recents_thumbnail_left_margin); - setOverScrollEffectPadding(leftPadding, 0); - } - - @Override - protected void onSizeChanged(int w, int h, int oldw, int oldh) { - super.onSizeChanged(w, h, oldw, oldh); - // Keep track of the last visible item in the list so we can restore it - // to the bottom when the orientation changes. - final int childCount = getChildCount(); - if (childCount > 0) { - mLastVisiblePosition = getFirstVisiblePosition() + childCount - 1; - View view = getChildAt(childCount - 1); - final int distanceFromBottom = getHeight() - view.getTop(); - - // This has to happen post-layout, so run it "in the future" - post(new Runnable() { - public void run() { - setSelectionFromTop(mLastVisiblePosition, getHeight() - distanceFromBottom); - } - }); - } - } - - @Override - protected void onVisibilityChanged(View changedView, int visibility) { - super.onVisibilityChanged(changedView, visibility); - // scroll to bottom after reloading - int count = getAdapter().getCount(); - mLastVisiblePosition = count - 1; - if (visibility == View.VISIBLE && changedView == this) { - post(new Runnable() { - public void run() { - setSelection(mLastVisiblePosition); - } - }); - } - } - - public void setCallback(RecentsCallback callback) { - mCallback = callback; - } - -} diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java index 9cc2c29..e59c109 100644 --- a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java @@ -56,7 +56,6 @@ import android.view.View; import android.view.ViewGroup; import android.view.animation.AnimationUtils; import android.widget.AdapterView; -import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.HorizontalScrollView; import android.widget.ImageView; @@ -64,6 +63,7 @@ import android.widget.PopupMenu; import android.widget.RelativeLayout; import android.widget.ScrollView; import android.widget.TextView; +import android.widget.AdapterView.OnItemClickListener; import com.android.systemui.R; import com.android.systemui.statusbar.StatusBar; @@ -73,7 +73,7 @@ import com.android.systemui.statusbar.tablet.TabletStatusBar; public class RecentsPanelView extends RelativeLayout implements OnItemClickListener, RecentsCallback, StatusBarPanel, Animator.AnimatorListener { - static final String TAG = "RecentsListView"; + static final String TAG = "RecentsPanelView"; static final boolean DEBUG = TabletStatusBar.DEBUG || PhoneStatusBar.DEBUG || false; private static final int DISPLAY_TASKS = 20; private static final int MAX_TASKS = DISPLAY_TASKS + 1; // allow extra for non-apps @@ -84,12 +84,8 @@ public class RecentsPanelView extends RelativeLayout private View mRecentsScrim; private View mRecentsGlowView; private ViewGroup mRecentsContainer; - private Bitmap mGlowBitmap; - // TODO: add these widgets attributes to the layout file - private int mGlowBitmapPaddingLeftPx; - private int mGlowBitmapPaddingTopPx; - private int mGlowBitmapPaddingRightPx; - private int mGlowBitmapPaddingBottomPx; + private Bitmap mAppThumbnailBackground; + private boolean mShowing; private Choreographer mChoreo; private View mRecentsDismissButton; @@ -129,7 +125,7 @@ public class RecentsPanelView extends RelativeLayout } public void setThumbnail(Bitmap thumbnail) { - mThumbnail = compositeBitmap(mGlowBitmap, thumbnail); + mThumbnail = compositeBitmap(mAppThumbnailBackground, thumbnail); } public Bitmap getThumbnail() { @@ -178,7 +174,7 @@ public class RecentsPanelView extends RelativeLayout public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { - convertView = mInflater.inflate(R.layout.status_bar_recent_item, null); + convertView = mInflater.inflate(R.layout.status_bar_recent_item, parent, false); holder = new ViewHolder(); holder.thumbnailView = convertView.findViewById(R.id.app_thumbnail); holder.thumbnailViewImage = (ImageView) convertView.findViewById( @@ -247,6 +243,28 @@ public class RecentsPanelView extends RelativeLayout } } + public void hide(boolean animate) { + mShowing = false; + if (!animate) { + setVisibility(View.GONE); + } + if (mBar != null) { + mBar.animateCollapse(); + } + } + + public void handleShowBackground(boolean show) { + if (show) { + mRecentsScrim.setBackgroundResource(R.drawable.status_bar_recents_background); + } else { + mRecentsScrim.setBackgroundDrawable(null); + } + } + + public boolean isRecentsVisible() { + return getVisibility() == VISIBLE; + } + public void onAnimationCancel(Animator animation) { } @@ -315,15 +333,12 @@ public class RecentsPanelView extends RelativeLayout mIconDpi = xlarge ? DisplayMetrics.DENSITY_HIGH : res.getDisplayMetrics().densityDpi; - mGlowBitmap = BitmapFactory.decodeResource(res, R.drawable.recents_thumbnail_bg); - mGlowBitmapPaddingLeftPx = - res.getDimensionPixelSize(R.dimen.recents_thumbnail_bg_padding_left); - mGlowBitmapPaddingTopPx = - res.getDimensionPixelSize(R.dimen.recents_thumbnail_bg_padding_top); - mGlowBitmapPaddingRightPx = - res.getDimensionPixelSize(R.dimen.recents_thumbnail_bg_padding_right); - mGlowBitmapPaddingBottomPx = - res.getDimensionPixelSize(R.dimen.recents_thumbnail_bg_padding_bottom); + int width = (int) res.getDimension(R.dimen.status_bar_recents_thumbnail_width); + int height = (int) res.getDimension(R.dimen.status_bar_recents_thumbnail_height); + int color = res.getColor(R.drawable.status_bar_recents_app_thumbnail_background); + mAppThumbnailBackground = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + Canvas c = new Canvas(mAppThumbnailBackground); + c.drawColor(color); } @Override @@ -332,12 +347,7 @@ public class RecentsPanelView extends RelativeLayout mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mRecentsContainer = (ViewGroup) findViewById(R.id.recents_container); mListAdapter = new ActivityDescriptionAdapter(mContext); - if (mRecentsContainer instanceof RecentsListView) { - RecentsListView listView = (RecentsListView) mRecentsContainer; - listView.setAdapter(mListAdapter); - listView.setOnItemClickListener(this); - listView.setCallback(this); - } else if (mRecentsContainer instanceof RecentsHorizontalScrollView){ + if (mRecentsContainer instanceof RecentsHorizontalScrollView){ RecentsHorizontalScrollView scrollView = (RecentsHorizontalScrollView) mRecentsContainer; scrollView.setAdapter(mListAdapter); @@ -349,7 +359,7 @@ public class RecentsPanelView extends RelativeLayout scrollView.setCallback(this); } else { - throw new IllegalArgumentException("missing RecentsListView/RecentsScrollView"); + throw new IllegalArgumentException("missing Recents[Horizontal]ScrollView"); } @@ -382,6 +392,14 @@ public class RecentsPanelView extends RelativeLayout if (visibility == View.VISIBLE && changedView == this) { refreshApplicationList(); } + + if (mRecentsContainer instanceof RecentsHorizontalScrollView) { + ((RecentsHorizontalScrollView) mRecentsContainer).onRecentsVisibilityChanged(); + } else if (mRecentsContainer instanceof RecentsVerticalScrollView) { + ((RecentsVerticalScrollView) mRecentsContainer).onRecentsVisibilityChanged(); + } else { + throw new IllegalArgumentException("missing Recents[Horizontal]ScrollView"); + } } Drawable getFullResDefaultActivityIcon() { @@ -555,6 +573,9 @@ public class RecentsPanelView extends RelativeLayout mThumbnailLoader = null; } mActivityDescriptions = getRecentTasks(); + for (ActivityDescription ad : mActivityDescriptions) { + ad.setThumbnail(mAppThumbnailBackground); + } mListAdapter.notifyDataSetInvalidated(); if (mActivityDescriptions.size() > 0) { if (DEBUG) Log.v(TAG, "Showing " + mActivityDescriptions.size() + " apps"); @@ -629,14 +650,8 @@ public class RecentsPanelView extends RelativeLayout paint.setAntiAlias(true); paint.setFilterBitmap(true); paint.setAlpha(255); - final int srcWidth = thumbnail.getWidth(); - final int srcHeight = thumbnail.getHeight(); - if (DEBUG) Log.v(TAG, "Source thumb: " + srcWidth + "x" + srcHeight); - canvas.drawBitmap(thumbnail, - new Rect(0, 0, srcWidth-1, srcHeight-1), - new RectF(mGlowBitmapPaddingLeftPx, mGlowBitmapPaddingTopPx, - outBitmap.getWidth() - mGlowBitmapPaddingRightPx, - outBitmap.getHeight() - mGlowBitmapPaddingBottomPx), paint); + canvas.drawBitmap(thumbnail, null, + new RectF(0, 0, outBitmap.getWidth(), outBitmap.getHeight()), paint); canvas.setBitmap(null); } return outBitmap; @@ -649,15 +664,6 @@ public class RecentsPanelView extends RelativeLayout mRecentsGlowView.setVisibility(items > 0 ? View.VISIBLE : View.GONE); } - public void hide(boolean animate) { - if (!animate) { - setVisibility(View.GONE); - } - if (mBar != null) { - mBar.animateCollapse(); - } - } - public void handleOnClick(View view) { ActivityDescription ad = ((ViewHolder) view.getTag()).activityDescription; final Context context = view.getContext(); diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsScrollViewPerformanceHelper.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsScrollViewPerformanceHelper.java new file mode 100644 index 0000000..b7e656e --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsScrollViewPerformanceHelper.java @@ -0,0 +1,304 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.recent; + +import android.animation.LayoutTransition; +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.LinearGradient; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.Shader; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.view.View; +import android.view.ViewConfiguration; +import android.view.ViewGroup; +import android.widget.LinearLayout; + +import com.android.systemui.R; + +public class RecentsScrollViewPerformanceHelper { + public static final boolean OPTIMIZE_SW_RENDERED_RECENTS = true; + public static final boolean USE_DARK_FADE_IN_HW_ACCELERATED_MODE = true; + private View mScrollView; + private LinearLayout mLinearLayout; + private RecentsCallback mCallback; + + private boolean mShowBackground = false; + private int mFadingEdgeLength; + private Drawable.ConstantState mBackgroundDrawable; + private Context mContext; + private boolean mIsVertical; + private boolean mFirstTime = true; + private boolean mSoftwareRendered = false; + private boolean mAttachedToWindow = false; + + public static RecentsScrollViewPerformanceHelper create(Context context, + AttributeSet attrs, View scrollView, boolean isVertical) { + boolean isTablet = context.getResources(). + getBoolean(R.bool.config_recents_interface_for_tablets); + if (!isTablet && (OPTIMIZE_SW_RENDERED_RECENTS || USE_DARK_FADE_IN_HW_ACCELERATED_MODE)) { + return new RecentsScrollViewPerformanceHelper(context, attrs, scrollView, isVertical); + } else { + return null; + } + } + + public RecentsScrollViewPerformanceHelper(Context context, + AttributeSet attrs, View scrollView, boolean isVertical) { + mScrollView = scrollView; + mContext = context; + TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.View); + mFadingEdgeLength = a.getDimensionPixelSize(android.R.styleable.View_fadingEdgeLength, + ViewConfiguration.get(context).getScaledFadingEdgeLength()); + mIsVertical = isVertical; + } + + public void onAttachedToWindowCallback( + RecentsCallback callback, LinearLayout layout, boolean hardwareAccelerated) { + mSoftwareRendered = !hardwareAccelerated; + if ((mSoftwareRendered && OPTIMIZE_SW_RENDERED_RECENTS) + || USE_DARK_FADE_IN_HW_ACCELERATED_MODE) { + mScrollView.setVerticalFadingEdgeEnabled(false); + mScrollView.setHorizontalFadingEdgeEnabled(false); + } + if (mSoftwareRendered && OPTIMIZE_SW_RENDERED_RECENTS) { + mCallback = callback; + mLinearLayout = layout; + mAttachedToWindow = true; + mBackgroundDrawable = mContext.getResources() + .getDrawable(R.drawable.status_bar_recents_background).getConstantState(); + updateShowBackground(); + } + + } + + public void addViewCallback(View newLinearLayoutChild) { + if (mSoftwareRendered && OPTIMIZE_SW_RENDERED_RECENTS) { + final View view = newLinearLayoutChild; + if (mShowBackground) { + view.setBackgroundDrawable(mBackgroundDrawable.newDrawable()); + view.setDrawingCacheEnabled(true); + view.buildDrawingCache(); + } else { + view.setBackgroundDrawable(null); + view.setDrawingCacheEnabled(false); + view.destroyDrawingCache(); + } + } + } + + public void onLayoutCallback() { + if (mSoftwareRendered && OPTIMIZE_SW_RENDERED_RECENTS) { + mScrollView.post(new Runnable() { + public void run() { + updateShowBackground(); + } + }); + } + } + + public void drawCallback(Canvas canvas, + int left, int right, int top, int bottom, int scrollX, int scrollY, + float topFadingEdgeStrength, float bottomFadingEdgeStrength, + float leftFadingEdgeStrength, float rightFadingEdgeStrength) { + if (mSoftwareRendered && OPTIMIZE_SW_RENDERED_RECENTS) { + if (mIsVertical) { + if (scrollY < 0) { + Drawable d = mBackgroundDrawable.newDrawable().getCurrent(); + d.setBounds(0, scrollY, mScrollView.getWidth(), 0); + d.draw(canvas); + } else { + final int childHeight = mLinearLayout.getHeight(); + if (scrollY + mScrollView.getHeight() > childHeight) { + Drawable d = mBackgroundDrawable.newDrawable().getCurrent(); + d.setBounds(0, childHeight, mScrollView.getWidth(), + scrollY + mScrollView.getHeight()); + d.draw(canvas); + } + } + } else { + if (scrollX < 0) { + Drawable d = mBackgroundDrawable.newDrawable().getCurrent(); + d.setBounds(scrollX, 0, 0, mScrollView.getHeight()); + d.draw(canvas); + } else { + final int childWidth = mLinearLayout.getWidth(); + if (scrollX + mScrollView.getWidth() > childWidth) { + Drawable d = mBackgroundDrawable.newDrawable().getCurrent(); + d.setBounds(childWidth, 0, + scrollX + mScrollView.getWidth(), mScrollView.getHeight()); + d.draw(canvas); + } + } + } + } + + if ((mSoftwareRendered && OPTIMIZE_SW_RENDERED_RECENTS) + || USE_DARK_FADE_IN_HW_ACCELERATED_MODE) { + Paint p = new Paint(); + Matrix matrix = new Matrix(); + // use use a height of 1, and then wack the matrix each time we + // actually use it. + Shader fade = new LinearGradient(0, 0, 0, 1, 0xCC000000, 0, Shader.TileMode.CLAMP); + // PULL OUT THIS CONSTANT + + p.setShader(fade); + + // draw the fade effect + boolean drawTop = false; + boolean drawBottom = false; + boolean drawLeft = false; + boolean drawRight = false; + + float topFadeStrength = 0.0f; + float bottomFadeStrength = 0.0f; + float leftFadeStrength = 0.0f; + float rightFadeStrength = 0.0f; + + final float fadeHeight = mFadingEdgeLength; + int length = (int) fadeHeight; + + // clip the fade length if top and bottom fades overlap + // overlapping fades produce odd-looking artifacts + if (mIsVertical && (top + length > bottom - length)) { + length = (bottom - top) / 2; + } + + // also clip horizontal fades if necessary + if (!mIsVertical && (left + length > right - length)) { + length = (right - left) / 2; + } + + if (mIsVertical) { + topFadeStrength = Math.max(0.0f, Math.min(1.0f, topFadingEdgeStrength)); + drawTop = topFadeStrength * fadeHeight > 1.0f; + bottomFadeStrength = Math.max(0.0f, Math.min(1.0f, bottomFadingEdgeStrength)); + drawBottom = bottomFadeStrength * fadeHeight > 1.0f; + } + + if (!mIsVertical) { + leftFadeStrength = Math.max(0.0f, Math.min(1.0f, leftFadingEdgeStrength)); + drawLeft = leftFadeStrength * fadeHeight > 1.0f; + rightFadeStrength = Math.max(0.0f, Math.min(1.0f, rightFadingEdgeStrength)); + drawRight = rightFadeStrength * fadeHeight > 1.0f; + } + + if (drawTop) { + matrix.setScale(1, fadeHeight * topFadeStrength); + matrix.postTranslate(left, top); + fade.setLocalMatrix(matrix); + canvas.drawRect(left, top, right, top + length, p); + } + + if (drawBottom) { + matrix.setScale(1, fadeHeight * bottomFadeStrength); + matrix.postRotate(180); + matrix.postTranslate(left, bottom); + fade.setLocalMatrix(matrix); + canvas.drawRect(left, bottom - length, right, bottom, p); + } + + if (drawLeft) { + matrix.setScale(1, fadeHeight * leftFadeStrength); + matrix.postRotate(-90); + matrix.postTranslate(left, top); + fade.setLocalMatrix(matrix); + canvas.drawRect(left, top, left + length, bottom, p); + } + + if (drawRight) { + matrix.setScale(1, fadeHeight * rightFadeStrength); + matrix.postRotate(90); + matrix.postTranslate(right, top); + fade.setLocalMatrix(matrix); + canvas.drawRect(right - length, top, right, bottom, p); + } + } + } + + public int getVerticalFadingEdgeLengthCallback() { + return mFadingEdgeLength; + } + + public int getHorizontalFadingEdgeLengthCallback() { + return mFadingEdgeLength; + } + + public void setLayoutTransitionCallback(LayoutTransition transition) { + if (mSoftwareRendered && OPTIMIZE_SW_RENDERED_RECENTS) { + if (transition != null) { + transition.addTransitionListener(new LayoutTransition.TransitionListener() { + @Override + public void startTransition(LayoutTransition transition, + ViewGroup container, View view, int transitionType) { + updateShowBackground(); + } + + @Override + public void endTransition(LayoutTransition transition, + ViewGroup container, View view, int transitionType) { + updateShowBackground(); + } + }); + } + } + } + + // Turn on/off drawing the background in our ancestor, and turn on/off drawing + // in the items in LinearLayout contained by this scrollview. + // Moving the background drawing to our children, and turning on a drawing cache + // for each of them, gives us a ~20fps gain when Recents is rendered in software + public void updateShowBackground() { + if (!mAttachedToWindow) { + // We haven't been initialized yet-- we'll get called again when we are + return; + } + if (mSoftwareRendered && OPTIMIZE_SW_RENDERED_RECENTS) { + LayoutTransition transition = mLinearLayout.getLayoutTransition(); + int linearLayoutSize = + mIsVertical ? mLinearLayout.getHeight() : mLinearLayout.getWidth(); + int scrollViewSize = + mIsVertical ? mScrollView.getHeight() : mScrollView.getWidth(); + boolean show = !mScrollView.isHardwareAccelerated() && + (linearLayoutSize > scrollViewSize) && + !(transition != null && transition.isRunning()) && + mCallback.isRecentsVisible(); + + if (!mFirstTime && show == mShowBackground) return; + mShowBackground = show; + mFirstTime = false; + + mCallback.handleShowBackground(!show); + for (int i = 0; i < mLinearLayout.getChildCount(); i++) { + View v = mLinearLayout.getChildAt(i); + if (show) { + v.setBackgroundDrawable(mBackgroundDrawable.newDrawable()); + v.setDrawingCacheEnabled(true); + v.buildDrawingCache(); + } else { + v.setDrawingCacheEnabled(false); + v.destroyDrawingCache(); + v.setBackgroundDrawable(null); + } + } + } + } + +} diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java index b1a30d9..3acef08 100644 --- a/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java +++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java @@ -20,6 +20,7 @@ import android.animation.LayoutTransition; import android.content.Context; import android.content.res.Configuration; import android.database.DataSetObserver; +import android.graphics.Canvas; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; @@ -40,6 +41,7 @@ public class RecentsVerticalScrollView extends ScrollView implements SwipeHelper private RecentsCallback mCallback; protected int mLastScrollPosition; private SwipeHelper mSwipeHelper; + private RecentsScrollViewPerformanceHelper mPerformanceHelper; private OnLongClickListener mOnLongClick = new OnLongClickListener() { public boolean onLongClick(View v) { @@ -49,15 +51,13 @@ public class RecentsVerticalScrollView extends ScrollView implements SwipeHelper } }; - public RecentsVerticalScrollView(Context context) { - this(context, null); - } - public RecentsVerticalScrollView(Context context, AttributeSet attrs) { super(context, attrs, 0); float densityScale = getResources().getDisplayMetrics().density; float pagingTouchSlop = ViewConfiguration.get(mContext).getScaledPagingTouchSlop(); mSwipeHelper = new SwipeHelper(SwipeHelper.X, this, densityScale, pagingTouchSlop); + + mPerformanceHelper = RecentsScrollViewPerformanceHelper.create(context, attrs, this, true); } private int scrollPositionOfMostRecent() { @@ -77,11 +77,15 @@ public class RecentsVerticalScrollView extends ScrollView implements SwipeHelper } final View view = mAdapter.getView(i, old, mLinearLayout); + if (mPerformanceHelper != null) { + mPerformanceHelper.addViewCallback(view); + } + if (old == null) { view.setClickable(true); view.setOnLongClickListener(mOnLongClick); - final View thumbnail = getChildContentView(view); + final View thumbnail = view.findViewById(R.id.app_thumbnail); // thumbnail is set to clickable in the layout file thumbnail.setOnClickListener(new OnClickListener() { public void onClick(View v) { @@ -138,6 +142,11 @@ public class RecentsVerticalScrollView extends ScrollView implements SwipeHelper // We do this so the underlying ScrollView knows that it won't get // the chance to intercept events anymore requestDisallowInterceptTouchEvent(true); + v.setActivated(true); + } + + public void onDragCancelled(View v) { + v.setActivated(false); } public View getChildAtPosition(MotionEvent ev) { @@ -155,7 +164,60 @@ public class RecentsVerticalScrollView extends ScrollView implements SwipeHelper } public View getChildContentView(View v) { - return v.findViewById(R.id.app_thumbnail); + return v.findViewById(R.id.recent_item); + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + if (mPerformanceHelper != null) { + mPerformanceHelper.onLayoutCallback(); + } + } + + @Override + public void draw(Canvas canvas) { + super.draw(canvas); + + if (mPerformanceHelper != null) { + int paddingLeft = mPaddingLeft; + final boolean offsetRequired = isPaddingOffsetRequired(); + if (offsetRequired) { + paddingLeft += getLeftPaddingOffset(); + } + + int left = mScrollX + paddingLeft; + int right = left + mRight - mLeft - mPaddingRight - paddingLeft; + int top = mScrollY + getFadeTop(offsetRequired); + int bottom = top + getFadeHeight(offsetRequired); + + if (offsetRequired) { + right += getRightPaddingOffset(); + bottom += getBottomPaddingOffset(); + } + mPerformanceHelper.drawCallback(canvas, + left, right, top, bottom, mScrollX, mScrollY, + getTopFadingEdgeStrength(), getBottomFadingEdgeStrength(), + 0, 0); + } + } + + @Override + public int getVerticalFadingEdgeLength() { + if (mPerformanceHelper != null) { + return mPerformanceHelper.getVerticalFadingEdgeLengthCallback(); + } else { + return super.getVerticalFadingEdgeLength(); + } + } + + @Override + public int getHorizontalFadingEdgeLength() { + if (mPerformanceHelper != null) { + return mPerformanceHelper.getHorizontalFadingEdgeLengthCallback(); + } else { + return super.getHorizontalFadingEdgeLength(); + } } @Override @@ -169,6 +231,14 @@ public class RecentsVerticalScrollView extends ScrollView implements SwipeHelper } @Override + public void onAttachedToWindow() { + if (mPerformanceHelper != null) { + mPerformanceHelper.onAttachedToWindowCallback( + mCallback, mLinearLayout, isHardwareAccelerated()); + } + } + + @Override protected void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); float densityScale = getResources().getDisplayMetrics().density; @@ -208,6 +278,12 @@ public class RecentsVerticalScrollView extends ScrollView implements SwipeHelper }); } + public void onRecentsVisibilityChanged() { + if (mPerformanceHelper != null) { + mPerformanceHelper.updateShowBackground(); + } + } + @Override protected void onVisibilityChanged(View changedView, int visibility) { super.onVisibilityChanged(changedView, visibility); @@ -236,6 +312,9 @@ public class RecentsVerticalScrollView extends ScrollView implements SwipeHelper @Override public void setLayoutTransition(LayoutTransition transition) { + if (mPerformanceHelper != null) { + mPerformanceHelper.setLayoutTransitionCallback(transition); + } // The layout transition applies to our embedded LinearLayout mLinearLayout.setLayoutTransition(transition); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java index e6c0b96..98dca92 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java @@ -70,6 +70,14 @@ public class NavigationBarView extends LinearLayout { return mCurrentView.findViewById(R.id.menu); } + public View getBackButton() { + return mCurrentView.findViewById(R.id.back); + } + + public View getHomeButton() { + return mCurrentView.findViewById(R.id.home); + } + public NavigationBarView(Context context, AttributeSet attrs) { super(context, attrs); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index e3ea0de..3d23abe 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -380,7 +380,7 @@ public class PhoneStatusBar extends StatusBar { } protected WindowManager.LayoutParams getRecentsLayoutParams(LayoutParams layoutParams) { - boolean translucent = false; + boolean opaque = false; WindowManager.LayoutParams lp = new WindowManager.LayoutParams( layoutParams.width, layoutParams.height, @@ -388,7 +388,7 @@ public class PhoneStatusBar extends StatusBar { WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH, - (translucent ? PixelFormat.OPAQUE : PixelFormat.TRANSLUCENT)); + (opaque ? PixelFormat.OPAQUE : PixelFormat.TRANSLUCENT)); if (ActivityManager.isHighEndGfx(mDisplay)) { lp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED; } @@ -404,7 +404,7 @@ public class PhoneStatusBar extends StatusBar { // Recents Panel boolean visible = false; if (mRecentsPanel != null) { - visible = mRecentsPanel.getVisibility() == View.VISIBLE; + visible = mRecentsPanel.isShowing(); WindowManagerImpl.getDefault().removeView(mRecentsPanel); } @@ -1091,18 +1091,9 @@ public class PhoneStatusBar extends StatusBar { } } - if ((diff & StatusBarManager.DISABLE_NAVIGATION) != 0) { - if ((state & StatusBarManager.DISABLE_NAVIGATION) != 0) { - Slog.d(TAG, "DISABLE_NAVIGATION: yes"); - - // close recents if it's visible - mHandler.removeMessages(MSG_CLOSE_RECENTS_PANEL); - mHandler.sendEmptyMessage(MSG_CLOSE_RECENTS_PANEL); - } - - if (mNavigationBarView != null) { - mNavigationBarView.setEnabled((state & StatusBarManager.DISABLE_NAVIGATION) == 0); - } + if ((diff & (StatusBarManager.DISABLE_NAVIGATION | StatusBarManager.DISABLE_BACK)) != 0) { + setNavigationVisibility(state & + (StatusBarManager.DISABLE_NAVIGATION | StatusBarManager.DISABLE_BACK)); } if ((diff & StatusBarManager.DISABLE_NOTIFICATION_ICONS) != 0) { @@ -1127,6 +1118,32 @@ public class PhoneStatusBar extends StatusBar { } } + private void setNavigationVisibility(int visibility) { + boolean disableNavigation = ((visibility & StatusBarManager.DISABLE_NAVIGATION) != 0); + boolean disableBack = ((visibility & StatusBarManager.DISABLE_BACK) != 0); + + Slog.i(TAG, "DISABLE_BACK: " + (disableBack ? "yes" : "no")); + Slog.i(TAG, "DISABLE_NAVIGATION: " + (disableNavigation ? "yes" : "no")); + + if (mNavigationBarView != null) { + if (disableNavigation && disableBack) { + mNavigationBarView.setEnabled(false); + } else { + mNavigationBarView.getBackButton().setEnabled(!disableBack); + mNavigationBarView.getHomeButton().setEnabled(!disableNavigation); + mNavigationBarView.getRecentsButton().setEnabled(!disableNavigation); + + mNavigationBarView.setEnabled(true); + } + } + + if (disableNavigation) { + // close recents if it's visible + mHandler.removeMessages(MSG_CLOSE_RECENTS_PANEL); + mHandler.sendEmptyMessage(MSG_CLOSE_RECENTS_PANEL); + } + } + /** * All changes to the status bar and notifications funnel through here and are batched. */ diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java index 60dfdac..3c85814 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java @@ -130,6 +130,8 @@ public class NetworkController extends BroadcastReceiver { int mLastDataTypeIconId = -1; String mLastLabel = ""; + private boolean mHasMobileDataFeature; + boolean mDataAndWifiStacked = false; // yuck -- stop doing this here and put it in the framework @@ -147,6 +149,10 @@ public class NetworkController extends BroadcastReceiver { public NetworkController(Context context) { mContext = context; + ConnectivityManager cm = (ConnectivityManager)mContext.getSystemService( + Context.CONNECTIVITY_SERVICE); + mHasMobileDataFeature = cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE); + // set up the default wifi icon, used when no radios have ever appeared updateWifiIcons(); @@ -229,7 +235,7 @@ public class NetworkController extends BroadcastReceiver { mWifiIconId, mWifiActivityIconId); cluster.setMobileDataIndicators( - hasMobileDataFeature(), + mHasMobileDataFeature, mPhoneSignalIconId, mMobileActivityIconId, mDataTypeIconId); @@ -376,12 +382,6 @@ public class NetworkController extends BroadcastReceiver { } } - private boolean hasMobileDataFeature() { - // XXX: HAX: replace when a more reliable method is available - return (! "wifi-only".equals(SystemProperties.get("ro.carrier"))); - } - - private void updateAirplaneMode() { mAirplaneMode = (Settings.System.getInt(mContext.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) == 1); @@ -828,8 +828,8 @@ public class NetworkController extends BroadcastReceiver { label = context.getString(R.string.status_bar_settings_signal_meter_disconnected); // On devices without mobile radios, we want to show the wifi icon combinedSignalIconId = - hasMobileDataFeature() ? mDataSignalIconId : mWifiIconId; - mContentDescriptionCombinedSignal = hasMobileDataFeature() + mHasMobileDataFeature ? mDataSignalIconId : mWifiIconId; + mContentDescriptionCombinedSignal = mHasMobileDataFeature ? mContentDescriptionDataType : mContentDescriptionWifi; mDataTypeIconId = 0; } @@ -866,7 +866,7 @@ public class NetworkController extends BroadcastReceiver { mWifiIconId, mWifiActivityIconId); cluster.setMobileDataIndicators( - hasMobileDataFeature(), + mHasMobileDataFeature, mPhoneSignalIconId, mMobileActivityIconId, mDataTypeIconId); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java index 469b462..e287b7a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java @@ -124,6 +124,9 @@ public class NotificationRowLayout extends ViewGroup implements SwipeHelper.Call requestDisallowInterceptTouchEvent(true); } + public void onDragCancelled(View v) { + } + public View getChildAtPosition(MotionEvent ev) { // find the view under the pointer, accounting for GONE views final int count = getChildCount(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java index 2ab667d..cc73d7b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java @@ -306,7 +306,7 @@ public class TabletStatusBar extends StatusBar implements mStatusBarView.setIgnoreChildren(2, mRecentButton, mRecentsPanel); lp = new WindowManager.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, + (int) res.getDimension(R.dimen.status_bar_recents_width), ViewGroup.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL, WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN @@ -949,29 +949,34 @@ public class TabletStatusBar extends StatusBar implements mTicker.halt(); } } - if ((diff & StatusBarManager.DISABLE_NAVIGATION) != 0) { - if ((state & StatusBarManager.DISABLE_NAVIGATION) != 0) { - Slog.i(TAG, "DISABLE_NAVIGATION: yes"); - mNavigationArea.setVisibility(View.INVISIBLE); - mInputMethodSwitchButton.setScreenLocked(true); - } else { - Slog.i(TAG, "DISABLE_NAVIGATION: no"); - mNavigationArea.setVisibility(View.VISIBLE); - mInputMethodSwitchButton.setScreenLocked(false); - } + if ((diff & (StatusBarManager.DISABLE_NAVIGATION | StatusBarManager.DISABLE_BACK)) != 0) { + setNavigationVisibility(state & + (StatusBarManager.DISABLE_NAVIGATION | StatusBarManager.DISABLE_BACK)); } - if ((diff & StatusBarManager.DISABLE_BACK) != 0) { - if ((state & StatusBarManager.DISABLE_BACK) != 0) { - Slog.i(TAG, "DISABLE_BACK: yes"); - mBackButton.setEnabled(false); - mInputMethodSwitchButton.setScreenLocked(true); - } else { - Slog.i(TAG, "DISABLE_BACK: no"); - mBackButton.setEnabled(true); - mInputMethodSwitchButton.setScreenLocked(false); - } + } + + private void setNavigationVisibility(int visibility) { + boolean disableNavigation = ((visibility & StatusBarManager.DISABLE_NAVIGATION) != 0); + boolean disableBack = ((visibility & StatusBarManager.DISABLE_BACK) != 0); + + Slog.i(TAG, "DISABLE_BACK: " + (disableBack ? "yes" : "no")); + Slog.i(TAG, "DISABLE_NAVIGATION: " + (disableNavigation ? "yes" : "no")); + + if (disableNavigation && disableBack) { + mNavigationArea.setVisibility(View.INVISIBLE); + } else { + int backVisiblity = (disableBack ? View.INVISIBLE : View.VISIBLE); + int navVisibility = (disableNavigation ? View.INVISIBLE : View.VISIBLE); + + mBackButton.setVisibility(backVisiblity); + mHomeButton.setVisibility(navVisibility); + mRecentButton.setVisibility(navVisibility); + // don't change menu button visibility here + + mNavigationArea.setVisibility(View.VISIBLE); } + mInputMethodSwitchButton.setScreenLocked(disableNavigation); } private boolean hasTicker(Notification n) { |
