Start implementation of new app info storage page
Things are mostly in the right places, may need some minor location
adjustment on everything and styling for the buttons.
Bug: 19511439
Change-Id: If7730285d6ddc36e32cc8bc119885a8e215c0eb5
diff --git a/res/layout/app_cache_settings.xml b/res/layout/app_cache_settings.xml
new file mode 100644
index 0000000..bb57433
--- /dev/null
+++ b/res/layout/app_cache_settings.xml
@@ -0,0 +1,58 @@
+<?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.
+-->
+
+<!-- Clear cache section -->
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/all_details"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+ android:orientation="vertical">
+
+ <FrameLayout
+ android:id="@+id/cache_size"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="8dip">
+ <TextView
+ android:text="@string/cache_size_label"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:maxLines="1"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textColor="?android:textColorPrimary"
+ android:gravity="center_vertical" />
+ <TextView
+ android:id="@+id/cache_size_text"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:gravity="right"
+ android:maxLines="1" />
+ </FrameLayout>
+
+ <include
+ android:id="@+id/clear_cache_button"
+ layout="@layout/single_button_panel" />
+
+ <Space
+ android:layout_width="match_parent"
+ android:layout_height="10dp" />
+
+</LinearLayout>
diff --git a/res/layout/app_storage_settings.xml b/res/layout/app_storage_settings.xml
new file mode 100644
index 0000000..82493f7
--- /dev/null
+++ b/res/layout/app_storage_settings.xml
@@ -0,0 +1,151 @@
+<?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:id="@+id/all_details"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+ android:orientation="vertical">
+
+ <TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/category_title"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/dashboard_category_title_height"
+ android:singleLine="true"
+ android:gravity="center_vertical"
+ android:textAppearance="@style/TextAppearance.CategoryTitle"
+ android:textAlignment="viewStart"
+ android:text="@string/storage_label"
+ />
+
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="0dip">
+ <TextView
+ android:id="@+id/total_size_prefix"
+ android:text="@string/total_size_label"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:textColor="?android:textColorPrimary"
+ android:maxLines="1" />
+ <TextView
+ android:id="@+id/total_size_text"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:gravity="right"
+ android:maxLines="1" />
+ </FrameLayout>
+
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="3dip">
+ <TextView
+ android:id="@+id/application_size_prefix"
+ android:text="@string/application_size_label"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:textColor="?android:textColorPrimary"
+ android:maxLines="1" />
+ <TextView
+ android:id="@+id/application_size_text"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:gravity="right"
+ android:maxLines="1" />
+ </FrameLayout>
+
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="3dip">
+ <TextView
+ android:id="@+id/external_code_size_prefix"
+ android:text="@string/external_code_size_label"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:textColor="?android:textColorPrimary"
+ android:maxLines="1" />
+ <TextView
+ android:id="@+id/external_code_size_text"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:gravity="right"
+ android:maxLines="1" />
+ </FrameLayout>
+
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="3dip">
+ <TextView
+ android:id="@+id/data_size_prefix"
+ android:text="@string/data_size_label"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:textColor="?android:textColorPrimary"
+ android:maxLines="1" />
+ <TextView
+ android:id="@+id/data_size_text"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:gravity="right"
+ android:maxLines="1" />
+ </FrameLayout>
+
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="3dip">
+ <TextView
+ android:id="@+id/external_data_size_prefix"
+ android:text="@string/external_data_size_label"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:textColor="?android:textColorPrimary"
+ android:maxLines="1" />
+ <TextView
+ android:id="@+id/external_data_size_text"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:gravity="right"
+ android:maxLines="1" />
+ </FrameLayout>
+
+ <include
+ android:id="@+id/clear_data_button"
+ layout="@layout/single_button_panel" />
+
+ <Space
+ android:layout_width="match_parent"
+ android:layout_height="10dp" />
+
+</LinearLayout>
diff --git a/res/layout/single_button_panel.xml b/res/layout/single_button_panel.xml
new file mode 100755
index 0000000..5f1fee9
--- /dev/null
+++ b/res/layout/single_button_panel.xml
@@ -0,0 +1,43 @@
+<?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.
+-->
+
+<!--
+ Defines a panel with one button in the same layout as the two button layout.
+-->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="bottom"
+ android:paddingTop="4dip"
+ android:orientation="horizontal">
+ <Button
+ android:id="@+id/button"
+ android:layout_width="120dip"
+ android:layout_weight="0.4"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical" />
+ <Space
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="0.2" />
+ <Space
+ android:layout_width="120dip"
+ android:layout_weight="0.4"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"/>
+</LinearLayout>
diff --git a/res/layout/storage_settings.xml b/res/layout/storage_settings.xml
deleted file mode 100644
index a73cf4c..0000000
--- a/res/layout/storage_settings.xml
+++ /dev/null
@@ -1,306 +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.
--->
-
-<ScrollView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:clipToPadding="false"
- android:scrollbarStyle="@integer/preference_scrollbar_style">
-
- <LinearLayout
- android:id="@+id/all_details"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingStart="?android:attr/listPreferredItemPaddingStart"
- android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
- android:paddingBottom="5dip"
- android:orientation="vertical">
-
-
- <TextView
- style="?android:attr/listSeparatorTextViewStyle"
- android:layout_marginTop="8dip"
- android:text="@string/storage_label" />
-
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:paddingStart="?android:attr/listPreferredItemPaddingStart"
- android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:baselineAligned="true"
- android:paddingTop="-1dip">
- <TextView
- android:id="@+id/total_size_prefix"
- android:text="@string/total_size_label"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:maxLines="1"
- android:paddingTop="6dip" />
- <ImageView
- android:id="@+id/info_size_dots"
- android:src="@drawable/dotted_line_480px"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:layout_height="1px"
- android:layout_gravity="bottom"
- android:layout_marginStart="1dip"
- android:layout_marginEnd="1dip"
- android:layout_marginBottom="4dip"
- android:scaleType="center"
- android:contentDescription="@null" />
- <TextView
- android:id="@+id/total_size_text"
- android:paddingTop="6dip"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:maxLines="1" />
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:baselineAligned="true"
- android:paddingTop="-1dip">
- <TextView
- android:id="@+id/application_size_prefix"
- android:text="@string/application_size_label"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:maxLines="1"
- android:paddingTop="6dip" />
- <ImageView
- android:id="@+id/info_size_dots"
- android:src="@drawable/dotted_line_480px"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:layout_height="1px"
- android:layout_gravity="bottom"
- android:layout_marginStart="1dip"
- android:layout_marginEnd="1dip"
- android:layout_marginBottom="4dip"
- android:scaleType="center"
- android:contentDescription="@null" />
- <TextView
- android:id="@+id/application_size_text"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:paddingTop="6dip"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:maxLines="1" />
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:baselineAligned="true"
- android:paddingTop="-1dip">
- <TextView
- android:id="@+id/external_code_size_prefix"
- android:text="@string/external_code_size_label"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:maxLines="1"
- android:paddingTop="6dip" />
- <ImageView
- android:id="@+id/info_size_dots"
- android:src="@drawable/dotted_line_480px"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:layout_height="1px"
- android:layout_gravity="bottom"
- android:layout_marginStart="1dip"
- android:layout_marginEnd="1dip"
- android:layout_marginBottom="4dip"
- android:scaleType="center"
- android:contentDescription="@null" />
- <TextView
- android:id="@+id/external_code_size_text"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:paddingTop="6dip"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:maxLines="1" />
- </LinearLayout>
-
- <LinearLayout
- android:id="@+id/info_size"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:baselineAligned="true"
- android:paddingTop="-1dip">
- <TextView
- android:id="@+id/data_size_prefix"
- android:text="@string/data_size_label"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:maxLines="1"
- android:paddingTop="6dip" />
- <ImageView
- android:id="@+id/info_size_dots"
- android:src="@drawable/dotted_line_480px"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:layout_height="1px"
- android:layout_gravity="bottom"
- android:layout_marginStart="1dip"
- android:layout_marginEnd="1dip"
- android:layout_marginBottom="4dip"
- android:scaleType="center"
- android:contentDescription="@null" />
- <TextView
- android:id="@+id/data_size_text"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:paddingTop="6dip"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:maxLines="1" />
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:baselineAligned="true"
- android:paddingTop="-1dip">
- <TextView
- android:id="@+id/external_data_size_prefix"
- android:text="@string/external_data_size_label"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:maxLines="1"
- android:paddingTop="6dip" />
- <ImageView
- android:id="@+id/info_size_dots"
- android:src="@drawable/dotted_line_480px"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:layout_height="1px"
- android:layout_gravity="bottom"
- android:layout_marginStart="1dip"
- android:layout_marginEnd="1dip"
- android:layout_marginBottom="4dip"
- android:scaleType="center"
- android:contentDescription="@null" />
- <TextView
- android:id="@+id/external_data_size_text"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:paddingTop="6dip"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:maxLines="1" />
- </LinearLayout>
-
- <!-- Clear data and install location buttons -->
- <include
- layout="@layout/two_buttons_panel"
- android:id="@+id/data_buttons_panel"/>
-
- </LinearLayout>
-
-
- <!-- Clear cache section -->
- <RelativeLayout
- android:id="@+id/cache_panel"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" >
- <TextView
- android:id="@+id/cache_header"
- style="?android:attr/listSeparatorTextViewStyle"
- android:layout_marginTop="8dip"
- android:text="@string/cache_header_label" />
- <LinearLayout
- android:id="@+id/cache_size"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:baselineAligned="true"
- android:layout_below="@id/cache_header"
- android:paddingStart="?android:attr/listPreferredItemPaddingStart"
- android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
- android:paddingTop="-1dip">
- <TextView
- android:text="@string/cache_size_label"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:maxLines="1"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:paddingTop="6dip"
- android:gravity="center_vertical" />
- <ImageView
- android:src="@drawable/dotted_line_480px"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:layout_height="1px"
- android:layout_gravity="bottom"
- android:layout_marginStart="1dip"
- android:layout_marginEnd="1dip"
- android:layout_marginBottom="4dip"
- android:scaleType="center"
- android:contentDescription="@null" />
- <TextView
- android:id="@+id/cache_size_text"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:paddingTop="6dip"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:maxLines="1" />
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_below="@id/cache_size"
- android:paddingStart="?android:attr/listPreferredItemPaddingStart"
- android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
- android:paddingTop="4dip"
- android:orientation="horizontal">
- <View
- android:layout_width="120dip"
- android:layout_height="0dip"
- android:layout_weight="0.4" />
- <View
- android:layout_width="0dip"
- android:layout_height="0dip"
- android:visibility="invisible"
- android:layout_weight="0.2" />
- <Button
- android:id="@+id/clear_cache_button"
- android:layout_width="120dip"
- android:layout_height="wrap_content"
- android:layout_weight="0.4"
- android:text="@string/clear_cache_btn_text" />
- </LinearLayout>
-
- </RelativeLayout>
- </LinearLayout>
-</ScrollView>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 14670a7..f4edc7a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -6053,15 +6053,18 @@
<string name="storage_summary_format"><xliff:g id="size" example="30.00MB">%1$s</xliff:g> used in <xliff:g id="storage_type" example="internal storage">%2$s</xliff:g></string>
<!-- Summary describing internal storage for applications [CHAR LIMIT=25] -->
- <string name="storage_type_internal">internal storage</string>
+ <string name="storage_type_internal">Internal storage</string>
<!-- Summary describing external storage for applications [CHAR LIMIT=25] -->
- <string name="storage_type_external">external storage</string>
+ <string name="storage_type_external">External storage</string>
<!-- Title for data usage screen when entered from app info [CHAR LIMIT=30] -->
<string name="app_data_usage">App data usage</string>
<!-- Summary for data usage preference [CHAR LIMIT=15] -->
<string name="data_summary_format"><xliff:g id="size" example="30.00MB">%1$s</xliff:g> used since <xliff:g id="date" example="Jan 12">%2$s</xliff:g></string>
+ <!-- Title of storage preference to control where app is stored -->
+ <string name="storage_used">Storage used</string>
+
<!-- App notification summary with notifications enabled [CHAR LIMIT=40] -->
<string name="notifications_enabled">On</string>
<!-- App notification summary with notifications disabled [CHAR LIMIT=40] -->
diff --git a/res/xml/app_storage_settings.xml b/res/xml/app_storage_settings.xml
new file mode 100644
index 0000000..6baaae1
--- /dev/null
+++ b/res/xml/app_storage_settings.xml
@@ -0,0 +1,34 @@
+<?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.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/application_info_label">
+
+ <com.android.settings.DropDownPreference
+ android:key="app_location_setting"
+ android:title="@string/storage_used"
+ android:summary="@string/storage_type_internal"
+ android:selectable="true" />
+
+ <com.android.settings.applications.LayoutPreference
+ android:key="storage_settings"
+ android:layout="@layout/app_storage_settings" />
+
+ <com.android.settings.applications.LayoutPreference
+ android:key="cache_settings"
+ android:layout="@layout/app_cache_settings" />
+
+</PreferenceScreen>
diff --git a/res/xml/battery_saver_settings.xml b/res/xml/battery_saver_settings.xml
index cb923c8..0134c6f 100644
--- a/res/xml/battery_saver_settings.xml
+++ b/res/xml/battery_saver_settings.xml
@@ -19,7 +19,7 @@
android:key="battery_saver">
<!-- Turn on automatically -->
- <com.android.settings.notification.DropDownPreference
+ <com.android.settings.DropDownPreference
android:key="turn_on_automatically"
android:title="@string/battery_saver_turn_on_automatically_title"
android:persistent="false" />
diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml
index db650f3..70dcb9a 100644
--- a/res/xml/display_settings.xml
+++ b/res/xml/display_settings.xml
@@ -81,7 +81,7 @@
android:entryValues="@array/entryvalues_font_size"
android:dialogTitle="@string/dialog_title_font_size" />
- <com.android.settings.notification.DropDownPreference
+ <com.android.settings.DropDownPreference
android:key="auto_rotate"
android:title="@string/display_auto_rotate_title" />
diff --git a/res/xml/installed_app_details.xml b/res/xml/installed_app_details.xml
index 2f72f5d..09f5bb3 100644
--- a/res/xml/installed_app_details.xml
+++ b/res/xml/installed_app_details.xml
@@ -16,7 +16,7 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/application_info_label">
- <com.android.settings.applications.HeaderPreference
+ <com.android.settings.applications.LayoutPreference
android:key="header_view"
android:layout="@layout/installed_app_details" />
diff --git a/res/xml/notification_settings.xml b/res/xml/notification_settings.xml
index 6e62f83..ac61b00 100644
--- a/res/xml/notification_settings.xml
+++ b/res/xml/notification_settings.xml
@@ -105,7 +105,7 @@
android:persistent="false" />
<!-- When device is locked -->
- <com.android.settings.notification.DropDownPreference
+ <com.android.settings.DropDownPreference
android:key="lock_screen_notifications"
android:title="@string/lock_screen_notifications_title"
android:persistent="false" />
diff --git a/res/xml/other_sound_settings.xml b/res/xml/other_sound_settings.xml
index 08679db..88c4130 100644
--- a/res/xml/other_sound_settings.xml
+++ b/res/xml/other_sound_settings.xml
@@ -60,13 +60,13 @@
android:persistent="false" />
<!-- Dock speaker plays -->
- <com.android.settings.notification.DropDownPreference
+ <com.android.settings.DropDownPreference
android:key="dock_audio_media"
android:title="@string/dock_audio_media_title"
android:persistent="false" />
<!-- Emergency tone -->
- <com.android.settings.notification.DropDownPreference
+ <com.android.settings.DropDownPreference
android:key="emergency_tone"
android:title="@string/emergency_tone_title"
android:persistent="false" />
diff --git a/res/xml/zen_mode_settings.xml b/res/xml/zen_mode_settings.xml
index 7514565..3ac4eef 100644
--- a/res/xml/zen_mode_settings.xml
+++ b/res/xml/zen_mode_settings.xml
@@ -20,7 +20,7 @@
android:title="@string/zen_mode_settings_title" >
<!-- When calls and notifications arrive -->
- <com.android.settings.notification.DropDownPreference
+ <com.android.settings.DropDownPreference
android:key="zen_mode"
android:title="@string/zen_mode_option_title"
android:persistent="false" />
@@ -50,7 +50,7 @@
android:switchTextOff=""
android:switchTextOn="" />
- <com.android.settings.notification.DropDownPreference
+ <com.android.settings.DropDownPreference
android:key="starred"
android:title="@string/zen_mode_from"
android:persistent="false" />
@@ -79,7 +79,7 @@
<!-- Start time/End time added and removed here! :-) -->
<!-- Interruptions allowed -->
- <com.android.settings.notification.DropDownPreference
+ <com.android.settings.DropDownPreference
android:key="downtime_mode"
android:title="@string/zen_mode_downtime_mode_title"
android:order="100"
@@ -103,4 +103,4 @@
</PreferenceCategory>
-</PreferenceScreen>
\ No newline at end of file
+</PreferenceScreen>
diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java
index 337ec23..3358124 100644
--- a/src/com/android/settings/DisplaySettings.java
+++ b/src/com/android/settings/DisplaySettings.java
@@ -17,8 +17,7 @@
package com.android.settings;
import com.android.internal.view.RotationPolicy;
-import com.android.settings.notification.DropDownPreference;
-import com.android.settings.notification.DropDownPreference.Callback;
+import com.android.settings.DropDownPreference.Callback;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
diff --git a/src/com/android/settings/notification/DropDownPreference.java b/src/com/android/settings/DropDownPreference.java
similarity index 98%
rename from src/com/android/settings/notification/DropDownPreference.java
rename to src/com/android/settings/DropDownPreference.java
index 1d1b366..8f8ec78 100644
--- a/src/com/android/settings/notification/DropDownPreference.java
+++ b/src/com/android/settings/DropDownPreference.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.settings.notification;
+package com.android.settings;
import android.content.Context;
import android.preference.Preference;
diff --git a/src/com/android/settings/applications/AppStorageSettings.java b/src/com/android/settings/applications/AppStorageSettings.java
index 72fa805..2f65a76 100644
--- a/src/com/android/settings/applications/AppStorageSettings.java
+++ b/src/com/android/settings/applications/AppStorageSettings.java
@@ -32,10 +32,8 @@
import android.os.RemoteException;
import android.text.format.Formatter;
import android.util.Log;
-import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
-import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
@@ -43,8 +41,10 @@
import com.android.settings.Utils;
import com.android.settings.applications.ApplicationsState.AppEntry;
import com.android.settings.applications.ApplicationsState.Callbacks;
+import com.android.settings.DropDownPreference;
-public class AppStorageSettings extends AppInfoWithHeader implements OnClickListener, Callbacks {
+public class AppStorageSettings extends AppInfoWithHeader
+ implements OnClickListener, Callbacks, DropDownPreference.Callback {
private static final String TAG = AppStorageSettings.class.getSimpleName();
//internal constants used in Handler
@@ -65,6 +65,10 @@
private static final int DLG_CANNOT_CLEAR_DATA = DLG_BASE + 2;
private static final int DLG_MOVE_FAILED = DLG_BASE + 3;
+ private static final String KEY_MOVE_PREFERENCE = "app_location_setting";
+ private static final String KEY_STORAGE_SETTINGS = "storage_settings";
+ private static final String KEY_CACHE_SETTINGS = "cache_settings";
+
private CanBeOnSdCardChecker mCanBeOnSdCardChecker;
private TextView mTotalSize;
private TextView mAppSize;
@@ -76,7 +80,8 @@
private TextView mCacheSize;
private Button mClearDataButton;
private Button mClearCacheButton;
- private Button mMoveAppButton;
+
+ private DropDownPreference mMoveDropDown;
private boolean mMoveInProgress = false;
private boolean mCanClearData = true;
@@ -102,40 +107,38 @@
super.onCreate(savedInstanceState);
mCanBeOnSdCardChecker = new CanBeOnSdCardChecker();
+ addPreferencesFromResource(R.xml.app_storage_settings);
+ setupViews();
}
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- final View view = inflater.inflate(R.layout.storage_settings, container, false);
-
- final ViewGroup allDetails = (ViewGroup)view.findViewById(R.id.all_details);
- Utils.forceCustomPadding(allDetails, true /* additive padding */);
+ private void setupViews() {
mComputingStr = getActivity().getText(R.string.computing_size);
mInvalidSizeStr = getActivity().getText(R.string.invalid_size_value);
+ LayoutPreference view = (LayoutPreference) findPreference(KEY_STORAGE_SETTINGS);
// Set default values on sizes
- mTotalSize = (TextView)view.findViewById(R.id.total_size_text);
- mAppSize = (TextView)view.findViewById(R.id.application_size_text);
- mDataSize = (TextView)view.findViewById(R.id.data_size_text);
- mExternalCodeSize = (TextView)view.findViewById(R.id.external_code_size_text);
- mExternalDataSize = (TextView)view.findViewById(R.id.external_data_size_text);
+ mTotalSize = (TextView) view.findViewById(R.id.total_size_text);
+ mAppSize = (TextView) view.findViewById(R.id.application_size_text);
+ mDataSize = (TextView) view.findViewById(R.id.data_size_text);
+ mExternalCodeSize = (TextView) view.findViewById(R.id.external_code_size_text);
+ mExternalDataSize = (TextView) view.findViewById(R.id.external_data_size_text);
if (Environment.isExternalStorageEmulated()) {
- ((View)mExternalCodeSize.getParent()).setVisibility(View.GONE);
- ((View)mExternalDataSize.getParent()).setVisibility(View.GONE);
+ ((View) mExternalCodeSize.getParent()).setVisibility(View.GONE);
+ ((View) mExternalDataSize.getParent()).setVisibility(View.GONE);
}
+ mClearDataButton = (Button) view.findViewById(R.id.clear_data_button)
+ .findViewById(R.id.button);
- // Initialize clear data and move install location buttons
- View data_buttons_panel = view.findViewById(R.id.data_buttons_panel);
- mMoveAppButton = (Button) data_buttons_panel.findViewById(R.id.left_button);
+ mMoveDropDown = (DropDownPreference) findPreference(KEY_MOVE_PREFERENCE);
+ mMoveDropDown.setCallback(this);
+ view = (LayoutPreference) findPreference(KEY_CACHE_SETTINGS);
// Cache section
- mCacheSize = (TextView)view.findViewById(R.id.cache_size_text);
- mClearCacheButton = (Button)view.findViewById(R.id.clear_cache_button);
- mClearDataButton = (Button) data_buttons_panel.findViewById(R.id.right_button);
-
- return view;
+ mCacheSize = (TextView) view.findViewById(R.id.cache_size_text);
+ mClearCacheButton = (Button) view.findViewById(R.id.clear_cache_button)
+ .findViewById(R.id.button);
+ mClearCacheButton.setText(R.string.clear_cache_btn_text);
}
@Override
@@ -157,16 +160,24 @@
} else {
showDialogInner(DLG_CLEAR_DATA, 0);
}
- } else if (v == mMoveAppButton) {
+ }
+ }
+
+ @Override
+ public boolean onItemSelected(int pos, Object value) {
+ boolean selectedExternal = (Boolean) value;
+ boolean isExternal = (mAppEntry.info.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0;
+ if (selectedExternal ^ isExternal) {
if (mPackageMoveObserver == null) {
mPackageMoveObserver = new PackageMoveObserver();
}
- int moveFlags = (mAppEntry.info.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0 ?
- PackageManager.MOVE_INTERNAL : PackageManager.MOVE_EXTERNAL_MEDIA;
+ int moveFlags = selectedExternal ? PackageManager.MOVE_EXTERNAL_MEDIA
+ : PackageManager.MOVE_INTERNAL;
mMoveInProgress = true;
refreshButtons();
mPm.movePackage(mAppEntry.info.packageName, mPackageMoveObserver, moveFlags);
}
+ return true;
}
private String getSizeStr(long size) {
@@ -248,16 +259,26 @@
retrieveAppEntry();
refreshButtons();
refreshSizeInfo();
+ boolean isExternal = (mAppEntry.info.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0;
+ mMoveDropDown.setSelectedItem(isExternal ? 1 : 0);
return true;
}
private void refreshButtons() {
if (!mMoveInProgress) {
- initMoveButton();
+ initMoveDropDown();
initDataButtons();
} else {
- mMoveAppButton.setText(R.string.moving);
- mMoveAppButton.setEnabled(false);
+ mMoveDropDown.setSummary(R.string.moving);
+ mMoveDropDown.setSelectable(false);
+ }
+ }
+
+ private void updateMoveEnabled(boolean enabled) {
+ mMoveDropDown.clearItems();
+ mMoveDropDown.addItem(R.string.storage_type_internal, false);
+ if (enabled) {
+ mMoveDropDown.addItem(R.string.storage_type_external, true);
}
}
@@ -287,30 +308,22 @@
}
}
- private void initMoveButton() {
+ private void initMoveDropDown() {
if (Environment.isExternalStorageEmulated()) {
- mMoveAppButton.setVisibility(View.INVISIBLE);
+ updateMoveEnabled(false);
return;
}
boolean dataOnly = (mPackageInfo == null) && (mAppEntry != null);
boolean moveDisable = true;
- if (dataOnly) {
- mMoveAppButton.setText(R.string.move_app);
- } else if ((mAppEntry.info.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {
- mMoveAppButton.setText(R.string.move_app_to_internal);
+ if ((mAppEntry.info.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {
// Always let apps move to internal storage from sdcard.
moveDisable = false;
} else {
- mMoveAppButton.setText(R.string.move_app_to_sdcard);
mCanBeOnSdCardChecker.init();
moveDisable = !mCanBeOnSdCardChecker.check(mAppEntry.info);
}
- if (moveDisable || mAppControlRestricted) {
- mMoveAppButton.setEnabled(false);
- } else {
- mMoveAppButton.setOnClickListener(this);
- mMoveAppButton.setEnabled(true);
- }
+ updateMoveEnabled(!moveDisable);
+ mMoveDropDown.setSelectable(!mAppControlRestricted);
}
/*
@@ -360,7 +373,7 @@
int result = msg.arg1;
String packageName = mAppEntry.info.packageName;
mClearDataButton.setText(R.string.clear_user_data_text);
- if(result == OP_SUCCESSFUL) {
+ if (result == OP_SUCCESSFUL) {
Log.i(TAG, "Cleared user data for package : "+packageName);
mState.requestSize(mPackageName, mUserId);
} else {
@@ -485,7 +498,7 @@
class ClearUserDataObserver extends IPackageDataObserver.Stub {
public void onRemoveCompleted(final String packageName, final boolean succeeded) {
final Message msg = mHandler.obtainMessage(MSG_CLEAR_USER_DATA);
- msg.arg1 = succeeded?OP_SUCCESSFUL:OP_FAILED;
+ msg.arg1 = succeeded ? OP_SUCCESSFUL : OP_FAILED;
mHandler.sendMessage(msg);
}
}
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index 0ab66ae..85b3523 100755
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -109,7 +109,7 @@
private boolean mInitialized;
private boolean mShowUninstalled;
- private HeaderPreference mHeader;
+ private LayoutPreference mHeader;
private Button mUninstallButton;
private boolean mUpdatedSysApp = false;
private TextView mAppVersion;
@@ -259,7 +259,7 @@
}
private void handleHeader() {
- mHeader = (HeaderPreference) findPreference(KEY_HEADER);
+ mHeader = (LayoutPreference) findPreference(KEY_HEADER);
// Get Control button panel
View btnPanel = mHeader.findViewById(R.id.control_buttons_panel);
diff --git a/src/com/android/settings/applications/HeaderPreference.java b/src/com/android/settings/applications/LayoutPreference.java
similarity index 91%
rename from src/com/android/settings/applications/HeaderPreference.java
rename to src/com/android/settings/applications/LayoutPreference.java
index 3af42a2..c74ad16 100644
--- a/src/com/android/settings/applications/HeaderPreference.java
+++ b/src/com/android/settings/applications/LayoutPreference.java
@@ -27,18 +27,18 @@
import com.android.settings.R;
import com.android.settings.Utils;
-public class HeaderPreference extends Preference {
+public class LayoutPreference extends Preference {
private View mRootView;
- public HeaderPreference(Context context, AttributeSet attrs) {
+ public LayoutPreference(Context context, AttributeSet attrs) {
super(context, attrs);
final TypedArray a = context.obtainStyledAttributes(
attrs, com.android.internal.R.styleable.Preference, 0, 0);
int layoutResource = a.getResourceId(com.android.internal.R.styleable.Preference_layout,
0);
if (layoutResource == 0) {
- throw new IllegalArgumentException("HeaderPreference requires a layout to be defined");
+ throw new IllegalArgumentException("LayoutPreference requires a layout to be defined");
}
// Need to create view now so that findViewById can be called immediately.
final View view = LayoutInflater.from(getContext())
diff --git a/src/com/android/settings/notification/NotificationSettings.java b/src/com/android/settings/notification/NotificationSettings.java
index 41ae0ab..123f0ef 100644
--- a/src/com/android/settings/notification/NotificationSettings.java
+++ b/src/com/android/settings/notification/NotificationSettings.java
@@ -49,6 +49,7 @@
import android.util.Log;
import com.android.internal.widget.LockPatternUtils;
+import com.android.settings.DropDownPreference;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;
diff --git a/src/com/android/settings/notification/SettingPref.java b/src/com/android/settings/notification/SettingPref.java
index a06c35a..a20d1b4 100644
--- a/src/com/android/settings/notification/SettingPref.java
+++ b/src/com/android/settings/notification/SettingPref.java
@@ -26,6 +26,7 @@
import android.provider.Settings.Global;
import android.provider.Settings.System;
+import com.android.settings.DropDownPreference;
import com.android.settings.SettingsPreferenceFragment;
/** Helper to manage a two-state or dropdown preference bound to a global or system setting. */
diff --git a/src/com/android/settings/notification/ZenModeSettings.java b/src/com/android/settings/notification/ZenModeSettings.java
index 556296c..441990b 100644
--- a/src/com/android/settings/notification/ZenModeSettings.java
+++ b/src/com/android/settings/notification/ZenModeSettings.java
@@ -50,6 +50,7 @@
import android.widget.ScrollView;
import android.widget.TimePicker;
+import com.android.settings.DropDownPreference;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.search.BaseSearchIndexProvider;