Merge "Removing the debug header bar icon."

This commit is contained in:
Winson Chung
2015-12-15 21:23:14 +00:00
committed by Android (Google) Code Review
31 changed files with 147 additions and 965 deletions

View File

@@ -19,6 +19,6 @@ Copyright (C) 2014 The Android Open Source Project
android:viewportWidth="48.0"
android:viewportHeight="48.0">
<path
android:fillColor="@color/recents_task_bar_dark_dismiss_color"
android:fillColor="@color/recents_task_bar_dark_icon_color"
android:pathData="M38.000000,12.800000l-2.799999,-2.800000 -11.200001,11.200001 -11.200000,-11.200001 -2.800000,2.800000 11.200001,11.200000 -11.200001,11.200001 2.800000,2.799999 11.200000,-11.200001 11.200001,11.200001 2.799999,-2.799999 -11.200001,-11.200001z"/>
</vector>

View File

@@ -19,6 +19,6 @@ Copyright (C) 2014 The Android Open Source Project
android:viewportWidth="48.0"
android:viewportHeight="48.0">
<path
android:fillColor="@color/recents_task_bar_light_dismiss_color"
android:fillColor="@color/recents_task_bar_light_icon_color"
android:pathData="M38.000000,12.800000l-2.799999,-2.800000 -11.200001,11.200001 -11.200000,-11.200001 -2.800000,2.800000 11.200001,11.200000 -11.200001,11.200001 2.800000,2.799999 11.200000,-11.200001 11.200001,11.200001 2.799999,-2.799999 -11.200001,-11.200001z"/>
</vector>

View File

@@ -19,6 +19,6 @@ Copyright (C) 2015 The Android Open Source Project
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:fillColor="@color/recents_task_bar_dark_icon_color"
android:pathData="M0.0,0.0l0.0,24.0l24.0,0.0L24.0,0.0L0.0,0.0zM4.0,4.0l10.0,0.0l0.0,10.0L4.0,14.0L4.0,4.0z"/>
</vector>

View File

@@ -19,6 +19,6 @@ Copyright (C) 2015 The Android Open Source Project
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M0.0,0.0l0.0,24.0l24.0,0.0L24.0,0.0L0.0,0.0zM4.0,10.0l16.0,0.0l0.0,10.0L4.0,20.0L4.0,10.0z"/>
android:fillColor="@color/recents_task_bar_light_icon_color"
android:pathData="M0.0,0.0l0.0,24.0l24.0,0.0L24.0,0.0L0.0,0.0zM4.0,4.0l10.0,0.0l0.0,10.0L4.0,14.0L4.0,4.0z"/>
</vector>

View File

@@ -19,15 +19,15 @@ Copyright (C) 2015 The Android Open Source Project
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:fillColor="@color/recents_task_bar_dark_icon_color"
android:pathData="M0.0,8.0l4.0,0.0 0.0,-4.0 4.0,0.0 0.0,-4.0 -8.0,0.0z"/>
<path
android:fillColor="#FF000000"
android:fillColor="@color/recents_task_bar_dark_icon_color"
android:pathData="M4.0,16.0l-4.0,0.0 0.0,8.0 8.0,0.0 0.0,-4.0 -4.0,0.0z"/>
<path
android:fillColor="#FF000000"
android:fillColor="@color/recents_task_bar_dark_icon_color"
android:pathData="M16.0,0.0l0.0,4.0 4.0,0.0 0.0,4.0 4.0,0.0 0.0,-8.0z"/>
<path
android:fillColor="#FF000000"
android:fillColor="@color/recents_task_bar_dark_icon_color"
android:pathData="M20.0,20.0l-4.0,0.0 0.0,4.0 8.0,0.0 0.0,-8.0 -4.0,0.0z"/>
</vector>

View File

@@ -19,6 +19,15 @@ Copyright (C) 2015 The Android Open Source Project
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M24.0,24.0L24.0,0.0L0.0,0.0l0.0,24.0L24.0,24.0zM4.0,10.0l10.0,0.0l0.0,10.0L4.0,20.0L4.0,10.0z"/>
android:fillColor="@color/recents_task_bar_light_icon_color"
android:pathData="M0.0,8.0l4.0,0.0 0.0,-4.0 4.0,0.0 0.0,-4.0 -8.0,0.0z"/>
<path
android:fillColor="@color/recents_task_bar_light_icon_color"
android:pathData="M4.0,16.0l-4.0,0.0 0.0,8.0 8.0,0.0 0.0,-4.0 -4.0,0.0z"/>
<path
android:fillColor="@color/recents_task_bar_light_icon_color"
android:pathData="M16.0,0.0l0.0,4.0 4.0,0.0 0.0,4.0 4.0,0.0 0.0,-8.0z"/>
<path
android:fillColor="@color/recents_task_bar_light_icon_color"
android:pathData="M20.0,20.0l-4.0,0.0 0.0,4.0 8.0,0.0 0.0,-8.0 -4.0,0.0z"/>
</vector>

View File

@@ -1,24 +0,0 @@
<!--
Copyright (C) 2015 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24.0dp"
android:height="24.0dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M24.0,24.0L24.0,0.0L0.0,0.0l0.0,24.0L24.0,24.0zM20.0,20.0L10.0,20.0L10.0,10.0l10.0,0.0L20.0,20.0z"/>
</vector>

View File

@@ -1,24 +0,0 @@
<!--
Copyright (C) 2015 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24.0dp"
android:height="24.0dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF0000FF"
android:pathData="M0.0,0.0l0.0,24.0l24.0,0.0L24.0,0.0L0.0,0.0zM4.0,10.0l16.0,0.0l0.0,10.0L4.0,20.0L4.0,10.0z"/>
</vector>

