• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.android.customization.module;
2 
3 import android.app.WallpaperManager;
4 import android.os.Bundle;
5 
6 import androidx.annotation.Nullable;
7 import androidx.fragment.app.FragmentActivity;
8 import androidx.lifecycle.LifecycleOwner;
9 import androidx.lifecycle.ViewModelProvider;
10 
11 import com.android.customization.model.grid.GridOptionsManager;
12 import com.android.customization.model.themedicon.ThemedIconSectionController;
13 import com.android.customization.model.themedicon.ThemedIconSwitchProvider;
14 import com.android.customization.model.themedicon.domain.interactor.ThemedIconInteractor;
15 import com.android.customization.model.themedicon.domain.interactor.ThemedIconSnapshotRestorer;
16 import com.android.customization.module.logging.ThemesUserEventLogger;
17 import com.android.customization.picker.clock.ui.view.ClockViewFactory;
18 import com.android.customization.picker.clock.ui.viewmodel.ClockCarouselViewModel;
19 import com.android.customization.picker.color.domain.interactor.ColorPickerInteractor;
20 import com.android.customization.picker.color.ui.section.ColorSectionController;
21 import com.android.customization.picker.color.ui.viewmodel.ColorPickerViewModel;
22 import com.android.customization.picker.grid.domain.interactor.GridInteractor;
23 import com.android.customization.picker.grid.ui.section.GridSectionController;
24 import com.android.customization.picker.notifications.ui.section.NotificationSectionController;
25 import com.android.customization.picker.notifications.ui.viewmodel.NotificationSectionViewModel;
26 import com.android.customization.picker.preview.ui.section.PreviewWithClockCarouselSectionController;
27 import com.android.customization.picker.preview.ui.section.PreviewWithThemeSectionController;
28 import com.android.customization.picker.quickaffordance.ui.section.KeyguardQuickAffordanceSectionController;
29 import com.android.customization.picker.quickaffordance.ui.viewmodel.KeyguardQuickAffordancePickerViewModel;
30 import com.android.customization.picker.settings.ui.section.ColorContrastSectionController;
31 import com.android.customization.picker.settings.ui.section.MoreSettingsSectionController;
32 import com.android.customization.picker.settings.ui.viewmodel.ColorContrastSectionViewModel;
33 import com.android.wallpaper.config.BaseFlags;
34 import com.android.wallpaper.model.CustomizationSectionController;
35 import com.android.wallpaper.model.CustomizationSectionController.CustomizationSectionNavigationController;
36 import com.android.wallpaper.model.PermissionRequester;
37 import com.android.wallpaper.model.Screen;
38 import com.android.wallpaper.model.WallpaperPreviewNavigator;
39 import com.android.wallpaper.module.CurrentWallpaperInfoFactory;
40 import com.android.wallpaper.module.CustomizationSections;
41 import com.android.wallpaper.picker.customization.data.repository.WallpaperColorsRepository;
42 import com.android.wallpaper.picker.customization.domain.interactor.WallpaperInteractor;
43 import com.android.wallpaper.picker.customization.ui.section.ConnectedSectionController;
44 import com.android.wallpaper.picker.customization.ui.section.WallpaperQuickSwitchSectionController;
45 import com.android.wallpaper.picker.customization.ui.viewmodel.CustomizationPickerViewModel;
46 import com.android.wallpaper.util.DisplayUtils;
47 
48 import java.util.ArrayList;
49 import java.util.List;
50 
51 /** {@link CustomizationSections} for the customization picker. */
52 public final class DefaultCustomizationSections implements CustomizationSections {
53 
54     private final ColorPickerViewModel.Factory mColorPickerViewModelFactory;
55     private final KeyguardQuickAffordancePickerViewModel.Factory
56             mKeyguardQuickAffordancePickerViewModelFactory;
57     private final ColorContrastSectionViewModel.Factory
58             mColorContrastSectionViewModelFactory;
59     private final NotificationSectionViewModel.Factory mNotificationSectionViewModelFactory;
60     private final BaseFlags mFlags;
61     private final ClockCarouselViewModel.Factory mClockCarouselViewModelFactory;
62     private final ClockViewFactory mClockViewFactory;
63     private final ThemedIconSnapshotRestorer mThemedIconSnapshotRestorer;
64     private final ThemedIconInteractor mThemedIconInteractor;
65     private final GridInteractor mGridInteractor;
66     private final ColorPickerInteractor mColorPickerInteractor;
67     private final ThemesUserEventLogger mThemesUserEventLogger;
68 
DefaultCustomizationSections( ColorPickerViewModel.Factory colorPickerViewModelFactory, KeyguardQuickAffordancePickerViewModel.Factory keyguardQuickAffordancePickerViewModelFactory, ColorContrastSectionViewModel.Factory colorContrastSectionViewModelFactory, NotificationSectionViewModel.Factory notificationSectionViewModelFactory, BaseFlags flags, ClockCarouselViewModel.Factory clockCarouselViewModelFactory, ClockViewFactory clockViewFactory, ThemedIconSnapshotRestorer themedIconSnapshotRestorer, ThemedIconInteractor themedIconInteractor, GridInteractor gridInteractor, ColorPickerInteractor colorPickerInteractor, ThemesUserEventLogger themesUserEventLogger)69     public DefaultCustomizationSections(
70             ColorPickerViewModel.Factory colorPickerViewModelFactory,
71             KeyguardQuickAffordancePickerViewModel.Factory
72                     keyguardQuickAffordancePickerViewModelFactory,
73             ColorContrastSectionViewModel.Factory colorContrastSectionViewModelFactory,
74             NotificationSectionViewModel.Factory notificationSectionViewModelFactory,
75             BaseFlags flags,
76             ClockCarouselViewModel.Factory clockCarouselViewModelFactory,
77             ClockViewFactory clockViewFactory,
78             ThemedIconSnapshotRestorer themedIconSnapshotRestorer,
79             ThemedIconInteractor themedIconInteractor,
80             GridInteractor gridInteractor,
81             ColorPickerInteractor colorPickerInteractor,
82             ThemesUserEventLogger themesUserEventLogger) {
83         mColorPickerViewModelFactory = colorPickerViewModelFactory;
84         mKeyguardQuickAffordancePickerViewModelFactory =
85                 keyguardQuickAffordancePickerViewModelFactory;
86         mNotificationSectionViewModelFactory = notificationSectionViewModelFactory;
87         mFlags = flags;
88         mClockCarouselViewModelFactory = clockCarouselViewModelFactory;
89         mClockViewFactory = clockViewFactory;
90         mThemedIconSnapshotRestorer = themedIconSnapshotRestorer;
91         mThemedIconInteractor = themedIconInteractor;
92         mGridInteractor = gridInteractor;
93         mColorPickerInteractor = colorPickerInteractor;
94         mThemesUserEventLogger = themesUserEventLogger;
95         mColorContrastSectionViewModelFactory = colorContrastSectionViewModelFactory;
96     }
97 
98     @Override
getSectionControllersForScreen( Screen screen, FragmentActivity activity, LifecycleOwner lifecycleOwner, WallpaperColorsRepository wallpaperColorsRepository, PermissionRequester permissionRequester, WallpaperPreviewNavigator wallpaperPreviewNavigator, CustomizationSectionNavigationController sectionNavigationController, @Nullable Bundle savedInstanceState, CurrentWallpaperInfoFactory wallpaperInfoFactory, DisplayUtils displayUtils, CustomizationPickerViewModel customizationPickerViewModel, WallpaperInteractor wallpaperInteractor, WallpaperManager wallpaperManager, boolean isTwoPaneAndSmallWidth)99     public List<CustomizationSectionController<?>> getSectionControllersForScreen(
100             Screen screen,
101             FragmentActivity activity,
102             LifecycleOwner lifecycleOwner,
103             WallpaperColorsRepository wallpaperColorsRepository,
104             PermissionRequester permissionRequester,
105             WallpaperPreviewNavigator wallpaperPreviewNavigator,
106             CustomizationSectionNavigationController sectionNavigationController,
107             @Nullable Bundle savedInstanceState,
108             CurrentWallpaperInfoFactory wallpaperInfoFactory,
109             DisplayUtils displayUtils,
110             CustomizationPickerViewModel customizationPickerViewModel,
111             WallpaperInteractor wallpaperInteractor,
112             WallpaperManager wallpaperManager,
113             boolean isTwoPaneAndSmallWidth) {
114         List<CustomizationSectionController<?>> sectionControllers = new ArrayList<>();
115 
116         // Wallpaper section.
117         sectionControllers.add(
118                 mFlags.isCustomClocksEnabled(activity)
119                         ? new PreviewWithClockCarouselSectionController(
120                         activity,
121                         lifecycleOwner,
122                         screen,
123                         wallpaperInfoFactory,
124                         wallpaperColorsRepository,
125                         displayUtils,
126                         mClockCarouselViewModelFactory,
127                         mClockViewFactory,
128                         wallpaperPreviewNavigator,
129                         sectionNavigationController,
130                         wallpaperInteractor,
131                         mThemedIconInteractor,
132                         mGridInteractor,
133                         mColorPickerInteractor,
134                         wallpaperManager,
135                         isTwoPaneAndSmallWidth,
136                         customizationPickerViewModel)
137                         : new PreviewWithThemeSectionController(
138                                 activity,
139                                 lifecycleOwner,
140                                 screen,
141                                 wallpaperInfoFactory,
142                                 wallpaperColorsRepository,
143                                 displayUtils,
144                                 wallpaperPreviewNavigator,
145                                 wallpaperInteractor,
146                                 mThemedIconInteractor,
147                                 mGridInteractor,
148                                 mColorPickerInteractor,
149                                 wallpaperManager,
150                                 isTwoPaneAndSmallWidth,
151                                 customizationPickerViewModel));
152 
153         sectionControllers.add(
154                 new ConnectedSectionController(
155                         // Theme color section.
156                         new ColorSectionController(
157                                 sectionNavigationController,
158                                 new ViewModelProvider(
159                                         activity,
160                                         mColorPickerViewModelFactory)
161                                         .get(ColorPickerViewModel.class),
162                                 lifecycleOwner),
163                         // Wallpaper quick switch section.
164                         new WallpaperQuickSwitchSectionController(
165                                 customizationPickerViewModel.getWallpaperQuickSwitchViewModel(
166                                         screen),
167                                 lifecycleOwner,
168                                 sectionNavigationController,
169                                 savedInstanceState == null),
170                         /* reverseOrderWhenHorizontal= */ true));
171 
172         switch (screen) {
173             case LOCK_SCREEN:
174                 // Lock screen quick affordances section.
175                 sectionControllers.add(
176                         new KeyguardQuickAffordanceSectionController(
177                                 sectionNavigationController,
178                                 new ViewModelProvider(
179                                         activity,
180                                         mKeyguardQuickAffordancePickerViewModelFactory)
181                                         .get(KeyguardQuickAffordancePickerViewModel.class),
182                                 lifecycleOwner));
183 
184                 // Notifications section.
185                 sectionControllers.add(
186                         new NotificationSectionController(
187                                 new ViewModelProvider(
188                                         activity,
189                                         mNotificationSectionViewModelFactory)
190                                         .get(NotificationSectionViewModel.class),
191                                 lifecycleOwner));
192 
193                 // More settings section.
194                 sectionControllers.add(new MoreSettingsSectionController());
195                 break;
196 
197             case HOME_SCREEN:
198                 // Themed app icon section.
199                 sectionControllers.add(
200                         new ThemedIconSectionController(
201                                 ThemedIconSwitchProvider.getInstance(activity),
202                                 mThemedIconInteractor,
203                                 savedInstanceState,
204                                 mThemedIconSnapshotRestorer,
205                                 mThemesUserEventLogger));
206 
207                 // Color contrast section
208                 if (mFlags.isColorContrastControlEnabled()) {
209                     sectionControllers.add(
210                             new ColorContrastSectionController(new ViewModelProvider(activity,
211                                     mColorContrastSectionViewModelFactory)
212                                     .get(ColorContrastSectionViewModel.class), lifecycleOwner));
213                 }
214                 // App grid section.
215                 sectionControllers.add(
216                         new GridSectionController(
217                                 GridOptionsManager.getInstance(activity),
218                                 sectionNavigationController,
219                                 lifecycleOwner));
220                 break;
221         }
222 
223         return sectionControllers;
224     }
225 }
226