blob: d97e4beade0aef3e640d9e6c33d68d4625aa9564 [file] [log] [blame]
/*
* Copyright (C) 2017 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.wallpaper.module
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import androidx.fragment.app.Fragment
import com.android.wallpaper.compat.WallpaperManagerCompat
import com.android.wallpaper.config.BaseFlags
import com.android.wallpaper.effects.EffectsController
import com.android.wallpaper.effects.EffectsController.EffectsServiceListener
import com.android.wallpaper.model.CategoryProvider
import com.android.wallpaper.model.LiveWallpaperInfo
import com.android.wallpaper.model.WallpaperInfo
import com.android.wallpaper.monitor.PerformanceMonitor
import com.android.wallpaper.network.Requester
import com.android.wallpaper.network.WallpaperRequester
import com.android.wallpaper.picker.CustomizationPickerActivity
import com.android.wallpaper.picker.ImagePreviewFragment
import com.android.wallpaper.picker.LivePreviewFragment
import com.android.wallpaper.picker.PreviewFragment
import com.android.wallpaper.picker.individual.IndividualPickerFragment
import com.android.wallpaper.picker.undo.data.repository.UndoRepository
import com.android.wallpaper.picker.undo.domain.interactor.UndoInteractor
import com.android.wallpaper.util.DisplayUtils
import kotlinx.coroutines.GlobalScope
open class WallpaperPicker2Injector : Injector {
private var alarmManagerWrapper: AlarmManagerWrapper? = null
private var bitmapCropper: BitmapCropper? = null
private var categoryProvider: CategoryProvider? = null
private var currentWallpaperFactory: CurrentWallpaperInfoFactory? = null
private var customizationSections: CustomizationSections? = null
private var displayUtils: DisplayUtils? = null
private var drawableLayerResolver: DrawableLayerResolver? = null
private var exploreIntentChecker: ExploreIntentChecker? = null
private var liveWallpaperInfoFactory: LiveWallpaperInfoFactory? = null
private var networkStatusNotifier: NetworkStatusNotifier? = null
private var packageStatusNotifier: PackageStatusNotifier? = null
private var partnerProvider: PartnerProvider? = null
private var performanceMonitor: PerformanceMonitor? = null
private var requester: Requester? = null
private var systemFeatureChecker: SystemFeatureChecker? = null
private var userEventLogger: UserEventLogger? = null
private var wallpaperManagerCompat: WallpaperManagerCompat? = null
private var wallpaperPersister: WallpaperPersister? = null
private var prefs: WallpaperPreferences? = null
private var wallpaperPreviewFragmentManager: WallpaperPreviewFragmentManager? = null
private var wallpaperRefresher: WallpaperRefresher? = null
private var wallpaperRotationRefresher: WallpaperRotationRefresher? = null
private var wallpaperStatusChecker: WallpaperStatusChecker? = null
private var flags: BaseFlags? = null
private var undoInteractor: UndoInteractor? = null
@Synchronized
override fun getAlarmManagerWrapper(context: Context): AlarmManagerWrapper {
return alarmManagerWrapper
?: DefaultAlarmManagerWrapper(context.applicationContext).also {
alarmManagerWrapper = it
}
}
@Synchronized
override fun getBitmapCropper(): BitmapCropper {
return bitmapCropper ?: DefaultBitmapCropper().also { bitmapCropper = it }
}
override fun getCategoryProvider(context: Context): CategoryProvider {
return categoryProvider
?: DefaultCategoryProvider(context.applicationContext).also { categoryProvider = it }
}
@Synchronized
override fun getCurrentWallpaperInfoFactory(context: Context): CurrentWallpaperInfoFactory {
return currentWallpaperFactory
?: DefaultCurrentWallpaperInfoFactory(context.applicationContext).also {
currentWallpaperFactory = it
}
}
override fun getCustomizationSections(activity: Activity): CustomizationSections {
return customizationSections
?: WallpaperPickerSections().also { customizationSections = it }
}
override fun getDeepLinkRedirectIntent(context: Context, uri: Uri): Intent {
val intent = Intent()
intent.setClass(context, CustomizationPickerActivity::class.java)
intent.data = uri
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
return intent
}
override fun getDisplayUtils(context: Context): DisplayUtils {
return displayUtils ?: DisplayUtils(context.applicationContext).also { displayUtils = it }
}
override fun getDownloadableIntentAction(): String? {
return null
}
override fun getDrawableLayerResolver(): DrawableLayerResolver {
return drawableLayerResolver
?: DefaultDrawableLayerResolver().also { drawableLayerResolver = it }
}
override fun getEffectsController(
context: Context,
listener: EffectsServiceListener
): EffectsController? {
return null
}
@Synchronized
override fun getExploreIntentChecker(context: Context): ExploreIntentChecker {
return exploreIntentChecker
?: DefaultExploreIntentChecker(context.applicationContext).also {
exploreIntentChecker = it
}
}
@Synchronized
override fun getIndividualPickerFragment(collectionId: String): Fragment {
return IndividualPickerFragment.newInstance(collectionId)
}
override fun getLiveWallpaperInfoFactory(context: Context): LiveWallpaperInfoFactory {
return liveWallpaperInfoFactory
?: DefaultLiveWallpaperInfoFactory().also { liveWallpaperInfoFactory = it }
}
@Synchronized
override fun getNetworkStatusNotifier(context: Context): NetworkStatusNotifier {
return networkStatusNotifier
?: DefaultNetworkStatusNotifier(context.applicationContext).also {
networkStatusNotifier = it
}
}
@Synchronized
override fun getPackageStatusNotifier(context: Context): PackageStatusNotifier {
return packageStatusNotifier
?: DefaultPackageStatusNotifier(context.applicationContext).also {
packageStatusNotifier = it
}
}
@Synchronized
override fun getPartnerProvider(context: Context): PartnerProvider {
return partnerProvider
?: DefaultPartnerProvider(context.applicationContext).also { partnerProvider = it }
}
@Synchronized
override fun getPerformanceMonitor(): PerformanceMonitor? {
return performanceMonitor
?: PerformanceMonitor {
/** No Op */
}
.also { performanceMonitor = it }
}
override fun getPreviewFragment(
context: Context,
wallpaperInfo: WallpaperInfo,
mode: Int,
viewAsHome: Boolean,
viewFullScreen: Boolean,
testingModeEnabled: Boolean
): Fragment {
val args = Bundle()
args.putParcelable(PreviewFragment.ARG_WALLPAPER, wallpaperInfo)
args.putInt(PreviewFragment.ARG_PREVIEW_MODE, mode)
args.putBoolean(PreviewFragment.ARG_VIEW_AS_HOME, viewAsHome)
args.putBoolean(PreviewFragment.ARG_FULL_SCREEN, viewFullScreen)
args.putBoolean(PreviewFragment.ARG_TESTING_MODE_ENABLED, testingModeEnabled)
val fragment =
if (wallpaperInfo is LiveWallpaperInfo) LivePreviewFragment()
else ImagePreviewFragment()
fragment.arguments = args
return fragment
}
@Synchronized
override fun getRequester(context: Context): Requester {
return requester ?: WallpaperRequester(context.applicationContext).also { requester = it }
}
@Synchronized
override fun getSystemFeatureChecker(): SystemFeatureChecker {
return systemFeatureChecker
?: DefaultSystemFeatureChecker().also { systemFeatureChecker = it }
}
override fun getUserEventLogger(context: Context): UserEventLogger {
return userEventLogger ?: NoOpUserEventLogger().also { userEventLogger = it }
}
@Synchronized
override fun getWallpaperManagerCompat(context: Context): WallpaperManagerCompat {
return wallpaperManagerCompat
?: WallpaperManagerCompat.getInstance(context).also { wallpaperManagerCompat = it }
}
@Synchronized
override fun getWallpaperPersister(context: Context): WallpaperPersister {
return wallpaperPersister
?: DefaultWallpaperPersister(context.applicationContext).also {
wallpaperPersister = it
}
}
@Synchronized
override fun getPreferences(context: Context): WallpaperPreferences {
return prefs ?: DefaultWallpaperPreferences(context.applicationContext).also { prefs = it }
}
@Synchronized
override fun getWallpaperPreviewFragmentManager(): WallpaperPreviewFragmentManager {
return wallpaperPreviewFragmentManager
?: DefaultWallpaperPreviewFragmentManager().also {
wallpaperPreviewFragmentManager = it
}
}
@Synchronized
override fun getWallpaperRefresher(context: Context): WallpaperRefresher {
return wallpaperRefresher
?: DefaultWallpaperRefresher(context.applicationContext).also {
wallpaperRefresher = it
}
}
@Synchronized
override fun getWallpaperRotationRefresher(): WallpaperRotationRefresher {
return wallpaperRotationRefresher
?: WallpaperRotationRefresher { _, listener ->
// Not implemented
listener.onError()
}
.also { wallpaperRotationRefresher = it }
}
override fun getWallpaperStatusChecker(): WallpaperStatusChecker {
return wallpaperStatusChecker
?: DefaultWallpaperStatusChecker().also { wallpaperStatusChecker = it }
}
override fun getFlags(): BaseFlags {
return flags ?: object : BaseFlags() {}.also { flags = it }
}
override fun getUndoInteractor(context: Context): UndoInteractor {
return undoInteractor
?: UndoInteractor(GlobalScope, UndoRepository(), getSnapshotRestorers(context)).also {
undoInteractor = it
}
}
companion object {
/**
* When this injector is overridden, this is the minimal value that should be used by
* restorers returns in [getSnapshotRestorers].
*/
@JvmStatic protected val MIN_SNAPSHOT_RESTORER_KEY = 0
}
}