View File

@@ -1,24 +0,0 @@
<!--
Copyright (C) 2015 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24.0dp"
android:height="24.0dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF0000FF"
android:pathData="M24.0,0.0L0.0,0.0l0.0,24.0l24.0,0.0L24.0,0.0zM14.0,4.0l0.0,16.0L4.0,20.0L4.0,4.0L14.0,4.0z"/>
</vector>

View File

@@ -1,24 +0,0 @@
<!--
Copyright (C) 2015 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24.0dp"
android:height="24.0dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF0000FF"
android:pathData="M0.0,24.0l24.0,0.0L24.0,0.0L0.0,0.0L0.0,24.0zM10.0,20.0L10.0,4.0l10.0,0.0l0.0,16.0L10.0,20.0z"/>
</vector>

View File

@@ -1,24 +0,0 @@
<!--
Copyright (C) 2015 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24.0dp"
android:height="24.0dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF0000FF"
android:pathData="M24.0,24.0L24.0,0.0L0.0,0.0l0.0,24.0L24.0,24.0zM20.0,14.0L4.0,14.0L4.0,4.0l16.0,0.0L20.0,14.0z"/>
</vector>

View File

@@ -1,24 +0,0 @@
<!--
Copyright (C) 2015 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24.0dp"
android:height="24.0dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M24.0,0.0L0.0,0.0l0.0,24.0l24.0,0.0L24.0,0.0zM14.0,4.0l0.0,16.0L4.0,20.0L4.0,4.0L14.0,4.0z"/>
</vector>

View File

@@ -1,24 +0,0 @@
<!--
Copyright (C) 2015 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24.0dp"
android:height="24.0dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M0.0,24.0l24.0,0.0L24.0,0.0L0.0,0.0L0.0,24.0zM10.0,20.0L10.0,4.0l10.0,0.0l0.0,16.0L10.0,20.0z"/>
</vector>

View File

@@ -1,24 +0,0 @@
<!--
Copyright (C) 2015 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24.0dp"
android:height="24.0dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M24.0,24.0L24.0,0.0L0.0,0.0l0.0,24.0L24.0,24.0zM20.0,14.0L4.0,14.0L4.0,4.0l16.0,0.0L20.0,14.0z"/>
</vector>

View File

@@ -1,24 +0,0 @@
<!--
Copyright (C) 2015 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24.0dp"
android:height="24.0dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M0.0,0.0l0.0,24.0l24.0,0.0L24.0,0.0L0.0,0.0zM20.0,14.0L10.0,14.0L10.0,4.0l10.0,0.0L20.0,14.0z"/>
</vector>

View File

@@ -1,65 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
android:orientation="vertical"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/place_dock_left"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_dock_left" />
<Button
android:id="@+id/place_dock_right"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_dock_right" />
<Button
android:id="@+id/place_left"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_left" />
<Button
android:id="@+id/place_right"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_right" />
<Button
android:id="@+id/place_full"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_fullscreen" />
</LinearLayout>
</LinearLayout>

View File

@@ -1,65 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
android:orientation="vertical"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/place_dock_top"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_dock_top" />
<Button
android:id="@+id/place_dock_bottom"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_dock_bottom" />
<Button
android:id="@+id/place_top"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_top" />
<Button
android:id="@+id/place_bottom"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_bottom" />
<Button
android:id="@+id/place_full"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_fullscreen" />
</LinearLayout>
</LinearLayout>

View File

@@ -1,93 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
android:orientation="vertical"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/place_dock_left"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_dock_left" />
<Button
android:id="@+id/place_dock_right"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_dock_right" />
<Button
android:id="@+id/place_left"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_left" />
<Button
android:id="@+id/place_right"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_right" />
<Button
android:id="@+id/place_top_left"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_top_left" />
<Button
android:id="@+id/place_top_right"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_top_right" />
<Button
android:id="@+id/place_bottom_left"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_bottom_left" />
<Button
android:id="@+id/place_bottom_right"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_bottom_right" />
<Button
android:id="@+id/place_full"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_fullscreen" />
</LinearLayout>
</LinearLayout>

View File

@@ -1,93 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
android:orientation="vertical"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/place_dock_top"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_dock_top" />
<Button
android:id="@+id/place_dock_bottom"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_dock_bottom" />
<Button
android:id="@+id/place_top"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_top" />
<Button
android:id="@+id/place_bottom"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_bottom" />
<Button
android:id="@+id/place_top_left"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_top_left" />
<Button
android:id="@+id/place_top_right"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_top_right" />
<Button
android:id="@+id/place_bottom_left"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_bottom_left" />
<Button
android:id="@+id/place_bottom_right"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_bottom_right" />
<Button
android:id="@+id/place_full"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="@drawable/vector_drawable_place_fullscreen" />
</LinearLayout>
</LinearLayout>

View File

@@ -34,7 +34,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|start"
android:layout_marginStart="64dp"
android:layout_marginEnd="64dp"
android:layout_marginEnd="112dp"
android:textSize="16sp"
android:textColor="#ffffffff"
android:text="@string/recents_empty_message"

View File

