Add up arrow for action bar

- Implement AppbarFragmentHost for activity.
- Inherit onBottomActionBarReady parent function to hide back button
  if back arrow exists.

Bug: 177638480
Test: Manual
Change-Id: I75ef8626126bd4583d5dfa864e9adb02292db285
diff --git a/src/com/android/customization/picker/CustomizationPickerActivity.java b/src/com/android/customization/picker/CustomizationPickerActivity.java
index e198484..17b4fc7 100644
--- a/src/com/android/customization/picker/CustomizationPickerActivity.java
+++ b/src/com/android/customization/picker/CustomizationPickerActivity.java
@@ -68,6 +68,7 @@
 import com.android.wallpaper.module.InjectorProvider;
 import com.android.wallpaper.module.UserEventLogger;
 import com.android.wallpaper.module.WallpaperPreferences;
+import com.android.wallpaper.picker.AppbarFragment.AppbarFragmentHost;
 import com.android.wallpaper.picker.BottomActionBarFragment;
 import com.android.wallpaper.picker.CategoryFragment;
 import com.android.wallpaper.picker.CategoryFragment.CategoryFragmentHost;
@@ -92,7 +93,7 @@
  *  Fragments providing customization options.
  */
 public class CustomizationPickerActivity extends FragmentActivity implements WallpapersUiContainer,
-        CategoryFragmentHost, CustomizationFragmentHost,
+        AppbarFragmentHost, CategoryFragmentHost, CustomizationFragmentHost,
         ThemeFragmentHost, GridFragmentHost,
         ClockFragmentHost, BottomActionBarHost, FragmentTransactionChecker {
 
@@ -514,6 +515,16 @@
         return mIsSafeToCommitFragmentTransaction;
     }
 
+    @Override
+    public void onUpArrowPressed() {
+        onBackPressed();
+    }
+
+    @Override
+    public boolean isUpArrowSupported() {
+        return true;
+    }
+
     /**
      * {@link CustomizationSection} corresponding to the "Wallpaper" section of the Picker.
      */
diff --git a/src/com/android/customization/picker/ViewOnlyFullPreviewActivity.java b/src/com/android/customization/picker/ViewOnlyFullPreviewActivity.java
index 2afbc16..91c310c 100644
--- a/src/com/android/customization/picker/ViewOnlyFullPreviewActivity.java
+++ b/src/com/android/customization/picker/ViewOnlyFullPreviewActivity.java
@@ -30,6 +30,7 @@
 import com.android.customization.picker.grid.GridFullPreviewFragment;
 import com.android.customization.picker.theme.ThemeFullPreviewFragment;
 import com.android.wallpaper.R;
+import com.android.wallpaper.picker.AppbarFragment.AppbarFragmentHost;
 import com.android.wallpaper.widget.BottomActionBar;
 import com.android.wallpaper.widget.BottomActionBar.BottomActionBarHost;
 
@@ -37,7 +38,8 @@
 import java.lang.annotation.RetentionPolicy;
 
 /** Activity for full preview. */
