diff options
author | Chihhang Chuang <chihhangchuang@google.com> | 2021-06-16 05:19:32 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2021-06-16 05:19:32 +0000 |
commit | e4ba3f4893c77b3318b977a682f7bfb2d33ffa11 (patch) | |
tree | 4e3004614851247fa85b80a5788131ae164e1b0f /src/com/android | |
parent | bea7265cf4ac1bacb5c35153bbea7ad3916886f8 (diff) | |
parent | 8d14e8ac684a234e43db8e98c60a42821904e72b (diff) | |
download | ThemePicker-e4ba3f4893c77b3318b977a682f7bfb2d33ffa11.tar.gz |
Merge "Replace "Hub" naming with "Customization"" into sc-dev
Diffstat (limited to 'src/com/android')
13 files changed, 67 insertions, 201 deletions
diff --git a/src/com/android/customization/model/CustomizationManager.java b/src/com/android/customization/model/CustomizationManager.java index efc4c747..104cc837 100644 --- a/src/com/android/customization/model/CustomizationManager.java +++ b/src/com/android/customization/model/CustomizationManager.java @@ -28,20 +28,6 @@ import java.util.List; public interface CustomizationManager<T extends CustomizationOption> { /** - * Create a new {@link CustomizationSection} corresponding to this Manager - */ - default CustomizationSection<T> createSection() { - return null; - } - - /** - * @return the id in the navigation menu for the section this Manager manages. - */ - default int getNavId() { - return 0; - }; - - /** * Callback for applying a customization option. */ interface Callback { diff --git a/src/com/android/customization/model/CustomizationSection.java b/src/com/android/customization/model/CustomizationSection.java deleted file mode 100644 index da1b4f8d..00000000 --- a/src/com/android/customization/model/CustomizationSection.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2021 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.customization.model; - -import android.content.Context; - -import androidx.annotation.IdRes; -import androidx.fragment.app.Fragment; - -/** - * Represents a section of the Picker (eg "ThemeBundle", "Clock", etc). - * There should be a concrete subclass per available section, providing the corresponding - * Fragment to be displayed when switching to each section. - * @param <T> CustomizationOption that this section represents. - */ -public abstract class CustomizationSection<T extends CustomizationOption> { - - /** - * IdRes used to identify this section in the BottomNavigationView menu. - */ - @IdRes - public final int id; - protected final CustomizationManager<T> mCustomizationManager; - - public CustomizationSection(@IdRes int id, CustomizationManager<T> manager) { - this.id = id; - mCustomizationManager = manager; - } - - /** - * @return the Fragment corresponding to this section. - */ - public abstract Fragment getFragment(Context c); - - public CustomizationManager<T> getCustomizationManager() { - return mCustomizationManager; - } - -} diff --git a/src/com/android/customization/model/grid/GridOptionsManager.java b/src/com/android/customization/model/grid/GridOptionsManager.java index c1ec7293..da1139ee 100644 --- a/src/com/android/customization/model/grid/GridOptionsManager.java +++ b/src/com/android/customization/model/grid/GridOptionsManager.java @@ -43,7 +43,7 @@ public class GridOptionsManager implements CustomizationManager<GridOption> { private final ThemesUserEventLogger mEventLogger; /** Returns the {@link GridOptionsManager} instance. */ - public static GridOptionsManager get(Context context) { + public static GridOptionsManager getInstance(Context context) { if (sGridOptionsManager == null) { Context appContext = context.getApplicationContext(); CustomizationInjector injector = (CustomizationInjector) InjectorProvider.getInjector(); diff --git a/src/com/android/customization/model/grid/GridSectionController.java b/src/com/android/customization/model/grid/GridSectionController.java index a570565c..5470d77d 100644 --- a/src/com/android/customization/model/grid/GridSectionController.java +++ b/src/com/android/customization/model/grid/GridSectionController.java @@ -27,22 +27,22 @@ import com.android.customization.model.CustomizationManager.OptionsFetchedListen import com.android.customization.picker.grid.GridFragment; import com.android.customization.picker.grid.GridSectionView; import com.android.wallpaper.R; -import com.android.wallpaper.model.HubSectionController; +import com.android.wallpaper.model.CustomizationSectionController; import java.util.List; -/** A {@link HubSectionController} for app grid. */ -public class GridSectionController implements HubSectionController<GridSectionView> { +/** A {@link CustomizationSectionController} for app grid. */ +public class GridSectionController implements CustomizationSectionController<GridSectionView> { private static final String TAG = "GridSectionController"; private final GridOptionsManager mGridOptionsManager; - private final HubSectionNavigationController mHubSectionNavigationController; + private final CustomizationSectionNavigationController mSectionNavigationController; public GridSectionController(GridOptionsManager gridOptionsManager, - HubSectionNavigationController hubSectionNavigationController) { + CustomizationSectionNavigationController sectionNavigationController) { mGridOptionsManager = gridOptionsManager; - mHubSectionNavigationController = hubSectionNavigationController; + mSectionNavigationController = sectionNavigationController; } @Override @@ -74,7 +74,7 @@ public class GridSectionController implements HubSectionController<GridSectionVi } }, /* reload= */ true); - gridSectionView.setOnClickListener(v -> mHubSectionNavigationController.navigateTo( + gridSectionView.setOnClickListener(v -> mSectionNavigationController.navigateTo( GridFragment.newInstance(context.getString(R.string.grid_title)))); return gridSectionView; diff --git a/src/com/android/customization/model/mode/BatterySaverStateReceiver.java b/src/com/android/customization/model/mode/BatterySaverStateReceiver.java deleted file mode 100644 index 803f7222..00000000 --- a/src/com/android/customization/model/mode/BatterySaverStateReceiver.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2021 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.customization.model.mode; - -import static android.os.PowerManager.ACTION_POWER_SAVE_MODE_CHANGED; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.os.PowerManager; -import android.text.TextUtils; - -import com.android.wallpaper.model.HubSectionController.HubSectionBatterySaverListener; - -/** - * Broadcast receiver for getting battery saver state and callback to - * {@link HubSectionBatterySaverListener} - */ -public class BatterySaverStateReceiver extends BroadcastReceiver { - - private final HubSectionBatterySaverListener mHubSectionBatterySaverListener; - - public BatterySaverStateReceiver(HubSectionBatterySaverListener batterySaverController) { - mHubSectionBatterySaverListener = batterySaverController; - } - - @Override - public void onReceive(Context context, Intent intent) { - if (TextUtils.equals(intent.getAction(), ACTION_POWER_SAVE_MODE_CHANGED)) { - PowerManager pm = context.getSystemService(PowerManager.class); - mHubSectionBatterySaverListener.onBatterySaverStateChanged(pm.isPowerSaveMode()); - } - } -} diff --git a/src/com/android/customization/model/mode/ModeSection.java b/src/com/android/customization/model/mode/DarkModeSectionController.java index 9096e07c..de639832 100644 --- a/src/com/android/customization/model/mode/ModeSection.java +++ b/src/com/android/customization/model/mode/DarkModeSectionController.java @@ -21,9 +21,12 @@ import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static android.os.PowerManager.ACTION_POWER_SAVE_MODE_CHANGED; import android.app.UiModeManager; +import android.content.BroadcastReceiver; import android.content.Context; +import android.content.Intent; import android.content.IntentFilter; import android.os.PowerManager; +import android.text.TextUtils; import android.view.LayoutInflater; import android.widget.Switch; import android.widget.Toast; @@ -34,32 +37,31 @@ import androidx.lifecycle.Lifecycle; import androidx.lifecycle.LifecycleObserver; import androidx.lifecycle.OnLifecycleEvent; -import com.android.customization.picker.mode.ModeSectionView; +import com.android.customization.picker.mode.DarkModeSectionView; import com.android.wallpaper.R; -import com.android.wallpaper.model.HubSectionController; -import com.android.wallpaper.model.HubSectionController.HubSectionBatterySaverListener; +import com.android.wallpaper.model.CustomizationSectionController; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -/** - * Section for dark theme toggle that controls if this section will be shown visually - */ -public class ModeSection implements HubSectionController<ModeSectionView>, LifecycleObserver, - HubSectionBatterySaverListener { +/** Section for dark theme toggle that controls if this section will be shown visually. */ +public class DarkModeSectionController implements + CustomizationSectionController<DarkModeSectionView>, LifecycleObserver { - private final Lifecycle mLifecycle; - private final BatterySaverStateReceiver mBatterySaverStateReceiver; + private static final ExecutorService sExecutorService = Executors.newSingleThreadExecutor(); - private static ExecutorService sExecutorService = Executors.newSingleThreadExecutor(); + private final Lifecycle mLifecycle; + private final PowerManager mPowerManager; + private final BatterySaverStateReceiver mBatterySaverStateReceiver = + new BatterySaverStateReceiver(); private Context mContext; - private ModeSectionView mModeSectionView; + private DarkModeSectionView mDarkModeSectionView; - public ModeSection(Context context, Lifecycle lifecycle) { + public DarkModeSectionController(Context context, Lifecycle lifecycle) { mContext = context; mLifecycle = lifecycle; - mBatterySaverStateReceiver = new BatterySaverStateReceiver(this); + mPowerManager = context.getSystemService(PowerManager.class); mLifecycle.addObserver(this); } @@ -101,20 +103,20 @@ public class ModeSection implements HubSectionController<ModeSectionView>, Lifec } @Override - public ModeSectionView createView(Context context) { - mModeSectionView = (ModeSectionView) LayoutInflater.from( - context).inflate(R.layout.mode_section_view, /* root= */ null); - mModeSectionView.setViewListener(this::onViewActivated); + public DarkModeSectionView createView(Context context) { + mDarkModeSectionView = (DarkModeSectionView) LayoutInflater.from( + context).inflate(R.layout.dark_mode_section_view, /* root= */ null); + mDarkModeSectionView.setViewListener(this::onViewActivated); PowerManager pm = context.getSystemService(PowerManager.class); - mModeSectionView.setEnabled(!pm.isPowerSaveMode()); - return mModeSectionView; + mDarkModeSectionView.setEnabled(!pm.isPowerSaveMode()); + return mDarkModeSectionView; } private void onViewActivated(Context context, boolean viewActivated) { if (context == null) { return; } - Switch switchView = mModeSectionView.findViewById(R.id.dark_mode_toggle); + Switch switchView = mDarkModeSectionView.findViewById(R.id.dark_mode_toggle); if (!switchView.isEnabled()) { Toast disableToast = Toast.makeText(mContext, mContext.getString(R.string.mode_disabled_msg), Toast.LENGTH_SHORT); @@ -125,8 +127,13 @@ public class ModeSection implements HubSectionController<ModeSectionView>, Lifec uiModeManager.setNightModeActivated(viewActivated); } - @Override - public void onBatterySaverStateChanged(boolean isEnabled) { - mModeSectionView.setEnabled(!isEnabled); + private class BatterySaverStateReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + if (TextUtils.equals(intent.getAction(), ACTION_POWER_SAVE_MODE_CHANGED) + && mDarkModeSectionView != null) { + mDarkModeSectionView.setEnabled(!mPowerManager.isPowerSaveMode()); + } + } } } diff --git a/src/com/android/customization/model/themedicon/ThemedIconSectionController.java b/src/com/android/customization/model/themedicon/ThemedIconSectionController.java index 32fbfa87..9ec5c2cb 100644 --- a/src/com/android/customization/model/themedicon/ThemedIconSectionController.java +++ b/src/com/android/customization/model/themedicon/ThemedIconSectionController.java @@ -22,14 +22,15 @@ import androidx.annotation.Nullable; import com.android.customization.picker.themedicon.ThemedIconSectionView; import com.android.wallpaper.R; -import com.android.wallpaper.model.HubSectionController; +import com.android.wallpaper.model.CustomizationSectionController; import com.android.wallpaper.model.WorkspaceViewModel; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -/** The {@link HubSectionController} for themed icon section. */ -public class ThemedIconSectionController implements HubSectionController<ThemedIconSectionView> { +/** The {@link CustomizationSectionController} for themed icon section. */ +public class ThemedIconSectionController implements + CustomizationSectionController<ThemedIconSectionView> { private final ThemedIconSwitchProvider mThemedIconOptionsProvider; private final WorkspaceViewModel mWorkspaceViewModel; diff --git a/src/com/android/customization/module/CustomizationInjector.java b/src/com/android/customization/module/CustomizationInjector.java index 722ebb3c..85853deb 100644 --- a/src/com/android/customization/module/CustomizationInjector.java +++ b/src/com/android/customization/module/CustomizationInjector.java @@ -16,11 +16,9 @@ package com.android.customization.module; import android.content.Context; -import android.content.Intent; import androidx.fragment.app.FragmentActivity; -import com.android.customization.model.CustomizationManager; import com.android.customization.model.theme.OverlayManagerCompat; import com.android.customization.model.theme.ThemeBundleProvider; import com.android.customization.model.theme.ThemeManager; @@ -32,31 +30,4 @@ public interface CustomizationInjector extends Injector { ThemeManager getThemeManager(ThemeBundleProvider provider, FragmentActivity activity, OverlayManagerCompat overlayManagerCompat, ThemesUserEventLogger logger); - - /** - * Obtain an extra CustomizationManager to add to the bottom nav - */ - default CustomizationManager<?> getExtraManager(FragmentActivity activity, - OverlayManagerCompat overlayManagerCompat, ThemesUserEventLogger eventLogger) { - return null; - } - - /** - * Obtain an extra Customization intent to start Activity if any. - * - * @param context The {@link Context} of the application - * @return intent The {@link Intent} to start Activity - */ - default Intent getCustomizeExtIntent(Context context) { - return null; - } - - /** - * Check if the system supporting customization extension. - * - * @return {@code true} if the system supports customization extension, {@code false} otherwise. - */ - default boolean supportsCustomizationExtended(Context context) { - return false; - } } diff --git a/src/com/android/customization/module/DefaultCustomizationInjector.java b/src/com/android/customization/module/DefaultCustomizationInjector.java index 5b5c11ef..24dfb588 100644 --- a/src/com/android/customization/module/DefaultCustomizationInjector.java +++ b/src/com/android/customization/module/DefaultCustomizationInjector.java @@ -31,8 +31,8 @@ import com.android.customization.model.theme.ThemeManager; import com.android.wallpaper.model.CategoryProvider; import com.android.wallpaper.model.WallpaperInfo; import com.android.wallpaper.module.BaseWallpaperInjector; +import com.android.wallpaper.module.CustomizationSections; import com.android.wallpaper.module.DefaultCategoryProvider; -import com.android.wallpaper.module.HubSections; import com.android.wallpaper.module.LoggingOptInStatusProvider; import com.android.wallpaper.module.WallpaperPreferences; import com.android.wallpaper.module.WallpaperRotationRefresher; @@ -47,7 +47,7 @@ public class DefaultCustomizationInjector extends BaseWallpaperInjector private WallpaperRotationRefresher mWallpaperRotationRefresher; private PerformanceMonitor mPerformanceMonitor; private WallpaperPreferences mPrefs; - private HubSections mHubSections; + private CustomizationSections mCustomizationSections; @Override public synchronized WallpaperPreferences getPreferences(Context context) { @@ -142,10 +142,10 @@ public class DefaultCustomizationInjector extends BaseWallpaperInjector } @Override - public HubSections getHubSections() { - if (mHubSections == null) { - mHubSections = new DefaultCustomizationSections(); + public CustomizationSections getCustomizationSections() { + if (mCustomizationSections == null) { + mCustomizationSections = new DefaultCustomizationSections(); } - return mHubSections; + return mCustomizationSections; } } diff --git a/src/com/android/customization/module/DefaultCustomizationSections.java b/src/com/android/customization/module/DefaultCustomizationSections.java index d35d1982..db9218fa 100644 --- a/src/com/android/customization/module/DefaultCustomizationSections.java +++ b/src/com/android/customization/module/DefaultCustomizationSections.java @@ -8,42 +8,44 @@ import androidx.lifecycle.LifecycleOwner; import com.android.customization.model.grid.GridOptionsManager; import com.android.customization.model.grid.GridSectionController; -import com.android.customization.model.mode.ModeSection; +import com.android.customization.model.mode.DarkModeSectionController; import com.android.customization.model.themedicon.ThemedIconSectionController; import com.android.customization.model.themedicon.ThemedIconSwitchProvider; import com.android.customization.model.themedicon.ThemedIconUtils; import com.android.wallpaper.R; -import com.android.wallpaper.model.HubSectionController; +import com.android.wallpaper.model.CustomizationSectionController; +import com.android.wallpaper.model.CustomizationSectionController.CustomizationSectionNavigationController; import com.android.wallpaper.model.PermissionRequester; import com.android.wallpaper.model.WallpaperColorsViewModel; import com.android.wallpaper.model.WallpaperPreviewNavigator; import com.android.wallpaper.model.WallpaperSectionController; import com.android.wallpaper.model.WorkspaceViewModel; -import com.android.wallpaper.module.HubSections; +import com.android.wallpaper.module.CustomizationSections; import java.util.ArrayList; import java.util.List; -/** {@link HubSections} for the customization picker. */ -public final class DefaultCustomizationSections implements HubSections { +/** {@link CustomizationSections} for the customization picker. */ +public final class DefaultCustomizationSections implements CustomizationSections { @Override - public List<HubSectionController<?>> getAllSectionControllers(Activity activity, + public List<CustomizationSectionController<?>> getAllSectionControllers(Activity activity, LifecycleOwner lifecycleOwner, WallpaperColorsViewModel wallpaperColorsViewModel, WorkspaceViewModel workspaceViewModel, PermissionRequester permissionRequester, WallpaperPreviewNavigator wallpaperPreviewNavigator, - HubSectionController.HubSectionNavigationController hubSectionNavigationController, + CustomizationSectionNavigationController sectionNavigationController, @Nullable Bundle savedInstanceState) { - List<HubSectionController<?>> sectionControllers = new ArrayList<>(); + List<CustomizationSectionController<?>> sectionControllers = new ArrayList<>(); // Wallpaper section. sectionControllers.add(new WallpaperSectionController( activity, lifecycleOwner, permissionRequester, wallpaperColorsViewModel, - workspaceViewModel, hubSectionNavigationController, wallpaperPreviewNavigator, + workspaceViewModel, sectionNavigationController, wallpaperPreviewNavigator, savedInstanceState)); // Dark/Light theme section. - sectionControllers.add(new ModeSection(activity, lifecycleOwner.getLifecycle())); + sectionControllers.add(new DarkModeSectionController(activity, + lifecycleOwner.getLifecycle())); // Themed app icon section. sectionControllers.add(new ThemedIconSectionController( @@ -53,7 +55,7 @@ public final class DefaultCustomizationSections implements HubSections { // App grid section. sectionControllers.add(new GridSectionController( - GridOptionsManager.get(activity), hubSectionNavigationController)); + GridOptionsManager.getInstance(activity), sectionNavigationController)); return sectionControllers; } diff --git a/src/com/android/customization/picker/grid/GridFragment.java b/src/com/android/customization/picker/grid/GridFragment.java index 18fb5a75..45cc18d8 100644 --- a/src/com/android/customization/picker/grid/GridFragment.java +++ b/src/com/android/customization/picker/grid/GridFragment.java @@ -134,7 +134,7 @@ public class GridFragment extends AppbarFragment { // Clear memory cache whenever grid fragment view is being loaded. Glide.get(getContext()).clearMemory(); - mGridManager = GridOptionsManager.get(getContext()); + mGridManager = GridOptionsManager.getInstance(getContext()); mEventLogger = (ThemesUserEventLogger) InjectorProvider.getInjector() .getUserEventLogger(getContext()); setUpOptions(savedInstanceState); diff --git a/src/com/android/customization/picker/grid/GridFullPreviewFragment.java b/src/com/android/customization/picker/grid/GridFullPreviewFragment.java index fc724dbc..f4b0219a 100644 --- a/src/com/android/customization/picker/grid/GridFullPreviewFragment.java +++ b/src/com/android/customization/picker/grid/GridFullPreviewFragment.java @@ -89,7 +89,7 @@ public class GridFullPreviewFragment extends AppbarFragment { SurfaceView wallpaperSurface = view.findViewById(R.id.wallpaper_preview_surface); mWallpaperPreviewer = new WallpaperPreviewer( getLifecycle(), getActivity(), wallpaperPreviewImage, wallpaperSurface); - mGridOptionPreviewer = new GridOptionPreviewer(GridOptionsManager.get(getContext()), + mGridOptionPreviewer = new GridOptionPreviewer(GridOptionsManager.getInstance(getContext()), view.findViewById(R.id.grid_preview_container)); return view; } diff --git a/src/com/android/customization/picker/mode/ModeSectionView.java b/src/com/android/customization/picker/mode/DarkModeSectionView.java index 37e90a5d..64b46222 100644 --- a/src/com/android/customization/picker/mode/ModeSectionView.java +++ b/src/com/android/customization/picker/mode/DarkModeSectionView.java @@ -25,14 +25,12 @@ import androidx.annotation.Nullable; import com.android.wallpaper.R; import com.android.wallpaper.picker.SectionView; -/** - * The view of section in the Customization Hub fragment. - */ -public final class ModeSectionView extends SectionView { +/** The view of section in the customization picker fragment. */ +public final class DarkModeSectionView extends SectionView { private boolean mIsDarkModeActivated; - public ModeSectionView(Context context, @Nullable AttributeSet attrs) { + public DarkModeSectionView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); setTitle(context.getString(R.string.mode_title)); mIsDarkModeActivated = (context.getResources().getConfiguration().uiMode |