@@ -59,9 +59,9 @@
<!-- The recents task bar dark text color to be drawn on top of light backgrounds. -->
<color name="recents_task_bar_dark_text_color">#cc000000</color>
<!-- The recents task bar light dismiss icon color to be drawn on top of dark backgrounds. -->
<color name="recents_task_bar_light_dismiss_color">#ffeeeeee</color>
<color name="recents_task_bar_light_icon_color">#ffeeeeee</color>
<!-- The recents task bar dark dismiss icon color to be drawn on top of light backgrounds. -->
<color name="recents_task_bar_dark_dismiss_color">#99000000</color>
<color name="recents_task_bar_dark_icon_color">#99000000</color>
<!-- The recents task bar highlight color. -->
<color name="recents_task_bar_highlight_color">#28ffffff</color>
<!-- The lock to task button background color. -->

View File

@@ -56,7 +56,6 @@ import com.android.systemui.recents.events.component.RecentsVisibilityChangedEve
import com.android.systemui.recents.events.component.ScreenPinningRequestEvent;
import com.android.systemui.recents.events.ui.AllTaskViewsDismissedEvent;
import com.android.systemui.recents.events.ui.DismissTaskViewEvent;
import com.android.systemui.recents.events.ui.ResizeTaskEvent;
import com.android.systemui.recents.events.ui.ShowApplicationInfoEvent;
import com.android.systemui.recents.events.ui.StackViewScrolledEvent;
import com.android.systemui.recents.events.ui.UpdateFreeformTaskViewVisibilityEvent;
@@ -103,9 +102,6 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD
private ViewStub mHistoryViewStub;
private RecentsHistoryView mHistoryView;
// Resize task debug
private RecentsResizeTaskDialog mResizeTaskDebugDialog;
// Search AppWidget
private AppWidgetProviderInfo mSearchWidgetInfo;
private RecentsAppWidgetHost mAppWidgetHost;
@@ -587,15 +583,6 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD
EventBus.getDefault().send(new ToggleRecentsEvent());
}
/**** RecentsResizeTaskDialog ****/
private RecentsResizeTaskDialog getResizeTaskDebugDialog() {
if (mResizeTaskDebugDialog == null) {
mResizeTaskDebugDialog = new RecentsResizeTaskDialog(getFragmentManager(), this);
}
return mResizeTaskDebugDialog;
}
/**** EventBus events ****/
public final void onBusEvent(ToggleRecentsEvent event) {
@@ -745,10 +732,6 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD
MetricsLogger.count(this, "overview_task_all_dismissed", 1);
}
public final void onBusEvent(ResizeTaskEvent event) {
getResizeTaskDebugDialog().showResizeTaskDialog(event.task, mRecentsView);
}
public final void onBusEvent(LaunchTaskSucceededEvent event) {
MetricsLogger.histogram(this, "overview_task_launch_index", event.taskIndexFromStackFront);
}

View File

