Merge "Import translations. DO NOT MERGE" into oc-dr1-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 0c4e25b..10ec779 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2422,7 +2422,7 @@
                 <category android:name="com.android.settings.SHORTCUT" />
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                android:value="com.android.settings.DreamSettings" />
+                android:value="com.android.settings.dream.DreamSettings" />
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index ec21ff8..100d295 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -7166,6 +7166,9 @@
     <!-- [CHAR LIMIT=50] Zen mode settings: Alarms option -->
     <string name="zen_mode_alarms">Alarms</string>
 
+    <!-- [CHAR LIMIT=50] Zen mode settings: Alarms option summary -->
+    <string name="zen_mode_alarms_summary">Alarms are always a priority and make sound</string>
+
     <!-- [CHAR LIMIT=50] Zen mode settings: Reminders option -->
     <string name="zen_mode_reminders">Reminders</string>
 
diff --git a/res/xml/zen_mode_priority_settings.xml b/res/xml/zen_mode_priority_settings.xml
index e2b8f48..e4f8f5e 100644
--- a/res/xml/zen_mode_priority_settings.xml
+++ b/res/xml/zen_mode_priority_settings.xml
@@ -19,13 +19,6 @@
     android:key="zen_mode_priority_settings"
     android:title="@string/zen_mode_priority_settings_title" >
 
-    <!-- Alarms -->
-    <SwitchPreference
-        android:key="alarms"
-        android:title="@string/zen_mode_alarms"
-        android:enabled="false"
-        android:defaultValue="true"/>
-
     <!-- Reminders -->
     <SwitchPreference
         android:key="reminders"
@@ -36,6 +29,14 @@
         android:key="events"
         android:title="@string/zen_mode_events"/>
 
+    <!-- Alarms -->
+    <SwitchPreference
+        android:key="alarms"
+        android:title="@string/zen_mode_alarms"
+        android:summary="@string/zen_mode_alarms_summary"
+        android:enabled="false"
+        android:defaultValue="true"/>
+
     <!-- Messages -->
     <DropDownPreference
         android:key="messages"
diff --git a/src/com/android/settings/ApnEditor.java b/src/com/android/settings/ApnEditor.java
index ba160ab..196fec8 100644
--- a/src/com/android/settings/ApnEditor.java
+++ b/src/com/android/settings/ApnEditor.java
@@ -147,7 +147,8 @@
             Telephony.Carriers.ROAMING_PROTOCOL, // 20
             Telephony.Carriers.MVNO_TYPE,   // 21
             Telephony.Carriers.MVNO_MATCH_DATA,  // 22
-            Telephony.Carriers.EDITED   // 23
+            Telephony.Carriers.EDITED,   // 23
+            Telephony.Carriers.USER_EDITABLE    //24
     };
 
     private static final int ID_INDEX = 0;
@@ -173,6 +174,7 @@
     private static final int MVNO_TYPE_INDEX = 21;
     private static final int MVNO_MATCH_DATA_INDEX = 22;
     private static final int EDITED_INDEX = 23;
+    private static final int USER_EDITABLE_INDEX = 24;
 
 
     @Override
@@ -284,7 +286,8 @@
         Log.d(TAG, "onCreate: EDITED " + mCursor.getInt(EDITED_INDEX));
         // if it's not a USER_EDITED apn, check if it's read-only
         if (mCursor.getInt(EDITED_INDEX) != Telephony.Carriers.USER_EDITED &&
-                apnTypesMatch(mReadOnlyApnTypes, mCursor.getString(TYPE_INDEX))) {
+                (mCursor.getInt(USER_EDITABLE_INDEX) == 0 ||
+                apnTypesMatch(mReadOnlyApnTypes, mCursor.getString(TYPE_INDEX)))) {
             Log.d(TAG, "onCreate: apnTypesMatch; read-only APN");
             mReadOnlyApn = true;
             disableAllFields();
diff --git a/src/com/android/settings/display/BrightnessLevelPreferenceController.java b/src/com/android/settings/display/BrightnessLevelPreferenceController.java
index 3436d2d..a8ad8c6 100644
--- a/src/com/android/settings/display/BrightnessLevelPreferenceController.java
+++ b/src/com/android/settings/display/BrightnessLevelPreferenceController.java
@@ -142,7 +142,7 @@
             final float value = Settings.System.getFloat(mContentResolver,
                     System.SCREEN_AUTO_BRIGHTNESS_ADJ, 0);
             // auto brightness is between -1 and 1
-            return ((value + 1)) / 2;
+            return getPercentage(value, -1, 1);
         }
         final double value = Settings.System.getInt(mContentResolver, System.SCREEN_BRIGHTNESS,
                 mMinBrightness);
