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