@@ -1,286 +0,0 @@
/*
* Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.systemui.recents;
import android.app.ActivityManager;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.app.FragmentManager;
import android.content.DialogInterface;
import android.graphics.Rect;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.android.systemui.R;
import com.android.systemui.recents.misc.SystemServicesProxy;
import com.android.systemui.recents.model.Task;
import com.android.systemui.recents.views.RecentsView;
import static android.app.ActivityManager.StackId.DOCKED_STACK_ID;
import static android.app.ActivityManager.StackId.FREEFORM_WORKSPACE_STACK_ID;
/**
* A helper for the dialogs that show when task debugging is on.
*/
public class RecentsResizeTaskDialog extends DialogFragment {
static final String TAG = "RecentsResizeTaskDialog";
// The various window arrangements we can handle.
private static final int PLACE_LEFT = 1;
private static final int PLACE_RIGHT = 2;
private static final int PLACE_TOP = 3;
private static final int PLACE_BOTTOM = 4;
private static final int PLACE_TOP_LEFT = 5;
private static final int PLACE_TOP_RIGHT = 6;
private static final int PLACE_BOTTOM_LEFT = 7;
private static final int PLACE_BOTTOM_RIGHT = 8;
private static final int PLACE_FULL = 9;
private static final int PLACE_DOCK_LEFT = 10;
private static final int PLACE_DOCK_RIGHT = 11;
private static final int PLACE_DOCK_TOP = 12;
private static final int PLACE_DOCK_BOTTOM = 13;
// The button resource ID combined with the arrangement command.
private static final int[][] BUTTON_DEFINITIONS =
{{R.id.place_dock_left, PLACE_DOCK_LEFT},
{R.id.place_dock_right, PLACE_DOCK_RIGHT},
{R.id.place_dock_top, PLACE_DOCK_TOP},
{R.id.place_dock_bottom, PLACE_DOCK_BOTTOM},
{R.id.place_left, PLACE_LEFT},
{R.id.place_right, PLACE_RIGHT},
{R.id.place_top, PLACE_TOP},
{R.id.place_bottom, PLACE_BOTTOM},
{R.id.place_top_left, PLACE_TOP_LEFT},
{R.id.place_top_right, PLACE_TOP_RIGHT},
{R.id.place_bottom_left, PLACE_BOTTOM_LEFT},
{R.id.place_bottom_right, PLACE_BOTTOM_RIGHT},
{R.id.place_full, PLACE_FULL}};
// The task we want to resize.
private FragmentManager mFragmentManager;
private View mResizeTaskDialogContent;
private RecentsActivity mRecentsActivity;
private RecentsView mRecentsView;
private Rect[] mBounds = {new Rect(), new Rect(), new Rect(), new Rect()};
private Task[] mTasks = {null, null, null, null};
/**
* Called by FragmentManager
*/
public RecentsResizeTaskDialog() {
}
public RecentsResizeTaskDialog(FragmentManager mgr, RecentsActivity activity) {
mFragmentManager = mgr;
mRecentsActivity = activity;
}
/** Shows the resize-task dialog. */
void showResizeTaskDialog(Task mainTask, RecentsView rv) {
mTasks[0] = mainTask;
mRecentsView = rv;
showAllowingStateLoss(mFragmentManager, TAG);
}
/** Creates a new resize-task dialog. */
private void createResizeTaskDialog(LayoutInflater inflater, AlertDialog.Builder builder) {
builder.setTitle(R.string.recents_caption_resize);
mResizeTaskDialogContent =
inflater.inflate(R.layout.recents_task_resize_dialog, null, false);
for (int i = 0; i < BUTTON_DEFINITIONS.length; i++) {
Button b = (Button)mResizeTaskDialogContent.findViewById(BUTTON_DEFINITIONS[i][0]);
if (b != null) {
final int action = BUTTON_DEFINITIONS[i][1];
b.setOnClickListener(
new View.OnClickListener() {
public void onClick(View v) {
switch (action) {
case PLACE_DOCK_LEFT:
case PLACE_DOCK_RIGHT:
case PLACE_DOCK_TOP:
case PLACE_DOCK_BOTTOM:
placeDockTasks(action);
break;
default:
placeTasks(action);
break;
}
}
});
}
}
builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dismissAllowingStateLoss();
}
});
builder.setView(mResizeTaskDialogContent);
}
/** Helper function to place window(s) on the display according to an arrangement request. */
private void placeTasks(int arrangement) {
SystemServicesProxy ssp = Recents.getSystemServices();
Rect rect = ssp.getDisplayRect();
for (int i = 0; i < mBounds.length; ++i) {
mBounds[i].set(rect);
if (i != 0) {
mTasks[i] = null;
}
}
int additionalTasks = 0;
switch (arrangement) {
case PLACE_LEFT:
mBounds[0].right = mBounds[0].centerX();
mBounds[1].left = mBounds[0].right;
additionalTasks = 1;
break;
case PLACE_RIGHT:
mBounds[1].right = mBounds[1].centerX();
mBounds[0].left = mBounds[1].right;
additionalTasks = 1;
break;
case PLACE_TOP:
mBounds[0].bottom = mBounds[0].centerY();
mBounds[1].top = mBounds[0].bottom;
additionalTasks = 1;
break;
case PLACE_BOTTOM:
mBounds[1].bottom = mBounds[1].centerY();
mBounds[0].top = mBounds[1].bottom;
additionalTasks = 1;
break;
case PLACE_TOP_LEFT: // TL, TR, BL, BR
mBounds[0].right = mBounds[0].centerX();
mBounds[0].bottom = mBounds[0].centerY();
mBounds[1].left = mBounds[0].right;
mBounds[1].bottom = mBounds[0].bottom;
mBounds[2].right = mBounds[0].right;
mBounds[2].top = mBounds[0].bottom;
mBounds[3].left = mBounds[0].right;
mBounds[3].top = mBounds[0].bottom;
additionalTasks = 3;
break;
case PLACE_TOP_RIGHT: // TR, TL, BR, BL
mBounds[0].left = mBounds[0].centerX();
mBounds[0].bottom = mBounds[0].centerY();
mBounds[1].right = mBounds[0].left;
mBounds[1].bottom = mBounds[0].bottom;
mBounds[2].left = mBounds[0].left;
mBounds[2].top = mBounds[0].bottom;
mBounds[3].right = mBounds[0].left;
mBounds[3].top = mBounds[0].bottom;
additionalTasks = 3;
break;
case PLACE_BOTTOM_LEFT: // BL, BR, TL, TR
mBounds[0].right = mBounds[0].centerX();
mBounds[0].top = mBounds[0].centerY();
mBounds[1].left = mBounds[0].right;
mBounds[1].top = mBounds[0].top;
mBounds[2].right = mBounds[0].right;
mBounds[2].bottom = mBounds[0].top;
mBounds[3].left = mBounds[0].right;
mBounds[3].bottom = mBounds[0].top;
additionalTasks = 3;
break;
case PLACE_BOTTOM_RIGHT: // BR, BL, TR, TL
mBounds[0].left = mBounds[0].centerX();
mBounds[0].top = mBounds[0].centerY();
mBounds[1].right = mBounds[0].left;
mBounds[1].top = mBounds[0].top;
mBounds[2].left = mBounds[0].left;
mBounds[2].bottom = mBounds[0].top;
mBounds[3].right = mBounds[0].left;
mBounds[3].bottom = mBounds[0].top;
additionalTasks = 3;
break;
case PLACE_FULL:
// Nothing to change.
mBounds[0] = new Rect();
break;
}
// Get the other tasks.
for (int i = 1; i <= additionalTasks && mTasks[i - 1] != null; ++i) {
mTasks[i] = mRecentsView.getNextTaskOrTopTask(mTasks[i - 1]);
// Do stop if we circled back to the first item.
if (mTasks[i] == mTasks[0]) {
mTasks[i] = null;
}
}
// Get rid of the dialog.
dismissAllowingStateLoss();
mRecentsActivity.dismissRecentsToHomeWithoutTransitionAnimation();
// Show tasks as they might not be currently visible - beginning with the oldest so that
// the focus ends on the selected one.
for (int i = additionalTasks; i >= 0; --i) {
if (mTasks[i] != null) {
mRecentsView.launchTask(mTasks[i], mBounds[i], FREEFORM_WORKSPACE_STACK_ID);
}
}
}
/**
* Helper function to place docked window(s) on the display according to an arrangement request.
*/
private void placeDockTasks(int arrangement) {
int createMode = ActivityManager.DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT;
switch (arrangement) {
case PLACE_DOCK_LEFT:
createMode = ActivityManager.DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT;
break;
case PLACE_DOCK_TOP:
createMode = ActivityManager.DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT;
break;
case PLACE_DOCK_RIGHT:
createMode = ActivityManager.DOCKED_STACK_CREATE_MODE_BOTTOM_OR_RIGHT;
break;
case PLACE_DOCK_BOTTOM:
createMode = ActivityManager.DOCKED_STACK_CREATE_MODE_BOTTOM_OR_RIGHT;
break;
}
// Dismiss the dialog before trying to launch the task
dismissAllowingStateLoss();
if (mTasks[0].key.stackId != DOCKED_STACK_ID) {
int taskId = mTasks[0].key.id;
SystemServicesProxy ssp = Recents.getSystemServices();
ssp.startTaskInDockedMode(taskId, createMode);
mRecentsView.launchTask(mTasks[0], null, DOCKED_STACK_ID);
} else {
Toast.makeText(getContext(), "Already docked", Toast.LENGTH_SHORT);
}
}
@Override
public Dialog onCreateDialog(Bundle args) {
LayoutInflater inflater = getActivity().getLayoutInflater();
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
createResizeTaskDialog(inflater, builder);
return builder.create();
}
}

