Merge "[WifiSetup] Update Wi-Fi icon color"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index aec34bc..6e7b19e 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -62,6 +62,7 @@
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
<uses-permission android:name="android.permission.COPY_PROTECTED_DATA" />
<uses-permission android:name="android.permission.MANAGE_USERS" />
+ <uses-permission android:name="android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.CONFIGURE_WIFI_DISPLAY" />
<uses-permission android:name="android.permission.SET_TIME" />
diff --git a/res/drawable-hdpi/ic_wifi_lock_signal_0_teal.png b/res/drawable-hdpi/ic_wifi_lock_signal_0_teal.png
deleted file mode 100644
index d0c9b30..0000000
--- a/res/drawable-hdpi/ic_wifi_lock_signal_0_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_wifi_lock_signal_1_teal.png b/res/drawable-hdpi/ic_wifi_lock_signal_1_teal.png
deleted file mode 100644
index 0bef891..0000000
--- a/res/drawable-hdpi/ic_wifi_lock_signal_1_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_wifi_lock_signal_2_teal.png b/res/drawable-hdpi/ic_wifi_lock_signal_2_teal.png
deleted file mode 100644
index 9252d90..0000000
--- a/res/drawable-hdpi/ic_wifi_lock_signal_2_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_wifi_lock_signal_3_teal.png b/res/drawable-hdpi/ic_wifi_lock_signal_3_teal.png
deleted file mode 100644
index a758ad4..0000000
--- a/res/drawable-hdpi/ic_wifi_lock_signal_3_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_wifi_lock_signal_4_teal.png b/res/drawable-hdpi/ic_wifi_lock_signal_4_teal.png
deleted file mode 100644
index 8378399..0000000
--- a/res/drawable-hdpi/ic_wifi_lock_signal_4_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_wifi_signal_0_teal.png b/res/drawable-hdpi/ic_wifi_signal_0_teal.png
deleted file mode 100644
index 3030279..0000000
--- a/res/drawable-hdpi/ic_wifi_signal_0_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_wifi_signal_1_teal.png b/res/drawable-hdpi/ic_wifi_signal_1_teal.png
deleted file mode 100644
index 3340d95..0000000
--- a/res/drawable-hdpi/ic_wifi_signal_1_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_wifi_signal_2_teal.png b/res/drawable-hdpi/ic_wifi_signal_2_teal.png
deleted file mode 100644
index 180f7b1..0000000
--- a/res/drawable-hdpi/ic_wifi_signal_2_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_wifi_signal_3_teal.png b/res/drawable-hdpi/ic_wifi_signal_3_teal.png
deleted file mode 100644
index af27fb0..0000000
--- a/res/drawable-hdpi/ic_wifi_signal_3_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_wifi_signal_4_teal.png b/res/drawable-hdpi/ic_wifi_signal_4_teal.png
deleted file mode 100644
index 5c82e8b..0000000
--- a/res/drawable-hdpi/ic_wifi_signal_4_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_wifi_lock_signal_0_teal.png b/res/drawable-mdpi/ic_wifi_lock_signal_0_teal.png
deleted file mode 100644
index d746c1e..0000000
--- a/res/drawable-mdpi/ic_wifi_lock_signal_0_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_wifi_lock_signal_1_teal.png b/res/drawable-mdpi/ic_wifi_lock_signal_1_teal.png
deleted file mode 100644
index 01f6f87..0000000
--- a/res/drawable-mdpi/ic_wifi_lock_signal_1_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_wifi_lock_signal_2_teal.png b/res/drawable-mdpi/ic_wifi_lock_signal_2_teal.png
deleted file mode 100644
index 230b1a3..0000000
--- a/res/drawable-mdpi/ic_wifi_lock_signal_2_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_wifi_lock_signal_3_teal.png b/res/drawable-mdpi/ic_wifi_lock_signal_3_teal.png
deleted file mode 100644
index 20fe9a5..0000000
--- a/res/drawable-mdpi/ic_wifi_lock_signal_3_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_wifi_lock_signal_4_teal.png b/res/drawable-mdpi/ic_wifi_lock_signal_4_teal.png
deleted file mode 100644
index 938a203..0000000
--- a/res/drawable-mdpi/ic_wifi_lock_signal_4_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_wifi_signal_0_teal.png b/res/drawable-mdpi/ic_wifi_signal_0_teal.png
deleted file mode 100644
index 9dcdf91..0000000
--- a/res/drawable-mdpi/ic_wifi_signal_0_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_wifi_signal_1_teal.png b/res/drawable-mdpi/ic_wifi_signal_1_teal.png
deleted file mode 100644
index b58d5f4..0000000
--- a/res/drawable-mdpi/ic_wifi_signal_1_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_wifi_signal_2_teal.png b/res/drawable-mdpi/ic_wifi_signal_2_teal.png
deleted file mode 100644
index 5cbb5a3..0000000
--- a/res/drawable-mdpi/ic_wifi_signal_2_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_wifi_signal_3_teal.png b/res/drawable-mdpi/ic_wifi_signal_3_teal.png
deleted file mode 100644
index cec46b0..0000000
--- a/res/drawable-mdpi/ic_wifi_signal_3_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_wifi_signal_4_teal.png b/res/drawable-mdpi/ic_wifi_signal_4_teal.png
deleted file mode 100644
index 6b81932f..0000000
--- a/res/drawable-mdpi/ic_wifi_signal_4_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wifi_lock_signal_0_teal.png b/res/drawable-xhdpi/ic_wifi_lock_signal_0_teal.png
deleted file mode 100644
index 8d99e31..0000000
--- a/res/drawable-xhdpi/ic_wifi_lock_signal_0_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wifi_lock_signal_1_teal.png b/res/drawable-xhdpi/ic_wifi_lock_signal_1_teal.png
deleted file mode 100644
index da282b6..0000000
--- a/res/drawable-xhdpi/ic_wifi_lock_signal_1_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wifi_lock_signal_2_teal.png b/res/drawable-xhdpi/ic_wifi_lock_signal_2_teal.png
deleted file mode 100644
index b6a378f..0000000
--- a/res/drawable-xhdpi/ic_wifi_lock_signal_2_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wifi_lock_signal_3_teal.png b/res/drawable-xhdpi/ic_wifi_lock_signal_3_teal.png
deleted file mode 100644
index 7227b08..0000000
--- a/res/drawable-xhdpi/ic_wifi_lock_signal_3_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wifi_lock_signal_4_teal.png b/res/drawable-xhdpi/ic_wifi_lock_signal_4_teal.png
deleted file mode 100644
index 92257c3..0000000
--- a/res/drawable-xhdpi/ic_wifi_lock_signal_4_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wifi_signal_0_teal.png b/res/drawable-xhdpi/ic_wifi_signal_0_teal.png
deleted file mode 100644
index 08aba96..0000000
--- a/res/drawable-xhdpi/ic_wifi_signal_0_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wifi_signal_1_teal.png b/res/drawable-xhdpi/ic_wifi_signal_1_teal.png
deleted file mode 100644
index 8d282c9..0000000
--- a/res/drawable-xhdpi/ic_wifi_signal_1_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wifi_signal_2_teal.png b/res/drawable-xhdpi/ic_wifi_signal_2_teal.png
deleted file mode 100644
index 6caedf9..0000000
--- a/res/drawable-xhdpi/ic_wifi_signal_2_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wifi_signal_3_teal.png b/res/drawable-xhdpi/ic_wifi_signal_3_teal.png
deleted file mode 100644
index 799c9e3..0000000
--- a/res/drawable-xhdpi/ic_wifi_signal_3_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wifi_signal_4_teal.png b/res/drawable-xhdpi/ic_wifi_signal_4_teal.png
deleted file mode 100644
index ad6a98e..0000000
--- a/res/drawable-xhdpi/ic_wifi_signal_4_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wifi_lock_signal_0_teal.png b/res/drawable-xxhdpi/ic_wifi_lock_signal_0_teal.png
deleted file mode 100644
index 544c041..0000000
--- a/res/drawable-xxhdpi/ic_wifi_lock_signal_0_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wifi_lock_signal_1_teal.png b/res/drawable-xxhdpi/ic_wifi_lock_signal_1_teal.png
deleted file mode 100644
index ac0cb62..0000000
--- a/res/drawable-xxhdpi/ic_wifi_lock_signal_1_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wifi_lock_signal_2_teal.png b/res/drawable-xxhdpi/ic_wifi_lock_signal_2_teal.png
deleted file mode 100644
index beb6e12..0000000
--- a/res/drawable-xxhdpi/ic_wifi_lock_signal_2_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wifi_lock_signal_3_teal.png b/res/drawable-xxhdpi/ic_wifi_lock_signal_3_teal.png
deleted file mode 100644
index 3eaaf39..0000000
--- a/res/drawable-xxhdpi/ic_wifi_lock_signal_3_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wifi_lock_signal_4_teal.png b/res/drawable-xxhdpi/ic_wifi_lock_signal_4_teal.png
deleted file mode 100644
index 8b6bfb1..0000000
--- a/res/drawable-xxhdpi/ic_wifi_lock_signal_4_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wifi_signal_0_teal.png b/res/drawable-xxhdpi/ic_wifi_signal_0_teal.png
deleted file mode 100644
index f28f0ad..0000000
--- a/res/drawable-xxhdpi/ic_wifi_signal_0_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wifi_signal_1_teal.png b/res/drawable-xxhdpi/ic_wifi_signal_1_teal.png
deleted file mode 100644
index 1728dc7..0000000
--- a/res/drawable-xxhdpi/ic_wifi_signal_1_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wifi_signal_2_teal.png b/res/drawable-xxhdpi/ic_wifi_signal_2_teal.png
deleted file mode 100644
index e7e4788..0000000
--- a/res/drawable-xxhdpi/ic_wifi_signal_2_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wifi_signal_3_teal.png b/res/drawable-xxhdpi/ic_wifi_signal_3_teal.png
deleted file mode 100644
index c2967ed..0000000
--- a/res/drawable-xxhdpi/ic_wifi_signal_3_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wifi_signal_4_teal.png b/res/drawable-xxhdpi/ic_wifi_signal_4_teal.png
deleted file mode 100644
index 3058e98..0000000
--- a/res/drawable-xxhdpi/ic_wifi_signal_4_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_wifi_lock_signal_0_teal.png b/res/drawable-xxxhdpi/ic_wifi_lock_signal_0_teal.png
deleted file mode 100644
index 74c9c31..0000000
--- a/res/drawable-xxxhdpi/ic_wifi_lock_signal_0_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_wifi_lock_signal_1_teal.png b/res/drawable-xxxhdpi/ic_wifi_lock_signal_1_teal.png
deleted file mode 100644
index dab15c4..0000000
--- a/res/drawable-xxxhdpi/ic_wifi_lock_signal_1_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_wifi_lock_signal_2_teal.png b/res/drawable-xxxhdpi/ic_wifi_lock_signal_2_teal.png
deleted file mode 100644
index 66a7736..0000000
--- a/res/drawable-xxxhdpi/ic_wifi_lock_signal_2_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_wifi_lock_signal_3_teal.png b/res/drawable-xxxhdpi/ic_wifi_lock_signal_3_teal.png
deleted file mode 100644
index d23cf22..0000000
--- a/res/drawable-xxxhdpi/ic_wifi_lock_signal_3_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_wifi_lock_signal_4_teal.png b/res/drawable-xxxhdpi/ic_wifi_lock_signal_4_teal.png
deleted file mode 100644
index 83e4988..0000000
--- a/res/drawable-xxxhdpi/ic_wifi_lock_signal_4_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_wifi_signal_0_teal.png b/res/drawable-xxxhdpi/ic_wifi_signal_0_teal.png
deleted file mode 100644
index 3dc5cbe..0000000
--- a/res/drawable-xxxhdpi/ic_wifi_signal_0_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_wifi_signal_1_teal.png b/res/drawable-xxxhdpi/ic_wifi_signal_1_teal.png
deleted file mode 100644
index d80ac48..0000000
--- a/res/drawable-xxxhdpi/ic_wifi_signal_1_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_wifi_signal_2_teal.png b/res/drawable-xxxhdpi/ic_wifi_signal_2_teal.png
deleted file mode 100644
index 4fdd825..0000000
--- a/res/drawable-xxxhdpi/ic_wifi_signal_2_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_wifi_signal_3_teal.png b/res/drawable-xxxhdpi/ic_wifi_signal_3_teal.png
deleted file mode 100644
index e1cbcb8..0000000
--- a/res/drawable-xxxhdpi/ic_wifi_signal_3_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_wifi_signal_4_teal.png b/res/drawable-xxxhdpi/ic_wifi_signal_4_teal.png
deleted file mode 100644
index bcc4233..0000000
--- a/res/drawable-xxxhdpi/ic_wifi_signal_4_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/ic_wifi_signal_0.xml b/res/drawable/ic_wifi_signal_0.xml
new file mode 100644
index 0000000..3888161
--- /dev/null
+++ b/res/drawable/ic_wifi_signal_0.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="26dp"
+ android:height="24dp"
+ android:viewportWidth="26"
+ android:viewportHeight="24">
+ <path
+ android:fillAlpha="0.3"
+ android:fillColor="?attr/wifi_signal_color"
+ android:pathData="M13.0,22.0L25.6,6.5C25.1,6.1 20.3,2.1 13.0,2.1S0.9,6.1 0.4,6.5L13.0,22.0L13.0,22.0L13.0,22.0L13.0,22.0L13.0,22.0z"/>
+</vector>
diff --git a/res/drawable/ic_wifi_signal_1.xml b/res/drawable/ic_wifi_signal_1.xml
new file mode 100644
index 0000000..e0a2072
--- /dev/null
+++ b/res/drawable/ic_wifi_signal_1.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="26dp"
+ android:height="24dp"
+ android:viewportWidth="26"
+ android:viewportHeight="24">
+ <path
+ android:fillAlpha="0.3"
+ android:fillColor="?attr/wifi_signal_color"
+ android:pathData="M13.1,22.0L25.6,6.5C25.1,6.1 20.3,2.1 13.0,2.1S0.9,6.1 0.5,6.5L13.1,22.0L13.1,22.0L13.1,22.0L13.1,22.0L13.1,22.0z"/>
+ <path
+ android:fillColor="?attr/wifi_signal_color"
+ android:pathData="M13.1,22.0l5.5,-6.8c-0.2,-0.2 -2.3,-1.9 -5.5,-1.9s-5.3,1.8 -5.5,1.9L13.1,22.0L13.1,22.0L13.1,22.0L13.1,22.0L13.1,22.0z"/>
+</vector>
diff --git a/res/drawable/ic_wifi_signal_2.xml b/res/drawable/ic_wifi_signal_2.xml
new file mode 100644
index 0000000..d0daa60
--- /dev/null
+++ b/res/drawable/ic_wifi_signal_2.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="26dp"
+ android:height="24dp"
+ android:viewportWidth="26"
+ android:viewportHeight="24">
+ <path
+ android:fillAlpha="0.3"
+ android:fillColor="?attr/wifi_signal_color"
+ android:pathData="M13.0,22.0L25.6,6.5C25.1,6.1 20.3,2.1 13.0,2.1S0.9,6.1 0.4,6.5L13.0,22.0L13.0,22.0L13.0,22.0L13.0,22.0L13.0,22.0z"/>
+ <path
+ android:fillColor="?attr/wifi_signal_color"
+ android:pathData="M13.0,22.0l7.6,-9.4C20.3,12.4 17.4,10.0 13.0,10.0s-7.3,2.4 -7.6,2.7L13.0,22.0L13.0,22.0L13.0,22.0L13.0,22.0L13.0,22.0z"/>
+</vector>
diff --git a/res/drawable/ic_wifi_signal_3.xml b/res/drawable/ic_wifi_signal_3.xml
new file mode 100644
index 0000000..c542c69
--- /dev/null
+++ b/res/drawable/ic_wifi_signal_3.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="26dp"
+ android:height="24dp"
+ android:viewportWidth="26"
+ android:viewportHeight="24">
+ <path
+ android:fillAlpha="0.3"
+ android:fillColor="?attr/wifi_signal_color"
+ android:pathData="M13.0,22.0L25.6,6.5C25.1,6.1 20.3,2.1 13.0,2.1S0.9,6.1 0.4,6.5L13.0,22.0L13.0,22.0L13.0,22.0L13.0,22.0L13.0,22.0z"/>
+ <path
+ android:fillColor="?attr/wifi_signal_color"
+ android:pathData="M13.0,22.0l9.2,-11.4c-0.4,-0.3 -3.9,-3.2 -9.2,-3.2s-8.9,3.0 -9.2,3.2L13.0,22.0L13.0,22.0L13.0,22.0L13.0,22.0L13.0,22.0z"/>
+</vector>
diff --git a/res/drawable/ic_wifi_signal_4.xml b/res/drawable/ic_wifi_signal_4.xml
new file mode 100644
index 0000000..bb7dbd0
--- /dev/null
+++ b/res/drawable/ic_wifi_signal_4.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="26dp"
+ android:height="24dp"
+ android:viewportWidth="26"
+ android:viewportHeight="24">
+ <path
+ android:fillColor="?attr/wifi_signal_color"
+ android:pathData="M13.0,22.0L25.6,6.5C25.1,6.1 20.3,2.1 13.0,2.1S0.9,6.1 0.4,6.5L13.0,22.0L13.0,22.0L13.0,22.0L13.0,22.0L13.0,22.0z"/>
+</vector>
diff --git a/res/drawable/ic_wifi_signal_lock.xml b/res/drawable/ic_wifi_signal_lock.xml
new file mode 100644
index 0000000..b94f06c
--- /dev/null
+++ b/res/drawable/ic_wifi_signal_lock.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="72"
+ android:viewportHeight="72">
+ <group
+ android:translateX="52.0"
+ android:translateY="42.0">
+ <path
+ android:fillColor="?attr/wifi_signal_color"
+ android:pathData="M18.0,8.0l-1.0,0.0L17.0,6.0c0.0,-2.76 -2.24,-5.0 -5.0,-5.0S7.0,3.24 7.0,6.0l0.0,2.0L6.0,8.0c-1.1,0.0 -2.0,0.9 -2.0,2.0l0.0,10.0c0.0,1.0 0.9,2.0 2.0,2.0l12.0,0.0c1.1,0.0 2.0,-0.9 2.0,-2.0L20.0,10.0c0.0,-1.1 -0.9,-2.0 -2.0,-2.0zm-6.0,9.0c-1.1,0.0 -2.0,-0.9 -2.0,-2.0s0.9,-2.0 2.0,-2.0 2.0,0.9 2.0,2.0 -0.9,2.0 -2.0,2.0zm3.1,-9.0L8.9,8.0L8.9,6.0c0.0,-1.71 1.39,-3.1 3.1,-3.1 1.71,0.0 3.1,1.39 3.1,3.1l0.0,2.0z"/>
+ </group>
+</vector>
\ No newline at end of file
diff --git a/res/drawable/wifi_signal.xml b/res/drawable/wifi_signal.xml
new file mode 100644
index 0000000..7854075
--- /dev/null
+++ b/res/drawable/wifi_signal.xml
@@ -0,0 +1,41 @@
+<?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"
+ xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
+ <item settings:state_encrypted="true">
+ <layer-list>
+ <item>
+ <level-list>
+ <item android:maxLevel="0" android:drawable="@drawable/ic_wifi_signal_1" />
+ <item android:maxLevel="1" android:drawable="@drawable/ic_wifi_signal_2" />
+ <item android:maxLevel="2" android:drawable="@drawable/ic_wifi_signal_3" />
+ <item android:maxLevel="3" android:drawable="@drawable/ic_wifi_signal_4" />
+ </level-list>
+ </item>
+ <item android:drawable="@drawable/ic_wifi_signal_lock" />
+ </layer-list>
+ </item>
+ <item settings:state_encrypted="false">
+ <level-list>
+ <item android:maxLevel="0" android:drawable="@drawable/ic_wifi_signal_1" />
+ <item android:maxLevel="1" android:drawable="@drawable/ic_wifi_signal_2" />
+ <item android:maxLevel="2" android:drawable="@drawable/ic_wifi_signal_3" />
+ <item android:maxLevel="3" android:drawable="@drawable/ic_wifi_signal_4" />
+ </level-list>
+ </item>
+</selector>
+
diff --git a/res/drawable/wifi_signal_colored.xml b/res/drawable/wifi_signal_colored.xml
deleted file mode 100644
index 91f8b88..0000000
--- a/res/drawable/wifi_signal_colored.xml
+++ /dev/null
@@ -1,68 +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"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
- <item settings:state_encrypted="true">
- <level-list>
- <item android:maxLevel="0">
- <bitmap
- android:src="@drawable/ic_wifi_lock_signal_1_teal"
- android:tint="?attr/wifi_signal_color" />
- </item>
- <item android:maxLevel="1">
- <bitmap
- android:src="@drawable/ic_wifi_lock_signal_2_teal"
- android:tint="?attr/wifi_signal_color" />
- </item>
- <item android:maxLevel="2">
- <bitmap
- android:src="@drawable/ic_wifi_lock_signal_3_teal"
- android:tint="?attr/wifi_signal_color" />
- </item>
- <item android:maxLevel="3">
- <bitmap
- android:src="@drawable/ic_wifi_lock_signal_4_teal"
- android:tint="?attr/wifi_signal_color" />
- </item>
- </level-list>
- </item>
- <item settings:state_encrypted="false">
- <level-list>
- <item android:maxLevel="0">
- <bitmap
- android:src="@drawable/ic_wifi_signal_1_teal"
- android:tint="?attr/wifi_signal_color" />
- </item>
- <item android:maxLevel="1">
- <bitmap
- android:src="@drawable/ic_wifi_signal_2_teal"
- android:tint="?attr/wifi_signal_color" />
- </item>
- <item android:maxLevel="2">
- <bitmap
- android:src="@drawable/ic_wifi_signal_3_teal"
- android:tint="?attr/wifi_signal_color" />
- </item>
- <item android:maxLevel="3">
- <bitmap
- android:src="@drawable/ic_wifi_signal_4_teal"
- android:tint="?attr/wifi_signal_color" />
- </item>
- </level-list>
- </item>
-</selector>
-
diff --git a/res/drawable/wifi_signal_lock_teal.xml b/res/drawable/wifi_signal_lock_teal.xml
deleted file mode 100644
index 2e79274..0000000
--- a/res/drawable/wifi_signal_lock_teal.xml
+++ /dev/null
@@ -1,23 +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.
--->
-
-<level-list xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:maxLevel="0" android:drawable="@drawable/ic_wifi_lock_signal_1_teal" />
- <item android:maxLevel="1" android:drawable="@drawable/ic_wifi_lock_signal_2_teal" />
- <item android:maxLevel="2" android:drawable="@drawable/ic_wifi_lock_signal_3_teal" />
- <item android:maxLevel="3" android:drawable="@drawable/ic_wifi_lock_signal_4_teal" />
-</level-list>
-
diff --git a/res/drawable/wifi_signal_open_teal.xml b/res/drawable/wifi_signal_open_teal.xml
deleted file mode 100644
index eb4ba8a..0000000
--- a/res/drawable/wifi_signal_open_teal.xml
+++ /dev/null
@@ -1,23 +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.
--->
-
-<level-list xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:maxLevel="0" android:drawable="@drawable/ic_wifi_signal_1_teal" />
- <item android:maxLevel="1" android:drawable="@drawable/ic_wifi_signal_2_teal" />
- <item android:maxLevel="2" android:drawable="@drawable/ic_wifi_signal_3_teal" />
- <item android:maxLevel="3" android:drawable="@drawable/ic_wifi_signal_4_teal" />
-</level-list>
-
diff --git a/res/drawable/wifi_signal_teal.xml b/res/drawable/wifi_signal_teal.xml
deleted file mode 100644
index 637336f..0000000
--- a/res/drawable/wifi_signal_teal.xml
+++ /dev/null
@@ -1,21 +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"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
- <item settings:state_encrypted="true" android:drawable="@drawable/wifi_signal_lock_teal" />
- <item settings:state_encrypted="false" android:drawable="@drawable/wifi_signal_open_teal" />
-</selector>
diff --git a/res/layout/ownerinfo.xml b/res/layout/ownerinfo.xml
index 6adec7d..80f0192 100644
--- a/res/layout/ownerinfo.xml
+++ b/res/layout/ownerinfo.xml
@@ -16,70 +16,29 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:paddingStart="20dip"
+ android:paddingEnd="20dip"
+ android:paddingTop="20dip"
android:orientation="vertical"
- android:scrollbars="vertical"
android:background="@android:color/white">
- <ScrollView
+ <EditText
+ android:id="@+id/owner_info_edit_text"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:scrollbarStyle="outsideOverlay"
- android:fillViewport="true">
+ android:layout_height="wrap_content"
+ android:gravity="top"
+ android:hint="@string/owner_info_settings_edit_text_hint"
+ android:maxLength="100"
+ android:inputType="textMultiLine|textCapSentences"
+ />
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:paddingStart="?android:attr/listPreferredItemPaddingStart"
- android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
-
- <View
- android:paddingTop="53dip"
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:background="#ff404040"
- />
-
- <EditText android:id="@+id/owner_info_nickname"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dip"
- android:gravity="top"
- android:hint="@string/user_nickname"
- android:inputType="textCapWords"
- />
-
- <CheckBox android:id="@+id/show_owner_info_on_lockscreen_checkbox"
- android:layout_width="match_parent"
- android:layout_height="64dip"
- android:gravity="center_vertical"
- android:layout_marginTop="8dip"
- android:text="@string/show_owner_info_on_lockscreen_label"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="?android:attr/textColorSecondary"
- />
-
- <View
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:background="#ff404040"
- />
-
- <EditText android:id="@+id/owner_info_edit_text"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginStart="62dip"
- android:layout_marginTop="40dip"
- android:gravity="top"
- android:hint="@string/owner_info_settings_edit_text_hint"
- android:lines="8"
- android:maxLines="8"
- android:inputType="textMultiLine|textCapSentences"
- />
-
- </LinearLayout>
-
- </ScrollView>
+ <TextView
+ android:id="@+id/owner_info_status"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="end"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ />
</LinearLayout>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index a3b0455..3115da3 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -75,6 +75,7 @@
<color name="switch_accent_color">#ff7fcac3</color>
<color name="wifi_divider">#ffe0e0e0</color>
+ <color name="wifi_signal_icon_color">#ff009688</color>
<color name="sim_noitification">@*android:color/material_deep_teal_500</color>
<color name="warning">#ff5621</color>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 3c8e8ce..f2732fa 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -700,17 +700,17 @@
<!-- Text shown next to checkbox for showing owner info on LockScreen [CHAR LIMIT=50]-->
<string name="show_owner_info_on_lockscreen_label">Show owner info on lock screen</string>
<!-- Text shown for title of owner info setting [CHAR LIMIT=20]-->
- <string name="owner_info_settings_title">Owner info</string>
+ <string name="owner_info_settings_title">Lock screen message</string>
<!-- Text shown for title of settings checkbox to enable widgets [CHAR LIMIT=20]-->
<string name="security_enable_widgets_title">Enable widgets</string>
<!-- Summary for settings checkbox to disable widgets when the setting has been disabled by an installed device admin [CHAR LIMIT=50] -->
<string name="security_enable_widgets_disabled_summary">Disabled by administrator</string>
- <!-- Text shown for summary of owner info setting [CHAR LIMIT=40]-->
- <string name="owner_info_settings_summary"></string>
+ <!-- Text shown for summary of owner info setting (if none set) [CHAR LIMIT=40]-->
+ <string name="owner_info_settings_summary">None</string>
+ <!-- Description of how many characters are used in owner info [CHAR LIMIT=40]-->
+ <string name="owner_info_settings_status"><xliff:g id="count" example="90">%1$d</xliff:g> / <xliff:g id="count" example="100">%2$d</xliff:g></string>
<!-- Hint text shown in owner info edit text [CHAR LIMIT=50] -->
- <string name="owner_info_settings_edit_text_hint">Type text to display on the lock screen</string>
- <!-- Text shown next to checkbox for showing user info on LockScreen [CHAR LIMIT=50]-->
- <string name="show_user_info_on_lockscreen_label">Show user info on lock screen</string>
+ <string name="owner_info_settings_edit_text_hint">E.g., Joe\'s Android.</string>
<!-- Text shown for title of user info setting [CHAR LIMIT=20]-->
<string name="user_info_settings_title">User info</string>
<!-- Text shown next to checkbox for showing profile info on LockScreen [CHAR LIMIT=50]-->
@@ -750,7 +750,7 @@
</plurals>
<!-- Introduction title shown in fingerprint enrollment dialog [CHAR LIMIT=22] -->
<string name="security_settings_fingerprint_enroll_onboard_title">Fingerprint setup</string>
- <!-- Introduction message shown in fingerprint enrollment dialog when the user needs to choose an
+ <!-- Introduction message shown in fingerprint enrollment dialog when the user needs to choose an
alternate screen unlock (pin, pattern or password) as a backup to fingerprint. -->
<string name="security_settings_fingerprint_enroll_onboard_message">
To use your fingerprint to unlock your screen or confirm purchases, we\'ll need to:
@@ -5800,6 +5800,7 @@
<string name="keywords_keyboard_and_ime">text correction correct sound vibrate auto language gesture suggest suggestion theme offensive word type emoji international</string>
<string name="keywords_reset_apps">reset preferences default</string>
<string name="keywords_emergency_app">emergency ice app default</string>
+ <string name="keywords_default_dialer_app">dialer default</string>
<string name="keywords_all_apps">apps download applications system</string>
<string name="keywords_app_permissions">apps permissions security</string>
<string name="keywords_default_apps">apps default</string>
@@ -6365,8 +6366,10 @@
<!-- Title of storage preference to control where app is stored -->
<string name="storage_used">Storage used</string>
+ <!-- Label for notification settings for an specific app [CHAR LIMIT=40] -->
+ <string name="notifications_label">Notifications</string>
<!-- App notification summary with notifications enabled [CHAR LIMIT=40] -->
- <string name="notifications_enabled">On</string>
+ <string name="notifications_enabled">Normal</string>
<!-- App notification summary with notifications disabled [CHAR LIMIT=40] -->
<string name="notifications_disabled">Block</string>
<!-- App notification summary with notifications sensitive [CHAR LIMIT=40] -->
@@ -6461,6 +6464,9 @@
<!-- Summary for No Default Browser settings [CHAR LIMIT=45] -->
<string name="default_browser_title_none">No default Browser</string>
+ <!-- Title for Default Dialer settings [CHAR LIMIT=30] -->
+ <string name="default_dialer_title">Dialer app</string>
+
<!-- Label of default app for current setting [CHAR LIMIT=40] -->
<string name="default_app">(Default)</string>
diff --git a/res/values/themes.xml b/res/values/themes.xml
index a52ea04..f3d5e40 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -41,7 +41,7 @@
<item name="setup_divider_color">@color/setup_divider_color_dark</item>
<item name="side_margin">0dip</item>
<item name="wifi_signal_color">@color/setup_wizard_wifi_color_dark</item>
- <item name="wifi_signal">@drawable/wifi_signal_colored</item>
+ <item name="wifi_signal">@drawable/wifi_signal</item>
<item name="preferenceBackgroundColor">?android:attr/colorBackground</item>
<!-- LockPatternView colors -->
@@ -62,7 +62,7 @@
<item name="setup_divider_color">@color/setup_divider_color_light</item>
<item name="side_margin">0dip</item>
<item name="wifi_signal_color">@color/setup_wizard_wifi_color_light</item>
- <item name="wifi_signal">@drawable/wifi_signal_colored</item>
+ <item name="wifi_signal">@drawable/wifi_signal</item>
<item name="preferenceBackgroundColor">?android:attr/colorBackground</item>
<!-- LockPatternView colors -->
@@ -106,7 +106,8 @@
<item name="ic_menu_add">@drawable/ic_menu_add_dark</item>
<item name="ic_menu_moreoverflow">@*android:drawable/ic_menu_moreoverflow_holo_dark</item>
<item name="ic_wps">@drawable/ic_wps_light</item>
- <item name="wifi_signal">@drawable/wifi_signal_teal</item>
+ <item name="wifi_signal">@drawable/wifi_signal</item>
+ <item name="wifi_signal_color">@color/wifi_signal_icon_color</item>
<item name="side_margin">@dimen/settings_side_margin</item>
<!-- Redefine the ActionBar style for contentInsetStart -->
diff --git a/res/xml/default_apps.xml b/res/xml/default_apps.xml
index 392dd85..301c248 100644
--- a/res/xml/default_apps.xml
+++ b/res/xml/default_apps.xml
@@ -25,6 +25,12 @@
android:summary="@string/default_browser_title_none"
/>
+ <com.android.settings.applications.DefaultDialerPreference
+ android:key="default_dialer"
+ android:title="@string/default_dialer_title"
+ settings:keywords="@string/keywords_default_dialer_app"
+ />
+
<com.android.settings.applications.DefaultEmergencyPreference
android:key="default_emergency_app"
android:title="@string/default_emergency_app"
diff --git a/res/xml/installed_app_details.xml b/res/xml/installed_app_details.xml
index 09f5bb3..233331d 100644
--- a/res/xml/installed_app_details.xml
+++ b/res/xml/installed_app_details.xml
@@ -37,7 +37,7 @@
<Preference
android:key="notification_settings"
- android:title="@string/notification_section_header"
+ android:title="@string/notifications_label"
android:selectable="true" />
<Preference
diff --git a/res/xml/security_settings_chooser.xml b/res/xml/security_settings_chooser.xml
index 4c1d809..af7bfeb 100644
--- a/res/xml/security_settings_chooser.xml
+++ b/res/xml/security_settings_chooser.xml
@@ -27,9 +27,8 @@
android:summary="@string/unlock_set_unlock_mode_none"
android:persistent="false"/>
- <PreferenceScreen
+ <com.android.settings.SingleLineSummaryPreference
android:key="owner_info_settings"
- android:fragment="com.android.settings.OwnerInfoSettings"
android:title="@string/owner_info_settings_title"
android:summary="@string/owner_info_settings_summary"/>
diff --git a/res/xml/security_settings_lockscreen.xml b/res/xml/security_settings_lockscreen.xml
index 88df74b..480d6ee 100644
--- a/res/xml/security_settings_lockscreen.xml
+++ b/res/xml/security_settings_lockscreen.xml
@@ -29,9 +29,8 @@
settings:keywords="@string/keywords_lockscreen"
android:persistent="false"/>
- <PreferenceScreen
+ <com.android.settings.SingleLineSummaryPreference
android:key="owner_info_settings"
- android:fragment="com.android.settings.OwnerInfoSettings"
android:title="@string/owner_info_settings_title"
android:summary="@string/owner_info_settings_summary"/>
diff --git a/res/xml/security_settings_password.xml b/res/xml/security_settings_password.xml
index 9f1092a..b610562 100644
--- a/res/xml/security_settings_password.xml
+++ b/res/xml/security_settings_password.xml
@@ -41,9 +41,8 @@
android:key="power_button_instantly_locks"
android:title="@string/lockpattern_settings_enable_power_button_instantly_locks"/>
- <PreferenceScreen
+ <com.android.settings.SingleLineSummaryPreference
android:key="owner_info_settings"
- android:fragment="com.android.settings.OwnerInfoSettings"
android:title="@string/owner_info_settings_title"
android:summary="@string/owner_info_settings_summary"/>
diff --git a/res/xml/security_settings_pattern.xml b/res/xml/security_settings_pattern.xml
index ceb749c..867bed4 100644
--- a/res/xml/security_settings_pattern.xml
+++ b/res/xml/security_settings_pattern.xml
@@ -45,8 +45,7 @@
android:key="power_button_instantly_locks"
android:title="@string/lockpattern_settings_enable_power_button_instantly_locks"/>
- <PreferenceScreen
- android:fragment="com.android.settings.OwnerInfoSettings"
+ <com.android.settings.SingleLineSummaryPreference
android:key="owner_info_settings"
android:title="@string/owner_info_settings_title"
android:summary="@string/owner_info_settings_summary"/>
diff --git a/res/xml/security_settings_pin.xml b/res/xml/security_settings_pin.xml
index 4470b1d..ac09a2c 100644
--- a/res/xml/security_settings_pin.xml
+++ b/res/xml/security_settings_pin.xml
@@ -41,9 +41,8 @@
android:key="power_button_instantly_locks"
android:title="@string/lockpattern_settings_enable_power_button_instantly_locks"/>
- <PreferenceScreen
+ <com.android.settings.SingleLineSummaryPreference
android:key="owner_info_settings"
- android:fragment="com.android.settings.OwnerInfoSettings"
android:title="@string/owner_info_settings_title"
android:summary="@string/owner_info_settings_summary"/>
diff --git a/src/com/android/settings/OwnerInfoSettings.java b/src/com/android/settings/OwnerInfoSettings.java
index 54b7cab..56da637 100644
--- a/src/com/android/settings/OwnerInfoSettings.java
+++ b/src/com/android/settings/OwnerInfoSettings.java
@@ -16,110 +16,105 @@
package com.android.settings;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
import android.app.Fragment;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.os.UserHandle;
-import android.os.UserManager;
+import android.text.Editable;
import android.text.TextUtils;
+import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
-import android.view.ViewGroup;
-import android.widget.CheckBox;
-import android.widget.CompoundButton;
import android.widget.EditText;
-import android.widget.CompoundButton.OnCheckedChangeListener;
+import android.widget.TextView;
-import com.android.internal.logging.MetricsLogger;
import com.android.internal.widget.LockPatternUtils;
-public class OwnerInfoSettings extends InstrumentedFragment {
+public class OwnerInfoSettings extends DialogFragment implements OnClickListener {
- public static final String EXTRA_SHOW_NICKNAME = "show_nickname";
+ private static final String TAG_OWNER_INFO = "ownerInfo";
+
+ private static final int MAX_CHARS = 100;
private View mView;
- private CheckBox mCheckbox;
private int mUserId;
private LockPatternUtils mLockPatternUtils;
private EditText mOwnerInfo;
- private EditText mNickname;
- private boolean mShowNickname;
+ private TextView mOwnerInfoStatus;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- Bundle args = getArguments();
- if (args != null && args.containsKey(EXTRA_SHOW_NICKNAME)) {
- mShowNickname = args.getBoolean(EXTRA_SHOW_NICKNAME);
- }
+ mUserId = UserHandle.myUserId();
+ mLockPatternUtils = new LockPatternUtils(getActivity());
}
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- mView = inflater.inflate(R.layout.ownerinfo, container, false);
- mUserId = UserHandle.myUserId();
- mLockPatternUtils = new LockPatternUtils(getActivity());
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ mView = LayoutInflater.from(getActivity()).inflate(R.layout.ownerinfo, null);
initView();
- return mView;
+ return new AlertDialog.Builder(getActivity())
+ .setTitle(R.string.owner_info_settings_title)
+ .setView(mView)
+ .setPositiveButton(R.string.save, this)
+ .setNegativeButton(R.string.cancel, this)
+ .show();
}
private void initView() {
- mNickname = (EditText) mView.findViewById(R.id.owner_info_nickname);
- if (!mShowNickname) {
- mNickname.setVisibility(View.GONE);
- } else {
- mNickname.setText(UserManager.get(getActivity()).getUserName());
- mNickname.setSelected(true);
- }
-
- final boolean enabled = mLockPatternUtils.isOwnerInfoEnabled();
-
- mCheckbox = (CheckBox) mView.findViewById(R.id.show_owner_info_on_lockscreen_checkbox);
- mCheckbox.setChecked(enabled);
- if (UserHandle.myUserId() != UserHandle.USER_OWNER) {
- if (UserManager.get(getActivity()).isLinkedUser()) {
- mCheckbox.setText(R.string.show_profile_info_on_lockscreen_label);
- } else {
- mCheckbox.setText(R.string.show_user_info_on_lockscreen_label);
- }
- }
- mCheckbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- mLockPatternUtils.setOwnerInfoEnabled(isChecked);
- mOwnerInfo.setEnabled(isChecked); // disable text field if not enabled
- }
- });
-
String info = mLockPatternUtils.getOwnerInfo(mUserId);
mOwnerInfo = (EditText) mView.findViewById(R.id.owner_info_edit_text);
- mOwnerInfo.setEnabled(enabled);
if (!TextUtils.isEmpty(info)) {
mOwnerInfo.setText(info);
}
+ mOwnerInfoStatus = (TextView) mView.findViewById(R.id.owner_info_status);
+ updateOwnerInfoStatus();
+
+ mOwnerInfo.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+ }
+
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ updateOwnerInfoStatus();
+ }
+ });
+ }
+
+ private void updateOwnerInfoStatus() {
+ String status = getString(R.string.owner_info_settings_status,
+ mOwnerInfo.getText().toString().length(), MAX_CHARS);
+ mOwnerInfoStatus.setText(status);
}
@Override
- protected int getMetricsCategory() {
- return MetricsLogger.OWNER_INFO;
- }
+ public void onClick(DialogInterface dialog, int which) {
+ if (which == AlertDialog.BUTTON_POSITIVE) {
+ String info = mOwnerInfo.getText().toString();
+ mLockPatternUtils.setOwnerInfoEnabled(!TextUtils.isEmpty(info));
+ mLockPatternUtils.setOwnerInfo(info, mUserId);
- @Override
- public void onPause() {
- super.onPause();
- saveChanges();
- }
-
- void saveChanges() {
- String info = mOwnerInfo.getText().toString();
- mLockPatternUtils.setOwnerInfo(info, mUserId);
- if (mShowNickname) {
- String oldName = UserManager.get(getActivity()).getUserName();
- CharSequence newName = mNickname.getText();
- if (!TextUtils.isEmpty(newName) && !newName.equals(oldName)) {
- UserManager.get(getActivity()).setUserName(UserHandle.myUserId(),
- newName.toString());
+ if (getTargetFragment() instanceof SecuritySettings) {
+ ((SecuritySettings) getTargetFragment()).updateOwnerInfo();
}
}
}
+
+ public static void show(Fragment parent) {
+ if (!parent.isAdded()) return;
+
+ final OwnerInfoSettings dialog = new OwnerInfoSettings();
+ dialog.setTargetFragment(parent, 0);
+ dialog.show(parent.getFragmentManager(), TAG_OWNER_INFO);
+ }
}
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index 30b7590..59816ac 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -17,6 +17,8 @@
package com.android.settings;
+import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
+
import android.app.Activity;
import android.app.AlertDialog;
import android.app.admin.DevicePolicyManager;
@@ -26,26 +28,26 @@
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
-import android.content.pm.UserInfo;
import android.content.res.Resources;
+import android.hardware.fingerprint.Fingerprint;
+import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
-import android.preference.SwitchPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
+import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
+import android.preference.SwitchPreference;
import android.provider.SearchIndexableResource;
import android.provider.Settings;
import android.security.KeyStore;
-import android.hardware.fingerprint.Fingerprint;
-import android.hardware.fingerprint.FingerprintManager;
import android.service.trust.TrustAgentService;
-import android.telephony.TelephonyManager;
-import android.telephony.SubscriptionManager;
import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Log;
@@ -60,8 +62,6 @@
import java.util.ArrayList;
import java.util.List;
-import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
-
/**
* Gesture lock pattern settings.
*/
@@ -129,6 +129,7 @@
private boolean mIsPrimary;
private Intent mTrustAgentClickIntent;
+ private Preference mOwnerInfoPref;
@Override
protected int getMetricsCategory() {
@@ -202,16 +203,15 @@
// Add options for device encryption
mIsPrimary = UserHandle.myUserId() == UserHandle.USER_OWNER;
- if (!mIsPrimary) {
- // Rename owner info settings
- Preference ownerInfoPref = findPreference(KEY_OWNER_INFO_SETTINGS);
- if (ownerInfoPref != null) {
- if (UserManager.get(getActivity()).isLinkedUser()) {
- ownerInfoPref.setTitle(R.string.profile_info_settings_title);
- } else {
- ownerInfoPref.setTitle(R.string.user_info_settings_title);
+ mOwnerInfoPref = findPreference(KEY_OWNER_INFO_SETTINGS);
+ if (mOwnerInfoPref != null) {
+ mOwnerInfoPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ OwnerInfoSettings.show(SecuritySettings.this);
+ return true;
}
- }
+ });
}
if (mIsPrimary) {
@@ -603,6 +603,16 @@
if (mResetCredentials != null) {
mResetCredentials.setEnabled(!mKeyStore.isEmpty());
}
+
+ updateOwnerInfo();
+ }
+
+ public void updateOwnerInfo() {
+ if (mOwnerInfoPref != null) {
+ mOwnerInfoPref.setSummary(mLockPatternUtils.isOwnerInfoEnabled()
+ ? mLockPatternUtils.getOwnerInfo(UserHandle.myUserId())
+ : getString(R.string.owner_info_settings_summary));
+ }
}
@Override
diff --git a/src/com/android/settings/SingleLineSummaryPreference.java b/src/com/android/settings/SingleLineSummaryPreference.java
new file mode 100644
index 0000000..420fe08
--- /dev/null
+++ b/src/com/android/settings/SingleLineSummaryPreference.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings;
+
+import android.content.Context;
+import android.preference.Preference;
+import android.text.TextUtils.TruncateAt;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.TextView;
+
+public class SingleLineSummaryPreference extends Preference {
+
+ public SingleLineSummaryPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ @Override
+ protected void onBindView(View view) {
+ super.onBindView(view);
+
+ final TextView summaryView = (TextView) view.findViewById(
+ com.android.internal.R.id.summary);
+ summaryView.setSingleLine();
+ summaryView.setEllipsize(TruncateAt.END);
+ }
+
+}
diff --git a/src/com/android/settings/applications/AppStorageSettings.java b/src/com/android/settings/applications/AppStorageSettings.java
index 647be4d..5c367d7 100644
--- a/src/com/android/settings/applications/AppStorageSettings.java
+++ b/src/com/android/settings/applications/AppStorageSettings.java
@@ -168,7 +168,7 @@
// If not current volume, kick off move wizard
final VolumeInfo targetVol = (VolumeInfo) value;
- final VolumeInfo currentVol = context.getPackageManager().getApplicationCurrentVolume(
+ final VolumeInfo currentVol = context.getPackageManager().getPackageCurrentVolume(
mAppEntry.info);
if (!Objects.equals(targetVol, currentVol)) {
final Intent intent = new Intent(context, StorageWizardMoveConfirm.class);
@@ -261,7 +261,7 @@
refreshSizeInfo();
final VolumeInfo currentVol = getActivity().getPackageManager()
- .getApplicationCurrentVolume(mAppEntry.info);
+ .getPackageCurrentVolume(mAppEntry.info);
mMoveDropDown.setSelectedValue(currentVol);
return true;
@@ -303,7 +303,7 @@
final StorageManager storage = context.getSystemService(StorageManager.class);
final List<VolumeInfo> candidates = context.getPackageManager()
- .getApplicationCandidateVolumes(mAppEntry.info);
+ .getPackageCandidateVolumes(mAppEntry.info);
Collections.sort(candidates, VolumeInfo.getDescriptionComparator());
mMoveDropDown.clearItems();
diff --git a/src/com/android/settings/applications/DefaultDialerPreference.java b/src/com/android/settings/applications/DefaultDialerPreference.java
new file mode 100644
index 0000000..ce16966
--- /dev/null
+++ b/src/com/android/settings/applications/DefaultDialerPreference.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.os.UserManager;
+import android.telecom.DefaultDialerManager;
+import android.telephony.TelephonyManager;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+
+import com.android.settings.AppListPreference;
+
+import java.util.List;
+import java.util.Objects;
+
+public class DefaultDialerPreference extends AppListPreference {
+
+ public DefaultDialerPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+
+ if (isAvailable(context)) {
+ loadDialerApps();
+ }
+ }
+
+ @Override
+ protected boolean persistString(String value) {
+ if (!TextUtils.isEmpty(value) && !Objects.equals(value, getDefaultPackage())) {
+ DefaultDialerManager.setDefaultPhoneApplication(getContext(), value);
+ }
+ setSummary(getEntry());
+ return true;
+ }
+
+ private void loadDialerApps() {
+ List<ComponentName> dialerComponents =
+ DefaultDialerManager.getInstalledDialerApplications(getContext());
+
+ final String[] dialers = new String[dialerComponents.size()];
+ for (int i = 0; i < dialerComponents.size(); i++) {
+ dialers[i] = dialerComponents.get(i).getPackageName();
+ }
+ setPackageNames(dialers, getDefaultPackage());
+ }
+
+ private String getDefaultPackage() {
+ ComponentName appName = DefaultDialerManager.getDefaultDialerApplication(getContext());
+ if (appName != null) {
+ return appName.getPackageName();
+ }
+ return null;
+ }
+
+ public static boolean isAvailable(Context context) {
+ final TelephonyManager tm =
+ (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+ if (!tm.isVoiceCapable()) {
+ return false;
+ }
+
+ final UserManager um =
+ (UserManager) context.getSystemService(Context.USER_SERVICE);
+ return !um.hasUserRestriction(UserManager.DISALLOW_OUTGOING_CALLS);
+ }
+}
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java
index 273bcfe..58061c0 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -550,9 +550,7 @@
ApplicationsState.AppEntry entry = mApplications.getAppEntry(position);
mCurrentPkgName = entry.info.packageName;
mCurrentUid = entry.info.uid;
- if (isAppEntryViewEnabled(entry)) {
- startApplicationDetailsActivity();
- }
+ startApplicationDetailsActivity();
}
}
@@ -658,13 +656,6 @@
}
- private static boolean isAppEntryViewEnabled(AppEntry entry) {
- if ((entry.info.flags&ApplicationInfo.FLAG_INSTALLED) == 0 || !entry.info.enabled) {
- return false;
- }
- return true;
- }
-
/*
* Custom adapter implementation for the ListView
* This adapter maintains a map for each displayed application and its properties
@@ -827,7 +818,7 @@
}
notifyDataSetChanged();
- if (mEntries.size() != 0
+ if (mSession.getAllApps().size() != 0
&& mManageApplications.mListContainer.getVisibility() != View.VISIBLE) {
Utils.handleLoadingContainer(mManageApplications.mLoadingContainer,
mManageApplications.mListContainer, true, true);
@@ -842,7 +833,7 @@
private void updateLoading() {
Utils.handleLoadingContainer(mManageApplications.mLoadingContainer,
- mManageApplications.mListContainer, mEntries.size() != 0, false);
+ mManageApplications.mListContainer, mSession.getAllApps().size() != 0, false);
}
private boolean hasDisabledApps() {
@@ -991,7 +982,6 @@
holder.appIcon.setImageDrawable(entry.icon);
}
updateSummary(holder);
- convertView.setEnabled(isAppEntryViewEnabled(entry));
if ((entry.info.flags&ApplicationInfo.FLAG_INSTALLED) == 0) {
holder.disabled.setVisibility(View.VISIBLE);
holder.disabled.setText(R.string.not_installed);
diff --git a/src/com/android/settings/applications/ManageDefaultApps.java b/src/com/android/settings/applications/ManageDefaultApps.java
index 326de22..6f58612 100644
--- a/src/com/android/settings/applications/ManageDefaultApps.java
+++ b/src/com/android/settings/applications/ManageDefaultApps.java
@@ -26,6 +26,7 @@
import android.os.UserManager;
import android.preference.Preference;
import android.provider.SearchIndexableResource;
+import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
@@ -47,8 +48,9 @@
private static final String TAG = ManageDefaultApps.class.getSimpleName();
private static final String KEY_DEFAULT_BROWSER = "default_browser";
- private static final String KEY_SMS_APPLICATION = "default_sms_app";
+ private static final String KEY_DEFAULT_DIALER = "default_dialer";
private static final String KEY_DEFAULT_EMERGENCY_APP = "default_emergency_app";
+ private static final String KEY_SMS_APPLICATION = "default_sms_app";
private DefaultBrowserPreference mDefaultBrowserPreference;
private PackageManager mPm;
@@ -84,6 +86,10 @@
removePreference(KEY_SMS_APPLICATION);
}
+ if (!DefaultDialerPreference.isAvailable(getActivity())) {
+ removePreference(KEY_DEFAULT_DIALER);
+ }
+
if (!DefaultEmergencyPreference.isAvailable(getActivity())) {
removePreference(KEY_DEFAULT_EMERGENCY_APP);
}
diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java
index b1d2cba..31aa0df 100644
--- a/src/com/android/settings/dashboard/DashboardSummary.java
+++ b/src/com/android/settings/dashboard/DashboardSummary.java
@@ -22,11 +22,13 @@
import android.content.IntentFilter;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
+import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@@ -174,8 +176,16 @@
if (!TextUtils.isEmpty(tile.iconPkg)) {
try {
- tileIcon.setImageDrawable(context.getPackageManager()
- .getResourcesForApplication(tile.iconPkg).getDrawable(tile.iconRes, null));
+ Drawable drawable = context.getPackageManager()
+ .getResourcesForApplication(tile.iconPkg).getDrawable(tile.iconRes, null);
+ if (!tile.iconPkg.equals(context.getPackageName()) && drawable != null) {
+ // If this drawable is coming from outside Settings, tint it to match the color.
+ TypedValue tintColor = new TypedValue();
+ context.getTheme().resolveAttribute(com.android.internal.R.attr.colorAccent,
+ tintColor, true);
+ drawable.setTint(tintColor.data);
+ }
+ tileIcon.setImageDrawable(drawable);
} catch (NameNotFoundException | Resources.NotFoundException e) {
tileIcon.setImageDrawable(null);
tileIcon.setBackground(null);
diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
index 00fb094..492051d 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
@@ -57,9 +57,10 @@
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;
import com.android.settings.applications.ManageApplications;
-import com.android.settings.deviceinfo.StorageMeasurement.MeasurementDetails;
-import com.android.settings.deviceinfo.StorageMeasurement.MeasurementReceiver;
import com.android.settings.deviceinfo.StorageSettings.MountTask;
+import com.android.settingslib.deviceinfo.StorageMeasurement;
+import com.android.settingslib.deviceinfo.StorageMeasurement.MeasurementDetails;
+import com.android.settingslib.deviceinfo.StorageMeasurement.MeasurementReceiver;
import com.google.android.collect.Lists;
import java.io.File;
diff --git a/src/com/android/settings/deviceinfo/StorageMeasurement.java b/src/com/android/settings/deviceinfo/StorageMeasurement.java
deleted file mode 100644
index b6c35e3..0000000
--- a/src/com/android/settings/deviceinfo/StorageMeasurement.java
+++ /dev/null
@@ -1,441 +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.deviceinfo;
-
-import android.app.ActivityManager;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.IPackageStatsObserver;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageStats;
-import android.content.pm.UserInfo;
-import android.os.Environment;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.os.IBinder;
-import android.os.Looper;
-import android.os.Message;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.os.storage.StorageVolume;
-import android.os.storage.VolumeInfo;
-import android.util.Log;
-import android.util.SparseLongArray;
-
-import com.android.internal.app.IMediaContainerService;
-import com.android.internal.util.ArrayUtils;
-import com.google.android.collect.Sets;
-
-import java.io.File;
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
-
-/**
- * Utility for measuring the disk usage of internal storage or a physical
- * {@link StorageVolume}. Connects with a remote {@link IMediaContainerService}
- * and delivers results to {@link MeasurementReceiver}.
- */
-public class StorageMeasurement {
- private static final String TAG = "StorageMeasurement";
-
- private static final boolean LOCAL_LOGV = true;
- static final boolean LOGV = LOCAL_LOGV && Log.isLoggable(TAG, Log.VERBOSE);
-
- private static final String DEFAULT_CONTAINER_PACKAGE = "com.android.defcontainer";
-
- public static final ComponentName DEFAULT_CONTAINER_COMPONENT = new ComponentName(
- DEFAULT_CONTAINER_PACKAGE, "com.android.defcontainer.DefaultContainerService");
-
- /** Media types to measure on external storage. */
- private static final Set<String> sMeasureMediaTypes = Sets.newHashSet(
- Environment.DIRECTORY_DCIM, Environment.DIRECTORY_MOVIES,
- Environment.DIRECTORY_PICTURES, Environment.DIRECTORY_MUSIC,
- Environment.DIRECTORY_ALARMS, Environment.DIRECTORY_NOTIFICATIONS,
- Environment.DIRECTORY_RINGTONES, Environment.DIRECTORY_PODCASTS,
- Environment.DIRECTORY_DOWNLOADS, Environment.DIRECTORY_ANDROID);
-
- public static class MeasurementDetails {
- /**
- * Total apps disk usage.
- * <p>
- * When measuring internal storage, this value includes the code size of
- * all apps (regardless of install status for current user), and
- * internal disk used by the current user's apps. When the device
- * emulates external storage, this value also includes emulated storage
- * used by the current user's apps.
- * <p>
- * When measuring a physical {@link StorageVolume}, this value includes
- * usage by all apps on that volume.
- */
- public long appsSize;
-
- /**
- * Total cache disk usage by apps.
- */
- public long cacheSize;
-
- /**
- * Total media disk usage, categorized by types such as
- * {@link Environment#DIRECTORY_MUSIC}.
- * <p>
- * When measuring internal storage, this reflects media on emulated
- * storage for the current user.
- * <p>
- * When measuring a physical {@link StorageVolume}, this reflects media
- * on that volume.
- */
- public HashMap<String, Long> mediaSize = new HashMap<>();
-
- /**
- * Misc external disk usage for the current user, unaccounted in
- * {@link #mediaSize}.
- */
- public long miscSize;
-
- /**
- * Total disk usage for users, which is only meaningful for emulated
- * internal storage. Key is {@link UserHandle}.
- */
- public SparseLongArray usersSize = new SparseLongArray();
- }
-
- public interface MeasurementReceiver {
- public void onDetailsChanged(MeasurementDetails details);
- }
-
- private WeakReference<MeasurementReceiver> mReceiver;
-
- private final Context mContext;
-
- private final VolumeInfo mVolume;
- private final VolumeInfo mSharedVolume;
-
- private final MainHandler mMainHandler;
- private final MeasurementHandler mMeasurementHandler;
-
- public StorageMeasurement(Context context, VolumeInfo volume, VolumeInfo sharedVolume) {
- mContext = context.getApplicationContext();
-
- mVolume = volume;
- mSharedVolume = sharedVolume;
-
- // Start the thread that will measure the disk usage.
- final HandlerThread handlerThread = new HandlerThread("MemoryMeasurement");
- handlerThread.start();
-
- mMainHandler = new MainHandler();
- mMeasurementHandler = new MeasurementHandler(handlerThread.getLooper());
- }
-
- public void setReceiver(MeasurementReceiver receiver) {
- if (mReceiver == null || mReceiver.get() == null) {
- mReceiver = new WeakReference<MeasurementReceiver>(receiver);
- }
- }
-
- public void forceMeasure() {
- invalidate();
- measure();
- }
-
- public void measure() {
- if (!mMeasurementHandler.hasMessages(MeasurementHandler.MSG_MEASURE)) {
- mMeasurementHandler.sendEmptyMessage(MeasurementHandler.MSG_MEASURE);
- }
- }
-
- public void onDestroy() {
- mReceiver = null;
- mMeasurementHandler.removeMessages(MeasurementHandler.MSG_MEASURE);
- mMeasurementHandler.sendEmptyMessage(MeasurementHandler.MSG_DISCONNECT);
- }
-
- private void invalidate() {
- mMeasurementHandler.sendEmptyMessage(MeasurementHandler.MSG_INVALIDATE);
- }
-
- private static class StatsObserver extends IPackageStatsObserver.Stub {
- private final boolean mIsPrivate;
- private final MeasurementDetails mDetails;
- private final int mCurrentUser;
- private final Message mFinished;
-
- private int mRemaining;
-
- public StatsObserver(boolean isPrivate, MeasurementDetails details, int currentUser,
- Message finished, int remaining) {
- mIsPrivate = isPrivate;
- mDetails = details;
- mCurrentUser = currentUser;
- mFinished = finished;
- mRemaining = remaining;
- }
-
- @Override
- public void onGetStatsCompleted(PackageStats stats, boolean succeeded) {
- synchronized (mDetails) {
- if (succeeded) {
- addStatsLocked(stats);
- }
- if (--mRemaining == 0) {
- mFinished.sendToTarget();
- }
- }
- }
-
- private void addStatsLocked(PackageStats stats) {
- if (mIsPrivate) {
- long codeSize = stats.codeSize;
- long dataSize = stats.dataSize;
- long cacheSize = stats.cacheSize;
- if (Environment.isExternalStorageEmulated()) {
- // Include emulated storage when measuring internal. OBB is
- // shared on emulated storage, so treat as code.
- codeSize += stats.externalCodeSize + stats.externalObbSize;
- dataSize += stats.externalDataSize + stats.externalMediaSize;
- cacheSize += stats.externalCacheSize;
- }
-
- // Count code and data for current user
- if (stats.userHandle == mCurrentUser) {
- mDetails.appsSize += codeSize;
- mDetails.appsSize += dataSize;
- }
-
- // User summary only includes data (code is only counted once
- // for the current user)
- addValue(mDetails.usersSize, stats.userHandle, dataSize);
-
- // Include cache for all users
- mDetails.cacheSize += cacheSize;
-
- } else {
- // Physical storage; only count external sizes
- mDetails.appsSize += stats.externalCodeSize + stats.externalDataSize
- + stats.externalMediaSize + stats.externalObbSize;
- mDetails.cacheSize += stats.externalCacheSize;
- }
- }
- }
-
- private class MainHandler extends Handler {
- @Override
- public void handleMessage(Message msg) {
- final MeasurementDetails details = (MeasurementDetails) msg.obj;
- final MeasurementReceiver receiver = (mReceiver != null) ? mReceiver.get() : null;
- if (receiver != null) {
- receiver.onDetailsChanged(details);
- }
- }
- }
-
- private class MeasurementHandler extends Handler {
- public static final int MSG_MEASURE = 1;
- public static final int MSG_CONNECTED = 2;
- public static final int MSG_DISCONNECT = 3;
- public static final int MSG_COMPLETED = 4;
- public static final int MSG_INVALIDATE = 5;
-
- private Object mLock = new Object();
-
- private IMediaContainerService mDefaultContainer;
-
- private volatile boolean mBound = false;
-
- private MeasurementDetails mCached;
-
- private final ServiceConnection mDefContainerConn = new ServiceConnection() {
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- final IMediaContainerService imcs = IMediaContainerService.Stub.asInterface(
- service);
- mDefaultContainer = imcs;
- mBound = true;
- sendMessage(obtainMessage(MSG_CONNECTED, imcs));
- }
-
- @Override
- public void onServiceDisconnected(ComponentName name) {
- mBound = false;
- removeMessages(MSG_CONNECTED);
- }
- };
-
- public MeasurementHandler(Looper looper) {
- super(looper);
- }
-
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case MSG_MEASURE: {
- if (mCached != null) {
- mMainHandler.obtainMessage(0, mCached).sendToTarget();
- break;
- }
-
- synchronized (mLock) {
- if (mBound) {
- removeMessages(MSG_DISCONNECT);
- sendMessage(obtainMessage(MSG_CONNECTED, mDefaultContainer));
- } else {
- Intent service = new Intent().setComponent(DEFAULT_CONTAINER_COMPONENT);
- mContext.bindServiceAsUser(service, mDefContainerConn,
- Context.BIND_AUTO_CREATE, UserHandle.OWNER);
- }
- }
- break;
- }
- case MSG_CONNECTED: {
- final IMediaContainerService imcs = (IMediaContainerService) msg.obj;
- measureExactStorage(imcs);
- break;
- }
- case MSG_DISCONNECT: {
- synchronized (mLock) {
- if (mBound) {
- mBound = false;
- mContext.unbindService(mDefContainerConn);
- }
- }
- break;
- }
- case MSG_COMPLETED: {
- mCached = (MeasurementDetails) msg.obj;
- mMainHandler.obtainMessage(0, mCached).sendToTarget();
- break;
- }
- case MSG_INVALIDATE: {
- mCached = null;
- break;
- }
- }
- }
- }
-
- private void measureExactStorage(IMediaContainerService imcs) {
- final UserManager userManager = mContext.getSystemService(UserManager.class);
- final PackageManager packageManager = mContext.getPackageManager();
-
- final List<UserInfo> users = userManager.getUsers();
- final int currentUser = ActivityManager.getCurrentUser();
-
- final MeasurementDetails details = new MeasurementDetails();
- final Message finished = mMeasurementHandler.obtainMessage(MeasurementHandler.MSG_COMPLETED,
- details);
-
- if (mSharedVolume != null && mSharedVolume.isMountedReadable()) {
- final File basePath = mSharedVolume.getPathForUser(currentUser);
-
- // Measure media types for emulated storage, or for primary physical
- // external volume
- for (String type : sMeasureMediaTypes) {
- final File path = new File(basePath, type);
- final long size = getDirectorySize(imcs, path);
- details.mediaSize.put(type, size);
- }
-
- // Measure misc files not counted under media
- details.miscSize = measureMisc(imcs, basePath);
-
- if (mSharedVolume.getType() == VolumeInfo.TYPE_EMULATED) {
- // Measure total emulated storage of all users; internal apps data
- // will be spliced in later
- for (UserInfo user : users) {
- final File userPath = mSharedVolume.getPathForUser(user.id);
- final long size = getDirectorySize(imcs, userPath);
- addValue(details.usersSize, user.id, size);
- }
- }
- }
-
- // Measure all apps hosted on this volume for all users
- if (mVolume.getType() == VolumeInfo.TYPE_PRIVATE) {
- final List<ApplicationInfo> apps = packageManager.getInstalledApplications(
- PackageManager.GET_UNINSTALLED_PACKAGES
- | PackageManager.GET_DISABLED_COMPONENTS);
-
- final List<ApplicationInfo> volumeApps = new ArrayList<>();
- for (ApplicationInfo app : apps) {
- if (Objects.equals(app.volumeUuid, mVolume.getFsUuid())) {
- volumeApps.add(app);
- }
- }
-
- final int count = users.size() * volumeApps.size();
- if (count == 0) {
- finished.sendToTarget();
- return;
- }
-
- final StatsObserver observer = new StatsObserver(
- true, details, currentUser, finished, count);
- for (UserInfo user : users) {
- for (ApplicationInfo app : volumeApps) {
- packageManager.getPackageSizeInfo(app.packageName, user.id, observer);
- }
- }
-
- } else {
- finished.sendToTarget();
- return;
- }
- }
-
- private static long getDirectorySize(IMediaContainerService imcs, File path) {
- try {
- final long size = imcs.calculateDirectorySize(path.toString());
- Log.d(TAG, "getDirectorySize(" + path + ") returned " + size);
- return size;
- } catch (Exception e) {
- Log.w(TAG, "Could not read memory from default container service for " + path, e);
- return 0;
- }
- }
-
- private long measureMisc(IMediaContainerService imcs, File dir) {
- final File[] files = dir.listFiles();
- if (ArrayUtils.isEmpty(files)) return 0;
-
- // Get sizes of all top level nodes except the ones already computed
- long miscSize = 0;
- for (File file : files) {
- final String name = file.getName();
- if (sMeasureMediaTypes.contains(name)) {
- continue;
- }
-
- if (file.isFile()) {
- miscSize += file.length();
- } else if (file.isDirectory()) {
- miscSize += getDirectorySize(imcs, file);
- }
- }
- return miscSize;
- }
-
- private static void addValue(SparseLongArray array, int key, long value) {
- array.put(key, array.get(key) + value);
- }
-}
diff --git a/src/com/android/settings/deviceinfo/StorageWizardMoveConfirm.java b/src/com/android/settings/deviceinfo/StorageWizardMoveConfirm.java
index 36750c0..3a802a3 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardMoveConfirm.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardMoveConfirm.java
@@ -16,11 +16,15 @@
package com.android.settings.deviceinfo;
+import static android.content.Intent.EXTRA_PACKAGE_NAME;
+import static android.content.Intent.EXTRA_TITLE;
+import static android.content.pm.PackageManager.EXTRA_MOVE_ID;
+import static android.os.storage.VolumeInfo.EXTRA_VOLUME_ID;
+
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
-import android.os.storage.VolumeInfo;
import com.android.internal.util.Preconditions;
import com.android.settings.R;
@@ -35,7 +39,7 @@
setContentView(R.layout.storage_wizard_generic);
try {
- mPackageName = getIntent().getStringExtra(Intent.EXTRA_PACKAGE_NAME);
+ mPackageName = getIntent().getStringExtra(EXTRA_PACKAGE_NAME);
mApp = getPackageManager().getApplicationInfo(mPackageName, 0);
} catch (NameNotFoundException e) {
throw new RuntimeException(e);
@@ -46,7 +50,7 @@
// Sanity check that target volume is candidate
Preconditions.checkState(
- getPackageManager().getApplicationCandidateVolumes(mApp).contains(mVolume));
+ getPackageManager().getPackageCandidateVolumes(mApp).contains(mVolume));
final String appName = getPackageManager().getApplicationLabel(mApp).toString();
final String volumeName = mStorage.getBestVolumeDescription(mVolume);
@@ -59,9 +63,14 @@
@Override
public void onNavigateNext() {
+ // Kick off move before we transition
+ final String appName = getPackageManager().getApplicationLabel(mApp).toString();
+ final int moveId = getPackageManager().movePackage(mPackageName, mVolume);
+
final Intent intent = new Intent(this, StorageWizardMoveProgress.class);
- intent.putExtra(VolumeInfo.EXTRA_VOLUME_ID, mVolume.getId());
- intent.putExtra(Intent.EXTRA_PACKAGE_NAME, mPackageName);
+ intent.putExtra(EXTRA_MOVE_ID, moveId);
+ intent.putExtra(EXTRA_TITLE, appName);
+ intent.putExtra(EXTRA_VOLUME_ID, mVolume.getId());
startActivity(intent);
finishAffinity();
}
diff --git a/src/com/android/settings/deviceinfo/StorageWizardMoveProgress.java b/src/com/android/settings/deviceinfo/StorageWizardMoveProgress.java
index 2023335..b0946c5 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardMoveProgress.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardMoveProgress.java
@@ -16,59 +16,72 @@
package com.android.settings.deviceinfo;
+import static android.content.Intent.EXTRA_TITLE;
+import static android.content.pm.PackageManager.EXTRA_MOVE_ID;
import static com.android.settings.deviceinfo.StorageSettings.TAG;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.IPackageMoveObserver;
import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.os.AsyncTask;
+import android.content.pm.PackageManager.MoveCallback;
import android.os.Bundle;
-import android.os.RemoteException;
-import android.os.storage.VolumeInfo;
+import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
-import com.android.internal.util.Preconditions;
import com.android.settings.R;
-import java.util.concurrent.CountDownLatch;
-
public class StorageWizardMoveProgress extends StorageWizardBase {
- private String mPackageName;
- private ApplicationInfo mApp;
+ private int mMoveId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.storage_wizard_progress);
- try {
- mPackageName = getIntent().getStringExtra(Intent.EXTRA_PACKAGE_NAME);
- mApp = getPackageManager().getApplicationInfo(mPackageName, 0);
- } catch (NameNotFoundException e) {
- throw new RuntimeException(e);
- }
-
- Preconditions.checkNotNull(mVolume);
- Preconditions.checkNotNull(mApp);
-
- final String appName = getPackageManager().getApplicationLabel(mApp).toString();
+ mMoveId = getIntent().getIntExtra(EXTRA_MOVE_ID, -1);
+ final String appName = getIntent().getStringExtra(EXTRA_TITLE);
final String volumeName = mStorage.getBestVolumeDescription(mVolume);
setHeaderText(R.string.storage_wizard_move_progress_title, appName);
setBodyText(R.string.storage_wizard_move_progress_body, volumeName, appName);
- setCurrentProgress(20);
-
getNextButton().setVisibility(View.GONE);
- new MoveTask().execute();
+ // Register for updates and push through current status
+ getPackageManager().registerMoveCallback(mCallback, new Handler());
+ mCallback.onStatusChanged(mMoveId, getPackageManager().getMoveStatus(mMoveId), -1);
}
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ getPackageManager().unregisterMoveCallback(mCallback);
+ }
+
+ private final MoveCallback mCallback = new MoveCallback() {
+ @Override
+ public void onStarted(int moveId, String title) {
+ // Ignored
+ }
+
+ @Override
+ public void onStatusChanged(int moveId, int status, long estMillis) {
+ if (mMoveId != moveId) return;
+
+ if (PackageManager.isMoveStatusFinished(status)) {
+ Log.d(TAG, "Finished with status " + status);
+ if (status != PackageManager.MOVE_SUCCEEDED) {
+ Toast.makeText(StorageWizardMoveProgress.this, moveStatusToMessage(status),
+ Toast.LENGTH_LONG).show();
+ }
+ finishAffinity();
+
+ } else {
+ setCurrentProgress(status);
+ }
+ }
+ };
+
private CharSequence moveStatusToMessage(int returnCode) {
switch (returnCode) {
case PackageManager.MOVE_FAILED_INSUFFICIENT_STORAGE:
@@ -86,53 +99,4 @@
return getString(R.string.insufficient_storage);
}
}
-
- private class LocalPackageMoveObserver extends IPackageMoveObserver.Stub {
- public int returnCode;
- public CountDownLatch finished = new CountDownLatch(1);
-
- @Override
- public void packageMoved(String packageName, int returnCode) throws RemoteException {
- this.returnCode = returnCode;
- this.finished.countDown();
- }
- }
-
- public class MoveTask extends AsyncTask<Void, Void, Integer> {
- @Override
- protected Integer doInBackground(Void... params) {
- try {
- final LocalPackageMoveObserver observer = new LocalPackageMoveObserver();
-
- if (mApp.isExternalAsec()) {
- getPackageManager().movePackage(mPackageName, observer,
- PackageManager.MOVE_INTERNAL);
- } else if (mVolume.getType() == VolumeInfo.TYPE_PUBLIC) {
- getPackageManager().movePackage(mPackageName, observer,
- PackageManager.MOVE_EXTERNAL_MEDIA);
- } else {
- getPackageManager().movePackageAndData(mPackageName, mVolume.fsUuid, observer);
- }
-
- observer.finished.await();
- return observer.returnCode;
- } catch (Exception e) {
- Log.e(TAG, "Failed to move", e);
- return PackageManager.MOVE_FAILED_INTERNAL_ERROR;
- }
- }
-
- @Override
- protected void onPostExecute(Integer returnCode) {
- final Context context = StorageWizardMoveProgress.this;
- if (returnCode == PackageManager.MOVE_SUCCEEDED) {
- finishAffinity();
-
- } else {
- Log.w(TAG, "Move failed with status " + returnCode);
- Toast.makeText(context, moveStatusToMessage(returnCode), Toast.LENGTH_LONG).show();
- finishAffinity();
- }
- }
- }
}
diff --git a/src/com/android/settings/notification/ZenModeAutomationSettings.java b/src/com/android/settings/notification/ZenModeAutomationSettings.java
index 6636b33..dab0a0d 100644
--- a/src/com/android/settings/notification/ZenModeAutomationSettings.java
+++ b/src/com/android/settings/notification/ZenModeAutomationSettings.java
@@ -48,10 +48,11 @@
import java.util.TreeSet;
public class ZenModeAutomationSettings extends ZenModeSettingsBase {
- private static final SimpleDateFormat DAY_FORMAT = new SimpleDateFormat("EEE");
static final Config CONFIG = getConditionProviderConfig();
+ // per-instance to ensure we're always using the current locale
+ private final SimpleDateFormat mDayFormat = new SimpleDateFormat("EEE");
private final Calendar mCalendar = Calendar.getInstance();
private ServiceListing mServiceListing;
@@ -218,7 +219,7 @@
private String dayString(int day) {
mCalendar.set(Calendar.DAY_OF_WEEK, day);
- return DAY_FORMAT.format(mCalendar.getTime());
+ return mDayFormat.format(mCalendar.getTime());
}
private static Config getConditionProviderConfig() {
diff --git a/src/com/android/settings/notification/ZenModeScheduleDaysSelection.java b/src/com/android/settings/notification/ZenModeScheduleDaysSelection.java
index 6d11ffb..3e88046 100644
--- a/src/com/android/settings/notification/ZenModeScheduleDaysSelection.java
+++ b/src/com/android/settings/notification/ZenModeScheduleDaysSelection.java
@@ -41,8 +41,9 @@
Calendar.FRIDAY,
Calendar.SATURDAY,
};
- private static final SimpleDateFormat DAY_FORMAT = new SimpleDateFormat("EEEE");
+ // per-instance to ensure we're always using the current locale
+ private final SimpleDateFormat mDayFormat = new SimpleDateFormat("EEEE");
private final SparseBooleanArray mDays = new SparseBooleanArray();
private final LinearLayout mLayout;
@@ -66,7 +67,7 @@
final CheckBox checkBox = (CheckBox) inflater.inflate(R.layout.zen_schedule_rule_day,
this, false);
c.set(Calendar.DAY_OF_WEEK, day);
- checkBox.setText(DAY_FORMAT.format(c.getTime()));
+ checkBox.setText(mDayFormat.format(c.getTime()));
checkBox.setChecked(mDays.get(day));
checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
diff --git a/src/com/android/settings/notification/ZenModeScheduleRuleSettings.java b/src/com/android/settings/notification/ZenModeScheduleRuleSettings.java
index f7015d3..fef3175 100644
--- a/src/com/android/settings/notification/ZenModeScheduleRuleSettings.java
+++ b/src/com/android/settings/notification/ZenModeScheduleRuleSettings.java
@@ -50,10 +50,11 @@
private static final String KEY_START_TIME = "start_time";
private static final String KEY_END_TIME = "end_time";
- private static final SimpleDateFormat DAY_FORMAT = new SimpleDateFormat("EEE");
-
public static final String ACTION = Settings.ACTION_ZEN_MODE_SCHEDULE_RULE_SETTINGS;
+ // per-instance to ensure we're always using the current locale
+ private final SimpleDateFormat mDayFormat = new SimpleDateFormat("EEE");
+
private Preference mDays;
private TimePickerPreference mStart;
private TimePickerPreference mEnd;
@@ -147,7 +148,7 @@
if (sb.length() > 0) {
sb.append(mContext.getString(R.string.summary_divider_text));
}
- sb.append(DAY_FORMAT.format(c.getTime()));
+ sb.append(mDayFormat.format(c.getTime()));
break;
}
}
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 6d0cc5a..f3b60fc 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -461,16 +461,7 @@
null, 0);
} else if (info.id == UserHandle.myUserId()) {
// Jump to owner info panel
- Bundle extras = new Bundle();
- if (!info.isRestricted()) {
- extras.putBoolean(OwnerInfoSettings.EXTRA_SHOW_NICKNAME, true);
- }
- int titleResId = info.id == UserHandle.USER_OWNER ? R.string.owner_info_settings_title
- : (info.isRestricted() ? R.string.profile_info_settings_title
- : R.string.user_info_settings_title);
- ((SettingsActivity) getActivity()).startPreferencePanel(
- OwnerInfoSettings.class.getName(),
- extras, titleResId, null, null, 0);
+ OwnerInfoSettings.show(this);
} else if (mIsOwner) {
Bundle extras = new Bundle();
extras.putInt(UserDetailsSettings.EXTRA_USER_ID, userId);
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index c947456..4122f60 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -508,29 +508,31 @@
}
private void showDialog(AccessPoint accessPoint, boolean edit) {
- WifiConfiguration config = accessPoint.getConfig();
- if (isCreatorDeviceOwner(getActivity(), config) && accessPoint.isActive()) {
- final int userId = UserHandle.getUserId(config.creatorUid);
- final PackageManager pm = getActivity().getPackageManager();
- final IPackageManager ipm = AppGlobals.getPackageManager();
- String appName = pm.getNameForUid(config.creatorUid);
- try {
- final ApplicationInfo appInfo = ipm.getApplicationInfo(appName, /* flags */ 0,
- userId);
- final CharSequence label = pm.getApplicationLabel(appInfo);
- if (label != null) {
- appName = label.toString();
+ if (accessPoint != null) {
+ WifiConfiguration config = accessPoint.getConfig();
+ if (isCreatorDeviceOwner(getActivity(), config) && accessPoint.isActive()) {
+ final int userId = UserHandle.getUserId(config.creatorUid);
+ final PackageManager pm = getActivity().getPackageManager();
+ final IPackageManager ipm = AppGlobals.getPackageManager();
+ String appName = pm.getNameForUid(config.creatorUid);
+ try {
+ final ApplicationInfo appInfo = ipm.getApplicationInfo(appName, /* flags */ 0,
+ userId);
+ final CharSequence label = pm.getApplicationLabel(appInfo);
+ if (label != null) {
+ appName = label.toString();
+ }
+ } catch (RemoteException e) {
+ // leave appName as packageName
}
- } catch (RemoteException e) {
- // leave appName as packageName
+ final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setTitle(accessPoint.getSsid())
+ .setMessage(getString(R.string.wifi_alert_lockdown_by_device_owner,
+ appName))
+ .setPositiveButton(android.R.string.ok, null)
+ .show();
+ return;
}
- final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
- builder.setTitle(accessPoint.getSsid())
- .setMessage(getString(R.string.wifi_alert_lockdown_by_device_owner,
- appName))
- .setPositiveButton(android.R.string.ok, null)
- .show();
- return;
}
if (mDialog != null) {
@@ -561,10 +563,11 @@
}
// If it's null, fine, it's for Add Network
mSelectedAccessPoint = ap;
+ final boolean hideForget = (ap == null || isCreatorDeviceOwner(getActivity(),
+ ap.getConfig()));
mDialog = new WifiDialog(getActivity(), this, ap, mDlgEdit,
/* no hide submit/connect */ false,
- /* hide forget if config locked down */ isCreatorDeviceOwner(getActivity(),
- ap.getConfig()));
+ /* hide forget if config locked down */ hideForget);
return mDialog;
case WPS_PBC_DIALOG_ID:
return new WpsDialog(getActivity(), WpsInfo.PBC);