Merge "Reduce potential latency of popping up destination dialog" into sc-v2-dev
diff --git a/res/layout/fragment_image_preview.xml b/res/layout/fragment_image_preview.xml
index 46b4b88..de8df17 100644
--- a/res/layout/fragment_image_preview.xml
+++ b/res/layout/fragment_image_preview.xml
@@ -21,6 +21,15 @@
     android:layout_height="match_parent"
     android:background="?android:colorBackground">
 
+    <!-- Preview header (toolbar + status bar) is used to solve preview with full screen animated
+         to non-full screen cases. -->
+    <FrameLayout
+        android:id="@+id/preview_header"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingBottom="?android:attr/actionBarSize">
+    </FrameLayout>
+
     <FrameLayout
         android:id="@+id/separated_tabs_container"
         android:layout_width="match_parent"
diff --git a/res/layout/fragment_live_preview.xml b/res/layout/fragment_live_preview.xml
index dc8273c..462329b 100644
--- a/res/layout/fragment_live_preview.xml
+++ b/res/layout/fragment_live_preview.xml
@@ -21,6 +21,15 @@
     android:layout_height="match_parent"
     android:background="?android:colorBackground">
 
+    <!-- Preview header (toolbar + status bar) is used to solve preview with full screen animated
+         to non-full screen cases. -->
+    <FrameLayout
+        android:id="@+id/preview_header"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingBottom="?android:attr/actionBarSize">
+    </FrameLayout>
+
     <FrameLayout
         android:id="@+id/separated_tabs_container"
         android:layout_width="match_parent"
diff --git a/src/com/android/wallpaper/picker/AppbarFragment.java b/src/com/android/wallpaper/picker/AppbarFragment.java
index 4a71bb0..cda2263 100644
--- a/src/com/android/wallpaper/picker/AppbarFragment.java
+++ b/src/com/android/wallpaper/picker/AppbarFragment.java
@@ -110,6 +110,12 @@
         mToolbar = rootView.findViewById(getToolbarId());
 
         mTitleView = mToolbar.findViewById(R.id.custom_toolbar_title);
+
+        // Update toolbar and status bar color.
+        mToolbar.setBackgroundResource(getToolbarColorId());
+        getActivity().getWindow().setStatusBarColor(
+                getActivity().getResources().getColor(getToolbarColorId()));
+
         CharSequence title;
         if (getArguments() != null) {
             title = getArguments().getCharSequence(ARG_TITLE, getDefaultTitle());
@@ -139,6 +145,10 @@
         return R.id.toolbar;
     }
 
+    protected int getToolbarColorId() {
+        return R.color.settingslib_colorSurfaceHeader;
+    }
+
     /**
      * Set up arrow feature status to enabled or not. Enable it for updating
      * onBottomActionBarReady() while initializing without toolbar setup.
diff --git a/src/com/android/wallpaper/picker/CustomizationPickerFragment.java b/src/com/android/wallpaper/picker/CustomizationPickerFragment.java
index 8884c0e..c28af3a 100644
--- a/src/com/android/wallpaper/picker/CustomizationPickerFragment.java
+++ b/src/com/android/wallpaper/picker/CustomizationPickerFragment.java
@@ -133,6 +133,11 @@
     }
 
     @Override
+    protected int getToolbarColorId() {
+        return android.R.color.transparent;
+    }
+
+    @Override
     public boolean onBackPressed() {
         // TODO(b/191120122) Improve glitchy animation in Settings.
         if (ActivityUtils.isLaunchedFromSettingsSearch(getActivity().getIntent())) {
diff --git a/src/com/android/wallpaper/picker/ImagePreviewFragment.java b/src/com/android/wallpaper/picker/ImagePreviewFragment.java
index 1809c63..ae3d63c 100755
--- a/src/com/android/wallpaper/picker/ImagePreviewFragment.java
+++ b/src/com/android/wallpaper/picker/ImagePreviewFragment.java
@@ -144,6 +144,10 @@
         mTouchForwardingLayout = mContainer.findViewById(R.id.touch_forwarding_layout);
         mTouchForwardingLayout.setForwardingEnabled(true);
 
+        // Update preview header color which covers toolbar and status bar area.
+        View previewHeader = view.findViewById(R.id.preview_header);
+        previewHeader.setBackgroundColor(activity.getColor(R.color.settingslib_colorSurfaceHeader));
+
         // Set aspect ratio on the preview card dynamically.
         ConstraintSet set = new ConstraintSet();
         set.clone(mContainer);
diff --git a/src/com/android/wallpaper/picker/LivePreviewFragment.java b/src/com/android/wallpaper/picker/LivePreviewFragment.java
index 45217f1..5fbb9ee 100644
--- a/src/com/android/wallpaper/picker/LivePreviewFragment.java
+++ b/src/com/android/wallpaper/picker/LivePreviewFragment.java
@@ -167,6 +167,11 @@
                 activity.getWindowManager().getDefaultDisplay());
         mPreviewContainer = view.findViewById(R.id.live_wallpaper_preview);
         mTouchForwardingLayout = view.findViewById(R.id.touch_forwarding_layout);
+
+        // Update preview header color which covers toolbar and status bar area.
+        View previewHeader = view.findViewById(R.id.preview_header);
+        previewHeader.setBackgroundColor(activity.getColor(R.color.settingslib_colorSurfaceHeader));
+
         // Set aspect ratio on the preview card.
         ConstraintSet set = new ConstraintSet();
         set.clone((ConstraintLayout) mPreviewContainer);
diff --git a/src/com/android/wallpaper/picker/PreviewFragment.java b/src/com/android/wallpaper/picker/PreviewFragment.java
index 172bacd..c91719e 100755
--- a/src/com/android/wallpaper/picker/PreviewFragment.java
+++ b/src/com/android/wallpaper/picker/PreviewFragment.java
@@ -182,6 +182,11 @@
     }
 
     @Override
+    protected int getToolbarColorId() {
+        return android.R.color.transparent;
+    }
+
+    @Override
     @CallSuper
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                              Bundle savedInstanceState) {
@@ -201,6 +206,13 @@
 
                     mFullScreenAnimation.setWindowInsets(windowInsets);
                     mFullScreenAnimation.placeViews();
+
+                    // Update preview header's padding top to align status bar height.
+                    View previewHeader = v.findViewById(R.id.preview_header);
+                    previewHeader.setPadding(previewHeader.getPaddingLeft(),
+                            mFullScreenAnimation.getStatusBarHeight(),
+                            previewHeader.getPaddingRight(), previewHeader.getPaddingBottom());
+
                     return windowInsets.consumeSystemWindowInsets();
                 }
         );
diff --git a/src/com/android/wallpaper/util/FullScreenAnimation.java b/src/com/android/wallpaper/util/FullScreenAnimation.java
index 0a97f72..bf123b3 100644
--- a/src/com/android/wallpaper/util/FullScreenAnimation.java
+++ b/src/com/android/wallpaper/util/FullScreenAnimation.java
@@ -128,7 +128,12 @@
         mIsHomeSelected = isHomeSelected;
     }
 
-    private int getStatusBarHeight() {
+    /**
+     * Returns the height of status bar.
+     *
+     * @return height of status bar.
+     */
+    public int getStatusBarHeight() {
         return mStatusBarHeight;
     }