View File

@@ -14,19 +14,31 @@
* limitations under the License.
*/
package com.android.systemui.recents.events.ui;
package com.android.systemui.recents.events.activity;
import android.graphics.Rect;
import com.android.systemui.recents.events.EventBus;
import com.android.systemui.recents.model.Task;
import com.android.systemui.recents.views.TaskView;
/**
* This is sent when a {@link Task} is resized.
* This is sent to launch a task from Recents.
*/
public class ResizeTaskEvent extends EventBus.Event {
public class LaunchTaskEvent extends EventBus.Event {
public final TaskView taskView;
public final Task task;
public final Rect targetTaskBounds;
public final int targetTaskStack;
public final boolean screenPinningRequested;
public ResizeTaskEvent(Task task) {
public LaunchTaskEvent(TaskView taskView, Task task, Rect targetTaskBounds, int targetTaskStack,
boolean screenPinningRequested) {
this.taskView = taskView;
this.task = task;
this.targetTaskBounds = targetTaskBounds;
this.targetTaskStack = targetTaskStack;
this.screenPinningRequested = screenPinningRequested;
}
}

View File

@@ -65,7 +65,6 @@ import com.android.internal.app.AssistUtils;
import com.android.internal.os.BackgroundThread;
import com.android.systemui.Prefs;
import com.android.systemui.R;
import com.android.systemui.recents.Recents;
import com.android.systemui.recents.RecentsDebugFlags;
import com.android.systemui.recents.RecentsImpl;
@@ -127,7 +126,7 @@ public class SystemServicesProxy {
mUm = UserManager.get(context);
mDisplay = mWm.getDefaultDisplay();
mRecentsPackage = context.getPackageName();
mHasFreeformWorkspaceSupport = false &&
mHasFreeformWorkspaceSupport =
mPm.hasSystemFeature(PackageManager.FEATURE_FREEFORM_WINDOW_MANAGEMENT);
// Get the dummy thumbnail width/heights

View File

@@ -39,7 +39,6 @@ public class Task {
public void onTaskDataLoaded();
/* Notifies when a task has been unbound */
public void onTaskDataUnloaded();
/* Notifies when a task's stack id has changed. */
public void onTaskStackIdChanged();
}

View File

@@ -55,7 +55,7 @@ public class AnimateableViewBounds extends ViewOutlineProvider {
* Resets the right and bottom clip for this view.
*/
public void reset() {
mClipRect.setEmpty();
mClipRect.set(-1, -1, -1, -1);
updateClipBounds();
}
@@ -90,9 +90,9 @@ public class AnimateableViewBounds extends ViewOutlineProvider {
}
private void updateClipBounds() {
mClipBounds.set(mClipRect.left, mClipRect.top,
mSourceView.getWidth() - mClipRect.right,
mSourceView.getHeight() - mClipRect.bottom);
mClipBounds.set(Math.max(0, mClipRect.left), Math.max(0, mClipRect.top),
mSourceView.getWidth() - Math.max(0, mClipRect.right),
mSourceView.getHeight() - Math.max(0, mClipRect.bottom));
mSourceView.setClipBounds(mClipBounds);
mSourceView.invalidateOutline();
}

View File

@@ -47,6 +47,7 @@ import com.android.systemui.recents.events.activity.DebugFlagsChangedEvent;
import com.android.systemui.recents.events.activity.DismissRecentsToHomeAnimationStarted;
import com.android.systemui.recents.events.activity.HideHistoryButtonEvent;
import com.android.systemui.recents.events.activity.HideHistoryEvent;
import com.android.systemui.recents.events.activity.LaunchTaskEvent;
import com.android.systemui.recents.events.activity.ShowHistoryButtonEvent;
import com.android.systemui.recents.events.activity.ShowHistoryEvent;
import com.android.systemui.recents.events.component.RecentsVisibilityChangedEvent;
@@ -71,7 +72,7 @@ import static android.app.ActivityManager.StackId.INVALID_STACK_ID;
* This view is the the top level layout that contains TaskStacks (which are laid out according
* to their SpaceNode bounds.
*/
public class RecentsView extends FrameLayout implements TaskStackView.TaskStackViewCallbacks {
public class RecentsView extends FrameLayout {
private static final String TAG = "RecentsView";
private static final boolean DEBUG = false;
@@ -156,7 +157,6 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV
addView(mTaskStackView);
} else {
mTaskStackView = new TaskStackView(getContext(), stack);
mTaskStackView.setCallbacks(this);
addView(mTaskStackView);
}
} else {
@@ -164,7 +164,6 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV
removeView(mTaskStackView);
}
mTaskStackView = new TaskStackView(getContext(), stack);
mTaskStackView.setCallbacks(this);
addView(mTaskStackView);
}
@@ -223,8 +222,8 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV
Task task = mTaskStackView.getFocusedTask();
if (task != null) {
TaskView taskView = mTaskStackView.getChildViewForTask(task);
onTaskViewClicked(mTaskStackView, taskView, stack, task, false, null,
INVALID_STACK_ID);
EventBus.getDefault().send(new LaunchTaskEvent(taskView, task, null,
INVALID_STACK_ID, false));
return true;
}
}
@@ -238,8 +237,8 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV
Task task = stack.getLaunchTarget();
if (task != null) {
TaskView taskView = mTaskStackView.getChildViewForTask(task);
onTaskViewClicked(mTaskStackView, taskView, stack, task, false, null,
INVALID_STACK_ID);
EventBus.getDefault().send(new LaunchTaskEvent(taskView, task, null,
INVALID_STACK_ID, false));
return true;
}
}
@@ -256,8 +255,8 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV
for (int j = 0; j < taskViewCount; j++) {
TaskView tv = taskViews.get(j);
if (tv.getTask() == task) {
onTaskViewClicked(mTaskStackView, tv, stack, task, false,
taskBounds, destinationStack);
EventBus.getDefault().send(new LaunchTaskEvent(tv, task, taskBounds,
destinationStack, false));
return true;
}
}
@@ -491,19 +490,14 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV
return super.verifyDrawable(who);
}
/**** TaskStackView.TaskStackCallbacks Implementation ****/
@Override
public void onTaskViewClicked(final TaskStackView stackView, final TaskView tv,
final TaskStack stack, final Task task, final boolean lockToTask,
final Rect bounds, int destinationStack) {
mLastTaskLaunchedWasFreeform = task.isFreeformTask();
mTransitionHelper.launchTaskFromRecents(stack, task, stackView, tv, lockToTask, bounds,
destinationStack);
}
/**** EventBus Events ****/
public final void onBusEvent(LaunchTaskEvent event) {
mLastTaskLaunchedWasFreeform = event.task.isFreeformTask();
mTransitionHelper.launchTaskFromRecents(mStack, event.task, mTaskStackView, event.taskView,
event.screenPinningRequested, event.targetTaskBounds, event.targetTaskStack);
}
public final void onBusEvent(DragStartEvent event) {
updateVisibleDockRegions(mTouchHandler.getDockStatesForCurrentOrientation(),
TaskStack.DockState.NONE.viewState.dockAreaAlpha);

View File

@@ -51,6 +51,7 @@ import com.android.systemui.recents.events.activity.EnterRecentsWindowAnimationC
import com.android.systemui.recents.events.activity.HideHistoryButtonEvent;
import com.android.systemui.recents.events.activity.HideHistoryEvent;
import com.android.systemui.recents.events.activity.IterateRecentsEvent;
import com.android.systemui.recents.events.activity.LaunchTaskEvent;
import com.android.systemui.recents.events.activity.PackagesChangedEvent;
import com.android.systemui.recents.events.activity.ShowHistoryButtonEvent;
import com.android.systemui.recents.events.activity.ShowHistoryEvent;
@@ -115,17 +116,10 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
}
};
/** The TaskView callbacks */
interface TaskStackViewCallbacks {
public void onTaskViewClicked(TaskStackView stackView, TaskView tv, TaskStack stack, Task t,
boolean lockToTask, Rect bounds, int destinationStack);
}
TaskStack mStack;
TaskStackLayoutAlgorithm mLayoutAlgorithm;
TaskStackViewScroller mStackScroller;
TaskStackViewTouchHandler mTouchHandler;
TaskStackViewCallbacks mCb;
GradientDrawable mFreeformWorkspaceBackground;
ObjectAnimator mFreeformWorkspaceBackgroundAnimator;
ViewPool<TaskView, Task> mViewPool;
@@ -223,11 +217,6 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
}
}
/** Sets the callbacks */
void setCallbacks(TaskStackViewCallbacks cb) {
mCb = cb;
}
@Override
protected void onAttachedToWindow() {
SystemServicesProxy ssp = Recents.getSystemServices();
@@ -1205,7 +1194,8 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
public boolean launchFreeformTasks() {
Task frontTask = mStack.getStackFrontMostTask();
if (frontTask != null && frontTask.isFreeformTask()) {
onTaskViewClicked(getChildViewForTask(frontTask), frontTask, false);
EventBus.getDefault().send(new LaunchTaskEvent(getChildViewForTask(frontTask),
frontTask, null, INVALID_STACK_ID, false));
return true;
}
return false;
@@ -1375,16 +1365,6 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
/**** TaskViewCallbacks Implementation ****/
@Override
public void onTaskViewClicked(TaskView tv, Task task, boolean lockToTask) {
// Cancel any doze triggers
mUIDozeTrigger.stopDozing();
if (mCb != null) {
mCb.onTaskViewClicked(this, tv, mStack, task, lockToTask, null, INVALID_STACK_ID);
}
}
@Override
public void onTaskViewClipStateChanged(TaskView tv) {
requestUpdateStackViewsClip();
@@ -1437,6 +1417,11 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
}
}
public final void onBusEvent(LaunchTaskEvent event) {
// Cancel any doze triggers once a task is launched
mUIDozeTrigger.stopDozing();
}
public final void onBusEvent(DismissTaskViewEvent event) {
removeTaskViewFromStack(event.taskView);
}

View File

@@ -45,6 +45,7 @@ import com.android.systemui.recents.RecentsActivity;
import com.android.systemui.recents.RecentsActivityLaunchState;
import com.android.systemui.recents.RecentsConfiguration;
import com.android.systemui.recents.events.EventBus;
import com.android.systemui.recents.events.activity.LaunchTaskEvent;
import com.android.systemui.recents.events.ui.DismissTaskViewEvent;
import com.android.systemui.recents.events.ui.dragndrop.DragEndEvent;
import com.android.systemui.recents.events.ui.dragndrop.DragStartEvent;
@@ -54,6 +55,8 @@ import com.android.systemui.recents.model.Task;
import com.android.systemui.recents.model.TaskStack;
import com.android.systemui.statusbar.phone.PhoneStatusBar;
import static android.app.ActivityManager.StackId.INVALID_STACK_ID;
/* A task view */
public class TaskView extends FrameLayout implements Task.TaskCallbacks,
View.OnClickListener, View.OnLongClickListener {
@@ -63,8 +66,7 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks,
/** The TaskView callbacks */
interface TaskViewCallbacks {
public void onTaskViewClicked(TaskView tv, Task task, boolean lockToTask);
public void onTaskViewClipStateChanged(TaskView tv);
void onTaskViewClipStateChanged(TaskView tv);
}
float mTaskProgress;
@@ -278,7 +280,6 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks,
/** Resets this view's properties */
void resetViewProperties() {
setDim(0);
setLayerType(View.LAYER_TYPE_NONE, null);
setVisibility(View.VISIBLE);
getViewBounds().reset();
TaskViewTransform.reset(this);
@@ -723,13 +724,14 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks,
@Override
public void onClick(final View v) {
boolean screenPinningRequested = false;
if (v == mActionButtonView) {
// Reset the translation of the action button before we animate it out
mActionButtonView.setTranslationZ(0f);
screenPinningRequested = true;
}
if (mCb != null) {
mCb.onTaskViewClicked(this, mTask, (v == mActionButtonView));
}
EventBus.getDefault().send(new LaunchTaskEvent(this, mTask, null, INVALID_STACK_ID,
screenPinningRequested));
}
/**** View.OnLongClickListener Implementation ****/

View File

@@ -16,25 +16,20 @@
package com.android.systemui.recents.views;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Outline;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.graphics.drawable.RippleDrawable;
import android.graphics.drawable.ShapeDrawable;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewOutlineProvider;
import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator;
import android.widget.FrameLayout;
@@ -45,12 +40,16 @@ import com.android.systemui.R;
import com.android.systemui.recents.Constants;
import com.android.systemui.recents.Recents;
import com.android.systemui.recents.events.EventBus;
import com.android.systemui.recents.events.ui.ResizeTaskEvent;
import com.android.systemui.recents.events.activity.LaunchTaskEvent;
import com.android.systemui.recents.events.ui.ShowApplicationInfoEvent;
import com.android.systemui.recents.misc.SystemServicesProxy;
import com.android.systemui.recents.misc.Utilities;
import com.android.systemui.recents.model.Task;
import static android.app.ActivityManager.StackId.FREEFORM_WORKSPACE_STACK_ID;
import static android.app.ActivityManager.StackId.FULLSCREEN_WORKSPACE_STACK_ID;
import static android.app.ActivityManager.StackId.INVALID_STACK_ID;
/* The task bar view */
public class TaskViewHeader extends FrameLayout
@@ -63,6 +62,7 @@ public class TaskViewHeader extends FrameLayout
ImageView mDismissButton;
ImageView mApplicationIcon;
TextView mActivityDescription;
int mMoveTaskTargetStackId = INVALID_STACK_ID;
// Header drawables
Rect mTaskViewRect = new Rect();
@@ -157,23 +157,54 @@ public class TaskViewHeader extends FrameLayout
*/
public void onTaskViewSizeChanged(int width, int height) {
mTaskViewRect.set(0, 0, width, height);
if (mDismissButton.getMeasuredWidth() > (width - mApplicationIcon.getMeasuredWidth())) {
mDismissButton.setAlpha(0f);
} else {
mDismissButton.setAlpha(1f);
if (mDismissButton != null) {
mDismissButton.setTranslationX(width - getMeasuredWidth());
boolean updateMoveTaskButton = mMoveTaskButton.getVisibility() != View.GONE;
int appIconWidth = mApplicationIcon.getMeasuredWidth();
int activityDescWidth = mActivityDescription.getMeasuredWidth();
int dismissIconWidth = mDismissButton.getMeasuredWidth();
int moveTaskIconWidth = mMoveTaskButton.getVisibility() == View.VISIBLE
? mMoveTaskButton.getMeasuredWidth()
: 0;
// Priority-wise, we show the activity icon first, the dismiss icon if there is room, the
// move-task icon if there is room, and then finally, the activity label if there is room
if (width < (appIconWidth + dismissIconWidth)) {
mActivityDescription.setVisibility(View.INVISIBLE);
if (updateMoveTaskButton) {
mMoveTaskButton.setVisibility(View.INVISIBLE);
}
}
if (mActivityDescription.getMeasuredWidth() > (width -
(mApplicationIcon.getMeasuredWidth() + mDismissButton.getMeasuredWidth()))) {
mActivityDescription.setAlpha(0f);
mDismissButton.setVisibility(View.INVISIBLE);
} else if (width < (appIconWidth + dismissIconWidth + moveTaskIconWidth)) {
mActivityDescription.setVisibility(View.INVISIBLE);
if (updateMoveTaskButton) {
mMoveTaskButton.setVisibility(View.INVISIBLE);
}
mDismissButton.setVisibility(View.VISIBLE);
} else if (width < (appIconWidth + dismissIconWidth + moveTaskIconWidth +
activityDescWidth)) {
mActivityDescription.setVisibility(View.INVISIBLE);
if (updateMoveTaskButton) {
mMoveTaskButton.setVisibility(View.VISIBLE);
}
mDismissButton.setVisibility(View.VISIBLE);
} else {
mActivityDescription.setAlpha(1f);
mActivityDescription.setVisibility(View.VISIBLE);
if (updateMoveTaskButton) {
mMoveTaskButton.setVisibility(View.VISIBLE);
}
mDismissButton.setVisibility(View.VISIBLE);
}
if (updateMoveTaskButton) {
mMoveTaskButton.setTranslationX(width - getMeasuredWidth());
}
mDismissButton.setTranslationX(width - getMeasuredWidth());
invalidate();
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
onTaskViewSizeChanged(mTaskViewRect.width(), mTaskViewRect.height());
}
@Override
protected void onDraw(Canvas canvas) {
// Draw the highlight at the top edge (but put the bottom edge just out of view)
@@ -197,6 +228,7 @@ public class TaskViewHeader extends FrameLayout
/** Binds the bar view to the task */
public void rebindToTask(Task t) {
SystemServicesProxy ssp = Recents.getSystemServices();
mTask = t;
// If an activity icon is defined, then we use that as the primary icon to show in the bar,
@@ -228,12 +260,26 @@ public class TaskViewHeader extends FrameLayout
mLightDismissDrawable : mDarkDismissDrawable);
mDismissButton.setContentDescription(String.format(mDismissContentDescription,
t.contentDescription));
updateResizeTaskBarIcon(t);
mMoveTaskButton.setVisibility(View.VISIBLE);
mMoveTaskButton.setOnClickListener(this);
// When freeform workspaces are enabled, then update the move-task button depending on the
// current task
if (ssp.hasFreeformWorkspaceSupport()) {
if (t.isFreeformTask()) {
mMoveTaskTargetStackId = FULLSCREEN_WORKSPACE_STACK_ID;
mMoveTaskButton.setImageResource(t.useLightOnPrimaryColor
? R.drawable.recents_move_task_fullscreen_light
: R.drawable.recents_move_task_fullscreen_dark);
} else {
mMoveTaskTargetStackId = FREEFORM_WORKSPACE_STACK_ID;
mMoveTaskButton.setImageResource(t.useLightOnPrimaryColor
? R.drawable.recents_move_task_freeform_light
: R.drawable.recents_move_task_freeform_dark);
}
mMoveTaskButton.setVisibility(View.VISIBLE);
mMoveTaskButton.setOnClickListener(this);
}
// In accessibility, a single click on the focused app info button will show it
SystemServicesProxy ssp = Recents.getSystemServices();
if (ssp.isTouchExplorationEnabled()) {
mApplicationIcon.setOnClickListener(this);
}
@@ -247,40 +293,6 @@ public class TaskViewHeader extends FrameLayout
mMoveTaskButton.setOnClickListener(null);
}
/** Updates the resize task bar button. */
void updateResizeTaskBarIcon(Task t) {
SystemServicesProxy ssp = Recents.getSystemServices();
Rect display = ssp.getWindowRect();
Rect taskRect = ssp.getTaskBounds(t.key.id);
int resId = R.drawable.star;
if (display.equals(taskRect) || taskRect.isEmpty()) {
resId = R.drawable.vector_drawable_place_fullscreen;
} else {
boolean top = display.top == taskRect.top;
boolean bottom = display.bottom == taskRect.bottom;
boolean left = display.left == taskRect.left;
boolean right = display.right == taskRect.right;
if (top && bottom && left) {
resId = R.drawable.vector_drawable_place_left;
} else if (top && bottom && right) {
resId = R.drawable.vector_drawable_place_right;
} else if (top && left && right) {
resId = R.drawable.vector_drawable_place_top;
} else if (bottom && left && right) {
resId = R.drawable.vector_drawable_place_bottom;
} else if (top && right) {
resId = R.drawable.vector_drawable_place_top_right;
} else if (top && left) {
resId = R.drawable.vector_drawable_place_top_left;
} else if (bottom && right) {
resId = R.drawable.vector_drawable_place_bottom_right;
} else if (bottom && left) {
resId = R.drawable.vector_drawable_place_bottom_left;
}
}
mMoveTaskButton.setImageResource(resId);
}
/** Animates this task bar dismiss button when launching a task. */
void startLaunchTaskDismissAnimation(final Runnable postAnimationRunanble) {
if (mDismissButton.getVisibility() == View.VISIBLE) {
@@ -356,7 +368,12 @@ public class TaskViewHeader extends FrameLayout
MetricsLogger.histogram(getContext(), "overview_task_dismissed_source",
Constants.Metrics.DismissSourceHeaderButton);
} else if (v == mMoveTaskButton) {
EventBus.getDefault().send(new ResizeTaskEvent(mTask));
TaskView tv = Utilities.findParent(this, TaskView.class);
Rect bounds = mMoveTaskTargetStackId == FREEFORM_WORKSPACE_STACK_ID
? new Rect(mTaskViewRect)
: new Rect();
EventBus.getDefault().send(new LaunchTaskEvent(tv, mTask, bounds,
mMoveTaskTargetStackId, false));
}
}