Merge "Reset color space when development options are disabled" into lmp-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index a0563b4..8369672 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1485,6 +1485,19 @@
android:resource="@id/battery_settings" />
</activity>
+ <activity android:name="Settings$AccountSettingsActivity"
+ android:label="@string/account_settings_title"
+ android:taskAffinity=""
+ android:parentActivityName="Settings">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <action android:name="android.settings.SYNC_SETTINGS" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+ android:value="com.android.settings.accounts.AccountSettings" />
+ </activity>
+
<activity android:name="Settings$AccountSyncSettingsActivity"
android:label="@string/account_sync_settings_title"
android:taskAffinity=""
@@ -1500,19 +1513,6 @@
android:resource="@id/account_settings" />
</activity>
- <activity android:name=".accounts.SyncSettingsActivity"
- android:label="@string/account_sync_settings_title">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <action android:name="android.settings.SYNC_SETTINGS" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.accounts.AccountSyncSettings" />
- <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
- android:resource="@id/account_settings" />
- </activity>
-
<activity android:name="com.android.settings.accounts.AddAccountSettings"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize"
@@ -1659,7 +1659,7 @@
</activity>
<activity android:name="Settings$NotificationAccessSettingsActivity"
- android:label="@string/manage_notification_access"
+ android:label="@string/manage_notification_access_title"
android:taskAffinity="">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@@ -1824,5 +1824,19 @@
</intent-filter>
</provider>
+ <receiver android:name=".search.HomePackageReceiver"
+ android:exported="false">
+ <intent-filter>
+ <action android:name="android.intent.action.PACKAGE_ADDED" />
+ <action android:name="android.intent.action.PACKAGE_CHANGED" />
+ <action android:name="android.intent.action.PACKAGE_REMOVED" />
+
+ <category android:name="android.intent.category.HOME" />
+ <category android:name="android.intent.category.LAUNCHER" />
+
+ <data android:scheme="package"/>
+ </intent-filter>
+ </receiver>
+
</application>
</manifest>
diff --git a/res/drawable-hdpi/data_grid_border.9.png b/res/drawable-hdpi/data_grid_border.9.png
index a857fae..8d22e10 100644
--- a/res/drawable-hdpi/data_grid_border.9.png
+++ b/res/drawable-hdpi/data_grid_border.9.png
Binary files differ
diff --git a/res/drawable-hdpi/data_grid_primary.9.png b/res/drawable-hdpi/data_grid_primary.9.png
deleted file mode 100644
index 93bdc6b..0000000
--- a/res/drawable-hdpi/data_grid_primary.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/data_grid_secondary.9.png b/res/drawable-hdpi/data_grid_secondary.9.png
deleted file mode 100644
index 23330d1..0000000
--- a/res/drawable-hdpi/data_grid_secondary.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/data_sweep_left_activated.9.png b/res/drawable-hdpi/data_sweep_left_activated.9.png
deleted file mode 100644
index 7a18e20..0000000
--- a/res/drawable-hdpi/data_sweep_left_activated.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/data_sweep_left_default.9.png b/res/drawable-hdpi/data_sweep_left_default.9.png
deleted file mode 100644
index 5088150..0000000
--- a/res/drawable-hdpi/data_sweep_left_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/data_sweep_limit_activated.9.png b/res/drawable-hdpi/data_sweep_limit_activated.9.png
index 36be41a..598ebd3 100644
--- a/res/drawable-hdpi/data_sweep_limit_activated.9.png
+++ b/res/drawable-hdpi/data_sweep_limit_activated.9.png
Binary files differ
diff --git a/res/drawable-hdpi/data_sweep_limit_default.9.png b/res/drawable-hdpi/data_sweep_limit_default.9.png
deleted file mode 100644
index 658d1d9..0000000
--- a/res/drawable-hdpi/data_sweep_limit_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/data_sweep_right_activated.9.png b/res/drawable-hdpi/data_sweep_right_activated.9.png
deleted file mode 100644
index 96ffbf6..0000000
--- a/res/drawable-hdpi/data_sweep_right_activated.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/data_sweep_right_default.9.png b/res/drawable-hdpi/data_sweep_right_default.9.png
deleted file mode 100644
index 22831a9..0000000
--- a/res/drawable-hdpi/data_sweep_right_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/data_sweep_warning_activated.9.png b/res/drawable-hdpi/data_sweep_warning_activated.9.png
index 83b8a65..b10dff6 100644
--- a/res/drawable-hdpi/data_sweep_warning_activated.9.png
+++ b/res/drawable-hdpi/data_sweep_warning_activated.9.png
Binary files differ
diff --git a/res/drawable-hdpi/data_sweep_warning_default.9.png b/res/drawable-hdpi/data_sweep_warning_default.9.png
deleted file mode 100644
index 3b2c1a7..0000000
--- a/res/drawable-hdpi/data_sweep_warning_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/data_grid_border.9.png b/res/drawable-mdpi/data_grid_border.9.png
index 699c513..942f4ea 100644
--- a/res/drawable-mdpi/data_grid_border.9.png
+++ b/res/drawable-mdpi/data_grid_border.9.png
Binary files differ
diff --git a/res/drawable-mdpi/data_grid_primary.9.png b/res/drawable-mdpi/data_grid_primary.9.png
deleted file mode 100644
index 83411cf..0000000
--- a/res/drawable-mdpi/data_grid_primary.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/data_grid_secondary.9.png b/res/drawable-mdpi/data_grid_secondary.9.png
deleted file mode 100644
index 23330d1..0000000
--- a/res/drawable-mdpi/data_grid_secondary.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/data_sweep_left_activated.9.png b/res/drawable-mdpi/data_sweep_left_activated.9.png
deleted file mode 100644
index 10c0687..0000000
--- a/res/drawable-mdpi/data_sweep_left_activated.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/data_sweep_left_default.9.png b/res/drawable-mdpi/data_sweep_left_default.9.png
deleted file mode 100644
index 397c459..0000000
--- a/res/drawable-mdpi/data_sweep_left_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/data_sweep_limit_activated.9.png b/res/drawable-mdpi/data_sweep_limit_activated.9.png
index 924384f..f2be5ea 100644
--- a/res/drawable-mdpi/data_sweep_limit_activated.9.png
+++ b/res/drawable-mdpi/data_sweep_limit_activated.9.png
Binary files differ
diff --git a/res/drawable-mdpi/data_sweep_limit_default.9.png b/res/drawable-mdpi/data_sweep_limit_default.9.png
deleted file mode 100644
index 2b8c4cb..0000000
--- a/res/drawable-mdpi/data_sweep_limit_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/data_sweep_right_activated.9.png b/res/drawable-mdpi/data_sweep_right_activated.9.png
deleted file mode 100644
index 5dfe594..0000000
--- a/res/drawable-mdpi/data_sweep_right_activated.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/data_sweep_right_default.9.png b/res/drawable-mdpi/data_sweep_right_default.9.png
deleted file mode 100644
index 5b8e108..0000000
--- a/res/drawable-mdpi/data_sweep_right_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/data_sweep_warning_activated.9.png b/res/drawable-mdpi/data_sweep_warning_activated.9.png
index 97f93da..cd795d2 100644
--- a/res/drawable-mdpi/data_sweep_warning_activated.9.png
+++ b/res/drawable-mdpi/data_sweep_warning_activated.9.png
Binary files differ
diff --git a/res/drawable-mdpi/data_sweep_warning_default.9.png b/res/drawable-mdpi/data_sweep_warning_default.9.png
deleted file mode 100644
index 5f65750..0000000
--- a/res/drawable-mdpi/data_sweep_warning_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/data_grid_border.9.png b/res/drawable-xhdpi/data_grid_border.9.png
index 7557115..6d55288 100644
--- a/res/drawable-xhdpi/data_grid_border.9.png
+++ b/res/drawable-xhdpi/data_grid_border.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/data_grid_primary.9.png b/res/drawable-xhdpi/data_grid_primary.9.png
deleted file mode 100644
index ff69fd8..0000000
--- a/res/drawable-xhdpi/data_grid_primary.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/data_grid_secondary.9.png b/res/drawable-xhdpi/data_grid_secondary.9.png
deleted file mode 100644
index 09065bf..0000000
--- a/res/drawable-xhdpi/data_grid_secondary.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/data_sweep_left_activated.9.png b/res/drawable-xhdpi/data_sweep_left_activated.9.png
deleted file mode 100644
index bcd91f8..0000000
--- a/res/drawable-xhdpi/data_sweep_left_activated.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/data_sweep_left_default.9.png b/res/drawable-xhdpi/data_sweep_left_default.9.png
deleted file mode 100644
index 4abe6cd..0000000
--- a/res/drawable-xhdpi/data_sweep_left_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/data_sweep_limit_activated.9.png b/res/drawable-xhdpi/data_sweep_limit_activated.9.png
index 24ac571..8f1e496 100644
--- a/res/drawable-xhdpi/data_sweep_limit_activated.9.png
+++ b/res/drawable-xhdpi/data_sweep_limit_activated.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/data_sweep_limit_default.9.png b/res/drawable-xhdpi/data_sweep_limit_default.9.png
deleted file mode 100644
index 9ce466a..0000000
--- a/res/drawable-xhdpi/data_sweep_limit_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/data_sweep_right_activated.9.png b/res/drawable-xhdpi/data_sweep_right_activated.9.png
deleted file mode 100644
index 0a3f2db..0000000
--- a/res/drawable-xhdpi/data_sweep_right_activated.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/data_sweep_right_default.9.png b/res/drawable-xhdpi/data_sweep_right_default.9.png
deleted file mode 100644
index 1f29778..0000000
--- a/res/drawable-xhdpi/data_sweep_right_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/data_sweep_warning_activated.9.png b/res/drawable-xhdpi/data_sweep_warning_activated.9.png
index b624228..cfc92e1 100644
--- a/res/drawable-xhdpi/data_sweep_warning_activated.9.png
+++ b/res/drawable-xhdpi/data_sweep_warning_activated.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/data_sweep_warning_default.9.png b/res/drawable-xhdpi/data_sweep_warning_default.9.png
deleted file mode 100644
index b79e811..0000000
--- a/res/drawable-xhdpi/data_sweep_warning_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/data_grid_border.9.png b/res/drawable-xxhdpi/data_grid_border.9.png
new file mode 100644
index 0000000..d33a7d7
--- /dev/null
+++ b/res/drawable-xxhdpi/data_grid_border.9.png
Binary files differ
diff --git a/res/drawable-xxhdpi/data_sweep_limit_activated.9.png b/res/drawable-xxhdpi/data_sweep_limit_activated.9.png
new file mode 100644
index 0000000..0457329
--- /dev/null
+++ b/res/drawable-xxhdpi/data_sweep_limit_activated.9.png
Binary files differ
diff --git a/res/drawable-xxhdpi/data_sweep_warning_activated.9.png b/res/drawable-xxhdpi/data_sweep_warning_activated.9.png
new file mode 100644
index 0000000..670bc19
--- /dev/null
+++ b/res/drawable-xxhdpi/data_sweep_warning_activated.9.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/data_grid_border.9.png b/res/drawable-xxxhdpi/data_grid_border.9.png
new file mode 100644
index 0000000..4ddd222
--- /dev/null
+++ b/res/drawable-xxxhdpi/data_grid_border.9.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/data_sweep_limit_activated.9.png b/res/drawable-xxxhdpi/data_sweep_limit_activated.9.png
new file mode 100644
index 0000000..3159b04
--- /dev/null
+++ b/res/drawable-xxxhdpi/data_sweep_limit_activated.9.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/data_sweep_warning_activated.9.png b/res/drawable-xxxhdpi/data_sweep_warning_activated.9.png
new file mode 100644
index 0000000..c12f302
--- /dev/null
+++ b/res/drawable-xxxhdpi/data_sweep_warning_activated.9.png
Binary files differ
diff --git a/res/drawable/data_sweep_left.xml b/res/drawable/data_sweep_left.xml
deleted file mode 100644
index 3532cbc..0000000
--- a/res/drawable/data_sweep_left.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android"
- android:enterFadeDuration="@android:integer/config_mediumAnimTime"
- android:exitFadeDuration="@android:integer/config_mediumAnimTime">
-
- <item android:state_activated="true" android:state_enabled="true" android:drawable="@drawable/data_sweep_left_activated" />
- <item android:drawable="@drawable/data_sweep_left_default" />
-</selector>
diff --git a/res/drawable/data_sweep_limit.xml b/res/drawable/data_sweep_limit.xml
index cfdbfbb..eba023f 100644
--- a/res/drawable/data_sweep_limit.xml
+++ b/res/drawable/data_sweep_limit.xml
@@ -14,10 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android"
- android:enterFadeDuration="@android:integer/config_mediumAnimTime"
- android:exitFadeDuration="@android:integer/config_mediumAnimTime">
-
- <item android:state_activated="true" android:state_enabled="true" android:drawable="@drawable/data_sweep_limit_activated" />
- <item android:drawable="@drawable/data_sweep_limit_default" />
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:drawable="@drawable/data_sweep_limit_activated" />
</selector>
diff --git a/res/drawable/data_sweep_right.xml b/res/drawable/data_sweep_right.xml
deleted file mode 100644
index cbe2a85..0000000
--- a/res/drawable/data_sweep_right.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android"
- android:enterFadeDuration="@android:integer/config_mediumAnimTime"
- android:exitFadeDuration="@android:integer/config_mediumAnimTime">
-
- <item android:state_activated="true" android:state_enabled="true" android:drawable="@drawable/data_sweep_right_activated" />
- <item android:drawable="@drawable/data_sweep_right_default" />
-</selector>
diff --git a/res/drawable/data_sweep_warning.xml b/res/drawable/data_sweep_warning.xml
index 8fbe8e7..5c0a1e9 100644
--- a/res/drawable/data_sweep_warning.xml
+++ b/res/drawable/data_sweep_warning.xml
@@ -14,10 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android"
- android:enterFadeDuration="@android:integer/config_mediumAnimTime"
- android:exitFadeDuration="@android:integer/config_mediumAnimTime">
-
- <item android:state_activated="true" android:state_enabled="true" android:drawable="@drawable/data_sweep_warning_activated" />
- <item android:drawable="@drawable/data_sweep_warning_default" />
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:drawable="@drawable/data_sweep_warning_activated" />
</selector>
diff --git a/res/drawable/switch_inner.xml b/res/drawable/switch_inner.xml
deleted file mode 100644
index c6d39ef..0000000
--- a/res/drawable/switch_inner.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_enabled="false" android:state_checked="true">
- <bitmap android:src="@*android:drawable/btn_switch_to_off_mtrl_000"
- android:tint="?android:attr/colorControlNormal"
- android:alpha="?android:attr/disabledAlpha" />
- </item>
- <item android:state_enabled="false">
- <bitmap android:src="@*android:drawable/btn_switch_to_on_mtrl_000"
- android:tint="?android:attr/colorControlNormal"
- android:alpha="?android:attr/disabledAlpha" />
- </item>
- <item android:state_checked="true">
- <bitmap android:src="@*android:drawable/btn_switch_to_off_mtrl_000"
- android:tint="@color/switch_accent_color" />
- </item>
- <item>
- <bitmap android:src="@*android:drawable/btn_switch_to_on_mtrl_000"
- android:tint="?android:attr/colorControlNormal" />
- </item>
-</selector>
-
diff --git a/res/drawable/switch_track.xml b/res/drawable/switch_track.xml
deleted file mode 100644
index 2655da0..0000000
--- a/res/drawable/switch_track.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_checked="true">
- <nine-patch android:src="@*android:drawable/switch_track_mtrl_alpha"
- android:tint="@color/switch_accent_color" />
- </item>
- <item>
- <nine-patch android:src="@*android:drawable/switch_track_mtrl_alpha"
- android:tint="?android:attr/colorControlNormal" />
- </item>
-</selector>
diff --git a/res/layout/app_percentage_item.xml b/res/layout/app_percentage_item.xml
index 9f5ae55..83d88e0 100644
--- a/res/layout/app_percentage_item.xml
+++ b/res/layout/app_percentage_item.xml
@@ -18,14 +18,14 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
- android:paddingTop="8dip"
- android:paddingBottom="8dip"
+ android:paddingTop="14dp"
+ android:paddingBottom="14dp"
android:columnCount="3">
<ImageView
android:id="@android:id/icon"
- android:layout_width="@android:dimen/app_icon_size"
- android:layout_height="@android:dimen/app_icon_size"
+ android:layout_width="40dp"
+ android:layout_height="40dp"
android:layout_gravity="center"
android:scaleType="fitXY"
android:layout_rowSpan="3"
@@ -39,21 +39,23 @@
android:layout_marginTop="2dip"
android:singleLine="true"
android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textAppearance="@android:style/TextAppearance.Material.Subhead"
+ android:textColor="?android:attr/textColorPrimary"
android:textAlignment="viewStart" />
<TextView
android:id="@android:id/text1"
android:layout_marginStart="6dip"
android:layout_marginTop="2dip"
- android:textAppearance="?android:attr/textAppearanceSmall" />
+ android:textAppearance="@android:style/TextAppearance.Material.Subhead"
+ android:textColor="?android:attr/textColorSecondary" />
<ProgressBar
android:id="@android:id/progress"
- android:layout_height="8dip"
+ android:layout_height="wrap_content"
android:layout_columnSpan="2"
android:layout_gravity="fill_horizontal|top"
- android:layout_marginTop="8dip"
+ android:layout_marginTop="4dip"
android:max="100"
android:progressDrawable="@drawable/data_usage_bar"
style="?android:attr/progressBarStyleHorizontal" />
diff --git a/res/layout/data_usage_app_title.xml b/res/layout/data_usage_app_title.xml
index 272d8f2..2b5e26c 100644
--- a/res/layout/data_usage_app_title.xml
+++ b/res/layout/data_usage_app_title.xml
@@ -14,10 +14,24 @@
limitations under the License.
-->
-<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textAlignment="viewStart" />
+ android:layout_height="wrap_content">
+ <TextView
+ android:id="@+id/app_title"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:textAppearance="@android:style/TextAppearance.Material.Subhead"
+ android:textColor="?android:attr/textColorPrimary"
+ android:textAlignment="viewStart" />
+ <TextView
+ android:id="@+id/app_summary"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="@android:style/TextAppearance.Material.Body1"
+ android:textColor="?android:attr/textColorSecondary"
+ android:textAlignment="viewEnd" />
+</LinearLayout>
diff --git a/res/layout/data_usage_chart.xml b/res/layout/data_usage_chart.xml
index 76cfc6d..2f9d962 100644
--- a/res/layout/data_usage_chart.xml
+++ b/res/layout/data_usage_chart.xml
@@ -14,65 +14,48 @@
limitations under the License.
-->
+<!-- NOTE: this explicitly uses right/left padding, since the
+ graph isn't swapped in RTL languages -->
<com.android.settings.widget.ChartDataUsageView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
android:id="@+id/chart"
android:layout_width="match_parent"
android:layout_height="@dimen/data_usage_chart_height"
- android:layout_marginStart="-16dip"
- android:layout_marginEnd="-16dip"
- android:layout_marginBottom="-32dip"
- android:paddingStart="24dip"
- android:paddingEnd="24dip"
- android:paddingTop="16dip"
- android:paddingBottom="48dip"
- settings:optimalWidth="@dimen/data_usage_chart_optimalWidth"
- settings:optimalWidthWeight="0.4">
+ android:paddingLeft="?android:attr/listPreferredItemPaddingStart"
+ android:paddingRight="40dp"
+ android:paddingTop="16dp"
+ android:paddingBottom="24dp">
<com.android.settings.widget.ChartGridView
android:id="@+id/grid"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start|bottom"
- settings:primaryDrawable="@drawable/data_grid_primary"
- settings:secondaryDrawable="@drawable/data_grid_secondary"
- settings:borderDrawable="@drawable/data_grid_border"
- settings:labelColor="@android:color/holo_blue_light" />
+ android:paddingBottom="24dp"
+ android:textColor="?android:attr/textColorPrimary"
+ android:textAppearance="@android:style/TextAppearance.Material.Caption"
+ settings:borderDrawable="@drawable/data_grid_border" />
<com.android.settings.widget.ChartNetworkSeriesView
android:id="@+id/series"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start|bottom"
- settings:strokeColor="@android:color/holo_blue_light"
- settings:fillColor="#c033b5e5"
- settings:fillColorSecondary="#6633b5e5" />
+ settings:strokeColor="#00000000"
+ settings:fillColor="#ff009688"
+ settings:fillColorSecondary="#ff80cbc4"
+ settings:safeRegion="3dp" />
<com.android.settings.widget.ChartNetworkSeriesView
android:id="@+id/detail_series"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start|bottom"
- settings:strokeColor="@color/theme_accent"
- settings:fillColor="#c0ba7f3e"
- settings:fillColorSecondary="#60ba7f3e" />
-
- <com.android.settings.widget.ChartSweepView
- android:id="@+id/sweep_left"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- settings:sweepDrawable="@drawable/data_sweep_left"
- settings:followAxis="horizontal"
- settings:neighborMargin="5dip" />
-
- <com.android.settings.widget.ChartSweepView
- android:id="@+id/sweep_right"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- settings:sweepDrawable="@drawable/data_sweep_right"
- settings:followAxis="horizontal"
- settings:neighborMargin="5dip" />
+ settings:strokeColor="#00000000"
+ settings:fillColor="#ff009688"
+ settings:fillColorSecondary="#ff009688"
+ settings:safeRegion="3dp" />
<com.android.settings.widget.ChartSweepView
android:id="@+id/sweep_warning"
@@ -84,7 +67,8 @@
settings:neighborMargin="5dip"
settings:labelSize="60dip"
settings:labelTemplate="@string/data_usage_sweep_warning"
- settings:labelColor="#f7931d" />
+ settings:labelColor="#ff37474f"
+ settings:safeRegion="4dp" />
<com.android.settings.widget.ChartSweepView
android:id="@+id/sweep_limit"
@@ -96,6 +80,7 @@
settings:neighborMargin="5dip"
settings:labelSize="60dip"
settings:labelTemplate="@string/data_usage_sweep_limit"
- settings:labelColor="#c01a2c" />
+ settings:labelColor="#fff4511e"
+ settings:safeRegion="4dp" />
</com.android.settings.widget.ChartDataUsageView>
diff --git a/res/layout/data_usage_cycle_item.xml b/res/layout/data_usage_cycle_item.xml
new file mode 100644
index 0000000..015608d
--- /dev/null
+++ b/res/layout/data_usage_cycle_item.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@android:id/text1"
+ style="?android:attr/spinnerItemStyle"
+ android:singleLine="true"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingStart="0dp"
+ android:ellipsize="marquee"
+ android:textAppearance="@android:style/TextAppearance.Material.Subhead"
+ android:textColor="?android:attr/textColorPrimary"
+ android:textAlignment="inherit" />
diff --git a/res/layout/data_usage_cycle_item_dropdown.xml b/res/layout/data_usage_cycle_item_dropdown.xml
new file mode 100644
index 0000000..a900521
--- /dev/null
+++ b/res/layout/data_usage_cycle_item_dropdown.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@android:id/text1"
+ style="?android:attr/spinnerDropDownItemStyle"
+ android:singleLine="true"
+ android:layout_width="match_parent"
+ android:layout_height="?android:attr/listPreferredItemHeightSmall"
+ android:ellipsize="marquee"
+ android:textAppearance="@android:style/TextAppearance.Material.Subhead"
+ android:textColor="?android:attr/textColorPrimary"
+ android:textAlignment="inherit" />
diff --git a/res/layout/data_usage_cycles.xml b/res/layout/data_usage_cycles.xml
index 02aa567..45143ec 100644
--- a/res/layout/data_usage_cycles.xml
+++ b/res/layout/data_usage_cycles.xml
@@ -15,22 +15,30 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/cycles"
android:layout_width="match_parent"
- android:layout_height="40dip"
- android:orientation="horizontal"
- android:gravity="center_vertical">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:text="@string/data_usage_cycle" />
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/listPreferredItemHeightSmall"
+ android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+ android:orientation="horizontal">
<Spinner
android:id="@+id/cycles_spinner"
- android:layout_width="0dip"
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_weight="1" />
+ android:layout_gravity="center_vertical"
+ android:paddingLeft="0dp"
+ android:textAppearance="@android:style/TextAppearance.Material.Subhead"
+ android:textColor="?android:attr/textColorPrimary" />
+
+ <TextView
+ android:id="@+id/cycle_summary"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:layout_gravity="center_vertical"
+ android:textAppearance="@android:style/TextAppearance.Material.Subhead"
+ android:textColor="?android:attr/textColorPrimary"
+ android:textAlignment="viewEnd" />
</LinearLayout>
diff --git a/res/layout/data_usage_detail.xml b/res/layout/data_usage_detail.xml
index 3bca030..914e8ca 100644
--- a/res/layout/data_usage_detail.xml
+++ b/res/layout/data_usage_detail.xml
@@ -18,6 +18,7 @@
android:id="@+id/app_detail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:paddingTop="4dp"
android:orientation="vertical"
android:visibility="gone">
@@ -26,82 +27,107 @@
android:layout_height="wrap_content"
android:layout_marginStart="?android:attr/listPreferredItemPaddingStart"
android:layout_marginEnd="?android:attr/listPreferredItemPaddingEnd"
+ android:layout_marginBottom="16dip"
android:orientation="horizontal">
+ <ImageView
+ android:id="@+id/app_icon"
+ android:layout_width="@android:dimen/app_icon_size"
+ android:layout_height="@android:dimen/app_icon_size"
+ android:layout_marginEnd="8dip"
+ android:scaleType="centerInside"
+ android:contentDescription="@null" />
+
<LinearLayout
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginTop="8dip"
- android:layout_marginEnd="8dip"
android:orientation="vertical">
- <ImageView
- android:id="@+id/app_icon"
- android:layout_width="48dip"
- android:layout_height="48dip"
- android:scaleType="centerInside"
- android:contentDescription="@null" />
-
<LinearLayout
android:id="@+id/app_titles"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginTop="8dip"
android:orientation="vertical"
+ android:paddingBottom="4dip"
android:textAlignment="viewStart" />
- <TextView
+ <LinearLayout
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dip"
- android:textColor="@color/theme_accent"
- android:text="@string/data_usage_label_foreground"
- android:textAlignment="viewStart" />
+ android:layout_height="wrap_content">
+ <TextView
+ android:id="@+id/app_title"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:text="@string/data_usage_label_foreground"
+ android:textAppearance="@android:style/TextAppearance.Material.Body1"
+ android:textColor="?android:attr/textColorSecondary"
+ android:textAlignment="viewStart" />
+ <TextView
+ android:id="@+id/app_foreground"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="@android:style/TextAppearance.Material.Body1"
+ android:textColor="?android:attr/textColorSecondary"
+ android:textAlignment="viewEnd" />
+ </LinearLayout>
- <TextView
- android:id="@+id/app_foreground"
+ <LinearLayout
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textColor="@color/theme_accent"
- android:textAlignment="viewStart" />
-
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dip"
- android:text="@string/data_usage_label_background"
- android:textAlignment="viewStart" />
-
- <TextView
- android:id="@+id/app_background"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textAlignment="viewStart" />
+ android:layout_height="wrap_content">
+ <TextView
+ android:id="@+id/app_title"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:text="@string/data_usage_label_background"
+ android:textAppearance="@android:style/TextAppearance.Material.Body1"
+ android:textColor="?android:attr/textColorSecondary"
+ android:textAlignment="viewStart" />
+ <TextView
+ android:id="@+id/app_background"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="@android:style/TextAppearance.Material.Body1"
+ android:textColor="?android:attr/textColorSecondary"
+ android:textAlignment="viewEnd" />
+ </LinearLayout>
</LinearLayout>
- <com.android.settings.widget.PieChartView
- android:id="@+id/app_pie_chart"
- android:layout_width="160dip"
- android:layout_height="160dip" />
-
</LinearLayout>
- <Button
- android:id="@+id/app_settings"
+ <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="?android:attr/listPreferredItemPaddingStart"
android:layout_marginEnd="?android:attr/listPreferredItemPaddingEnd"
- android:layout_marginTop="16dip"
android:layout_marginBottom="16dip"
- android:text="@string/data_usage_app_settings" />
+ android:orientation="horizontal">
+ <Space
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_weight="0.5" />
+ <Button
+ android:id="@+id/app_settings"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="0.5"
+ android:text="@string/data_usage_app_settings" />
+ </LinearLayout>
<LinearLayout
android:id="@+id/app_switches"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="vertical" />
+ android:orientation="vertical"
+ android:showDividers="beginning|middle"
+ android:divider="?android:attr/listDivider" />
</LinearLayout>
diff --git a/res/layout/data_usage_header.xml b/res/layout/data_usage_header.xml
index bc92c34..2fcceec 100644
--- a/res/layout/data_usage_header.xml
+++ b/res/layout/data_usage_header.xml
@@ -19,9 +19,7 @@
android:layout_height="wrap_content"
android:orientation="vertical"
android:clipChildren="false"
- android:clipToPadding="false"
- android:paddingStart="?android:attr/listPreferredItemPaddingStart"
- android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
+ android:clipToPadding="false">
<FrameLayout
android:id="@+id/network_switches_container"
@@ -36,29 +34,39 @@
android:divider="?android:attr/listDivider" />
</FrameLayout>
- <include layout="@layout/data_usage_cycles" />
<include layout="@layout/data_usage_chart" />
<TextView
- android:id="@+id/usage_summary"
+ android:id="@+id/disclaimer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:gravity="center_vertical"
+ android:text="@string/data_usage_disclaimer"
+ android:textAppearance="@android:style/TextAppearance.Material.Body1"
+ android:textColor="?android:attr/textColorSecondary"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
- android:paddingTop="8dip"
- android:paddingBottom="8dip"
- android:textAppearance="?android:attr/textAppearanceSmall" />
+ android:paddingTop="8dp"
+ android:paddingBottom="0dp" />
<TextView
android:id="@android:id/empty"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:gravity="center_vertical"
android:visibility="gone"
+ android:text="@string/data_usage_empty"
+ android:textAppearance="@android:style/TextAppearance.Material.Body1"
+ android:textColor="?android:attr/textColorSecondary"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
- android:paddingBottom="8dip"
- android:text="@string/data_usage_empty"
- android:textAppearance="?android:attr/textAppearanceSmall" />
+ android:paddingTop="4dp"
+ android:paddingBottom="0dp" />
+
+ <View
+ android:id="@+id/stupid_padding"
+ android:layout_width="match_parent"
+ android:layout_height="8dp" />
<include layout="@layout/data_usage_detail" />
diff --git a/res/layout/preference.xml b/res/layout/preference.xml
index 9645679..bfe5da4 100644
--- a/res/layout/preference.xml
+++ b/res/layout/preference.xml
@@ -17,23 +17,26 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:minHeight="48dip"
+ android:minHeight="?android:attr/listPreferredItemHeightSmall"
android:gravity="center_vertical"
+ android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:background="?android:attr/selectableItemBackground">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
- android:paddingTop="6dip"
- android:paddingBottom="6dip">
+ android:paddingTop="16dip"
+ android:paddingBottom="16dip">
<TextView
android:id="@+android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
- android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textAppearance="@android:style/TextAppearance.Material.Subhead"
+ android:textColor="?android:attr/textColorPrimary"
android:ellipsize="marquee"
android:fadingEdge="horizontal" />
@@ -44,9 +47,10 @@
android:layout_below="@android:id/title"
android:layout_alignStart="@android:id/title"
android:visibility="gone"
- android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textAlignment="viewStart"
+ android:textAppearance="@android:style/TextAppearance.Material.Body1"
android:textColor="?android:attr/textColorSecondary"
- android:maxLines="4" />
+ android:maxLines="10" />
</RelativeLayout>
@@ -54,7 +58,8 @@
android:id="@android:id/widget_frame"
android:layout_width="wrap_content"
android:layout_height="match_parent"
- android:gravity="center_vertical"
+ android:minWidth="58dip"
+ android:gravity="end|center_vertical"
android:orientation="vertical" />
</LinearLayout>
diff --git a/res/layout/switch_bar.xml b/res/layout/switch_bar.xml
index 6b37e4c..5dbeb55 100644
--- a/res/layout/switch_bar.xml
+++ b/res/layout/switch_bar.xml
@@ -31,7 +31,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
- android:background="@null" />
+ android:background="@null"
+ android:theme="@style/ThemeOverlay.SwitchBar" />
</merge>
diff --git a/res/menu/account_settings.xml b/res/menu/account_settings.xml
new file mode 100644
index 0000000..88feb66
--- /dev/null
+++ b/res/menu/account_settings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+ <item
+ android:id="@+id/account_settings_menu_auto_sync"
+ android:title="@string/account_settings_menu_auto_sync"
+ android:checkable="true" />
+ <item
+ android:id="@+id/account_settings_menu_auto_sync_personal"
+ android:title="@string/account_settings_menu_auto_sync_personal"
+ android:checkable="true" />
+ <item
+ android:id="@+id/account_settings_menu_auto_sync_work"
+ android:title="@string/account_settings_menu_auto_sync_work"
+ android:checkable="true" />
+</menu>
diff --git a/res/menu/data_usage.xml b/res/menu/data_usage.xml
index ea3effa..749eb16 100644
--- a/res/menu/data_usage.xml
+++ b/res/menu/data_usage.xml
@@ -16,33 +16,24 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
- android:id="@+id/data_usage_menu_roaming"
- android:title="@string/data_usage_menu_roaming"
- android:checkable="true" />
- <item
android:id="@+id/data_usage_menu_restrict_background"
- android:title="@string/data_usage_menu_restrict_background"
- android:checkable="true" />
- <item
- android:id="@+id/data_usage_menu_split_4g"
- android:title="@string/data_usage_menu_split_4g"
- android:checkable="true" />
- <item
- android:id="@+id/data_usage_menu_auto_sync"
- android:title="@string/data_usage_menu_auto_sync"
- android:checkable="true" />
+ android:title="@string/data_usage_menu_restrict_background" />
<item
android:id="@+id/data_usage_menu_show_wifi"
- android:title="@string/data_usage_menu_show_wifi"
- android:checkable="true" />
+ android:title="@string/data_usage_menu_show_wifi" />
<item
android:id="@+id/data_usage_menu_show_ethernet"
- android:title="@string/data_usage_menu_show_ethernet"
- android:checkable="true" />
+ android:title="@string/data_usage_menu_show_ethernet" />
<item
android:id="@+id/data_usage_menu_metered"
android:title="@string/data_usage_menu_metered" />
<item
+ android:id="@+id/data_usage_menu_sim_cards"
+ android:title="@string/data_usage_menu_sim_cards" />
+ <item
+ android:id="@+id/data_usage_menu_cellular_networks"
+ android:title="@string/data_usage_menu_cellular_networks" />
+ <item
android:id="@+id/data_usage_menu_help"
android:title="@string/help_label" />
</menu>
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 7de1652..4b69114 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -310,7 +310,6 @@
<!-- Note that adding/removing/moving the items will need wifi settings code change. -->
<string-array name="wifi_ap_security">
<item>@string/wifi_security_none</item>
- <item>@string/wifi_security_wpa</item>
<item>@string/wifi_security_wpa2</item>
</string-array>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 2987de1..675df62 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -75,19 +75,22 @@
<attr name="labelSize" format="dimension" />
<attr name="labelTemplate" format="reference" />
<attr name="labelColor" format="color" />
+ <attr name="safeRegion" format="dimension" />
</declare-styleable>
<declare-styleable name="ChartGridView">
<attr name="primaryDrawable" format="reference" />
<attr name="secondaryDrawable" format="reference" />
<attr name="borderDrawable" format="reference" />
- <attr name="labelColor" />
+ <attr name="android:textColor" />
+ <attr name="android:textAppearance" />
</declare-styleable>
<declare-styleable name="ChartNetworkSeriesView">
<attr name="strokeColor" format="color" />
<attr name="fillColor" format="color" />
<attr name="fillColorSecondary" format="color" />
+ <attr name="safeRegion" />
</declare-styleable>
<attr name="apnPreferenceStyle" format="reference" />
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index b7b2af0..cb0369f 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -31,7 +31,7 @@
<dimen name="battery_history_chart_height">120dp</dimen>
- <dimen name="data_usage_chart_height">252dip</dimen>
+ <dimen name="data_usage_chart_height">228dip</dimen>
<dimen name="data_usage_chart_optimalWidth">440dip</dimen>
<dimen name="volume_seekbar_side_margin">8dip</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index bbce4e4..77fd6de 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4784,20 +4784,37 @@
<string name="data_usage_data_limit">Set data limit</string>
<!-- Title for option to pick visible time range from a list available usage periods. [CHAR LIMIT=25] -->
<string name="data_usage_cycle">Data usage cycle</string>
- <!-- Title for checkbox menu option to enable mobile data when roaming. [CHAR LIMIT=26] -->
+ <!-- Title for menu option to enable mobile data when roaming. [CHAR LIMIT=26] -->
<string name="data_usage_menu_roaming">Data roaming</string>
- <!-- Title for checkbox menu option to restrict background data usage. [CHAR LIMIT=26] -->
+ <!-- Title for menu option to restrict background data usage. [CHAR LIMIT=26] -->
<string name="data_usage_menu_restrict_background">Restrict background data</string>
- <!-- Title for checkbox menu option to show 4G mobile data usage separate from other mobile data usage. [CHAR LIMIT=26] -->
+ <!-- Title for menu option to allow background data usage. [CHAR LIMIT=26] -->
+ <string name="data_usage_menu_allow_background">Allow background data</string>
+ <!-- Title for menu option to show 4G mobile data usage separate from other mobile data usage. [CHAR LIMIT=26] -->
<string name="data_usage_menu_split_4g">Separate 4G usage</string>
- <!-- Title for checkbox menu option to show Wi-Fi data usage. [CHAR LIMIT=26] -->
+ <!-- Title for menu option to show Wi-Fi data usage. [CHAR LIMIT=26] -->
<string name="data_usage_menu_show_wifi">Show Wi\u2011Fi</string>
- <!-- Title for checkbox menu option to show Ethernet data usage. [CHAR LIMIT=26] -->
+ <!-- Title for menu option to hide Wi-Fi data usage. [CHAR LIMIT=26] -->
+ <string name="data_usage_menu_hide_wifi">Hide Wi\u2011Fi</string>
+ <!-- Title for menu option to show Ethernet data usage. [CHAR LIMIT=26] -->
<string name="data_usage_menu_show_ethernet">Show Ethernet usage</string>
+ <!-- Title for menu option to hide Ethernet data usage. [CHAR LIMIT=26] -->
+ <string name="data_usage_menu_hide_ethernet">Hide Ethernet usage</string>
<!-- Title for menu option to configure metered networks. [CHAR LIMIT=26] -->
- <string name="data_usage_menu_metered">Mobile hotspots</string>
- <!-- Title for menu option to enable global auto-sync of account data -->
+ <string name="data_usage_menu_metered">Network restrictions</string>
+ <!-- Title for menu option to enable global auto-sync of account data -->
<string name="data_usage_menu_auto_sync">Auto-sync data</string>
+ <!-- Title for menu option to show details for all SIM cards. [CHAR LIMIT=26] -->
+ <string name="data_usage_menu_sim_cards">SIM cards</string>
+ <!-- Title for menu option to show details for all cellular networks. [CHAR LIMIT=26] -->
+ <string name="data_usage_menu_cellular_networks">Cellular networks</string>
+
+ <!-- Title for menu option to enable global auto-sync of personal account data [CHAR LIMIT=30] -->
+ <string name="account_settings_menu_auto_sync">Auto-sync data</string>
+ <!-- Title for menu option to enable global auto-sync of personal account data [CHAR LIMIT=30] -->
+ <string name="account_settings_menu_auto_sync_personal">Auto-sync personal data</string>
+ <!-- Title for menu option to enable global auto-sync of work account data [CHAR LIMIT=30] -->
+ <string name="account_settings_menu_auto_sync_work">Auto-sync work data</string>
<!-- Title for option to change data usage cycle day. [CHAR LIMIT=32] -->
<string name="data_usage_change_cycle">Change cycle\u2026</string>
@@ -4852,7 +4869,7 @@
<!-- Data Usage Background label. [CHAR LIMIT=40] -->
<string name="data_usage_background_label">Background:</string>
<!-- Button title for launching application-specific data usage settings. [CHAR LIMIT=32] -->
- <string name="data_usage_app_settings">View app settings</string>
+ <string name="data_usage_app_settings">App settings</string>
<!-- Checkbox label that restricts background data usage of a specific application. [CHAR LIMIT=40] -->
<string name="data_usage_app_restrict_background">Restrict app background data</string>
<!-- Summary message for checkbox that restricts background data usage of a specific application. [CHAR LIMIT=64] -->
@@ -4924,15 +4941,18 @@
<string name="data_usage_total_during_range_mobile" product="default"><xliff:g id="range" example="Jul 1 - Jul 31">%2$s</xliff:g>: about <xliff:g id="total" example="128KB">%1$s</xliff:g> used, as measured by your phone. Your carrier\'s data usage accounting may differ.</string>
<!-- Dialog title for selecting metered networks. [CHAR LIMIT=25] -->
- <string name="data_usage_metered_title">Mobile hotspots</string>
+ <string name="data_usage_metered_title">Network restrictions</string>
<!-- Dialog body for selecting paid networks. [CHAR LIMIT=NONE] -->
- <string name="data_usage_metered_body">Select the Wi\u2011Fi networks which are mobile hotspots. Apps can be restricted from using these networks when in the background. Apps may also warn before using these networks for large downloads.</string>
+ <string name="data_usage_metered_body">Metered networks are treated like cellular when background data is restricted. Apps may warn before using these networks for large downloads.</string>
<!-- Header for list of mobile networks. [CHAR LIMIT=32] -->
<string name="data_usage_metered_mobile">Cellular networks</string>
<!-- Header for list of Wi-Fi networks. [CHAR LIMIT=32] -->
- <string name="data_usage_metered_wifi">Wi\u2011Fi networks</string>
+ <string name="data_usage_metered_wifi">Metered Wi\u2011Fi networks</string>
<!-- Body text prompting user to enable Wi-Fi to configure metered networks. [CHAR LIMIT=64] -->
- <string name="data_usage_metered_wifi_disabled">To select mobile hotspots, turn Wi\u2011Fi on.</string>
+ <string name="data_usage_metered_wifi_disabled">To select metered networks, turn Wi\u2011Fi on.</string>
+
+ <!-- Disclaimer string for data usage measured by device. [CHAR LIMIT=80] -->
+ <string name="data_usage_disclaimer">Carrier data accounting may differ from your device.</string>
<!-- Button at the bottom of the CryptKeeper screen to make an emergency call. -->
<string name="cryptkeeper_emergency_call">Emergency call</string>
@@ -5457,6 +5477,7 @@
<string name="keywords_wifi">wifi wi-fi network connection</string>
<string name="keywords_more_default_sms_app">text message</string>
<string name="keywords_more_mobile_networks">cellular cell carrier wireless</string>
+ <string name="keywords_home">launcher</string>
<string name="keywords_display">screen touchscreen</string>
<string name="keywords_display_brightness_level">dim screen touchscreen</string>
<string name="keywords_display_auto_brightness">dim screen touchscreen</string>
@@ -5708,7 +5729,7 @@
<string name="zen_mode_entry_conditions_title">Automatically turn on</string>
<!-- [CHAR LIMIT=40] General divider text when concatenating multiple items in a text summary -->
- <string name="summary_divider_text">, </string>
+ <string name="summary_divider_text">,\u0020</string>
<!-- [CHAR LIMIT=40] Zen mode settings: Entry conditions option: value when blank -->
<string name="zen_mode_entry_conditions_summary_none">Never</string>
@@ -5732,7 +5753,7 @@
<string name="zen_mode_from_starred">Starred contacts only</string>
<!-- [CHAR LIMIT=60] Zen mode settings: Reminder text about alarms -->
- <string name="zen_mode_alarm_info">Alarms and timers are always priority interruptions</string>
+ <string name="zen_mode_alarm_info">Alarms are always priority interruptions</string>
<!-- [CHAR LIMIT=20] Zen mode settings: When option -->
<string name="zen_mode_when">Automatically turn on</string>
diff --git a/res/values/themes.xml b/res/values/themes.xml
index d54819d..898274f 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -204,4 +204,10 @@
<item name="@android:numbersBackgroundColor">@android:color/white</item>
</style>
+ <!-- Used to color the switch bar controls -->
+ <style name="ThemeOverlay.SwitchBar" parent="@android:style/ThemeOverlay">
+ <!-- Used by controls, e.g. CheckBox, ProgressBar, etc. -->
+ <item name="android:colorAccent">@color/switch_accent_color</item>
+ </style>
+
</resources>
diff --git a/res/xml/data_usage_metered_prefs.xml b/res/xml/data_usage_metered_prefs.xml
index 5026a35..5915101 100644
--- a/res/xml/data_usage_metered_prefs.xml
+++ b/res/xml/data_usage_metered_prefs.xml
@@ -17,11 +17,6 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/display_settings">
- <Preference
- android:summary="@string/data_usage_metered_body"
- android:persistent="false"
- android:selectable="false" />
-
<PreferenceCategory
android:key="mobile"
android:title="@string/data_usage_metered_mobile"
@@ -40,4 +35,9 @@
</PreferenceCategory>
+ <Preference
+ android:summary="@string/data_usage_metered_body"
+ android:persistent="false"
+ android:selectable="false" />
+
</PreferenceScreen>
diff --git a/res/xml/zen_mode_settings.xml b/res/xml/zen_mode_settings.xml
index 6f2fc2e..a4084cb 100644
--- a/res/xml/zen_mode_settings.xml
+++ b/res/xml/zen_mode_settings.xml
@@ -31,17 +31,25 @@
<SwitchPreference
android:key="phone_calls"
+ android:title="@string/zen_mode_phone_calls"
android:persistent="false"
android:switchTextOff=""
- android:switchTextOn=""
- android:title="@string/zen_mode_phone_calls" />
+ android:switchTextOn="" />
<SwitchPreference
android:key="messages"
+ android:title="@string/zen_mode_messages"
android:persistent="false"
android:switchTextOff=""
- android:switchTextOn=""
- android:title="@string/zen_mode_messages" />
+ android:switchTextOn="" />
+
+ <Preference
+ android:key="alarm_info"
+ android:title=""
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textColor="?android:attr/colorForegroundInverse"
+ android:selectable="false"
+ android:summary="@string/zen_mode_alarm_info" />
</PreferenceCategory>
diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java
index dbef6cb..f8f285f 100644
--- a/src/com/android/settings/DataUsageSummary.java
+++ b/src/com/android/settings/DataUsageSummary.java
@@ -55,6 +55,7 @@
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.app.LoaderManager.LoaderCallbacks;
+import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
@@ -63,6 +64,7 @@
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.res.Resources;
+import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
@@ -107,9 +109,6 @@
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
-import android.widget.CheckBox;
-import android.widget.CompoundButton;
-import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
@@ -138,7 +137,6 @@
import com.android.settings.search.SearchIndexableRaw;
import com.android.settings.widget.ChartDataUsageView;
import com.android.settings.widget.ChartDataUsageView.DataUsageChartListener;
-import com.android.settings.widget.PieChartView;
import com.google.android.collect.Lists;
import libcore.util.Objects;
@@ -170,7 +168,6 @@
private static final String TAB_ETHERNET = "ethernet";
private static final String TAG_CONFIRM_DATA_DISABLE = "confirmDataDisable";
- private static final String TAG_CONFIRM_DATA_ROAMING = "confirmDataRoaming";
private static final String TAG_CONFIRM_LIMIT = "confirmLimit";
private static final String TAG_CYCLE_EDITOR = "cycleEditor";
private static final String TAG_WARNING_EDITOR = "warningEditor";
@@ -189,15 +186,11 @@
private static final int LOADER_CHART_DATA = 2;
private static final int LOADER_SUMMARY = 3;
- private static final int FOREGROUND_BYTES_COLOR = 0xff009688;
- private static final int DEFAULT_BYTES_COLOR = 0xffced7db;
-
private INetworkManagementService mNetworkService;
private INetworkStatsService mStatsService;
private NetworkPolicyManager mPolicyManager;
private TelephonyManager mTelephonyManager;
-
private INetworkStatsSession mStatsSession;
private static final String PREF_FILE = "data_usage";
@@ -219,29 +212,33 @@
private ViewGroup mNetworkSwitchesContainer;
private LinearLayout mNetworkSwitches;
+ private boolean mDataEnabledSupported;
private Switch mDataEnabled;
private View mDataEnabledView;
- private CheckBox mDisableAtLimit;
+ private boolean mDisableAtLimitSupported;
+ private Switch mDisableAtLimit;
private View mDisableAtLimitView;
private View mCycleView;
private Spinner mCycleSpinner;
private CycleAdapter mCycleAdapter;
+ private TextView mCycleSummary;
private ChartDataUsageView mChart;
- private TextView mUsageSummary;
+ private View mDisclaimer;
private TextView mEmpty;
+ private View mStupidPadding;
private View mAppDetail;
private ImageView mAppIcon;
private ViewGroup mAppTitles;
- private PieChartView mAppPieChart;
+ private TextView mAppTotal;
private TextView mAppForeground;
private TextView mAppBackground;
private Button mAppSettings;
private LinearLayout mAppSwitches;
- private CheckBox mAppRestrict;
+ private Switch mAppRestrict;
private View mAppRestrictView;
private boolean mShowWifi = false;
@@ -259,9 +256,11 @@
private String mCurrentTab = null;
private String mIntentTab = null;
- private MenuItem mMenuDataRoaming;
private MenuItem mMenuRestrictBackground;
- private MenuItem mMenuAutoSync;
+ private MenuItem mMenuShowWifi;
+ private MenuItem mMenuShowEthernet;
+ private MenuItem mMenuSimCards;
+ private MenuItem mMenuCellularNetworks;
/** Flag used to ignore listeners during binding. */
private boolean mBinding;
@@ -359,13 +358,17 @@
mNetworkSwitches = (LinearLayout) mHeader.findViewById(R.id.network_switches);
mDataEnabled = new Switch(inflater.getContext());
+ mDataEnabled.setClickable(false);
+ mDataEnabled.setFocusable(false);
mDataEnabledView = inflatePreference(inflater, mNetworkSwitches, mDataEnabled);
mDataEnabledView.setTag(R.id.preference_highlight_key,
DATA_USAGE_ENABLE_MOBILE_KEY);
- mDataEnabled.setOnCheckedChangeListener(mDataEnabledListener);
+ mDataEnabledView.setClickable(true);
+ mDataEnabledView.setFocusable(true);
+ mDataEnabledView.setOnClickListener(mDataEnabledListener);
mNetworkSwitches.addView(mDataEnabledView);
- mDisableAtLimit = new CheckBox(inflater.getContext());
+ mDisableAtLimit = new Switch(inflater.getContext());
mDisableAtLimit.setClickable(false);
mDisableAtLimit.setFocusable(false);
mDisableAtLimitView = inflatePreference(inflater, mNetworkSwitches, mDisableAtLimit);
@@ -375,15 +378,16 @@
mDisableAtLimitView.setFocusable(true);
mDisableAtLimitView.setOnClickListener(mDisableAtLimitListener);
mNetworkSwitches.addView(mDisableAtLimitView);
- }
- // bind cycle dropdown
- mCycleView = mHeader.findViewById(R.id.cycles);
- mCycleView.setTag(R.id.preference_highlight_key, DATA_USAGE_CYCLE_KEY);
- mCycleSpinner = (Spinner) mCycleView.findViewById(R.id.cycles_spinner);
- mCycleAdapter = new CycleAdapter(context);
- mCycleSpinner.setAdapter(mCycleAdapter);
- mCycleSpinner.setOnItemSelectedListener(mCycleListener);
+ mCycleView = inflater.inflate(R.layout.data_usage_cycles, mNetworkSwitches, false);
+ mCycleView.setTag(R.id.preference_highlight_key, DATA_USAGE_CYCLE_KEY);
+ mCycleSpinner = (Spinner) mCycleView.findViewById(R.id.cycles_spinner);
+ mCycleAdapter = new CycleAdapter(context);
+ mCycleSpinner.setAdapter(mCycleAdapter);
+ mCycleSpinner.setOnItemSelectedListener(mCycleListener);
+ mCycleSummary = (TextView) mCycleView.findViewById(R.id.cycle_summary);
+ mNetworkSwitches.addView(mCycleView);
+ }
mChart = (ChartDataUsageView) mHeader.findViewById(R.id.chart);
mChart.setListener(mChartListener);
@@ -394,7 +398,6 @@
mAppDetail = mHeader.findViewById(R.id.app_detail);
mAppIcon = (ImageView) mAppDetail.findViewById(R.id.app_icon);
mAppTitles = (ViewGroup) mAppDetail.findViewById(R.id.app_titles);
- mAppPieChart = (PieChartView) mAppDetail.findViewById(R.id.app_pie_chart);
mAppForeground = (TextView) mAppDetail.findViewById(R.id.app_foreground);
mAppBackground = (TextView) mAppDetail.findViewById(R.id.app_background);
mAppSwitches = (LinearLayout) mAppDetail.findViewById(R.id.app_switches);
@@ -402,7 +405,7 @@
mAppSettings = (Button) mAppDetail.findViewById(R.id.app_settings);
mAppSettings.setOnClickListener(mAppSettingsListener);
- mAppRestrict = new CheckBox(inflater.getContext());
+ mAppRestrict = new Switch(inflater.getContext());
mAppRestrict.setClickable(false);
mAppRestrict.setFocusable(false);
mAppRestrictView = inflatePreference(inflater, mAppSwitches, mAppRestrict);
@@ -412,8 +415,9 @@
mAppSwitches.addView(mAppRestrictView);
}
- mUsageSummary = (TextView) mHeader.findViewById(R.id.usage_summary);
+ mDisclaimer = mHeader.findViewById(R.id.disclaimer);
mEmpty = (TextView) mHeader.findViewById(android.R.id.empty);
+ mStupidPadding = mHeader.findViewById(R.id.stupid_padding);
mAdapter = new DataUsageAdapter(mUidDetailProvider, mInsetSide);
mListView.setOnItemClickListener(mListListener);
@@ -480,38 +484,24 @@
final boolean appDetailMode = isAppDetailMode();
final boolean isOwner = ActivityManager.getCurrentUser() == UserHandle.USER_OWNER;
- mMenuDataRoaming = menu.findItem(R.id.data_usage_menu_roaming);
- mMenuDataRoaming.setVisible(hasReadyMobileRadio(context) && !appDetailMode);
- mMenuDataRoaming.setChecked(getDataRoaming());
+ mMenuShowWifi = menu.findItem(R.id.data_usage_menu_show_wifi);
+ // TODO: Define behavior of this sync button. See: http://b/16076571
+ if (hasWifiRadio(context) && hasReadyMobileRadio(context)) {
+ mMenuShowWifi.setVisible(!appDetailMode);
+ } else {
+ mMenuShowWifi.setVisible(false);
+ }
+
+ mMenuShowEthernet = menu.findItem(R.id.data_usage_menu_show_ethernet);
+ if (hasEthernet(context) && hasReadyMobileRadio(context)) {
+ mMenuShowEthernet.setVisible(!appDetailMode);
+ } else {
+ mMenuShowEthernet.setVisible(false);
+ }
mMenuRestrictBackground = menu.findItem(R.id.data_usage_menu_restrict_background);
mMenuRestrictBackground.setVisible(
hasReadyMobileRadio(context) && isOwner && !appDetailMode);
- mMenuRestrictBackground.setChecked(mPolicyManager.getRestrictBackground());
-
- mMenuAutoSync = menu.findItem(R.id.data_usage_menu_auto_sync);
- mMenuAutoSync.setChecked(ContentResolver.getMasterSyncAutomatically());
- mMenuAutoSync.setVisible(!appDetailMode);
-
- final MenuItem split4g = menu.findItem(R.id.data_usage_menu_split_4g);
- split4g.setVisible(hasReadyMobile4gRadio(context) && isOwner && !appDetailMode);
- split4g.setChecked(isMobilePolicySplit());
-
- final MenuItem showWifi = menu.findItem(R.id.data_usage_menu_show_wifi);
- if (hasWifiRadio(context) && hasReadyMobileRadio(context)) {
- showWifi.setVisible(!appDetailMode);
- showWifi.setChecked(mShowWifi);
- } else {
- showWifi.setVisible(false);
- }
-
- final MenuItem showEthernet = menu.findItem(R.id.data_usage_menu_show_ethernet);
- if (hasEthernet(context) && hasReadyMobileRadio(context)) {
- showEthernet.setVisible(!appDetailMode);
- showEthernet.setChecked(mShowEthernet);
- } else {
- showEthernet.setVisible(false);
- }
final MenuItem metered = menu.findItem(R.id.data_usage_menu_metered);
if (hasReadyMobileRadio(context) || hasWifiRadio(context)) {
@@ -520,6 +510,17 @@
metered.setVisible(false);
}
+ // TODO: show when multiple sims available
+ mMenuSimCards = menu.findItem(R.id.data_usage_menu_sim_cards);
+ mMenuSimCards.setVisible(false);
+
+ mMenuCellularNetworks = menu.findItem(R.id.data_usage_menu_cellular_networks);
+ if (hasReadyMobileRadio(context)) {
+ mMenuCellularNetworks.setVisible(!appDetailMode);
+ } else {
+ mMenuCellularNetworks.setVisible(false);
+ }
+
final MenuItem help = menu.findItem(R.id.data_usage_menu_help);
String helpUrl;
if (!TextUtils.isEmpty(helpUrl = getResources().getString(R.string.help_url_data_usage))) {
@@ -527,23 +528,35 @@
} else {
help.setVisible(false);
}
+
+ updateMenuTitles();
+ }
+
+ private void updateMenuTitles() {
+ if (mPolicyManager.getRestrictBackground()) {
+ mMenuRestrictBackground.setTitle(R.string.data_usage_menu_allow_background);
+ } else {
+ mMenuRestrictBackground.setTitle(R.string.data_usage_menu_restrict_background);
+ }
+
+ if (mShowWifi) {
+ mMenuShowWifi.setTitle(R.string.data_usage_menu_hide_wifi);
+ } else {
+ mMenuShowWifi.setTitle(R.string.data_usage_menu_show_wifi);
+ }
+
+ if (mShowEthernet) {
+ mMenuShowEthernet.setTitle(R.string.data_usage_menu_hide_ethernet);
+ } else {
+ mMenuShowEthernet.setTitle(R.string.data_usage_menu_show_ethernet);
+ }
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
- case R.id.data_usage_menu_roaming: {
- final boolean dataRoaming = !item.isChecked();
- if (dataRoaming) {
- ConfirmDataRoamingFragment.show(this);
- } else {
- // no confirmation to disable roaming
- setDataRoaming(false);
- }
- return true;
- }
case R.id.data_usage_menu_restrict_background: {
- final boolean restrictBackground = !item.isChecked();
+ final boolean restrictBackground = !mPolicyManager.getRestrictBackground();
if (restrictBackground) {
ConfirmRestrictFragment.show(this);
} else {
@@ -552,41 +565,37 @@
}
return true;
}
- case R.id.data_usage_menu_split_4g: {
- final boolean mobileSplit = !item.isChecked();
- setMobilePolicySplit(mobileSplit);
- item.setChecked(isMobilePolicySplit());
- updateTabs();
- return true;
- }
case R.id.data_usage_menu_show_wifi: {
- mShowWifi = !item.isChecked();
+ mShowWifi = !mShowWifi;
mPrefs.edit().putBoolean(PREF_SHOW_WIFI, mShowWifi).apply();
- item.setChecked(mShowWifi);
+ updateMenuTitles();
updateTabs();
return true;
}
case R.id.data_usage_menu_show_ethernet: {
- mShowEthernet = !item.isChecked();
+ mShowEthernet = !mShowEthernet;
mPrefs.edit().putBoolean(PREF_SHOW_ETHERNET, mShowEthernet).apply();
- item.setChecked(mShowEthernet);
+ updateMenuTitles();
updateTabs();
return true;
}
+ case R.id.data_usage_menu_sim_cards: {
+ // TODO: hook up to sim cards
+ return true;
+ }
+ case R.id.data_usage_menu_cellular_networks: {
+ final Intent intent = new Intent(Intent.ACTION_MAIN);
+ intent.setComponent(new ComponentName("com.android.phone",
+ "com.android.phone.MobileNetworkSettings"));
+ startActivity(intent);
+ return true;
+ }
case R.id.data_usage_menu_metered: {
final SettingsActivity sa = (SettingsActivity) getActivity();
sa.startPreferencePanel(DataUsageMeteredSettings.class.getCanonicalName(), null,
R.string.data_usage_metered_title, null, this, 0);
return true;
}
- case R.id.data_usage_menu_auto_sync: {
- if (ActivityManager.isUserAMonkey()) {
- Log.d("SyncState", "ignoring monkey's attempt to flip global sync state");
- } else {
- ConfirmAutoSyncChangeFragment.show(this, !item.isChecked());
- }
- return true;
- }
}
return false;
}
@@ -724,7 +733,8 @@
if (LOGD) Log.d(TAG, "updateBody() with currentTab=" + currentTab);
- mDataEnabledView.setVisibility(isOwner ? View.VISIBLE : View.GONE);
+ mDataEnabledSupported = isOwner;
+ mDisableAtLimitSupported = true;
// TODO: remove mobile tabs when SIM isn't ready
@@ -747,14 +757,14 @@
} else if (TAB_WIFI.equals(currentTab)) {
// wifi doesn't have any controls
- mDataEnabledView.setVisibility(View.GONE);
- mDisableAtLimitView.setVisibility(View.GONE);
+ mDataEnabledSupported = false;
+ mDisableAtLimitSupported = false;
mTemplate = buildTemplateWifiWildcard();
} else if (TAB_ETHERNET.equals(currentTab)) {
// ethernet doesn't have any controls
- mDataEnabledView.setVisibility(View.GONE);
- mDisableAtLimitView.setVisibility(View.GONE);
+ mDataEnabledSupported = false;
+ mDisableAtLimitSupported = false;
mTemplate = buildTemplateEthernet();
} else {
@@ -807,12 +817,25 @@
mAppIcon.setImageDrawable(detail.icon);
mAppTitles.removeAllViews();
+
+ View title = null;
if (detail.detailLabels != null) {
for (CharSequence label : detail.detailLabels) {
- mAppTitles.addView(inflateAppTitle(inflater, mAppTitles, label));
+ title = inflater.inflate(R.layout.data_usage_app_title, mAppTitles, false);
+ ((TextView) title.findViewById(R.id.app_title)).setText(label);
+ mAppTitles.addView(title);
}
} else {
- mAppTitles.addView(inflateAppTitle(inflater, mAppTitles, detail.label));
+ title = inflater.inflate(R.layout.data_usage_app_title, mAppTitles, false);
+ ((TextView) title.findViewById(R.id.app_title)).setText(detail.label);
+ mAppTitles.addView(title);
+ }
+
+ // Remember last slot for summary
+ if (title != null) {
+ mAppTotal = (TextView) title.findViewById(R.id.app_summary);
+ } else {
+ mAppTotal = null;
}
// enable settings button when package provides it
@@ -903,24 +926,9 @@
}
}
- private boolean getDataRoaming() {
- final ContentResolver resolver = getActivity().getContentResolver();
- return android.provider.Settings.Global.getInt(resolver,
- android.provider.Settings.Global.DATA_ROAMING, 0) != 0;
- }
-
- private void setDataRoaming(boolean enabled) {
- // TODO: teach telephony DataConnectionTracker to watch and apply
- // updates when changed.
- final ContentResolver resolver = getActivity().getContentResolver();
- android.provider.Settings.Global.putInt(resolver,
- android.provider.Settings.Global.DATA_ROAMING, enabled ? 1 : 0);
- mMenuDataRoaming.setChecked(enabled);
- }
-
public void setRestrictBackground(boolean restrictBackground) {
mPolicyManager.setRestrictBackground(restrictBackground);
- mMenuRestrictBackground.setChecked(restrictBackground);
+ updateMenuTitles();
}
private boolean getAppRestrictBackground() {
@@ -942,10 +950,12 @@
* current {@link #mTemplate}.
*/
private void updatePolicy(boolean refreshCycle) {
+ boolean dataEnabledVisible = mDataEnabledSupported;
+ boolean disableAtLimitVisible = mDisableAtLimitSupported;
+
if (isAppDetailMode()) {
- mNetworkSwitches.setVisibility(View.GONE);
- } else {
- mNetworkSwitches.setVisibility(View.VISIBLE);
+ dataEnabledVisible = false;
+ disableAtLimitVisible = false;
}
// TODO: move enabled state directly into policy
@@ -957,7 +967,6 @@
final NetworkPolicy policy = mPolicyEditor.getPolicy(mTemplate);
if (isNetworkPolicyModifiable(policy)) {
- mDisableAtLimitView.setVisibility(View.VISIBLE);
mDisableAtLimit.setChecked(policy != null && policy.limitBytes != LIMIT_DISABLED);
if (!isAppDetailMode()) {
mChart.bindNetworkPolicy(policy);
@@ -965,10 +974,13 @@
} else {
// controls are disabled; don't bind warning/limit sweeps
- mDisableAtLimitView.setVisibility(View.GONE);
+ disableAtLimitVisible = false;
mChart.bindNetworkPolicy(null);
}
+ mDataEnabledView.setVisibility(dataEnabledVisible ? View.VISIBLE : View.GONE);
+ mDisableAtLimitView.setVisibility(disableAtLimitVisible ? View.VISIBLE : View.GONE);
+
if (refreshCycle) {
// generate cycle list based on policy and available history
updateCycleList(policy);
@@ -1048,12 +1060,12 @@
}
}
- private OnCheckedChangeListener mDataEnabledListener = new OnCheckedChangeListener() {
+ private View.OnClickListener mDataEnabledListener = new View.OnClickListener() {
@Override
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ public void onClick(View v) {
if (mBinding) return;
- final boolean dataEnabled = isChecked;
+ final boolean dataEnabled = !mDataEnabled.isChecked();
final String currentTab = mCurrentTab;
if (TAB_MOBILE.equals(currentTab)) {
if (dataEnabled) {
@@ -1177,15 +1189,11 @@
final long defaultBytes = entry.rxBytes + entry.txBytes;
entry = mChartData.detailForeground.getValues(start, end, now, entry);
final long foregroundBytes = entry.rxBytes + entry.txBytes;
+ final long totalBytes = defaultBytes + foregroundBytes;
- mAppPieChart.setOriginAngle(175);
-
- mAppPieChart.removeAllSlices();
- mAppPieChart.addSlice(foregroundBytes, FOREGROUND_BYTES_COLOR);
- mAppPieChart.addSlice(defaultBytes, DEFAULT_BYTES_COLOR);
-
- mAppPieChart.generatePath();
-
+ if (mAppTotal != null) {
+ mAppTotal.setText(Formatter.formatFileSize(context, totalBytes));
+ }
mAppBackground.setText(Formatter.formatFileSize(context, defaultBytes));
mAppForeground.setText(Formatter.formatFileSize(context, foregroundBytes));
@@ -1194,11 +1202,15 @@
getLoaderManager().destroyLoader(LOADER_SUMMARY);
+ mCycleSummary.setVisibility(View.GONE);
+
} else {
if (mChartData != null) {
entry = mChartData.network.getValues(start, end, now, null);
}
+ mCycleSummary.setVisibility(View.VISIBLE);
+
// kick off loader for detailed stats
getLoaderManager().restartLoader(LOADER_SUMMARY,
SummaryForAllUidLoader.buildArgs(mTemplate, start, end), mSummaryCallbacks);
@@ -1206,18 +1218,19 @@
final long totalBytes = entry != null ? entry.rxBytes + entry.txBytes : 0;
final String totalPhrase = Formatter.formatFileSize(context, totalBytes);
- final String rangePhrase = formatDateRange(context, start, end);
+ mCycleSummary.setText(totalPhrase);
- final int summaryRes;
if (TAB_MOBILE.equals(mCurrentTab) || TAB_3G.equals(mCurrentTab)
|| TAB_4G.equals(mCurrentTab)) {
- summaryRes = R.string.data_usage_total_during_range_mobile;
+ if (isAppDetailMode()) {
+ mDisclaimer.setVisibility(View.GONE);
+ } else {
+ mDisclaimer.setVisibility(View.VISIBLE);
+ }
} else {
- summaryRes = R.string.data_usage_total_during_range;
+ mDisclaimer.setVisibility(View.GONE);
}
- mUsageSummary.setText(getString(summaryRes, totalPhrase, rangePhrase));
-
// initial layout is finished above, ensure we have transitions
ensureLayoutTransitions();
}
@@ -1277,6 +1290,7 @@
private void updateEmptyVisible() {
final boolean isEmpty = mAdapter.isEmpty() && !isAppDetailMode();
mEmpty.setVisibility(isEmpty ? View.VISIBLE : View.GONE);
+ mStupidPadding.setVisibility(isEmpty ? View.VISIBLE : View.GONE);
}
};
@@ -1308,12 +1322,6 @@
private DataUsageChartListener mChartListener = new DataUsageChartListener() {
@Override
- public void onInspectRangeChanged() {
- if (LOGD) Log.d(TAG, "onInspectRangeChanged()");
- updateDetailData();
- }
-
- @Override
public void onWarningChanged() {
setPolicyWarningBytes(mChart.getWarningBytes());
}
@@ -1403,8 +1411,8 @@
private final CycleChangeItem mChangeItem;
public CycleAdapter(Context context) {
- super(context, android.R.layout.simple_spinner_item);
- setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+ super(context, R.layout.data_usage_cycle_item);
+ setDropDownViewResource(R.layout.data_usage_cycle_item_dropdown);
mChangeItem = new CycleChangeItem(context);
}
@@ -1446,11 +1454,21 @@
}
public static class AppItem implements Comparable<AppItem>, Parcelable {
+ public static final int CATEGORY_USER = 0;
+ public static final int CATEGORY_APP_TITLE = 1;
+ public static final int CATEGORY_APP = 2;
+
public final int key;
public boolean restricted;
+ public int category;
+
public SparseBooleanArray uids = new SparseBooleanArray();
public long total;
+ public AppItem() {
+ this.key = 0;
+ }
+
public AppItem(int key) {
this.key = key;
}
@@ -1479,7 +1497,11 @@
@Override
public int compareTo(AppItem another) {
- return Long.compare(another.total, total);
+ int comparison = Integer.compare(another.category, category);
+ if (comparison == 0) {
+ comparison = Long.compare(another.total, total);
+ }
+ return comparison;
}
public static final Creator<AppItem> CREATOR = new Creator<AppItem>() {
@@ -1515,9 +1537,11 @@
*/
public void bindStats(NetworkStats stats, int[] restrictedUids) {
mItems.clear();
+ mLargest = 0;
final int currentUserId = ActivityManager.getCurrentUser();
final SparseArray<AppItem> knownItems = new SparseArray<AppItem>();
+ boolean hasApps = false;
NetworkStats.Entry entry = null;
final int size = stats != null ? stats.size() : 0;
@@ -1547,6 +1571,9 @@
}
item.addUid(uid);
item.total += entry.rxBytes + entry.txBytes;
+ if (item.total > mLargest) {
+ mLargest = item.total;
+ }
}
for (int uid : restrictedUids) {
@@ -1563,8 +1590,14 @@
item.restricted = true;
}
+ hasApps = !mItems.isEmpty();
+ if (hasApps) {
+ final AppItem title = new AppItem();
+ title.category = AppItem.CATEGORY_APP_TITLE;
+ mItems.add(title);
+ }
+
Collections.sort(mItems);
- mLargest = (mItems.size() > 0) ? mItems.get(0).total : 0;
notifyDataSetChanged();
}
@@ -1584,36 +1617,72 @@
}
@Override
- public View getView(int position, View convertView, ViewGroup parent) {
- if (convertView == null) {
- convertView = LayoutInflater.from(parent.getContext()).inflate(
- R.layout.data_usage_item, parent, false);
+ public int getViewTypeCount() {
+ return 2;
+ }
- if (mInsetSide > 0) {
- convertView.setPaddingRelative(mInsetSide, 0, mInsetSide, 0);
- }
- }
-
- final Context context = parent.getContext();
-
- final TextView text1 = (TextView) convertView.findViewById(android.R.id.text1);
- final ProgressBar progress = (ProgressBar) convertView.findViewById(
- android.R.id.progress);
-
- // kick off async load of app details
+ @Override
+ public int getItemViewType(int position) {
final AppItem item = mItems.get(position);
- UidDetailTask.bindView(mProvider, item, convertView);
-
- if (item.restricted && item.total <= 0) {
- text1.setText(R.string.data_usage_app_restricted);
- progress.setVisibility(View.GONE);
+ if (item.category == AppItem.CATEGORY_APP_TITLE) {
+ return 1;
} else {
- text1.setText(Formatter.formatFileSize(context, item.total));
- progress.setVisibility(View.VISIBLE);
+ return 0;
}
+ }
- final int percentTotal = mLargest != 0 ? (int) (item.total * 100 / mLargest) : 0;
- progress.setProgress(percentTotal);
+ @Override
+ public boolean areAllItemsEnabled() {
+ return false;
+ }
+
+ @Override
+ public boolean isEnabled(int position) {
+ return getItemViewType(position) == 0;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ final AppItem item = mItems.get(position);
+ if (getItemViewType(position) == 1) {
+ if (convertView == null) {
+ convertView = inflateCategoryHeader(LayoutInflater.from(parent.getContext()),
+ parent);
+ }
+
+ final TextView title = (TextView) convertView.findViewById(android.R.id.title);
+ title.setText(R.string.data_usage_app);
+
+ } else {
+ if (convertView == null) {
+ convertView = LayoutInflater.from(parent.getContext()).inflate(
+ R.layout.data_usage_item, parent, false);
+
+ if (mInsetSide > 0) {
+ convertView.setPaddingRelative(mInsetSide, 0, mInsetSide, 0);
+ }
+ }
+
+ final Context context = parent.getContext();
+
+ final TextView text1 = (TextView) convertView.findViewById(android.R.id.text1);
+ final ProgressBar progress = (ProgressBar) convertView.findViewById(
+ android.R.id.progress);
+
+ // kick off async load of app details
+ UidDetailTask.bindView(mProvider, item, convertView);
+
+ if (item.restricted && item.total <= 0) {
+ text1.setText(R.string.data_usage_app_restricted);
+ progress.setVisibility(View.GONE);
+ } else {
+ text1.setText(Formatter.formatFileSize(context, item.total));
+ progress.setVisibility(View.VISIBLE);
+ }
+
+ final int percentTotal = mLargest != 0 ? (int) (item.total * 100 / mLargest) : 0;
+ progress.setProgress(percentTotal);
+ }
return convertView;
}
@@ -1638,7 +1707,8 @@
final FragmentTransaction ft = parent.getFragmentManager().beginTransaction();
ft.add(fragment, TAG_APP_DETAILS);
ft.addToBackStack(TAG_APP_DETAILS);
- ft.setBreadCrumbTitle(label);
+ ft.setBreadCrumbTitle(
+ parent.getResources().getString(R.string.data_usage_app_summary_title));
ft.commitAllowingStateLoss();
}
@@ -1947,46 +2017,6 @@
/**
* Dialog to request user confirmation before setting
- * {@link android.provider.Settings.Global#DATA_ROAMING}.
- */
- public static class ConfirmDataRoamingFragment extends DialogFragment {
- public static void show(DataUsageSummary parent) {
- if (!parent.isAdded()) return;
-
- final ConfirmDataRoamingFragment dialog = new ConfirmDataRoamingFragment();
- dialog.setTargetFragment(parent, 0);
- dialog.show(parent.getFragmentManager(), TAG_CONFIRM_DATA_ROAMING);
- }
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- final Context context = getActivity();
-
- final AlertDialog.Builder builder = new AlertDialog.Builder(context);
- builder.setTitle(R.string.roaming_reenable_title);
- if (Utils.hasMultipleUsers(context)) {
- builder.setMessage(R.string.roaming_warning_multiuser);
- } else {
- builder.setMessage(R.string.roaming_warning);
- }
-
- builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- final DataUsageSummary target = (DataUsageSummary) getTargetFragment();
- if (target != null) {
- target.setDataRoaming(true);
- }
- }
- });
- builder.setNegativeButton(android.R.string.cancel, null);
-
- return builder.create();
- }
- }
-
- /**
- * Dialog to request user confirmation before setting
* {@link INetworkPolicyManager#setRestrictBackground(boolean)}.
*/
public static class ConfirmRestrictFragment extends DialogFragment {
@@ -2307,12 +2337,12 @@
return view;
}
- private static View inflateAppTitle(
- LayoutInflater inflater, ViewGroup root, CharSequence label) {
- final TextView view = (TextView) inflater.inflate(
- R.layout.data_usage_app_title, root, false);
- view.setText(label);
- return view;
+ private static View inflateCategoryHeader(LayoutInflater inflater, ViewGroup root) {
+ final TypedArray a = inflater.getContext().obtainStyledAttributes(null,
+ com.android.internal.R.styleable.Preference,
+ com.android.internal.R.attr.preferenceCategoryStyle, 0);
+ final int resId = a.getResourceId(com.android.internal.R.styleable.Preference_layout, 0);
+ return inflater.inflate(resId, root, false);
}
/**
diff --git a/src/com/android/settings/HomeSettings.java b/src/com/android/settings/HomeSettings.java
index 8697062..6d5883c 100644
--- a/src/com/android/settings/HomeSettings.java
+++ b/src/com/android/settings/HomeSettings.java
@@ -17,17 +17,21 @@
package com.android.settings;
import java.util.ArrayList;
+import java.util.List;
import android.app.ActivityManager;
+import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
+import android.content.res.Resources;
import android.graphics.ColorFilter;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
@@ -37,13 +41,17 @@
import android.os.Handler;
import android.preference.Preference;
import android.preference.PreferenceGroup;
+import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.RadioButton;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
+import com.android.settings.search.SearchIndexableRaw;
-public class HomeSettings extends SettingsPreferenceFragment {
+public class HomeSettings extends SettingsPreferenceFragment implements Indexable {
static final String TAG = "HomeSettings";
static final int REQUESTING_UNINSTALL = 10;
@@ -289,4 +297,59 @@
}
}
}
+
+ /**
+ * For search
+ */
+ public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider() {
+ @Override
+ public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
+ final List<SearchIndexableRaw> result = new ArrayList<SearchIndexableRaw>();
+
+ final PackageManager pm = context.getPackageManager();
+ final ArrayList<ResolveInfo> homeActivities = new ArrayList<ResolveInfo>();
+ pm.getHomeActivities(homeActivities);
+
+ final SharedPreferences sp = context.getSharedPreferences(
+ HomeSettings.HOME_PREFS, Context.MODE_PRIVATE);
+ final boolean doShowHome = sp.getBoolean(HomeSettings.HOME_PREFS_DO_SHOW, false);
+
+ // We index Home Launchers only if there are more than one or if we are showing the
+ // Home tile into the Dashboard
+ if (homeActivities.size() > 1 || doShowHome) {
+ final Resources res = context.getResources();
+
+ // Add fragment title
+ SearchIndexableRaw data = new SearchIndexableRaw(context);
+ data.title = res.getString(R.string.home_settings);
+ data.screenTitle = res.getString(R.string.home_settings);
+ data.keywords = res.getString(R.string.keywords_home);
+ result.add(data);
+
+ for (int i = 0; i < homeActivities.size(); i++) {
+ final ResolveInfo resolveInfo = homeActivities.get(i);
+ final ActivityInfo activityInfo = resolveInfo.activityInfo;
+
+ CharSequence name;
+ try {
+ name = activityInfo.loadLabel(pm);
+ if (TextUtils.isEmpty(name)) {
+ continue;
+ }
+ } catch (Exception e) {
+ Log.v(TAG, "Problem dealing with Home " + activityInfo.name, e);
+ continue;
+ }
+
+ data = new SearchIndexableRaw(context);
+ data.title = name.toString();
+ data.screenTitle = res.getString(R.string.home_settings);
+ result.add(data);
+ }
+ }
+
+ return result;
+ }
+ };
}
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 895e9ea..01149f3 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -69,6 +69,7 @@
public static class PowerUsageSummaryActivity extends SettingsActivity { /* empty */ }
public static class BatterySaverSettingsActivity extends SettingsActivity { /* empty */ }
public static class AccountSyncSettingsActivity extends SettingsActivity { /* empty */ }
+ public static class AccountSettingsActivity extends SettingsActivity { /* empty */ }
public static class AccountSyncSettingsInAddAccountActivity extends SettingsActivity { /* empty */ }
public static class CryptKeeperSettingsActivity extends SettingsActivity { /* empty */ }
public static class DeviceAdminSettingsActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 751d478..056cf8d 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -66,6 +66,7 @@
import com.android.internal.util.XmlUtils;
import com.android.settings.accessibility.AccessibilitySettings;
import com.android.settings.accessibility.CaptionPropertiesFragment;
+import com.android.settings.accounts.AccountSettings;
import com.android.settings.accounts.AccountSyncSettings;
import com.android.settings.applications.InstalledAppDetails;
import com.android.settings.applications.ManageApplications;
@@ -262,6 +263,7 @@
WifiDisplaySettings.class.getName(),
PowerUsageSummary.class.getName(),
AccountSyncSettings.class.getName(),
+ AccountSettings.class.getName(),
CryptKeeperSettings.class.getName(),
DataUsageSummary.class.getName(),
DreamSettings.class.getName(),
@@ -293,7 +295,6 @@
private boolean mBatteryPresent = true;
private BroadcastReceiver mBatteryInfoReceiver = new BroadcastReceiver() {
-
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
diff --git a/src/com/android/settings/accounts/AccountSettings.java b/src/com/android/settings/accounts/AccountSettings.java
index 13878d7..88f47bc 100644
--- a/src/com/android/settings/accounts/AccountSettings.java
+++ b/src/com/android/settings/accounts/AccountSettings.java
@@ -19,7 +19,9 @@
import android.accounts.Account;
import android.accounts.AccountManager;
+import android.app.ActivityManager;
import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
@@ -29,7 +31,11 @@
import android.os.UserManager;
import android.util.Log;
import android.util.SparseArray;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
import android.preference.Preference;
+import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceGroup;
@@ -54,7 +60,6 @@
implements AuthenticatorHelper.OnAccountsUpdateListener,
OnPreferenceClickListener {
public static final String TAG = "AccountSettings";
-
private static final String KEY_ACCOUNT = "account";
private static final String KEY_ADD_ACCOUNT = "add_account";
@@ -68,6 +73,7 @@
private UserManager mUm;
private SparseArray<ProfileData> mProfiles;
private ManagedProfileBroadcastReceiver mManagedProfileBroadcastReceiver;
+ private boolean mIsSingleProfileUi = true;
/**
* Holds data related to the accounts belonging to one profile.
@@ -97,6 +103,50 @@
mUm = (UserManager) getSystemService(Context.USER_SERVICE);
mProfiles = new SparseArray<ProfileData>(2);
updateUi();
+ setHasOptionsMenu(true);
+ }
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ inflater.inflate(R.menu.account_settings, menu);
+ final UserHandle currentProfile = UserHandle.getCallingUserHandle();
+ if (mIsSingleProfileUi) {
+ menu.findItem(R.id.account_settings_menu_auto_sync)
+ .setVisible(true)
+ .setOnMenuItemClickListener(new MasterSyncStateClickListener(currentProfile));
+ menu.removeItem(R.id.account_settings_menu_auto_sync_personal);
+ menu.removeItem(R.id.account_settings_menu_auto_sync_work);
+ } else {
+ final UserHandle managedProfile = Utils.getManagedProfile(mUm);
+
+ menu.findItem(R.id.account_settings_menu_auto_sync_personal)
+ .setVisible(true)
+ .setOnMenuItemClickListener(new MasterSyncStateClickListener(currentProfile));
+ menu.findItem(R.id.account_settings_menu_auto_sync_work)
+ .setVisible(true)
+ .setOnMenuItemClickListener(new MasterSyncStateClickListener(managedProfile));
+ menu.removeItem(R.id.account_settings_menu_auto_sync);
+ }
+ super.onCreateOptionsMenu(menu, inflater);
+ }
+
+ @Override
+ public void onPrepareOptionsMenu(Menu menu) {
+ final UserHandle currentProfile = UserHandle.getCallingUserHandle();
+ if (mIsSingleProfileUi) {
+ menu.findItem(R.id.account_settings_menu_auto_sync)
+ .setChecked(ContentResolver.getMasterSyncAutomaticallyAsUser(
+ currentProfile.getIdentifier()));
+ } else {
+ final UserHandle managedProfile = Utils.getManagedProfile(mUm);
+
+ menu.findItem(R.id.account_settings_menu_auto_sync_personal)
+ .setChecked(ContentResolver.getMasterSyncAutomaticallyAsUser(
+ currentProfile.getIdentifier()));
+ menu.findItem(R.id.account_settings_menu_auto_sync_work)
+ .setChecked(ContentResolver.getMasterSyncAutomaticallyAsUser(
+ managedProfile.getIdentifier()));
+ }
}
void updateUi() {
@@ -117,12 +167,13 @@
if (managedProfile == null) {
updateSingleProfileUi();
} else {
- updateProfileUi(currentProfile,
- KEY_CATEGORY_PERSONAL, KEY_ADD_ACCOUNT_PERSONAL, new ArrayList<String>());
- final ArrayList<String> unusedPreferences = new ArrayList<String>(1);
+ mIsSingleProfileUi = false;
+ updateProfileUi(currentProfile, KEY_CATEGORY_PERSONAL, KEY_ADD_ACCOUNT_PERSONAL,
+ new ArrayList<String>());
+ final ArrayList<String> unusedPreferences = new ArrayList<String>(2);
unusedPreferences.add(KEY_ADD_ACCOUNT);
- updateProfileUi(managedProfile,
- KEY_CATEGORY_WORK, KEY_ADD_ACCOUNT_WORK, unusedPreferences);
+ updateProfileUi(managedProfile, KEY_CATEGORY_WORK, KEY_ADD_ACCOUNT_WORK,
+ unusedPreferences);
mManagedProfileBroadcastReceiver = new ManagedProfileBroadcastReceiver();
mManagedProfileBroadcastReceiver.register(getActivity());
}
@@ -141,8 +192,8 @@
unusedPreferences);
}
- private void updateProfileUi(UserHandle userHandle, String categoryKey, String addAccountKey,
- ArrayList<String> unusedPreferences) {
+ private void updateProfileUi(final UserHandle userHandle, String categoryKey,
+ String addAccountKey, ArrayList<String> unusedPreferences) {
final int count = unusedPreferences.size();
for (int i = 0; i < count; i++) {
removePreference(unusedPreferences.get(i));
@@ -345,6 +396,28 @@
}
}
}
+
+ private class MasterSyncStateClickListener implements MenuItem.OnMenuItemClickListener {
+ private final UserHandle mUserHandle;
+
+ public MasterSyncStateClickListener(UserHandle userHandle) {
+ mUserHandle = userHandle;
+ }
+
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ // TODO: Add confirmation dialogs. See: http://b/16076571
+ if (ActivityManager.isUserAMonkey()) {
+ Log.d(TAG, "ignoring monkey's attempt to flip sync state");
+ } else {
+ boolean newSyncState = !item.isChecked();
+ item.setChecked(newSyncState);
+ ContentResolver.setMasterSyncAutomaticallyAsUser(newSyncState,
+ mUserHandle.getIdentifier());
+ }
+ return true;
+ }
+ }
// TODO Implement a {@link SearchIndexProvider} to allow Indexing and Search of account types
// See http://b/15403806
}
diff --git a/src/com/android/settings/accounts/SyncSettings.java b/src/com/android/settings/accounts/SyncSettings.java
deleted file mode 100644
index 3248113..0000000
--- a/src/com/android/settings/accounts/SyncSettings.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright (C) 2008 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.settings.accounts;
-
-import android.accounts.Account;
-import android.accounts.AccountManager;
-import android.accounts.OnAccountsUpdateListener;
-import android.app.Activity;
-import android.app.ActivityManager;
-import android.content.ContentResolver;
-import android.content.Intent;
-import android.graphics.drawable.Drawable;
-import android.os.Bundle;
-import android.preference.CheckBoxPreference;
-import android.preference.Preference;
-import android.preference.Preference.OnPreferenceChangeListener;
-import android.preference.PreferenceScreen;
-import android.util.Log;
-
-import com.android.settings.AccountPreference;
-import com.android.settings.DialogCreatable;
-import com.android.settings.R;
-
-import java.util.ArrayList;
-
-public class SyncSettings extends AccountPreferenceBase
- implements OnAccountsUpdateListener, DialogCreatable {
-
- private static final String KEY_SYNC_SWITCH = "sync_switch";
-
- private String[] mAuthorities;
-
- private SettingsDialogFragment mDialogFragment;
- private CheckBoxPreference mAutoSyncPreference;
-
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
-
- addPreferencesFromResource(R.xml.sync_settings);
- mAutoSyncPreference =
- (CheckBoxPreference) getPreferenceScreen().findPreference(KEY_SYNC_SWITCH);
- mAutoSyncPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- if (ActivityManager.isUserAMonkey()) {
- Log.d("SyncSettings", "ignoring monkey's attempt to flip sync state");
- } else {
- ContentResolver.setMasterSyncAutomatically((Boolean) newValue);
- }
- return true;
- }
- });
-
- setHasOptionsMenu(true);
- }
-
- @Override
- public void onStart() {
- super.onStart();
- Activity activity = getActivity();
- AccountManager.get(activity).addOnAccountsUpdatedListener(this, null, true);
- }
-
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
-
- final Activity activity = getActivity();
- mAutoSyncPreference.setChecked(ContentResolver.getMasterSyncAutomatically());
- mAuthorities = activity.getIntent().getStringArrayExtra(AUTHORITIES_FILTER_KEY);
-
- updateAuthDescriptions();
- }
-
- @Override
- public void onStop() {
- super.onStop();
- final Activity activity = getActivity();
- AccountManager.get(activity).removeOnAccountsUpdatedListener(this);
- }
-
- @Override
- public boolean onPreferenceTreeClick(PreferenceScreen preferences, Preference preference) {
- if (preference instanceof AccountPreference) {
- startAccountSettings((AccountPreference) preference);
- } else {
- return false;
- }
- return true;
- }
-
- private void startAccountSettings(AccountPreference acctPref) {
- Intent intent = new Intent("android.settings.ACCOUNT_SYNC_SETTINGS");
- intent.putExtra(AccountSyncSettings.ACCOUNT_KEY, acctPref.getAccount());
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- startActivity(intent);
- finish();
- }
-
- @Override
- public void showDialog(int dialogId) {
- if (mDialogFragment != null) {
- Log.e(TAG, "Old dialog fragment not null!");
- }
- mDialogFragment = new SettingsDialogFragment(this, dialogId);
- mDialogFragment.show(getActivity().getFragmentManager(), Integer.toString(dialogId));
- }
-
- private void removeAccountPreferences() {
- PreferenceScreen parent = getPreferenceScreen();
- for (int i = 0; i < parent.getPreferenceCount(); ) {
- if (parent.getPreference(i) instanceof AccountPreference) {
- parent.removePreference(parent.getPreference(i));
- } else {
- i++;
- }
- }
- }
-
- @Override
- public void onAccountsUpdated(Account[] accounts) {
- if (getActivity() == null) return;
-
- removeAccountPreferences();
- for (int i = 0, n = accounts.length; i < n; i++) {
- final Account account = accounts[i];
- final ArrayList<String> auths = getAuthoritiesForAccountType(account.type);
-
- boolean showAccount = true;
- if (mAuthorities != null && auths != null) {
- showAccount = false;
- for (String requestedAuthority : mAuthorities) {
- if (auths.contains(requestedAuthority)) {
- showAccount = true;
- break;
- }
- }
- }
-
- if (showAccount) {
- final Drawable icon = getDrawableForType(account.type);
- final AccountPreference preference =
- new AccountPreference(getActivity(), account, icon, auths, true);
- getPreferenceScreen().addPreference(preference);
- preference.setSummary(getLabelForType(account.type));
- }
- }
- onSyncStateUpdated();
- }
-
- @Override
- protected void onAuthDescriptionsUpdated() {
- // Update account icons for all account preference items
- for (int i = 0; i < getPreferenceScreen().getPreferenceCount(); i++) {
- Preference pref = getPreferenceScreen().getPreference(i);
- if (pref instanceof AccountPreference) {
- AccountPreference accPref = (AccountPreference)
- getPreferenceScreen().getPreference(i);
- accPref.setIcon(getDrawableForType(accPref.getAccount().type));
- accPref.setSummary(getLabelForType(accPref.getAccount().type));
- }
- }
- }
-}
diff --git a/src/com/android/settings/accounts/SyncSettingsActivity.java b/src/com/android/settings/accounts/SyncSettingsActivity.java
deleted file mode 100644
index 014c24d..0000000
--- a/src/com/android/settings/accounts/SyncSettingsActivity.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2012 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.settings.accounts;
-
-import android.content.Intent;
-
-import com.android.settings.SettingsActivity;
-
-/**
- * Launcher activity for the SyncSettings fragment.
- *
- */
-public class SyncSettingsActivity extends SettingsActivity {
- @Override
- public Intent getIntent() {
- Intent modIntent = new Intent(super.getIntent());
- modIntent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT, SyncSettings.class.getName());
- return modIntent;
- }
-
- @Override
- protected boolean isValidFragment(String fragmentName) {
- if (SyncSettings.class.getName().equals(fragmentName)) return true;
- return false;
- }
-}
\ No newline at end of file
diff --git a/src/com/android/settings/net/DataUsageMeteredSettings.java b/src/com/android/settings/net/DataUsageMeteredSettings.java
index 87358f6..d567c7e 100644
--- a/src/com/android/settings/net/DataUsageMeteredSettings.java
+++ b/src/com/android/settings/net/DataUsageMeteredSettings.java
@@ -29,10 +29,9 @@
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Bundle;
-import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceCategory;
-import android.provider.SearchIndexableResource;
+import android.preference.SwitchPreference;
import android.telephony.TelephonyManager;
import com.android.settings.R;
@@ -42,7 +41,6 @@
import com.android.settings.search.SearchIndexableRaw;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
/**
@@ -117,7 +115,7 @@
return pref;
}
- private class MeteredPreference extends CheckBoxPreference {
+ private class MeteredPreference extends SwitchPreference {
private final NetworkTemplate mTemplate;
private boolean mBinding;
diff --git a/src/com/android/settings/notification/ZenModeSettings.java b/src/com/android/settings/notification/ZenModeSettings.java
index 02bb85e..c8befa0 100644
--- a/src/com/android/settings/notification/ZenModeSettings.java
+++ b/src/com/android/settings/notification/ZenModeSettings.java
@@ -28,7 +28,6 @@
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.database.ContentObserver;
-import android.graphics.Typeface;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
@@ -45,9 +44,6 @@
import android.text.format.DateFormat;
import android.util.Log;
import android.util.SparseArray;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
import android.widget.TimePicker;
import com.android.settings.R;
@@ -72,6 +68,7 @@
private static final String KEY_CALLS = "phone_calls";
private static final String KEY_MESSAGES = "messages";
private static final String KEY_STARRED = "starred";
+ private static final String KEY_ALARM_INFO = "alarm_info";
private static final String KEY_DOWNTIME = "downtime";
private static final String KEY_DAYS = "days";
@@ -110,6 +107,7 @@
}
rt.put(R.string.zen_mode_messages, KEY_MESSAGES);
rt.put(R.string.zen_mode_from_starred, KEY_STARRED);
+ rt.put(R.string.zen_mode_alarm_info, KEY_ALARM_INFO);
rt.put(R.string.zen_mode_downtime_category, KEY_DOWNTIME);
rt.put(R.string.zen_mode_downtime_days, KEY_DAYS);
rt.put(R.string.zen_mode_start_time, KEY_START_TIME);
@@ -141,8 +139,6 @@
super.onCreate(savedInstanceState);
mContext = getActivity();
mPM = mContext.getPackageManager();
- final Resources res = mContext.getResources();
- final int padding = res.getDimensionPixelSize(R.dimen.content_margin_left);
addPreferencesFromResource(R.xml.zen_mode_settings);
final PreferenceScreen root = getPreferenceScreen();
@@ -157,6 +153,8 @@
final PreferenceCategory important =
(PreferenceCategory) root.findPreference(KEY_IMPORTANT);
+ final Preference alarmInfo = important.findPreference(KEY_ALARM_INFO);
+ important.removePreference(alarmInfo);
mCalls = (SwitchPreference) important.findPreference(KEY_CALLS);
if (Utils.isVoiceCapable(mContext)) {
@@ -213,18 +211,6 @@
});
important.addPreference(mStarred);
- final Preference alarmInfo = new Preference(mContext) {
- @Override
- public View getView(View convertView, ViewGroup parent) {
- final TextView tv = new TextView(mContext);
- tv.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.ITALIC));
- tv.setPadding(padding, padding, padding, padding);
- tv.setText(R.string.zen_mode_alarm_info);
- return tv;
- }
- };
- alarmInfo.setPersistent(false);
- alarmInfo.setSelectable(false);
important.addPreference(alarmInfo);
final PreferenceCategory downtime = (PreferenceCategory) root.findPreference(KEY_DOWNTIME);
diff --git a/src/com/android/settings/search/DynamicIndexableContentMonitor.java b/src/com/android/settings/search/DynamicIndexableContentMonitor.java
index c0b462f..12bb6ef 100644
--- a/src/com/android/settings/search/DynamicIndexableContentMonitor.java
+++ b/src/com/android/settings/search/DynamicIndexableContentMonitor.java
@@ -78,10 +78,8 @@
new UserDictionaryContentObserver(mHandler);
private Context mContext;
-
- private boolean mHasFeturePrinting;
-
- private boolean mHasFetureIme;
+ private boolean mHasFeaturePrinting;
+ private boolean mHasFeatureIme;
private static Intent getAccessibilityServiceIntent(String packageName) {
final Intent intent = new Intent(AccessibilityService.SERVICE_INTERFACE);
@@ -104,9 +102,9 @@
public void register(Context context) {
mContext = context;
- mHasFeturePrinting = mContext.getPackageManager().hasSystemFeature(
+ mHasFeaturePrinting = mContext.getPackageManager().hasSystemFeature(
PackageManager.FEATURE_PRINTING);
- mHasFetureIme = mContext.getPackageManager().hasSystemFeature(
+ mHasFeatureIme = mContext.getPackageManager().hasSystemFeature(
PackageManager.FEATURE_INPUT_METHODS);
// Cache accessibility service packages to know when they go away.
@@ -124,7 +122,7 @@
mAccessibilityServices.add(resolveInfo.serviceInfo.packageName);
}
- if (mHasFeturePrinting) {
+ if (mHasFeaturePrinting) {
// Cache print service packages to know when they go away.
PrintManager printManager = (PrintManager)
mContext.getSystemService(Context.PRINT_SERVICE);
@@ -141,7 +139,7 @@
}
// Cache IME service packages to know when they go away.
- if (mHasFetureIme) {
+ if (mHasFeatureIme) {
InputMethodManager imeManager = (InputMethodManager)
mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
List<InputMethodInfo> inputMethods = imeManager.getInputMethodList();
@@ -174,7 +172,7 @@
Context.INPUT_SERVICE);
inputManager.unregisterInputDeviceListener(this);
- if (mHasFetureIme) {
+ if (mHasFeatureIme) {
mContext.getContentResolver().unregisterContentObserver(
mUserDictionaryContentObserver);
}
@@ -242,7 +240,7 @@
}
}
- if (mHasFeturePrinting) {
+ if (mHasFeaturePrinting) {
if (!mPrintServices.contains(packageName)) {
final Intent intent = getPrintServiceIntent(packageName);
if (!mContext.getPackageManager().queryIntentServices(intent, 0).isEmpty()) {
@@ -253,7 +251,7 @@
}
}
- if (mHasFetureIme) {
+ if (mHasFeatureIme) {
if (!mImeServices.contains(packageName)) {
Intent intent = getIMEServiceIntent(packageName);
if (!mContext.getPackageManager().queryIntentServices(intent, 0).isEmpty()) {
@@ -273,7 +271,7 @@
AccessibilitySettings.class.getName(), true, true);
}
- if (mHasFeturePrinting) {
+ if (mHasFeaturePrinting) {
final int printIndex = mPrintServices.indexOf(packageName);
if (printIndex >= 0) {
mPrintServices.remove(printIndex);
@@ -282,7 +280,7 @@
}
}
- if (mHasFetureIme) {
+ if (mHasFeatureIme) {
final int imeIndex = mImeServices.indexOf(packageName);
if (imeIndex >= 0) {
mImeServices.remove(imeIndex);
diff --git a/src/com/android/settings/search/HomePackageReceiver.java b/src/com/android/settings/search/HomePackageReceiver.java
new file mode 100644
index 0000000..a245252
--- /dev/null
+++ b/src/com/android/settings/search/HomePackageReceiver.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2014 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.settings.search;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import com.android.settings.HomeSettings;
+
+import java.util.Set;
+
+/**
+ * A BroadcastReceiver for detecting Home Launchers
+ */
+public class HomePackageReceiver extends BroadcastReceiver {
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ Index.getInstance(context).updateFromClassNameResource(
+ HomeSettings.class.getName(), true, true);
+ }
+}
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index 228381f..4749733 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -119,7 +119,7 @@
sResMap.put(HomeSettings.class.getName(),
new SearchIndexableResource(
Ranking.getRankForClassName(HomeSettings.class.getName()),
- R.xml.home_selection,
+ NO_DATA_RES_ID,
HomeSettings.class.getName(),
R.drawable.ic_settings_home));
diff --git a/src/com/android/settings/widget/ChartDataUsageView.java b/src/com/android/settings/widget/ChartDataUsageView.java
index 4e16bfc..c20a8db 100644
--- a/src/com/android/settings/widget/ChartDataUsageView.java
+++ b/src/com/android/settings/widget/ChartDataUsageView.java
@@ -50,26 +50,24 @@
private static final int MSG_UPDATE_AXIS = 100;
private static final long DELAY_MILLIS = 250;
- private static final boolean LIMIT_SWEEPS_TO_VALID_DATA = false;
-
private ChartGridView mGrid;
private ChartNetworkSeriesView mSeries;
private ChartNetworkSeriesView mDetailSeries;
private NetworkStatsHistory mHistory;
- private ChartSweepView mSweepLeft;
- private ChartSweepView mSweepRight;
private ChartSweepView mSweepWarning;
private ChartSweepView mSweepLimit;
+ private long mInspectStart;
+ private long mInspectEnd;
+
private Handler mHandler;
/** Current maximum value of {@link #mVert}. */
private long mVertMax;
public interface DataUsageChartListener {
- public void onInspectRangeChanged();
public void onWarningChanged();
public void onLimitChanged();
public void requestWarningEdit();
@@ -112,43 +110,27 @@
mDetailSeries = (ChartNetworkSeriesView) findViewById(R.id.detail_series);
mDetailSeries.setVisibility(View.GONE);
- mSweepLeft = (ChartSweepView) findViewById(R.id.sweep_left);
- mSweepRight = (ChartSweepView) findViewById(R.id.sweep_right);
mSweepLimit = (ChartSweepView) findViewById(R.id.sweep_limit);
mSweepWarning = (ChartSweepView) findViewById(R.id.sweep_warning);
// prevent sweeps from crossing each other
- mSweepLeft.setValidRangeDynamic(null, mSweepRight);
- mSweepRight.setValidRangeDynamic(mSweepLeft, null);
mSweepWarning.setValidRangeDynamic(null, mSweepLimit);
mSweepLimit.setValidRangeDynamic(mSweepWarning, null);
// mark neighbors for checking touch events against
- mSweepLeft.setNeighbors(mSweepRight);
- mSweepRight.setNeighbors(mSweepLeft);
- mSweepLimit.setNeighbors(mSweepWarning, mSweepLeft, mSweepRight);
- mSweepWarning.setNeighbors(mSweepLimit, mSweepLeft, mSweepRight);
+ mSweepLimit.setNeighbors(mSweepWarning);
+ mSweepWarning.setNeighbors(mSweepLimit);
- mSweepLeft.addOnSweepListener(mHorizListener);
- mSweepRight.addOnSweepListener(mHorizListener);
mSweepWarning.addOnSweepListener(mVertListener);
mSweepLimit.addOnSweepListener(mVertListener);
mSweepWarning.setDragInterval(5 * MB_IN_BYTES);
mSweepLimit.setDragInterval(5 * MB_IN_BYTES);
- // TODO: make time sweeps adjustable through dpad
- mSweepLeft.setClickable(false);
- mSweepLeft.setFocusable(false);
- mSweepRight.setClickable(false);
- mSweepRight.setFocusable(false);
-
// tell everyone about our axis
mGrid.init(mHoriz, mVert);
mSeries.init(mHoriz, mVert);
mDetailSeries.init(mHoriz, mVert);
- mSweepLeft.init(mHoriz);
- mSweepRight.init(mHoriz);
mSweepWarning.init(mVert);
mSweepLimit.init(mVert);
@@ -194,7 +176,7 @@
mSweepLimit.setEnabled(true);
mSweepLimit.setValue(policy.limitBytes);
} else {
- mSweepLimit.setVisibility(View.VISIBLE);
+ mSweepLimit.setVisibility(View.INVISIBLE);
mSweepLimit.setEnabled(false);
mSweepLimit.setValue(-1);
}
@@ -295,23 +277,6 @@
mSeries.setEstimateVisible(estimateVisible);
}
- private OnSweepListener mHorizListener = new OnSweepListener() {
- @Override
- public void onSweep(ChartSweepView sweep, boolean sweepDone) {
- updatePrimaryRange();
-
- // update detail list only when done sweeping
- if (sweepDone && mListener != null) {
- mListener.onInspectRangeChanged();
- }
- }
-
- @Override
- public void requestEdit(ChartSweepView sweep) {
- // ignored
- }
- };
-
private void sendUpdateAxisDelayed(ChartSweepView sweep, boolean force) {
if (force || !mHandler.hasMessages(MSG_UPDATE_AXIS, sweep)) {
mHandler.sendMessageDelayed(
@@ -369,11 +334,11 @@
}
public long getInspectStart() {
- return mSweepLeft.getValue();
+ return mInspectStart;
}
public long getInspectEnd() {
- return mSweepRight.getValue();
+ return mInspectEnd;
}
public long getWarningBytes() {
@@ -384,14 +349,6 @@
return mSweepLimit.getLabelValue();
}
- private long getHistoryStart() {
- return mHistory != null ? mHistory.getStart() : Long.MAX_VALUE;
- }
-
- private long getHistoryEnd() {
- return mHistory != null ? mHistory.getEnd() : Long.MIN_VALUE;
- }
-
/**
* Set the exact time range that should be displayed, updating how
* {@link ChartNetworkSeriesView} paints. Moves inspection ranges to be the
@@ -403,30 +360,8 @@
mSeries.setBounds(visibleStart, visibleEnd);
mDetailSeries.setBounds(visibleStart, visibleEnd);
- final long historyStart = getHistoryStart();
- final long historyEnd = getHistoryEnd();
-
- final long validStart = historyStart == Long.MAX_VALUE ? visibleStart
- : Math.max(visibleStart, historyStart);
- final long validEnd = historyEnd == Long.MIN_VALUE ? visibleEnd
- : Math.min(visibleEnd, historyEnd);
-
- if (LIMIT_SWEEPS_TO_VALID_DATA) {
- // prevent time sweeps from leaving valid data
- mSweepLeft.setValidRange(validStart, validEnd);
- mSweepRight.setValidRange(validStart, validEnd);
- } else {
- mSweepLeft.setValidRange(visibleStart, visibleEnd);
- mSweepRight.setValidRange(visibleStart, visibleEnd);
- }
-
- // default sweeps to last week of data
- final long halfRange = (visibleEnd + visibleStart) / 2;
- final long sweepMax = validEnd;
- final long sweepMin = Math.max(visibleStart, (sweepMax - DateUtils.WEEK_IN_MILLIS));
-
- mSweepLeft.setValue(sweepMin);
- mSweepRight.setValue(sweepMax);
+ mInspectStart = visibleStart;
+ mInspectEnd = visibleEnd;
requestLayout();
if (changed) {
@@ -440,15 +375,11 @@
}
private void updatePrimaryRange() {
- final long left = mSweepLeft.getValue();
- final long right = mSweepRight.getValue();
-
// prefer showing primary range on detail series, when available
if (mDetailSeries.getVisibility() == View.VISIBLE) {
- mDetailSeries.setPrimaryRange(left, right);
- mSeries.setPrimaryRange(0, 0);
+ mSeries.setSecondary(true);
} else {
- mSeries.setPrimaryRange(left, right);
+ mSeries.setSecondary(false);
}
}
diff --git a/src/com/android/settings/widget/ChartGridView.java b/src/com/android/settings/widget/ChartGridView.java
index ec5882c..4cd6f5f 100644
--- a/src/com/android/settings/widget/ChartGridView.java
+++ b/src/com/android/settings/widget/ChartGridView.java
@@ -19,22 +19,25 @@
import static com.android.settings.DataUsageSummary.formatDateRange;
import android.content.Context;
+import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Canvas;
-import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
import android.text.Layout;
import android.text.StaticLayout;
import android.text.TextPaint;
import android.util.AttributeSet;
+import android.util.Log;
import android.util.TypedValue;
import android.view.View;
import com.android.internal.util.Preconditions;
import com.android.settings.R;
+import java.util.Locale;
+
/**
* Background of {@link ChartView} that renders grid lines as requested by
* {@link ChartAxis#getTickPoints()}.
@@ -47,10 +50,13 @@
private Drawable mPrimary;
private Drawable mSecondary;
private Drawable mBorder;
+
+ private int mLabelSize;
private int mLabelColor;
- private Layout mLayoutStart;
- private Layout mLayoutEnd;
+ private Layout mLabelStart;
+ private Layout mLabelMid;
+ private Layout mLabelEnd;
public ChartGridView(Context context) {
this(context, null, 0);
@@ -71,7 +77,17 @@
mPrimary = a.getDrawable(R.styleable.ChartGridView_primaryDrawable);
mSecondary = a.getDrawable(R.styleable.ChartGridView_secondaryDrawable);
mBorder = a.getDrawable(R.styleable.ChartGridView_borderDrawable);
- mLabelColor = a.getColor(R.styleable.ChartGridView_labelColor, Color.RED);
+
+ final int taId = a.getResourceId(R.styleable.ChartGridView_android_textAppearance, -1);
+ final TypedArray ta = context.obtainStyledAttributes(taId,
+ com.android.internal.R.styleable.TextAppearance);
+ mLabelSize = ta.getDimensionPixelSize(
+ com.android.internal.R.styleable.TextAppearance_textSize, 0);
+ ta.recycle();
+
+ final ColorStateList labelColor = a.getColorStateList(
+ R.styleable.ChartGridView_android_textColor);
+ mLabelColor = labelColor.getDefaultColor();
a.recycle();
}
@@ -83,71 +99,83 @@
void setBounds(long start, long end) {
final Context context = getContext();
- mLayoutStart = makeLayout(formatDateRange(context, start, start));
- mLayoutEnd = makeLayout(formatDateRange(context, end, end));
+ final long mid = (start + end) / 2;
+ mLabelStart = makeLabel(formatDateRange(context, start, start));
+ mLabelMid = makeLabel(formatDateRange(context, mid, mid));
+ mLabelEnd = makeLabel(formatDateRange(context, end, end));
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
final int width = getWidth();
- final int height = getHeight();
+ final int height = getHeight() - getPaddingBottom();
final Drawable secondary = mSecondary;
- final int secondaryHeight = mSecondary.getIntrinsicHeight();
+ if (secondary != null) {
+ final int secondaryHeight = secondary.getIntrinsicHeight();
- final float[] vertTicks = mVert.getTickPoints();
- for (float y : vertTicks) {
- final int bottom = (int) Math.min(y + secondaryHeight, height);
- secondary.setBounds(0, (int) y, width, bottom);
- secondary.draw(canvas);
+ final float[] vertTicks = mVert.getTickPoints();
+ for (float y : vertTicks) {
+ final int bottom = (int) Math.min(y + secondaryHeight, height);
+ secondary.setBounds(0, (int) y, width, bottom);
+ secondary.draw(canvas);
+ }
}
final Drawable primary = mPrimary;
- final int primaryWidth = mPrimary.getIntrinsicWidth();
- final int primaryHeight = mPrimary.getIntrinsicHeight();
+ if (primary != null) {
+ final int primaryWidth = primary.getIntrinsicWidth();
+ final int primaryHeight = primary.getIntrinsicHeight();
- final float[] horizTicks = mHoriz.getTickPoints();
- for (float x : horizTicks) {
- final int right = (int) Math.min(x + primaryWidth, width);
- primary.setBounds((int) x, 0, right, height);
- primary.draw(canvas);
+ final float[] horizTicks = mHoriz.getTickPoints();
+ for (float x : horizTicks) {
+ final int right = (int) Math.min(x + primaryWidth, width);
+ primary.setBounds((int) x, 0, right, height);
+ primary.draw(canvas);
+ }
}
mBorder.setBounds(0, 0, width, height);
mBorder.draw(canvas);
- final int padding = mLayoutStart != null ? mLayoutStart.getHeight() / 8 : 0;
+ final int padding = mLabelStart != null ? mLabelStart.getHeight() / 8 : 0;
- final Layout start = mLayoutStart;
+ final Layout start = mLabelStart;
if (start != null) {
- canvas.save();
+ final int saveCount = canvas.save();
canvas.translate(0, height + padding);
start.draw(canvas);
- canvas.restore();
+ canvas.restoreToCount(saveCount);
}
- final Layout end = mLayoutEnd;
+ final Layout mid = mLabelMid;
+ if (mid != null) {
+ final int saveCount = canvas.save();
+ canvas.translate((width - mid.getWidth()) / 2, height + padding);
+ mid.draw(canvas);
+ canvas.restoreToCount(saveCount);
+ }
+
+ final Layout end = mLabelEnd;
if (end != null) {
- canvas.save();
+ final int saveCount = canvas.save();
canvas.translate(width - end.getWidth(), height + padding);
end.draw(canvas);
- canvas.restore();
+ canvas.restoreToCount(saveCount);
}
}
- private Layout makeLayout(CharSequence text) {
+ private Layout makeLabel(CharSequence text) {
final Resources res = getResources();
final TextPaint paint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
paint.density = res.getDisplayMetrics().density;
paint.setCompatibilityScaling(res.getCompatibilityInfo().applicationScale);
paint.setColor(mLabelColor);
- paint.setTextSize(
- TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 10, res.getDisplayMetrics()));
+ paint.setTextSize(mLabelSize);
return new StaticLayout(text, paint,
(int) Math.ceil(Layout.getDesiredWidth(text, paint)),
Layout.Alignment.ALIGN_NORMAL, 1.f, 0, true);
}
-
}
diff --git a/src/com/android/settings/widget/ChartNetworkSeriesView.java b/src/com/android/settings/widget/ChartNetworkSeriesView.java
index 6250a25..7aaba66 100644
--- a/src/com/android/settings/widget/ChartNetworkSeriesView.java
+++ b/src/com/android/settings/widget/ChartNetworkSeriesView.java
@@ -60,17 +60,17 @@
private Path mPathFill;
private Path mPathEstimate;
+ private int mSafeRegion;
+
private long mStart;
private long mEnd;
- private long mPrimaryLeft;
- private long mPrimaryRight;
-
/** Series will be extended to reach this end time. */
private long mEndTime = Long.MIN_VALUE;
private boolean mPathValid = false;
private boolean mEstimateVisible = false;
+ private boolean mSecondary = false;
private long mMax;
private long mMaxEstimate;
@@ -93,8 +93,11 @@
final int fill = a.getColor(R.styleable.ChartNetworkSeriesView_fillColor, Color.RED);
final int fillSecondary = a.getColor(
R.styleable.ChartNetworkSeriesView_fillColorSecondary, Color.RED);
+ final int safeRegion = a.getDimensionPixelSize(
+ R.styleable.ChartNetworkSeriesView_safeRegion, 0);
setChartColor(stroke, fill, fillSecondary);
+ setSafeRegion(safeRegion);
setWillNotDraw(false);
a.recycle();
@@ -134,6 +137,10 @@
mPaintEstimate.setPathEffect(new DashPathEffect(new float[] { 10, 10 }, 1));
}
+ public void setSafeRegion(int safeRegion) {
+ mSafeRegion = safeRegion;
+ }
+
public void bindNetworkStats(NetworkStatsHistory stats) {
mStats = stats;
invalidatePath();
@@ -145,14 +152,8 @@
mEnd = end;
}
- /**
- * Set the range to paint with {@link #mPaintFill}, leaving the remaining
- * area to be painted with {@link #mPaintFillSecondary}.
- */
- public void setPrimaryRange(long left, long right) {
- mPrimaryLeft = left;
- mPrimaryRight = right;
- invalidate();
+ public void setSecondary(boolean secondary) {
+ mSecondary = secondary;
}
public void invalidatePath() {
@@ -322,9 +323,6 @@
generatePath();
}
- final float primaryLeftPoint = mHoriz.convertToPoint(mPrimaryLeft);
- final float primaryRightPoint = mHoriz.convertToPoint(mPrimaryRight);
-
if (mEstimateVisible) {
save = canvas.save();
canvas.clipRect(0, 0, getWidth(), getHeight());
@@ -332,21 +330,11 @@
canvas.restoreToCount(save);
}
- save = canvas.save();
- canvas.clipRect(0, 0, primaryLeftPoint, getHeight());
- canvas.drawPath(mPathFill, mPaintFillSecondary);
- canvas.restoreToCount(save);
+ final Paint paintFill = mSecondary ? mPaintFillSecondary : mPaintFill;
save = canvas.save();
- canvas.clipRect(primaryRightPoint, 0, getWidth(), getHeight());
- canvas.drawPath(mPathFill, mPaintFillSecondary);
+ canvas.clipRect(mSafeRegion, 0, getWidth(), getHeight() - mSafeRegion);
+ canvas.drawPath(mPathFill, paintFill);
canvas.restoreToCount(save);
-
- save = canvas.save();
- canvas.clipRect(primaryLeftPoint, 0, primaryRightPoint, getHeight());
- canvas.drawPath(mPathFill, mPaintFill);
- canvas.drawPath(mPathStroke, mPaintStroke);
- canvas.restoreToCount(save);
-
}
}
diff --git a/src/com/android/settings/widget/ChartSweepView.java b/src/com/android/settings/widget/ChartSweepView.java
index 774e5d8..04fc862 100644
--- a/src/com/android/settings/widget/ChartSweepView.java
+++ b/src/com/android/settings/widget/ChartSweepView.java
@@ -58,6 +58,7 @@
private Rect mMargins = new Rect();
private float mNeighborMargin;
+ private int mSafeRegion;
private int mFollowAxis;
@@ -125,6 +126,7 @@
setSweepDrawable(a.getDrawable(R.styleable.ChartSweepView_sweepDrawable));
setFollowAxis(a.getInt(R.styleable.ChartSweepView_followAxis, -1));
setNeighborMargin(a.getDimensionPixelSize(R.styleable.ChartSweepView_neighborMargin, 0));
+ setSafeRegion(a.getDimensionPixelSize(R.styleable.ChartSweepView_safeRegion, 0));
setLabelMinSize(a.getDimensionPixelSize(R.styleable.ChartSweepView_labelSize, 0));
setLabelTemplate(a.getResourceId(R.styleable.ChartSweepView_labelTemplate, 0));
@@ -259,7 +261,6 @@
paint.density = getResources().getDisplayMetrics().density;
paint.setCompatibilityScaling(getResources().getCompatibilityInfo().applicationScale);
paint.setColor(mLabelColor);
- paint.setShadowLayer(4 * paint.density, 0, 0, Color.BLACK);
mLabelTemplate = new SpannableStringBuilder(template);
mLabelLayout = new DynamicLayout(
@@ -383,6 +384,10 @@
mNeighborMargin = neighborMargin;
}
+ public void setSafeRegion(int safeRegion) {
+ mSafeRegion = safeRegion;
+ }
+
/**
* Set valid range this sweep can move within, defined by the given
* {@link ChartSweepView}. The most restrictive combination of all valid
@@ -709,7 +714,7 @@
mLabelLayout.draw(canvas);
}
canvas.restoreToCount(count);
- labelSize = (int) mLabelSize;
+ labelSize = (int) mLabelSize + mSafeRegion;
} else {
labelSize = 0;
}
diff --git a/src/com/android/settings/widget/ChartView.java b/src/com/android/settings/widget/ChartView.java
index 69e6e94..30284bc 100644
--- a/src/com/android/settings/widget/ChartView.java
+++ b/src/com/android/settings/widget/ChartView.java
@@ -112,12 +112,18 @@
parentRect.set(mContent);
- if (child instanceof ChartNetworkSeriesView || child instanceof ChartGridView) {
+ if (child instanceof ChartNetworkSeriesView) {
// series are always laid out to fill entire graph area
// TODO: handle scrolling for series larger than content area
Gravity.apply(params.gravity, width, height, parentRect, childRect);
child.layout(childRect.left, childRect.top, childRect.right, childRect.bottom);
+ } else if (child instanceof ChartGridView) {
+ // Grid uses some extra room for labels
+ Gravity.apply(params.gravity, width, height, parentRect, childRect);
+ child.layout(childRect.left, childRect.top, childRect.right,
+ childRect.bottom + child.getPaddingBottom());
+
} else if (child instanceof ChartSweepView) {
layoutSweep((ChartSweepView) child, parentRect, childRect);
child.layout(childRect.left, childRect.top, childRect.right, childRect.bottom);
@@ -154,5 +160,4 @@
parentRect, childRect);
}
}
-
}
diff --git a/src/com/android/settings/widget/PieChartView.java b/src/com/android/settings/widget/PieChartView.java
deleted file mode 100644
index 6070190..0000000
--- a/src/com/android/settings/widget/PieChartView.java
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.widget;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Matrix;
-import android.graphics.Paint;
-import android.graphics.Paint.Style;
-import android.graphics.Path;
-import android.graphics.Path.Direction;
-import android.graphics.RadialGradient;
-import android.graphics.RectF;
-import android.graphics.Shader.TileMode;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.View;
-
-import com.google.android.collect.Lists;
-
-import java.util.ArrayList;
-
-/**
- * Pie chart with multiple items.
- */
-public class PieChartView extends View {
- public static final String TAG = "PieChartView";
- public static final boolean LOGD = false;
-
- private static final boolean FILL_GRADIENT = false;
-
- private ArrayList<Slice> mSlices = Lists.newArrayList();
-
- private int mOriginAngle;
- private Matrix mMatrix = new Matrix();
-
- private Paint mPaintOutline = new Paint();
-
- private Path mPathSide = new Path();
- private Path mPathSideOutline = new Path();
-
- private Path mPathOutline = new Path();
-
- private int mSideWidth;
-
- public class Slice {
- public long value;
-
- public Path path = new Path();
- public Path pathSide = new Path();
- public Path pathOutline = new Path();
-
- public Paint paint;
-
- public Slice(long value, int color) {
- this.value = value;
- this.paint = buildFillPaint(color, getResources());
- }
- }
-
- public PieChartView(Context context) {
- this(context, null);
- }
-
- public PieChartView(Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- public PieChartView(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
-
- mPaintOutline.setColor(Color.BLACK);
- mPaintOutline.setStyle(Style.STROKE);
- mPaintOutline.setStrokeWidth(3f * getResources().getDisplayMetrics().density);
- mPaintOutline.setAntiAlias(true);
-
- mSideWidth = (int) (20 * getResources().getDisplayMetrics().density);
-
- setWillNotDraw(false);
- }
-
- private static Paint buildFillPaint(int color, Resources res) {
- final Paint paint = new Paint();
-
- paint.setColor(color);
- paint.setStyle(Style.FILL_AND_STROKE);
- paint.setAntiAlias(true);
-
- if (FILL_GRADIENT) {
- final int width = (int) (280 * res.getDisplayMetrics().density);
- paint.setShader(new RadialGradient(0, 0, width, color, darken(color), TileMode.MIRROR));
- }
-
- return paint;
- }
-
- public void setOriginAngle(int originAngle) {
- mOriginAngle = originAngle;
- }
-
- public void addSlice(long value, int color) {
- mSlices.add(new Slice(value, color));
- }
-
- public void removeAllSlices() {
- mSlices.clear();
- }
-
- @Override
- protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
- final float centerX = getWidth() / 2;
- final float centerY = getHeight() / 2;
-
- mMatrix.reset();
- mMatrix.postScale(0.665f, 0.95f, centerX, centerY);
- mMatrix.postRotate(-40, centerX, centerY);
-
- generatePath();
- }
-
- public void generatePath() {
- if (LOGD) Log.d(TAG, "generatePath()");
-
- long total = 0;
- for (Slice slice : mSlices) {
- slice.path.reset();
- slice.pathSide.reset();
- slice.pathOutline.reset();
- total += slice.value;
- }
-
- mPathSide.reset();
- mPathSideOutline.reset();
- mPathOutline.reset();
-
- // bail when not enough stats to render
- if (total == 0) {
- invalidate();
- return;
- }
-
- final int width = getWidth();
- final int height = getHeight();
-
- final RectF rect = new RectF(0, 0, width, height);
- final RectF rectSide = new RectF();
- rectSide.set(rect);
- rectSide.offset(-mSideWidth, 0);
-
- mPathSide.addOval(rectSide, Direction.CW);
- mPathSideOutline.addOval(rectSide, Direction.CW);
- mPathOutline.addOval(rect, Direction.CW);
-
- int startAngle = mOriginAngle;
- for (Slice slice : mSlices) {
- final int sweepAngle = (int) (slice.value * 360 / total);
- final int endAngle = startAngle + sweepAngle;
-
- final float startAngleMod = startAngle % 360;
- final float endAngleMod = endAngle % 360;
- final boolean startSideVisible = startAngleMod > 90 && startAngleMod < 270;
- final boolean endSideVisible = endAngleMod > 90 && endAngleMod < 270;
-
- // draw slice
- slice.path.moveTo(rect.centerX(), rect.centerY());
- slice.path.arcTo(rect, startAngle, sweepAngle);
- slice.path.lineTo(rect.centerX(), rect.centerY());
-
- if (startSideVisible || endSideVisible) {
-
- // when start is beyond horizon, push until visible
- final float startAngleSide = startSideVisible ? startAngle : 450;
- final float endAngleSide = endSideVisible ? endAngle : 270;
- final float sweepAngleSide = endAngleSide - startAngleSide;
-
- // draw slice side
- slice.pathSide.moveTo(rect.centerX(), rect.centerY());
- slice.pathSide.arcTo(rect, startAngleSide, 0);
- slice.pathSide.rLineTo(-mSideWidth, 0);
- slice.pathSide.arcTo(rectSide, startAngleSide, sweepAngleSide);
- slice.pathSide.rLineTo(mSideWidth, 0);
- slice.pathSide.arcTo(rect, endAngleSide, -sweepAngleSide);
- }
-
- // draw slice outline
- slice.pathOutline.moveTo(rect.centerX(), rect.centerY());
- slice.pathOutline.arcTo(rect, startAngle, 0);
- if (startSideVisible) {
- slice.pathOutline.rLineTo(-mSideWidth, 0);
- }
- slice.pathOutline.moveTo(rect.centerX(), rect.centerY());
- slice.pathOutline.arcTo(rect, startAngle + sweepAngle, 0);
- if (endSideVisible) {
- slice.pathOutline.rLineTo(-mSideWidth, 0);
- }
-
- startAngle += sweepAngle;
- }
-
- invalidate();
- }
-
- @Override
- protected void onDraw(Canvas canvas) {
-
- canvas.concat(mMatrix);
-
- for (Slice slice : mSlices) {
- canvas.drawPath(slice.pathSide, slice.paint);
- }
- canvas.drawPath(mPathSideOutline, mPaintOutline);
-
- for (Slice slice : mSlices) {
- canvas.drawPath(slice.path, slice.paint);
- canvas.drawPath(slice.pathOutline, mPaintOutline);
- }
- canvas.drawPath(mPathOutline, mPaintOutline);
- }
-
- public static int darken(int color) {
- float[] hsv = new float[3];
- Color.colorToHSV(color, hsv);
- hsv[2] /= 2;
- hsv[1] /= 2;
- return Color.HSVToColor(hsv);
- }
-
-}
diff --git a/src/com/android/settings/widget/SwitchBar.java b/src/com/android/settings/widget/SwitchBar.java
index d974a9d..e24d83f 100644
--- a/src/com/android/settings/widget/SwitchBar.java
+++ b/src/com/android/settings/widget/SwitchBar.java
@@ -97,9 +97,6 @@
}
});
- mSwitch.setTrackResource(R.drawable.switch_track);
- mSwitch.setThumbResource(R.drawable.switch_inner);
-
setOnClickListener(this);
// Default is hide
diff --git a/src/com/android/settings/wifi/WifiApDialog.java b/src/com/android/settings/wifi/WifiApDialog.java
index 211e85d..fb8026a 100644
--- a/src/com/android/settings/wifi/WifiApDialog.java
+++ b/src/com/android/settings/wifi/WifiApDialog.java
@@ -47,8 +47,7 @@
private final DialogInterface.OnClickListener mListener;
public static final int OPEN_INDEX = 0;
- public static final int WPA_INDEX = 1;
- public static final int WPA2_INDEX = 2;
+ public static final int WPA2_INDEX = 1;
private View mView;
private TextView mSsid;
@@ -68,9 +67,7 @@
}
public static int getSecurityTypeIndex(WifiConfiguration wifiConfig) {
- if (wifiConfig.allowedKeyManagement.get(KeyMgmt.WPA_PSK)) {
- return WPA_INDEX;
- } else if (wifiConfig.allowedKeyManagement.get(KeyMgmt.WPA2_PSK)) {
+ if (wifiConfig.allowedKeyManagement.get(KeyMgmt.WPA2_PSK)) {
return WPA2_INDEX;
}
return OPEN_INDEX;
@@ -93,15 +90,6 @@
config.allowedKeyManagement.set(KeyMgmt.NONE);
return config;
- case WPA_INDEX:
- config.allowedKeyManagement.set(KeyMgmt.WPA_PSK);
- config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN);
- if (mPassword.length() != 0) {
- String password = mPassword.getText().toString();
- config.preSharedKey = password;
- }
- return config;
-
case WPA2_INDEX:
config.allowedKeyManagement.set(KeyMgmt.WPA2_PSK);
config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN);
@@ -137,8 +125,7 @@
if (mWifiConfig != null) {
mSsid.setText(mWifiConfig.SSID);
mSecurity.setSelection(mSecurityTypeIndex);
- if (mSecurityTypeIndex == WPA_INDEX ||
- mSecurityTypeIndex == WPA2_INDEX) {
+ if (mSecurityTypeIndex == WPA2_INDEX) {
mPassword.setText(mWifiConfig.preSharedKey);
}
}
@@ -156,7 +143,7 @@
private void validate() {
if ((mSsid != null && mSsid.length() == 0) ||
- (((mSecurityTypeIndex == WPA_INDEX) || (mSecurityTypeIndex == WPA2_INDEX))&&
+ ((mSecurityTypeIndex == WPA2_INDEX)&&
mPassword.length() < 8)) {
getButton(BUTTON_SUBMIT).setEnabled(false);
} else {