Merge "Fix a11y readout of notification importance buttons" into qt-dev
diff --git a/res/layout-land/confirm_lock_pattern.xml b/res/layout-land/confirm_lock_pattern.xml
index 20a7bfc..6ca9be4 100644
--- a/res/layout-land/confirm_lock_pattern.xml
+++ b/res/layout-land/confirm_lock_pattern.xml
@@ -87,11 +87,9 @@
 
                 <com.android.internal.widget.LockPatternView
                     android:id="@+id/lockPattern"
-                    android:layout_width="288dp"
-                    android:layout_height="288dp"
-                    android:layout_marginStart="-42dp"
-                    android:layout_marginEnd="-42dp"
-                    android:layout_gravity="center_vertical"/>
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:layout_gravity="center"/>
 
                 <TextView
                     style="@style/TextAppearance.ErrorText"
diff --git a/src/com/android/settings/FallbackHome.java b/src/com/android/settings/FallbackHome.java
index 59347ad..e3944a6 100644
--- a/src/com/android/settings/FallbackHome.java
+++ b/src/com/android/settings/FallbackHome.java
@@ -25,6 +25,7 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.pm.ResolveInfo;
+import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
@@ -65,7 +66,7 @@
         @Override
         public void onColorsChanged(WallpaperColors colors, int which) {
             if (colors != null) {
-                View decorView = getWindow().getDecorView();
+                final View decorView = getWindow().getDecorView();
                 decorView.setSystemUiVisibility(
                         updateVisibilityFlagsFromColors(colors, decorView.getSystemUiVisibility()));
                 mWallManager.removeOnColorsChangedListener(this);
@@ -81,7 +82,7 @@
         // we don't flash the wallpaper before SUW
         mProvisioned = Settings.Global.getInt(getContentResolver(),
                 Settings.Global.DEVICE_PROVISIONED, 0) != 0;
-        int flags;
+        final int flags;
         if (!mProvisioned) {
             setTheme(R.style.FallbackHome_SetupWizard);
             flags = View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
@@ -91,18 +92,11 @@
                     | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
         }
 
-        // Set the system ui flags to light status bar if the wallpaper supports dark text to match
-        // current system ui color tints. Use a listener to wait for colors if not ready yet.
         mWallManager = getSystemService(WallpaperManager.class);
         if (mWallManager == null) {
             Log.w(TAG, "Wallpaper manager isn't ready, can't listen to color changes!");
         } else {
-            WallpaperColors colors = mWallManager.getWallpaperColors(WallpaperManager.FLAG_SYSTEM);
-            if (colors == null) {
-                mWallManager.addOnColorsChangedListener(mColorsChangedListener, null /* handler */);
-            } else {
-                flags = updateVisibilityFlagsFromColors(colors, flags);
-            }
+            loadWallpaperColors(flags);
         }
         getWindow().getDecorView().setSystemUiVisibility(flags);
 
@@ -139,6 +133,33 @@
         }
     };
 
+    private void loadWallpaperColors(int flags) {
+        final AsyncTask loadWallpaperColorsTask = new AsyncTask<Object, Void, Integer>() {
+            @Override
+            protected Integer doInBackground(Object... params) {
+                final WallpaperColors colors =
+                        mWallManager.getWallpaperColors(WallpaperManager.FLAG_SYSTEM);
+
+                // Use a listener to wait for colors if not ready yet.
+                if (colors == null) {
+                    mWallManager.addOnColorsChangedListener(mColorsChangedListener,
+                            null /* handler */);
+                    return null;
+                }
+                return updateVisibilityFlagsFromColors(colors, flags);
+            }
+
+            @Override
+            protected void onPostExecute(Integer flagsToUpdate) {
+                if (flagsToUpdate == null) {
+                    return;
+                }
+                getWindow().getDecorView().setSystemUiVisibility(flagsToUpdate);
+            }
+        };
+        loadWallpaperColorsTask.execute();
+    }
+
     private void maybeFinish() {
         if (getSystemService(UserManager.class).isUserUnlocked()) {
             final Intent homeIntent = new Intent(Intent.ACTION_MAIN)
@@ -162,6 +183,8 @@
         }
     }
 
+    // Set the system ui flags to light status bar if the wallpaper supports dark text to match
+    // current system ui color tints.
     private int updateVisibilityFlagsFromColors(WallpaperColors colors, int flags) {
         if ((colors.getColorHints() & WallpaperColors.HINT_SUPPORTS_DARK_TEXT) != 0) {
             return flags | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
diff --git a/src/com/android/settings/slices/SlicePreferenceController.java b/src/com/android/settings/slices/SlicePreferenceController.java
index 89294c7..2432c99 100644
--- a/src/com/android/settings/slices/SlicePreferenceController.java
+++ b/src/com/android/settings/slices/SlicePreferenceController.java
@@ -40,7 +40,8 @@
         LifecycleObserver, OnStart, OnStop, Observer<Slice> {
     @VisibleForTesting
     LiveData<Slice> mLiveData;
-    private SlicePreference mSlicePreference;
+    @VisibleForTesting
+    SlicePreference mSlicePreference;
     private Uri mUri;
 
     public SlicePreferenceController(Context context, String preferenceKey) {
@@ -82,8 +83,6 @@
 
     @Override
     public void onChanged(Slice slice) {
-        if (slice != null) {
-            mSlicePreference.onSliceUpdated(slice);
-        }
+        mSlicePreference.onSliceUpdated(slice);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/slices/SlicePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/slices/SlicePreferenceControllerTest.java
index 364fb60..65eaddd 100644
--- a/tests/robotests/src/com/android/settings/slices/SlicePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/slices/SlicePreferenceControllerTest.java
@@ -41,6 +41,8 @@
 
     @Mock
     private LiveData<Slice> mLiveData;
+    @Mock
+    private SlicePreference mSlicePreference;
     private Context mContext;
     private SlicePreferenceController mController;
     private Uri mUri;
@@ -53,6 +55,7 @@
         mContext = spy(RuntimeEnvironment.application);
         mController = new SlicePreferenceController(mContext, KEY);
         mController.mLiveData = mLiveData;
+        mController.mSlicePreference = mSlicePreference;
         mUri = Uri.EMPTY;
     }
 
@@ -78,4 +81,11 @@
         mController.onStop();
         verify(mLiveData).removeObserver(mController);
     }
+
+    @Test
+    public void onChanged_nullSlice_updateSlice() {
+        mController.onChanged(null);
+
+        verify(mController.mSlicePreference).onSliceUpdated(null);
+    }
 }
\ No newline at end of file