-public class ViewOnlyFullPreviewActivity extends FragmentActivity implements BottomActionBarHost {
+public class ViewOnlyFullPreviewActivity extends FragmentActivity implements AppbarFragmentHost,
+        BottomActionBarHost {
 
     private static final String EXTRA_PREVIEW_SECTION = "preview_section";
     private static final String EXTRA_PREVIEW_BUNDLE = "preview_bundle";
@@ -46,6 +48,16 @@
     public static final int SECTION_GRID = 1;
     public static final int SECTION_CLOCK = 2;
 
+    @Override
+    public void onUpArrowPressed() {
+        onBackPressed();
+    }
+
+    @Override
+    public boolean isUpArrowSupported() {
+        return true;
+    }
+
     @IntDef({SECTION_STYLE, SECTION_GRID, SECTION_CLOCK})
     @Retention(RetentionPolicy.SOURCE)
     private @interface Section {}
diff --git a/src/com/android/customization/picker/grid/GridFragment.java b/src/com/android/customization/picker/grid/GridFragment.java
index ad37fbf..f4a4ce4 100644
--- a/src/com/android/customization/picker/grid/GridFragment.java
+++ b/src/com/android/customization/picker/grid/GridFragment.java
@@ -51,6 +51,7 @@
 import com.android.wallpaper.module.CurrentWallpaperInfoFactory;
 import com.android.wallpaper.module.InjectorProvider;
 import com.android.wallpaper.picker.AppbarFragment;
+import com.android.wallpaper.util.ActivityUtils;
 import com.android.wallpaper.widget.BottomActionBar;
 
 import com.bumptech.glide.Glide;
@@ -126,7 +127,7 @@
             @Nullable Bundle savedInstanceState) {
         View view = inflater.inflate(
                 R.layout.fragment_grid_picker, container, /* attachToRoot */ false);
-        setUpToolbar(view);
+        setUpToolbar(view, ActivityUtils.isLaunchedFromSettings(getActivity().getIntent()));
         mContent = view.findViewById(R.id.content_section);
         mOptionsContainer = view.findViewById(R.id.options_container);
         mLoading = view.findViewById(R.id.loading_indicator);
@@ -184,6 +185,7 @@
 
     @Override
     protected void onBottomActionBarReady(BottomActionBar bottomActionBar) {
+        super.onBottomActionBarReady(bottomActionBar);
         mBottomActionBar = bottomActionBar;
         mBottomActionBar.showActionsOnly(APPLY);
         mBottomActionBar.setActionClickListener(APPLY, unused -> applyGridOption(mSelectedOption));
diff --git a/src/com/android/customization/picker/grid/GridFullPreviewFragment.java b/src/com/android/customization/picker/grid/GridFullPreviewFragment.java
index 69105df..abea1c1 100644
--- a/src/com/android/customization/picker/grid/GridFullPreviewFragment.java
+++ b/src/com/android/customization/picker/grid/GridFullPreviewFragment.java
@@ -124,6 +124,7 @@
 
     @Override
     protected void onBottomActionBarReady(BottomActionBar bottomActionBar) {
+        super.onBottomActionBarReady(bottomActionBar);
         bottomActionBar.showActionsOnly(APPLY);
         bottomActionBar.setActionClickListener(APPLY, v -> finishActivityWithResultOk());
         bottomActionBar.show();
diff --git a/src/com/android/customization/picker/theme/CustomThemeActivity.java b/src/com/android/customization/picker/theme/CustomThemeActivity.java
index c1c2d0e..62a2f26 100644
--- a/src/com/android/customization/picker/theme/CustomThemeActivity.java
+++ b/src/com/android/customization/picker/theme/CustomThemeActivity.java
@@ -53,6 +53,7 @@
 import com.android.customization.picker.theme.CustomThemeStepFragment.CustomThemeComponentStepHost;
 import com.android.wallpaper.R;
 import com.android.wallpaper.module.InjectorProvider;
+import com.android.wallpaper.picker.AppbarFragment.AppbarFragmentHost;
 
 import org.json.JSONException;
 
@@ -60,7 +61,7 @@
 import java.util.List;
 
 public class CustomThemeActivity extends FragmentActivity implements
-        CustomThemeComponentStepHost {
+        AppbarFragmentHost, CustomThemeComponentStepHost {
     public static final String EXTRA_THEME_ID = "CustomThemeActivity.ThemeId";
     public static final String EXTRA_THEME_TITLE = "CustomThemeActivity.ThemeTitle";
     public static final String EXTRA_THEME_PACKAGES = "CustomThemeActivity.ThemePackages";
@@ -283,6 +284,19 @@
         return mCustomThemeManager;
     }
 
+    @Override
+    public void onUpArrowPressed() {
+        // Skip it because CustomThemeStepFragment will implement cancel button
+        // (instead of up arrow) on action bar.
+    }
+
+    @Override
+    public boolean isUpArrowSupported() {
+        // Skip it because CustomThemeStepFragment will implement cancel button
+        // (instead of up arrow) on action bar.
+        return false;
+    }
+
     /**
      * Represents a step in selecting a custom theme, picking a particular component (eg font,
      * color, shape, etc).
diff --git a/src/com/android/customization/picker/theme/ThemeFragment.java b/src/com/android/customization/picker/theme/ThemeFragment.java
index 7b58274..da2a8f6 100644
--- a/src/com/android/customization/picker/theme/ThemeFragment.java
+++ b/src/com/android/customization/picker/theme/ThemeFragment.java
@@ -57,6 +57,7 @@
 import com.android.wallpaper.module.CurrentWallpaperInfoFactory;
 import com.android.wallpaper.module.InjectorProvider;
 import com.android.wallpaper.picker.AppbarFragment;
+import com.android.wallpaper.util.ActivityUtils;
 import com.android.wallpaper.widget.BottomActionBar;
 import com.android.wallpaper.widget.BottomActionBar.AccessibilityCallback;
 
@@ -115,7 +116,7 @@
             @Nullable Bundle savedInstanceState) {
         View view = inflater.inflate(
                 R.layout.fragment_theme_picker, container, /* attachToRoot */ false);
-        setUpToolbar(view);
+        setUpToolbar(view, ActivityUtils.isLaunchedFromSettings(getActivity().getIntent()));
 
         mContent = view.findViewById(R.id.content_section);
         mLoading = view.findViewById(R.id.loading_indicator);
@@ -149,6 +150,7 @@
 
     @Override
     protected void onBottomActionBarReady(BottomActionBar bottomActionBar) {
+        super.onBottomActionBarReady(bottomActionBar);
         mBottomActionBar = bottomActionBar;
         mBottomActionBar.showActionsOnly(INFORMATION, APPLY);
         mBottomActionBar.setActionClickListener(APPLY, v -> {
diff --git a/src/com/android/customization/picker/theme/ThemeFullPreviewFragment.java b/src/com/android/customization/picker/theme/ThemeFullPreviewFragment.java
index 7cbeab9..77325e7 100644
--- a/src/com/android/customization/picker/theme/ThemeFullPreviewFragment.java
+++ b/src/com/android/customization/picker/theme/ThemeFullPreviewFragment.java
@@ -125,6 +125,7 @@
 
     @Override
     protected void onBottomActionBarReady(BottomActionBar bottomActionBar) {
+        super.onBottomActionBarReady(bottomActionBar);
         if (mCanApplyFromFullPreview) {
             bottomActionBar.showActionsOnly(INFORMATION, APPLY);
             bottomActionBar.setActionClickListener(APPLY, v -> finishActivityWithResultOk());