Merge "Import translations. DO NOT MERGE"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index c987ec0..6082182 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -3364,6 +3364,57 @@
android:value="true" />
</activity-alias>
+ <activity android:name=".Settings$UserAndAccountDashboardActivity"
+ android:label="@string/account_dashboard_title"
+ android:icon="@drawable/ic_settings_accounts">
+ <intent-filter android:priority="2">
+ <action android:name="com.android.settings.action.SETTINGS"/>
+ </intent-filter>
+ <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+ android:value="com.android.settings.accounts.UserAndAccountDashboardFragment"/>
+ <meta-data android:name="com.android.settings.category"
+ android:value="com.android.settings.category.ia.homepage"/>
+ </activity>
+
+ <activity-alias android:name="UserDashboardAlias"
+ android:targetActivity="Settings$UserSettingsActivity">
+ <intent-filter android:priority="8">
+ <action android:name="com.android.settings.action.SETTINGS"/>
+ </intent-filter>
+ <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+ android:value="com.android.settings.users.UserSettings" />
+ <meta-data android:name="com.android.settings.category"
+ android:value="com.android.settings.category.ia.accounts" />
+ </activity-alias>
+
+ <activity-alias android:name="AppDefaultDashboardAlias"
+ android:targetActivity="Settings$AdvancedAppsActivity"
+ android:label="@string/app_default_dashboard_title"
+ android:icon="@drawable/ic_settings_applications">
+ <intent-filter android:priority="130">
+ <action android:name="com.android.settings.action.SETTINGS"/>
+ </intent-filter>
+ <meta-data android:name="com.android.settings.category"
+ android:value="com.android.settings.category.ia.apps"/>
+ <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+ android:value="com.android.settings.applications.AdvancedAppSettings" />
+ <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
+ android:value="true" />
+ </activity-alias>
+
+ <activity-alias android:name="PaymentSettingsDashboardAlias"
+ android:targetActivity="Settings$PaymentSettingsActivity">
+ <intent-filter android:priority="10">
+ <action android:name="com.android.settings.action.SETTINGS"/>
+ </intent-filter>
+ <meta-data android:name="com.android.settings.category"
+ android:value="com.android.settings.category.ia.apps.default"/>
+ <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+ android:value="com.android.settings.nfc.PaymentSettings"/>
+ <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
+ android:value="true"/>
+ </activity-alias>
+
<!-- End of information architecture host activities -->
<service
diff --git a/res/color/white_disabled.xml b/res/color/white_disabled.xml
new file mode 100644
index 0000000..17008a8
--- /dev/null
+++ b/res/color/white_disabled.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 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:color="@android:color/white"
+ android:alpha="?android:attr/disabledAlpha" />
+</selector>
diff --git a/res/drawable/enrollment_fingerprint_isolated.xml b/res/drawable/enrollment_fingerprint_isolated.xml
index fc31ff8..de3965e 100644
--- a/res/drawable/enrollment_fingerprint_isolated.xml
+++ b/res/drawable/enrollment_fingerprint_isolated.xml
@@ -17,14 +17,14 @@
<vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:name="enrollment_fingerprint_isolated"
- android:width="75dp"
- android:viewportWidth="75"
+ android:width="88dp"
android:height="88dp"
- android:viewportHeight="88" >
+ android:viewportWidth="176"
+ android:viewportHeight="176" >
<group
android:name="fingerprint_ridges_2"
- android:translateX="37.5835"
- android:translateY="43.66685" >
+ android:translateX="88"
+ android:translateY="87.66685" >
<group
android:name="ridge_5" >
<path
diff --git a/res/drawable/fingerprint_progress_ring.xml b/res/drawable/fingerprint_progress_ring.xml
deleted file mode 100644
index 44a69e9..0000000
--- a/res/drawable/fingerprint_progress_ring.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:id="@android:id/background">
- <shape
- android:innerRadius="?attr/fingerprint_ring_radius"
- android:shape="ring"
- android:thickness="@dimen/fingerprint_ring_thickness"
- android:useLevel="false">
- <solid android:color="@color/fingerprint_progress_ring_bg" />
- </shape>
- </item>
- <item android:id="@android:id/progress">
- <shape
- android:innerRadius="?attr/fingerprint_ring_radius"
- android:shape="ring"
- android:thickness="@dimen/fingerprint_ring_thickness">
- <gradient
- android:startColor="@color/fingerprint_progress_ring"
- android:endColor="@color/fingerprint_progress_ring"
- android:angle="0"
- />
- </shape>
- </item>
-</layer-list>
diff --git a/res/drawable/fp_illustration.xml b/res/drawable/fp_illustration.xml
new file mode 100644
index 0000000..17ab4d2
--- /dev/null
+++ b/res/drawable/fp_illustration.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2016 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
+ -->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <item
+ android:id="@+id/fingerprint_background"
+ android:drawable="@drawable/fp_illustration_enrollment" />
+
+ <item
+ android:id="@+id/fingerprint_animation"
+ android:drawable="@drawable/enrollment_fingerprint_isolated_animation" />
+
+</layer-list>
diff --git a/res/drawable/fp_illustration_enrollment.xml b/res/drawable/fp_illustration_enrollment.xml
index f9b7ed4..630c6bd 100644
--- a/res/drawable/fp_illustration_enrollment.xml
+++ b/res/drawable/fp_illustration_enrollment.xml
@@ -16,21 +16,25 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="88.0dp"
android:height="88.0dp"
- android:viewportWidth="88.0"
- android:viewportHeight="88.0">
- <path
- android:fillColor="#FF000000"
- android:pathData="M67.74,11.59c-0.41,0.0 -0.82,-0.1 -1.2,-0.31c-7.44,-4.06 -15.0,-6.04 -23.11,-6.04c-7.92,0.0 -14.67,1.85 -21.88,6.01c-1.2,0.69 -2.73,0.28 -3.42,-0.92s-0.28,-2.72 0.92,-3.41c7.9,-4.55 15.65,-6.68 24.37,-6.68c8.97,0.0 17.32,2.17 25.51,6.65c1.21,0.66 1.66,2.18 1.0,3.39C69.48,11.12 68.62,11.59 67.74,11.59z"/>
- <path
- android:fillColor="#FF000000"
- android:pathData="M9.25,34.74c-0.48,0.0 -0.96,-0.14 -1.39,-0.42c-1.15,-0.77 -1.45,-2.32 -0.68,-3.47c4.09,-6.09 9.3,-10.89 15.49,-14.27c6.52,-3.55 13.91,-5.43 21.38,-5.43c7.44,0.0 14.8,1.86 21.3,5.39c6.17,3.35 11.38,8.12 15.47,14.16c0.77,1.14 0.47,2.7 -0.67,3.47c-1.14,0.77 -2.7,0.47 -3.47,-0.67c-3.64,-5.38 -8.25,-9.61 -13.71,-12.57c-5.77,-3.13 -12.31,-4.78 -18.92,-4.78c-6.63,0.0 -13.2,1.67 -18.98,4.82c-5.48,2.99 -10.1,7.25 -13.73,12.66C10.85,34.35 10.06,34.74 9.25,34.74z"/>
- <path
- android:fillColor="#FF000000"
- android:pathData="M34.76,86.82c-0.67,0.0 -1.33,-0.27 -1.82,-0.79c-3.49,-3.72 -5.51,-6.25 -8.26,-11.45c-2.84,-5.35 -4.34,-11.88 -4.34,-18.86c0.0,-13.02 10.59,-23.61 23.61,-23.61c13.02,0.0 23.61,10.59 23.61,23.61c0.0,1.38 -1.12,2.5 -2.5,2.5s-2.5,-1.12 -2.5,-2.5c0.0,-10.26 -8.35,-18.61 -18.61,-18.61c-10.26,0.0 -18.61,8.35 -18.61,18.61c0.0,6.17 1.3,11.89 3.76,16.52c2.62,4.94 4.37,7.04 7.49,10.37c0.94,1.01 0.89,2.59 -0.11,3.53C35.99,86.6 35.38,86.82 34.76,86.82z"/>
- <path
- android:fillColor="#FF000000"
- android:pathData="M64.28,78.84c-4.99,0.0 -9.35,-1.32 -12.98,-3.92c-6.17,-4.43 -9.86,-11.6 -9.86,-19.19c0.0,-1.38 1.12,-2.5 2.5,-2.5s2.5,1.12 2.5,2.5c0.0,5.98 2.91,11.64 7.77,15.13c2.8,2.01 6.09,2.98 10.06,2.98c0.97,0.0 2.57,-0.11 4.17,-0.4c1.36,-0.25 2.66,0.64 2.92,2.0c0.25,1.36 -0.64,2.66 -2.0,2.92C66.93,78.8 64.86,78.84 64.28,78.84z"/>
- <path
- android:fillColor="#FF000000"
- android:pathData="M55.92,87.75c-0.23,0.0 -0.46,-0.03 -0.7,-0.1c-6.6,-1.91 -10.92,-4.49 -15.4,-9.2c-5.76,-6.06 -8.94,-14.13 -8.94,-22.72c0.0,-7.2 5.86,-13.05 13.05,-13.05c7.2,0.0 13.05,5.86 13.05,13.05c0.0,4.44 3.61,8.05 8.05,8.05s8.05,-3.61 8.05,-8.05c0.0,-16.08 -13.08,-29.16 -29.16,-29.16c-11.43,0.0 -21.86,6.73 -26.58,17.15c-1.57,3.48 -2.37,7.52 -2.37,12.01c0.0,3.36 0.28,8.62 2.71,15.49c0.46,1.3 -0.22,2.73 -1.52,3.19c-1.3,0.46 -2.73,-0.22 -3.19,-1.52c-2.02,-5.7 -3.0,-11.31 -3.0,-17.16c0.0,-5.21 0.95,-9.94 2.82,-14.07c5.52,-12.2 17.74,-20.09 31.13,-20.09c18.83,0.0 34.16,15.32 34.16,34.16c0.0,7.2 -5.86,13.05 -13.05,13.05S52.0,62.92 52.0,55.73c0.0,-4.44 -3.61,-8.05 -8.05,-8.05s-8.05,3.61 -8.05,8.05c0.0,7.3 2.69,14.15 7.56,19.28c3.86,4.06 7.43,6.18 13.17,7.84c1.33,0.38 2.09,1.77 1.71,3.1C58.01,87.04 57.01,87.75 55.92,87.75z"/>
+ android:viewportWidth="176.0"
+ android:viewportHeight="176.0">
+ <group
+ android:translateX="44"
+ android:translateY="44">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M67.74,11.59c-0.41,0.0 -0.82,-0.1 -1.2,-0.31c-7.44,-4.06 -15.0,-6.04 -23.11,-6.04c-7.92,0.0 -14.67,1.85 -21.88,6.01c-1.2,0.69 -2.73,0.28 -3.42,-0.92s-0.28,-2.72 0.92,-3.41c7.9,-4.55 15.65,-6.68 24.37,-6.68c8.97,0.0 17.32,2.17 25.51,6.65c1.21,0.66 1.66,2.18 1.0,3.39C69.48,11.12 68.62,11.59 67.74,11.59z"/>
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M9.25,34.74c-0.48,0.0 -0.96,-0.14 -1.39,-0.42c-1.15,-0.77 -1.45,-2.32 -0.68,-3.47c4.09,-6.09 9.3,-10.89 15.49,-14.27c6.52,-3.55 13.91,-5.43 21.38,-5.43c7.44,0.0 14.8,1.86 21.3,5.39c6.17,3.35 11.38,8.12 15.47,14.16c0.77,1.14 0.47,2.7 -0.67,3.47c-1.14,0.77 -2.7,0.47 -3.47,-0.67c-3.64,-5.38 -8.25,-9.61 -13.71,-12.57c-5.77,-3.13 -12.31,-4.78 -18.92,-4.78c-6.63,0.0 -13.2,1.67 -18.98,4.82c-5.48,2.99 -10.1,7.25 -13.73,12.66C10.85,34.35 10.06,34.74 9.25,34.74z"/>
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M34.76,86.82c-0.67,0.0 -1.33,-0.27 -1.82,-0.79c-3.49,-3.72 -5.51,-6.25 -8.26,-11.45c-2.84,-5.35 -4.34,-11.88 -4.34,-18.86c0.0,-13.02 10.59,-23.61 23.61,-23.61c13.02,0.0 23.61,10.59 23.61,23.61c0.0,1.38 -1.12,2.5 -2.5,2.5s-2.5,-1.12 -2.5,-2.5c0.0,-10.26 -8.35,-18.61 -18.61,-18.61c-10.26,0.0 -18.61,8.35 -18.61,18.61c0.0,6.17 1.3,11.89 3.76,16.52c2.62,4.94 4.37,7.04 7.49,10.37c0.94,1.01 0.89,2.59 -0.11,3.53C35.99,86.6 35.38,86.82 34.76,86.82z"/>
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M64.28,78.84c-4.99,0.0 -9.35,-1.32 -12.98,-3.92c-6.17,-4.43 -9.86,-11.6 -9.86,-19.19c0.0,-1.38 1.12,-2.5 2.5,-2.5s2.5,1.12 2.5,2.5c0.0,5.98 2.91,11.64 7.77,15.13c2.8,2.01 6.09,2.98 10.06,2.98c0.97,0.0 2.57,-0.11 4.17,-0.4c1.36,-0.25 2.66,0.64 2.92,2.0c0.25,1.36 -0.64,2.66 -2.0,2.92C66.93,78.8 64.86,78.84 64.28,78.84z"/>
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M55.92,87.75c-0.23,0.0 -0.46,-0.03 -0.7,-0.1c-6.6,-1.91 -10.92,-4.49 -15.4,-9.2c-5.76,-6.06 -8.94,-14.13 -8.94,-22.72c0.0,-7.2 5.86,-13.05 13.05,-13.05c7.2,0.0 13.05,5.86 13.05,13.05c0.0,4.44 3.61,8.05 8.05,8.05s8.05,-3.61 8.05,-8.05c0.0,-16.08 -13.08,-29.16 -29.16,-29.16c-11.43,0.0 -21.86,6.73 -26.58,17.15c-1.57,3.48 -2.37,7.52 -2.37,12.01c0.0,3.36 0.28,8.62 2.71,15.49c0.46,1.3 -0.22,2.73 -1.52,3.19c-1.3,0.46 -2.73,-0.22 -3.19,-1.52c-2.02,-5.7 -3.0,-11.31 -3.0,-17.16c0.0,-5.21 0.95,-9.94 2.82,-14.07c5.52,-12.2 17.74,-20.09 31.13,-20.09c18.83,0.0 34.16,15.32 34.16,34.16c0.0,7.2 -5.86,13.05 -13.05,13.05S52.0,62.92 52.0,55.73c0.0,-4.44 -3.61,-8.05 -8.05,-8.05s-8.05,3.61 -8.05,8.05c0.0,7.3 2.69,14.15 7.56,19.28c3.86,4.06 7.43,6.18 13.17,7.84c1.33,0.38 2.09,1.77 1.71,3.1C58.01,87.04 57.01,87.75 55.92,87.75z"/>
+ </group>
</vector>
diff --git a/res/drawable/ring_progress.xml b/res/drawable/ring_progress.xml
new file mode 100644
index 0000000..02fcd5b
--- /dev/null
+++ b/res/drawable/ring_progress.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:id="@android:id/background">
+ <shape
+ android:innerRadiusRatio="2.2"
+ android:shape="ring"
+ android:thickness="@dimen/ring_progress_bar_thickness"
+ android:useLevel="false"
+ android:tint="?android:colorControlNormal">
+ <solid android:color="@color/white_disabled" />
+ </shape>
+ </item>
+ <item android:id="@android:id/progress">
+ <rotate
+ android:fromDegrees="270"
+ android:pivotX="50%"
+ android:pivotY="50%"
+ android:toDegrees="270">
+ <shape
+ android:innerRadiusRatio="2.2"
+ android:shape="ring"
+ android:thickness="@dimen/ring_progress_bar_thickness"
+ android:tint="?android:attr/colorControlActivated">
+ <solid android:color="@android:color/white" />
+ </shape>
+ </rotate>
+ </item>
+</layer-list>
diff --git a/res/layout-land/fingerprint_enroll_enrolling.xml b/res/layout-land/fingerprint_enroll_enrolling.xml
index ba0f803..27af681 100644
--- a/res/layout-land/fingerprint_enroll_enrolling.xml
+++ b/res/layout-land/fingerprint_enroll_enrolling.xml
@@ -49,7 +49,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
- android:src="@drawable/ic_lock" />
+ android:src="@drawable/ic_fingerprint_header" />
<TextView
android:id="@+id/suw_layout_title"
@@ -97,8 +97,8 @@
android:layout_height="match_parent">
<include layout="@layout/fingerprint_enroll_enrolling_content"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:layout_gravity="center"/>
<TextView
diff --git a/res/layout-land/fingerprint_enroll_find_sensor.xml b/res/layout-land/fingerprint_enroll_find_sensor.xml
index 0a3a33f..b64b27f 100644
--- a/res/layout-land/fingerprint_enroll_find_sensor.xml
+++ b/res/layout-land/fingerprint_enroll_find_sensor.xml
@@ -50,7 +50,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
- android:src="@drawable/ic_lock" />
+ android:src="@drawable/ic_fingerprint_header" />
<TextView
android:id="@+id/suw_layout_title"
diff --git a/res/layout/fingerprint_enroll_enrolling_base.xml b/res/layout/fingerprint_enroll_enrolling_base.xml
index e9e3385..33a5acf 100644
--- a/res/layout/fingerprint_enroll_enrolling_base.xml
+++ b/res/layout/fingerprint_enroll_enrolling_base.xml
@@ -55,8 +55,9 @@
</FrameLayout>
<include layout="@layout/fingerprint_enroll_enrolling_content"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_width="@dimen/fingerprint_progress_bar_max_size"
+ android:layout_height="0dp"
+ android:layout_weight="1"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/fingerprint_enrolling_content_margin_top"/>
diff --git a/res/layout/fingerprint_enroll_enrolling_content.xml b/res/layout/fingerprint_enroll_enrolling_content.xml
index 42769d1..1622f3f 100644
--- a/res/layout/fingerprint_enroll_enrolling_content.xml
+++ b/res/layout/fingerprint_enroll_enrolling_content.xml
@@ -15,32 +15,11 @@
~ limitations under the License
-->
-<RelativeLayout
+<com.android.settings.widget.RingProgressBar
xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/fingerprint_progress_bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal">
-
- <ImageView
- android:id="@+id/fingerprint_animator"
- android:layout_width="@dimen/fingerprint_animation_size"
- android:layout_height="@dimen/fingerprint_animation_size"
- android:layout_centerInParent="true"
- android:background="@drawable/fp_illustration_enrollment"
- android:backgroundTint="@color/fingerprint_indicator_background_resting"
- android:src="@drawable/enrollment_fingerprint_isolated_animation"/>
-
- <ProgressBar
- android:id="@+id/fingerprint_progress_bar"
- android:layout_width="?attr/fingerprint_progress_bar_size"
- android:layout_height="?attr/fingerprint_progress_bar_size"
- android:layout_centerInParent="true"
- style="?android:attr/progressBarStyleHorizontal"
- android:max="10000"
- android:mirrorForRtl="false"
- android:progress="0"
- android:indeterminate="false"
- android:progressDrawable="@drawable/fingerprint_progress_ring"
- android:rotation="-90"/>
-
-</RelativeLayout>
+ android:background="@drawable/fp_illustration"
+ android:minHeight="@dimen/fingerprint_progress_bar_min_size"
+ android:progress="0" />
diff --git a/res/values-sw400dp/dimens.xml b/res/values-sw400dp/dimens.xml
index da58a9c..7ae4061 100755
--- a/res/values-sw400dp/dimens.xml
+++ b/res/values-sw400dp/dimens.xml
@@ -16,16 +16,10 @@
-->
<resources>
- <dimen name="fingerprint_ring_radius">106dp</dimen>
- <dimen name="fingerprint_animation_size">100dp</dimen>
- <dimen name="fingerprint_progress_bar_size">220dp</dimen>
<dimen name="fingerprint_enrolling_content_margin_top">56dp</dimen>
<dimen name="fingerprint_in_app_indicator_size">176dp</dimen>
<dimen name="fingerprint_find_sensor_graphic_size">240dp</dimen>
- <dimen name="setup_fingerprint_ring_radius">92dp</dimen>
- <dimen name="setup_fingerprint_progress_bar_size">192dp</dimen>
-
<dimen name="support_escalation_card_padding_start">56dp</dimen>
<dimen name="support_escalation_card_padding_end">56dp</dimen>
</resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 9f3dd5b..3be4038 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -53,8 +53,6 @@
<color name="fingerprint_title_area_bg">?android:attr/colorAccent</color>
<color name="fingerprint_title_color">#ffffffff</color>
<color name="fingerprint_message_color">#de000000</color>
- <color name="fingerprint_progress_ring">?android:attr/colorAccent</color>
- <color name="fingerprint_progress_ring_bg">#20000000</color>
<color name="fingerprint_indicator_background_resting">#12000000</color>
<color name="running_processes_system_ram">#ff384248</color>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index b266f9c..40f3f71 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -67,6 +67,7 @@
<dimen name="captioning_preview_height">200dp</dimen>
+ <dimen name="ring_progress_bar_thickness">4dp</dimen>
<dimen name="settings_side_margin">0dip</dimen>
<!-- Weight of the left pane in a multi-pane preference layout. -->
@@ -221,8 +222,6 @@
<dimen name="redaction_vertical_margins">8dp</dimen>
<!-- Fingerprint -->
- <dimen name="fingerprint_ring_radius">92dip</dimen>
- <dimen name="fingerprint_ring_thickness">4dip</dimen>
<dimen name="fingerprint_dot_radius">8dp</dimen>
<dimen name="fingerprint_pulse_radius">50dp</dimen>
<item name="fingerprint_sensor_location_fraction_x" type="fraction">50%</item>
@@ -233,15 +232,13 @@
<dimen name="fingerprint_error_text_appear_distance">16dp</dimen>
<dimen name="fingerprint_error_text_disappear_distance">-8dp</dimen>
<dimen name="fingerprint_animation_size">88dp</dimen>
- <dimen name="fingerprint_progress_bar_size">192dp</dimen>
+ <dimen name="fingerprint_progress_bar_max_size">220dp</dimen>
+ <dimen name="fingerprint_progress_bar_min_size">120dp</dimen>
<dimen name="fingerprint_enrolling_content_margin_top">36dp</dimen>
<dimen name="fingerprint_in_app_indicator_size">124dp</dimen>
<dimen name="fingerprint_in_app_indicator_min_size">124dp</dimen>
<dimen name="fingerprint_in_app_indicator_max_size">264dp</dimen>
- <dimen name="setup_fingerprint_ring_radius">80dip</dimen>
- <dimen name="setup_fingerprint_progress_bar_size">168dp</dimen>
-
<dimen name="confirm_credentials_security_method_margin">48dp</dimen>
<dimen name="confirm_credentials_layout_width">@dimen/match_parent</dimen>
<dimen name="confirm_credentials_top_padding">0dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 8d6e5ff..208737c 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5931,6 +5931,11 @@
<string name="connected_devices_dashboard_title">Connected devices</string>
<!-- Title for setting tile leading to Apps & Notification settings [CHAR LIMIT=40]-->
<string name="app_and_notification_dashboard_title">Apps & notifications</string>
+ <!-- Title for setting tile leading to User and accounts settings [CHAR LIMIT=40]-->
+ <string name="account_dashboard_title">User & accounts</string>
+ <!-- Title for setting tile leading to App defaults (which allows user set default app to
+ handle actions such as open web page, making phone calls, default SMS apps [CHAR LIMIT=40]-->
+ <string name="app_default_dashboard_title">App defaults</string>
<!-- Summary text for system preference tile, showing current display language of device [CHAR LIMIT=NONE]-->
<string name="system_dashboard_summary">Language: <xliff:g id="language">%1$s</xliff:g></string>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index fc37bb0..0f957a8 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -445,4 +445,11 @@
<item name="android:lineSpacingMultiplier">1.2</item>
</style>
+ <style name="RingProgressBarStyle" parent="android:style/Widget.Material.ProgressBar.Horizontal">
+ <item name="android:indeterminate">false</item>
+ <item name="android:max">10000</item>
+ <item name="android:mirrorForRtl">false</item>
+ <item name="android:progressDrawable">@drawable/ring_progress</item>
+ </style>
+
</resources>
diff --git a/res/values/themes.xml b/res/values/themes.xml
index 35d05fb..a5ff54a 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -16,8 +16,6 @@
<resources>
<attr name="fingerprint_layout_theme" format="reference" />
- <attr name="fingerprint_progress_bar_size" format="reference|dimension" />
- <attr name="fingerprint_ring_radius" format="reference|dimension" />
<attr name="ic_menu_moreoverflow" format="reference" />
<attr name="ic_wps" format="reference" />
<attr name="setup_divider_color" format="reference" />
@@ -38,8 +36,6 @@
<item name="android:windowBackground">?android:attr/colorBackground</item>
<item name="*android:preferencePanelStyle">@*android:style/PreferencePanel.Dialog</item>
<item name="fingerprint_layout_theme">@style/FingerprintLayoutTheme</item>
- <item name="fingerprint_progress_bar_size">@dimen/setup_fingerprint_progress_bar_size</item>
- <item name="fingerprint_ring_radius">@dimen/setup_fingerprint_ring_radius</item>
<item name="ic_menu_moreoverflow">@*android:drawable/ic_menu_moreoverflow_material</item>
<item name="ic_wps">@drawable/ic_wps_dark</item>
<item name="setup_divider_color">@color/setup_divider_color_dark</item>
@@ -62,8 +58,6 @@
<item name="android:windowBackground">?android:attr/colorBackground</item>
<item name="*android:preferencePanelStyle">@*android:style/PreferencePanel.Dialog</item>
<item name="fingerprint_layout_theme">@style/FingerprintLayoutTheme</item>
- <item name="fingerprint_progress_bar_size">@dimen/setup_fingerprint_progress_bar_size</item>
- <item name="fingerprint_ring_radius">@dimen/setup_fingerprint_ring_radius</item>
<item name="ic_menu_moreoverflow">@*android:drawable/ic_menu_moreoverflow_material</item>
<item name="ic_wps">@drawable/ic_wps_light</item>
<item name="setup_divider_color">@color/setup_divider_color_light</item>
@@ -141,8 +135,6 @@
<item name="*android:preferenceFragmentPaddingSide">@dimen/settings_side_margin</item>
<item name="fingerprint_layout_theme">@style/FingerprintLayoutTheme</item>
- <item name="fingerprint_progress_bar_size">@dimen/fingerprint_progress_bar_size</item>
- <item name="fingerprint_ring_radius">@dimen/fingerprint_ring_radius</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</item>
diff --git a/res/xml/app_default_settings.xml b/res/xml/app_default_settings.xml
new file mode 100644
index 0000000..c6e56a1
--- /dev/null
+++ b/res/xml/app_default_settings.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
+
+ <Preference
+ android:key="assist_and_voice_input"
+ android:title="@string/assist_and_voice_input_title"
+ android:fragment="com.android.settings.applications.ManageAssist"
+ android:order="-20"/>
+
+ <com.android.settings.applications.DefaultBrowserPreference
+ android:key="default_browser"
+ android:title="@string/default_browser_title"
+ android:summary="@string/default_browser_title_none"
+ android:order="-19"/>
+
+ <com.android.settings.applications.DefaultHomePreference
+ android:key="default_home"
+ android:title="@string/home_app"
+ android:summary="@string/no_default_home"
+ settings:keywords="@string/keywords_home"
+ android:order="-18"/>
+
+ <com.android.settings.applications.DefaultPhonePreference
+ android:key="default_phone_app"
+ android:title="@string/default_phone_title"
+ settings:keywords="@string/keywords_default_phone_app"
+ android:order="-17"/>
+
+ <com.android.settings.applications.DefaultSmsPreference
+ android:key="default_sms_app"
+ android:title="@string/sms_application_title"
+ settings:keywords="@string/keywords_more_default_sms_app"
+ android:order="-16"/>
+
+ <com.android.settings.applications.DefaultEmergencyPreference
+ android:key="default_emergency_app"
+ android:title="@string/default_emergency_app"
+ settings:keywords="@string/keywords_emergency_app"
+ android:order="-15"/>
+
+ <Preference
+ android:key="domain_urls"
+ android:title="@string/domain_urls_title"
+ android:fragment="com.android.settings.applications.ManageDomainUrls">
+ </Preference>
+
+ <com.android.settings.WorkOnlyCategory
+ android:key="work_defaults"
+ android:title="@string/default_for_work">
+
+ <com.android.settings.applications.DefaultBrowserPreference
+ android:key="work_default_browser"
+ android:title="@string/default_browser_title"
+ android:summary="@string/default_browser_title_none"
+ settings:forWork="true"/>
+
+ <com.android.settings.applications.DefaultPhonePreference
+ android:key="work_default_phone_app"
+ android:title="@string/default_phone_title"
+ settings:keywords="@string/keywords_default_phone_app"
+ settings:forWork="true"/>
+
+ </com.android.settings.WorkOnlyCategory>
+
+ <Preference
+ android:key="special_access"
+ android:fragment="com.android.settings.applications.SpecialAccessSettings"
+ android:title="@string/special_access"/>
+
+</PreferenceScreen>
\ No newline at end of file
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index bfecbbf..451c7e3 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -168,6 +168,7 @@
public static class ConnectedDeviceDashboardActivity extends SettingsActivity {}
public static class AppAndNotificationDashboardActivity extends SettingsActivity {}
public static class StorageDashboardActivity extends SettingsActivity {}
+ public static class UserAndAccountDashboardActivity extends SettingsActivity {}
public static class SystemDashboardActivity extends SettingsActivity {}
public static class SupportDashboardActivity extends SettingsActivity {}
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 11f8105..432dec3 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -61,8 +61,9 @@
import com.android.settings.accounts.AccountSyncSettings;
import com.android.settings.accounts.ChooseAccountActivity;
import com.android.settings.accounts.ManagedProfileSettings;
-import com.android.settings.applications.AppAndNotificationDashboardFragment;
+import com.android.settings.accounts.UserAndAccountDashboardFragment;
import com.android.settings.applications.AdvancedAppSettings;
+import com.android.settings.applications.AppAndNotificationDashboardFragment;
import com.android.settings.applications.DrawOverlayDetails;
import com.android.settings.applications.InstalledAppDetails;
import com.android.settings.applications.ManageApplications;
@@ -279,10 +280,12 @@
"com.android.settings.Settings.DisplayDashboardAlias",
"com.android.settings.Settings.SoundDashboardAlias",
"com.android.settings.Settings.SecurityDashboardAlias",
+ Settings.UserAndAccountDashboardActivity.class.getName(),
Settings.SystemDashboardActivity.class.getName(),
Settings.SupportDashboardActivity.class.getName(),
// Home page > Apps & Notifications
"com.android.settings.Settings.ManageApplicationsDashboardAlias",
+ "com.android.settings.Settings.PaymentSettingsDashboardAlias",
// Home page > Network & Internet
"com.android.settings.Settings.WifiDashboardAlias",
"com.android.settings.Settings.DataUsageDashboardAlias",
@@ -396,6 +399,7 @@
NetworkDashboardFragment.class.getName(),
ConnectedDeviceDashboardFragment.class.getName(),
AppAndNotificationDashboardFragment.class.getName(),
+ UserAndAccountDashboardFragment.class.getName(),
};
diff --git a/src/com/android/settings/accounts/UserAndAccountDashboardFragment.java b/src/com/android/settings/accounts/UserAndAccountDashboardFragment.java
new file mode 100644
index 0000000..34d6dc4
--- /dev/null
+++ b/src/com/android/settings/accounts/UserAndAccountDashboardFragment.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2016 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.Context;
+
+import com.android.internal.logging.MetricsProto.MetricsEvent;
+import com.android.settings.R;
+import com.android.settings.core.PreferenceController;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settingslib.drawer.CategoryKey;
+
+import java.util.List;
+
+public class UserAndAccountDashboardFragment extends DashboardFragment {
+
+ private static final String TAG = "UserAndAccountDashboard";
+
+ @Override
+ public int getMetricsCategory() {
+ return MetricsEvent.ACCOUNT;
+ }
+
+ @Override
+ protected String getCategoryKey() {
+ return CategoryKey.CATEGORY_ACCOUNT;
+ }
+
+ @Override
+ protected String getLogTag() {
+ return TAG;
+ }
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.account_settings;
+ }
+
+ @Override
+ protected List<PreferenceController> getPreferenceControllers(Context context) {
+ return null;
+ }
+
+}
\ No newline at end of file
diff --git a/src/com/android/settings/applications/AdvancedAppSettings.java b/src/com/android/settings/applications/AdvancedAppSettings.java
index 59c1fbe..827b6e8 100644
--- a/src/com/android/settings/applications/AdvancedAppSettings.java
+++ b/src/com/android/settings/applications/AdvancedAppSettings.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2016 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.
@@ -24,8 +24,10 @@
import com.android.settings.Utils;
import com.android.settings.core.PreferenceController;
import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
+import com.android.settingslib.drawer.CategoryKey;
import java.util.Arrays;
import java.util.List;
@@ -41,7 +43,7 @@
@Override
protected String getCategoryKey() {
- return "";
+ return CategoryKey.CATEGORY_APPS_DEFAULT;
}
@Override
@@ -51,7 +53,9 @@
@Override
protected int getPreferenceScreenResId() {
- return R.xml.advanced_apps;
+ return mDashboardFeatureProvider.isEnabled()
+ ? R.xml.app_default_settings
+ : R.xml.advanced_apps;
}
@Override
@@ -69,8 +73,11 @@
@Override
public List<SearchIndexableResource> getXmlResourcesToIndex(
Context context, boolean enabled) {
- SearchIndexableResource sir = new SearchIndexableResource(context);
- sir.xmlResId = R.xml.advanced_apps;
+ final SearchIndexableResource sir = new SearchIndexableResource(context);
+ sir.xmlResId = FeatureFactory.getFactory(context)
+ .getDashboardFeatureProvider(context).isEnabled()
+ ? R.xml.app_default_settings
+ : R.xml.advanced_apps;
return Arrays.asList(sir);
}
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java
index f868c1b..2329d12 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -245,7 +245,8 @@
}
if (className.equals(AllApplicationsActivity.class.getName())) {
mShowSystem = true;
- } else if (className.equals(NotificationAppListActivity.class.getName())) {
+ } else if (className.equals(NotificationAppListActivity.class.getName())
+ || this instanceof NotificationApps) {
mListType = LIST_TYPE_NOTIFICATION;
mNotifBackend = new NotificationBackend();
} else if (className.equals(StorageUseActivity.class.getName())) {
diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java
index 37bc447..fd125af 100644
--- a/src/com/android/settings/dashboard/DashboardFragment.java
+++ b/src/com/android/settings/dashboard/DashboardFragment.java
@@ -344,11 +344,12 @@
pref.setIcon(tile.icon.loadDrawable(context));
}
final Bundle metadata = tile.metaData;
+ String clsName = null;
if (metadata != null) {
- String clsName = metadata.getString(SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS);
- if (!TextUtils.isEmpty(clsName)) {
- pref.setFragment(clsName);
- }
+ clsName = metadata.getString(SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS);
+ }
+ if (!TextUtils.isEmpty(clsName)) {
+ pref.setFragment(clsName);
} else if (tile.intent != null) {
final Intent intent = new Intent(tile.intent);
pref.setOnPreferenceClickListener(preference -> {
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java
index cd56458..fa108bb 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java
@@ -23,13 +23,12 @@
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
-import android.app.DialogFragment;
import android.content.DialogInterface;
import android.content.Intent;
-import android.content.res.ColorStateList;
import android.graphics.drawable.Animatable2;
import android.graphics.drawable.AnimatedVectorDrawable;
import android.graphics.drawable.Drawable;
+import android.graphics.drawable.LayerDrawable;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
import android.os.UserHandle;
@@ -37,7 +36,6 @@
import android.view.View;
import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator;
-import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
@@ -75,7 +73,6 @@
private static final int ICON_TOUCH_COUNT_SHOW_UNTIL_DIALOG_SHOWN = 3;
private ProgressBar mProgressBar;
- private ImageView mFingerprintAnimator;
private ObjectAnimator mProgressAnim;
private TextView mStartMessage;
private TextView mRepeatMessage;
@@ -87,6 +84,7 @@
private FingerprintEnrollSidecar mSidecar;
private boolean mAnimationCancelled;
private AnimatedVectorDrawable mIconAnimationDrawable;
+ private Drawable mIconBackgroundDrawable;
private int mIndicatorBackgroundRestingColor;
private int mIndicatorBackgroundActivatedColor;
private boolean mRestoring;
@@ -100,8 +98,11 @@
mRepeatMessage = (TextView) findViewById(R.id.repeat_message);
mErrorText = (TextView) findViewById(R.id.error_text);
mProgressBar = (ProgressBar) findViewById(R.id.fingerprint_progress_bar);
- mFingerprintAnimator = (ImageView) findViewById(R.id.fingerprint_animator);
- mIconAnimationDrawable = (AnimatedVectorDrawable) mFingerprintAnimator.getDrawable();
+ final LayerDrawable fingerprintDrawable = (LayerDrawable) mProgressBar.getBackground();
+ mIconAnimationDrawable = (AnimatedVectorDrawable)
+ fingerprintDrawable.findDrawableByLayerId(R.id.fingerprint_animation);
+ mIconBackgroundDrawable =
+ fingerprintDrawable.findDrawableByLayerId(R.id.fingerprint_background);
mIconAnimationDrawable.registerAnimationCallback(mIconAnimationCallback);
mFastOutSlowInInterpolator = AnimationUtils.loadInterpolator(
this, android.R.interpolator.fast_out_slow_in);
@@ -109,7 +110,7 @@
this, android.R.interpolator.linear_out_slow_in);
mFastOutLinearInInterpolator = AnimationUtils.loadInterpolator(
this, android.R.interpolator.fast_out_linear_in);
- mFingerprintAnimator.setOnTouchListener(new View.OnTouchListener() {
+ mProgressBar.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
@@ -117,12 +118,12 @@
if (mIconTouchCount == ICON_TOUCH_COUNT_SHOW_UNTIL_DIALOG_SHOWN) {
showIconTouchDialog();
} else {
- mFingerprintAnimator.postDelayed(mShowDialogRunnable,
+ mProgressBar.postDelayed(mShowDialogRunnable,
ICON_TOUCH_DURATION_UNTIL_DIALOG_SHOWN);
}
} else if (event.getActionMasked() == MotionEvent.ACTION_CANCEL
|| event.getActionMasked() == MotionEvent.ACTION_UP) {
- mFingerprintAnimator.removeCallbacks(mShowDialogRunnable);
+ mProgressBar.removeCallbacks(mShowDialogRunnable);
}
return true;
}
@@ -131,6 +132,7 @@
= getColor(R.color.fingerprint_indicator_background_resting);
mIndicatorBackgroundActivatedColor
= getColor(R.color.fingerprint_indicator_background_activated);
+ mIconBackgroundDrawable.setTint(mIndicatorBackgroundRestingColor);
mRestoring = savedInstanceState != null;
}
@@ -213,8 +215,7 @@
new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
- mFingerprintAnimator.setBackgroundTintList(ColorStateList.valueOf(
- (Integer) animation.getAnimatedValue()));
+ mIconBackgroundDrawable.setTint((Integer) animation.getAnimatedValue());
}
};
anim.addUpdateListener(listener);
@@ -400,7 +401,7 @@
}
// Start animation after it has ended.
- mFingerprintAnimator.post(new Runnable() {
+ mProgressBar.post(new Runnable() {
@Override
public void run() {
startIconAnimation();
diff --git a/src/com/android/settings/fuelgauge/BatteryEntry.java b/src/com/android/settings/fuelgauge/BatteryEntry.java
index b0e6969..aa71252 100644
--- a/src/com/android/settings/fuelgauge/BatteryEntry.java
+++ b/src/com/android/settings/fuelgauge/BatteryEntry.java
@@ -22,6 +22,7 @@
import android.content.pm.IPackageManager;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.UserInfo;
import android.graphics.drawable.Drawable;
import android.os.Handler;
@@ -45,6 +46,8 @@
public static final int MSG_UPDATE_NAME_ICON = 1;
public static final int MSG_REPORT_FULLY_DRAWN = 2;
+ private static final String TAG = "BatteryEntry";
+
static final HashMap<String,UidToDetail> sUidCache = new HashMap<String,UidToDetail>();
static final ArrayList<BatteryEntry> mRequestQueue = new ArrayList<BatteryEntry>();
@@ -160,7 +163,23 @@
iconId = R.drawable.ic_settings_display;
break;
case APP:
- name = sipper.packageWithHighestDrain;
+ PackageManager pm = context.getPackageManager();
+ sipper.mPackages = pm.getPackagesForUid(sipper.uidObj.getUid());
+ // Apps should only have one package
+ if (sipper.mPackages == null || sipper.mPackages.length != 1) {
+ name = sipper.packageWithHighestDrain;
+ } else {
+ defaultPackageName = pm.getPackagesForUid(sipper.uidObj.getUid())[0];
+ try {
+ ApplicationInfo appInfo =
+ pm.getApplicationInfo(defaultPackageName, 0 /* no flags */);
+ name = pm.getApplicationLabel(appInfo).toString();
+ } catch (NameNotFoundException e) {
+ Log.d(TAG, "PackageManager failed to retrieve ApplicationInfo for: "
+ + defaultPackageName);
+ name = defaultPackageName;
+ }
+ }
break;
case USER: {
UserInfo info = um.getUserInfo(sipper.userId);
@@ -246,7 +265,9 @@
PackageManager pm = context.getPackageManager();
final int uid = sipper.uidObj.getUid();
- sipper.mPackages = pm.getPackagesForUid(uid);
+ if (sipper.mPackages == null) {
+ sipper.mPackages = pm.getPackagesForUid(uid);
+ }
if (sipper.mPackages != null) {
String[] packageLabels = new String[sipper.mPackages.length];
System.arraycopy(sipper.mPackages, 0, packageLabels, 0, sipper.mPackages.length);
@@ -259,7 +280,7 @@
final ApplicationInfo ai = ipm.getApplicationInfo(packageLabels[i],
0 /* no flags */, userId);
if (ai == null) {
- Log.d(PowerUsageSummary.TAG, "Retrieving null app info for package "
+ Log.d(TAG, "Retrieving null app info for package "
+ packageLabels[i] + ", user " + userId);
continue;
}
@@ -273,7 +294,7 @@
break;
}
} catch (RemoteException e) {
- Log.d(PowerUsageSummary.TAG, "Error while retrieving app info for package "
+ Log.d(TAG, "Error while retrieving app info for package "
+ packageLabels[i] + ", user " + userId, e);
}
}
@@ -286,7 +307,7 @@
try {
final PackageInfo pi = ipm.getPackageInfo(pkgName, 0 /* no flags */, userId);
if (pi == null) {
- Log.d(PowerUsageSummary.TAG, "Retrieving null package info for package "
+ Log.d(TAG, "Retrieving null package info for package "
+ pkgName + ", user " + userId);
continue;
}
@@ -303,7 +324,7 @@
}
}
} catch (RemoteException e) {
- Log.d(PowerUsageSummary.TAG, "Error while retrieving package info for package "
+ Log.d(TAG, "Error while retrieving package info for package "
+ pkgName + ", user " + userId, e);
}
}
diff --git a/src/com/android/settings/gestures/GesturePreference.java b/src/com/android/settings/gestures/GesturePreference.java
index 1909dcd..5a64a5a 100644
--- a/src/com/android/settings/gestures/GesturePreference.java
+++ b/src/com/android/settings/gestures/GesturePreference.java
@@ -150,6 +150,10 @@
playButton.setVisibility(View.VISIBLE);
}
}
+ if (mMediaPlayer != null && !mMediaPlayer.isPlaying() &&
+ playButton.getVisibility() != View.VISIBLE) {
+ playButton.setVisibility(View.VISIBLE);
+ }
}
});
@@ -175,4 +179,10 @@
}
}
+ void onViewInvisible() {
+ if (mMediaPlayer != null && mMediaPlayer.isPlaying()) {
+ mMediaPlayer.pause();
+ }
+ }
+
}
diff --git a/src/com/android/settings/gestures/GestureSettings.java b/src/com/android/settings/gestures/GestureSettings.java
index a8f70d9..6fc7abe 100644
--- a/src/com/android/settings/gestures/GestureSettings.java
+++ b/src/com/android/settings/gestures/GestureSettings.java
@@ -145,6 +145,14 @@
}
@Override
+ public void onStop() {
+ super.onStop();
+ for (GesturePreference preference : mPreferences) {
+ preference.onViewInvisible();
+ }
+ }
+
+ @Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
boolean enabled = (boolean) newValue;
String key = preference.getKey();
diff --git a/src/com/android/settings/widget/RingProgressBar.java b/src/com/android/settings/widget/RingProgressBar.java
new file mode 100644
index 0000000..605e4e9
--- /dev/null
+++ b/src/com/android/settings/widget/RingProgressBar.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2016 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.util.AttributeSet;
+import android.widget.ProgressBar;
+
+import com.android.settings.R;
+
+/**
+ * A (determinate) progress bar in the form of a ring. The progress bar goes clockwise starting
+ * from the 12 o'clock position. This view maintain equal width and height using a strategy similar
+ * to "centerInside" for ImageView.
+ */
+public class RingProgressBar extends ProgressBar {
+
+ public RingProgressBar(Context context) {
+ this(context, null);
+ }
+
+ public RingProgressBar(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public RingProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {
+ this(context, attrs, defStyleAttr, R.style.RingProgressBarStyle);
+ }
+
+ public RingProgressBar(Context context, AttributeSet attrs, int defStyleAttr,
+ int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ }
+
+ @Override
+ protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ final int measuredHeight = getMeasuredHeight();
+ final int measuredWidth = getMeasuredWidth();
+ final int shortSide = Math.min(measuredHeight, measuredWidth);
+ setMeasuredDimension(shortSide, shortSide);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accounts/UserAndAccountDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/accounts/UserAndAccountDashboardFragmentTest.java
new file mode 100644
index 0000000..2d266b6
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accounts/UserAndAccountDashboardFragmentTest.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2016 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.Context;
+
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settingslib.drawer.CategoryKey;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+
+import static com.google.common.truth.Truth.assertThat;
+
+@RunWith(RobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class UserAndAccountDashboardFragmentTest {
+
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+ private Context mContext;
+
+ private UserAndAccountDashboardFragment mFragment;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ FakeFeatureFactory.setupForTest(mContext);
+ mFragment = new UserAndAccountDashboardFragment();
+ }
+
+ @Test
+ public void testCategory_isConnectedDevice() {
+ assertThat(mFragment.getCategoryKey()).isEqualTo(CategoryKey.CATEGORY_ACCOUNT);
+ }
+
+}
diff --git a/tests/robotests/src/com/android/settings/applications/AdvancedAppSettingsTest.java b/tests/robotests/src/com/android/settings/applications/AdvancedAppSettingsTest.java
new file mode 100644
index 0000000..d0c5889
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/applications/AdvancedAppSettingsTest.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2016 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.Context;
+
+import com.android.settings.R;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.FakeFeatureFactory;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowApplication;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.when;
+
+@RunWith(RobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class AdvancedAppSettingsTest {
+
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+ private Context mContext;
+
+ private FakeFeatureFactory mFeatureFactory;
+ private AdvancedAppSettings mFragment;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ FakeFeatureFactory.setupForTest(mContext);
+ mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
+ mFragment = new AdvancedAppSettings();
+ mFragment.onAttach(ShadowApplication.getInstance().getApplicationContext());
+ }
+
+ @Test
+ public void getPreferenceScreenResId_differentIAEnabledState_shouldUseDifferentPrefLayout() {
+ when(mFeatureFactory.dashboardFeatureProvider.isEnabled()).thenReturn(true);
+ assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(
+ R.xml.app_default_settings);
+
+ when(mFeatureFactory.dashboardFeatureProvider.isEnabled()).thenReturn(false);
+ assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(
+ R.xml.advanced_apps);
+ }
+
+}
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
index e4222ce..8fc290e 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
@@ -16,6 +16,7 @@
package com.android.settings.dashboard;
import android.content.Context;
+import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.Icon;
import android.os.Bundle;
@@ -142,6 +143,21 @@
assertThat(preference.getOrder()).isEqualTo(-tile.priority);
}
+ @Test
+ public void bindPreference_noFragmentMetadata_shouldBindIntent() {
+ final Preference preference = new Preference(
+ ShadowApplication.getInstance().getApplicationContext());
+ final Tile tile = new Tile();
+ tile.metaData = new Bundle();
+ tile.priority = 10;
+ tile.intent = new Intent();
+ mTestFragment.bindPreferenceToTile(mContext, preference, tile, "123");
+
+ assertThat(preference.getFragment()).isNull();
+ assertThat(preference.getIntent()).isNotNull();
+ assertThat(preference.getOrder()).isEqualTo(-tile.priority);
+ }
+
public static class TestPreferenceController extends PreferenceController {
public TestPreferenceController(Context context) {
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryEntryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryEntryTest.java
new file mode 100644
index 0000000..632d549
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryEntryTest.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2016 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.fuelgauge;
+
+
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.os.Handler;
+import android.os.UserManager;
+
+import com.android.internal.os.BatterySipper;
+import com.android.internal.os.BatterySipper.DrainType;
+import com.android.settings.TestConfig;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoRule;
+import org.mockito.junit.MockitoJUnit;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+@RunWith(RobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class BatteryEntryTest {
+
+ private static final int APP_UID = 123;
+ private static final String APP_DEFAULT_PACKAGE_NAME = "com.android.test";
+ private static final String APP_LABEL = "Test App Name";
+ private static final String HIGH_DRAIN_PACKAGE = "com.android.test.screen";
+
+ @Rule public MockitoRule mocks = MockitoJUnit.rule();
+
+ @Mock private Context mockContext;
+ @Mock private Handler mockHandler;
+ @Mock private PackageManager mockPackageManager;
+ @Mock private UserManager mockUserManager;
+
+ @Before
+ public void stubContextToReturnMockPackageManager() {
+ when(mockContext.getPackageManager()).thenReturn(mockPackageManager);
+ }
+
+ @Before
+ public void stubPackageManagerToReturnAppPackageAndName() throws NameNotFoundException {
+ when(mockPackageManager.getPackagesForUid(APP_UID)).thenReturn(
+ new String[]{APP_DEFAULT_PACKAGE_NAME});
+
+ ApplicationInfo appInfo = mock(ApplicationInfo.class);
+ when(mockPackageManager.getApplicationInfo(APP_DEFAULT_PACKAGE_NAME, 0 /* no flags */))
+ .thenReturn(appInfo);
+ when(mockPackageManager.getApplicationLabel(appInfo)).thenReturn(APP_LABEL);
+ }
+
+ private BatteryEntry createBatteryEntryForApp() {
+ return new BatteryEntry(mockContext, mockHandler, mockUserManager, createSipperForApp());
+ }
+
+ private BatterySipper createSipperForApp() {
+ BatterySipper sipper =
+ new BatterySipper(DrainType.APP, new FakeUid(APP_UID), 0 /* power use */);
+ sipper.packageWithHighestDrain = HIGH_DRAIN_PACKAGE;
+ return sipper;
+ }
+
+ @Test
+ public void batteryEntryForApp_shouldSetDefaultPackageNameAndLabel() throws Exception {
+ BatteryEntry entry = createBatteryEntryForApp();
+
+ assertThat(entry.defaultPackageName).isEqualTo(APP_DEFAULT_PACKAGE_NAME);
+ assertThat(entry.getLabel()).isEqualTo(APP_LABEL);
+ }
+
+ @Test
+ public void batteryEntryForApp_shouldSetLabelAsPackageName_whenPackageCannotBeFound()
+ throws Exception {
+ when(mockPackageManager.getApplicationInfo(APP_DEFAULT_PACKAGE_NAME, 0 /* no flags */))
+ .thenThrow(new NameNotFoundException());
+
+ BatteryEntry entry = createBatteryEntryForApp();
+
+ assertThat(entry.getLabel()).isEqualTo(APP_DEFAULT_PACKAGE_NAME);
+ }
+
+ @Test
+ public void batteryEntryForApp_shouldSetHighestDrainPackage_whenPackagesCannotBeFoundForUid() {
+ when(mockPackageManager.getPackagesForUid(APP_UID)).thenReturn(null);
+
+ BatteryEntry entry = createBatteryEntryForApp();
+
+ assertThat(entry.getLabel()).isEqualTo(HIGH_DRAIN_PACKAGE);
+ }
+
+ @Test
+ public void batteryEntryForApp_shouldSetHighestDrainPackage_whenMultiplePackagesFoundForUid() {
+ when(mockPackageManager.getPackagesForUid(APP_UID)).thenReturn(
+ new String[]{APP_DEFAULT_PACKAGE_NAME, "package2", "package3"});
+
+ BatteryEntry entry = createBatteryEntryForApp();
+
+ assertThat(entry.getLabel()).isEqualTo(HIGH_DRAIN_PACKAGE);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/widget/RingProgressBarTest.java b/tests/robotests/src/com/android/settings/widget/RingProgressBarTest.java
new file mode 100644
index 0000000..b7a5fd9
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/widget/RingProgressBarTest.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2016 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 static junit.framework.Assert.assertEquals;
+
+import android.content.Context;
+import android.view.View.MeasureSpec;
+
+import com.android.settings.TestConfig;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(RobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class RingProgressBarTest {
+
+ private Context mContext = RuntimeEnvironment.application;
+
+ private RingProgressBar mProgressBar;
+
+ @Before
+ public void setUp() {
+ mProgressBar = new RingProgressBar(mContext);
+ }
+
+ @Test
+ public void testMeasurePortrait() {
+ mProgressBar.measure(
+ MeasureSpec.makeMeasureSpec(100, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(200, MeasureSpec.EXACTLY));
+ assertEquals(100, mProgressBar.getMeasuredHeight());
+ assertEquals(100, mProgressBar.getMeasuredWidth());
+ }
+
+ @Test
+ public void testMeasureLandscape() {
+ mProgressBar.measure(
+ MeasureSpec.makeMeasureSpec(200, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(100, MeasureSpec.EXACTLY));
+ assertEquals(100, mProgressBar.getMeasuredHeight());
+ assertEquals(100, mProgressBar.getMeasuredWidth());
+ }
+
+ @Test
+ public void testDefaultAttributes() {
+ assertEquals(false, mProgressBar.isIndeterminate());
+ assertEquals(0, mProgressBar.getProgress());
+ assertEquals(10000, mProgressBar.getMax());
+ }
+}