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