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