@@ -150,6 +150,12 @@
     }
 
     private double getPercentage(double value, int min, int max) {
+        if (value > max) {
+            return 1.0;
+        }
+        if (value < min) {
+            return 0.0;
+        }
         return (value - min) / (max - min);
     }
 
diff --git a/src/com/android/settings/notification/ZenModeSettings.java b/src/com/android/settings/notification/ZenModeSettings.java
index 5e815f8..59e588d 100644
--- a/src/com/android/settings/notification/ZenModeSettings.java
+++ b/src/com/android/settings/notification/ZenModeSettings.java
@@ -358,10 +358,10 @@
 
         String getPrioritySettingSummary(Policy policy) {
             String s = mContext.getString(R.string.zen_mode_alarms);
-            s = append(s, isCategoryEnabled(policy, Policy.PRIORITY_CATEGORY_REMINDERS),
+            s = prepend(s, isCategoryEnabled(policy, Policy.PRIORITY_CATEGORY_EVENTS),
+                    R.string.zen_mode_events);
+            s = prepend(s, isCategoryEnabled(policy, Policy.PRIORITY_CATEGORY_REMINDERS),
                 R.string.zen_mode_reminders);
-            s = append(s, isCategoryEnabled(policy, Policy.PRIORITY_CATEGORY_EVENTS),
-                R.string.zen_mode_events);
             if (isCategoryEnabled(policy, Policy.PRIORITY_CATEGORY_MESSAGES)) {
                 if (policy.priorityMessageSenders == Policy.PRIORITY_SENDERS_ANY) {
                     s = append(s, true, R.string.zen_mode_all_messages);
@@ -426,6 +426,15 @@
             return s;
         }
 
+        @VisibleForTesting
+        String prepend(String s, boolean condition, int resId) {
+            if (condition) {
+                return mContext.getString(
+                        R.string.join_many_items_middle, mContext.getString(resId), s);
+            }
+            return s;
+        }
+
         private boolean isCategoryEnabled(Policy policy, int categoryType) {
             return (policy.priorityCategories & categoryType) != 0;
         }
diff --git a/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java
index 378b054..d35adef 100644
--- a/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java
@@ -19,6 +19,7 @@
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -130,7 +131,7 @@
     }
 
     @Test
-    public void updateState_autoBrightness_shouldSetSummaryToVrBrightness() {
+    public void updateState_autoBrightness_shouldSetSummaryToAutoBrightness() {
         doReturn(false).when(mController).isInVrMode();
         System.putInt(mContentResolver, System.SCREEN_BRIGHTNESS_MODE,
             System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
@@ -143,7 +144,7 @@
     }
 
     @Test
-    public void updateState_manualBrightness_shouldSetSummaryToVrBrightness() {
+    public void updateState_manualBrightness_shouldSetSummaryToScreenBrightness() {
         doReturn(false).when(mController).isInVrMode();
         System.putInt(mContentResolver, System.SCREEN_BRIGHTNESS_MODE,
             System.SCREEN_BRIGHTNESS_MODE_MANUAL);
@@ -154,4 +155,45 @@
 
         verify(mPreference).setSummary("45%");
     }
+
+    @Test
+    public void updateState_brightnessOutOfRange_shouldSetSummaryInRange() {
+        // VR mode
+        doReturn(true).when(mController).isInVrMode();
+
+        System.putInt(mContentResolver, System.SCREEN_BRIGHTNESS_FOR_VR, 105);
+        mController.updateState(mPreference);
+        verify(mPreference).setSummary("100%");
+
+        System.putInt(mContentResolver, System.SCREEN_BRIGHTNESS_FOR_VR, -20);
+        mController.updateState(mPreference);
+        verify(mPreference).setSummary("0%");
+
+        // Auto mode
+        doReturn(false).when(mController).isInVrMode();
+        System.putInt(mContentResolver, System.SCREEN_BRIGHTNESS_MODE,
+                System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
+
+        reset(mPreference);
+        System.putFloat(mContentResolver, System.SCREEN_AUTO_BRIGHTNESS_ADJ, 1.5f);
+        mController.updateState(mPreference);
+        verify(mPreference).setSummary("100%");
+
+        System.putFloat(mContentResolver, System.SCREEN_AUTO_BRIGHTNESS_ADJ, -1.5f);
+        mController.updateState(mPreference);
+        verify(mPreference).setSummary("0%");
+
+        // Manual mode
+        System.putInt(mContentResolver, System.SCREEN_BRIGHTNESS_MODE,
+                System.SCREEN_BRIGHTNESS_MODE_MANUAL);
+
+        reset(mPreference);
+        System.putInt(mContentResolver, System.SCREEN_BRIGHTNESS, 115);
+        mController.updateState(mPreference);
+        verify(mPreference).setSummary("100%");
+
+        System.putInt(mContentResolver, System.SCREEN_BRIGHTNESS, -10);
+        mController.updateState(mPreference);
+        verify(mPreference).setSummary("0%");
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/notification/ZenModeSettingsTest.java b/tests/robotests/src/com/android/settings/notification/ZenModeSettingsTest.java
index 8ac482b..716e2b2 100644
--- a/tests/robotests/src/com/android/settings/notification/ZenModeSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/notification/ZenModeSettingsTest.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.notification;
 
+import android.app.NotificationManager;
 import android.content.Context;
 
 import com.android.settings.R;
@@ -30,6 +31,8 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static junit.framework.Assert.assertTrue;
+
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class ZenModeSettingsTest {
@@ -60,6 +63,38 @@
         final String result = mBuilder.append(original, true, R.string.zen_mode_alarms);
 
         assertThat(result).contains(alarm);
+        assertThat(result).contains(original);
+        assertTrue(result.indexOf(original) < result.indexOf(alarm));
+    }
+
+    @Test
+    public void testPrepend() {
+        String original = mContext.getString(R.string.zen_mode_alarms);
+        String reminders = mContext.getString(R.string.zen_mode_reminders);
+
+        final String result = mBuilder.prepend(original, true, R.string.zen_mode_reminders);
+        assertThat(result).contains(original);
+        assertThat(result).contains(reminders);
+        assertTrue(result.indexOf(reminders) < result.indexOf(original));
+    }
+
+    @Test
+    public void testGetPrioritySettingSummary_sameOrderAsTargetPage() {
+        NotificationManager.Policy policy = new NotificationManager.Policy(
+                NotificationManager.Policy.PRIORITY_CATEGORY_EVENTS
+                        | NotificationManager.Policy.PRIORITY_CATEGORY_REMINDERS,
+                0, 0);
+        final String result = mBuilder.getPrioritySettingSummary(policy);
+
+        String alarms = mContext.getString(R.string.zen_mode_alarms);
+        String reminders = mContext.getString(R.string.zen_mode_reminders);
+        String events = mContext.getString(R.string.zen_mode_events);
+
+        assertThat(result).contains(alarms);
+        assertThat(result).contains(reminders);
+        assertThat(result).contains(events);
+        assertTrue(result.indexOf(reminders) < result.indexOf(events) &&
+                result.indexOf(events) < result.indexOf(alarms));
     }
 
 }
diff --git a/tests/unit/src/com/android/settings/dream/DreamSettingsLaunchTest.java b/tests/unit/src/com/android/settings/dream/DreamSettingsLaunchTest.java
new file mode 100644
index 0000000..497fa0a
--- /dev/null
+++ b/tests/unit/src/com/android/settings/dream/DreamSettingsLaunchTest.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2017 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.dream;
+
+import android.content.Context;
+import android.content.Intent;
+import android.provider.Settings;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class DreamSettingsLaunchTest {
+
+    @Test
+    public void launchFromIntent_doesNotCrash() {
+        final Context context = InstrumentationRegistry.getTargetContext();
+        Intent intent = new Intent(Settings.ACTION_DREAM_SETTINGS);
+
+        context.startActivity(intent);
+    }
+}