blob: 7c15540ed0fc3489c2336c1cf23227d84407d71d [file] [log] [blame]
/*
* Copyright (C) 2019 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.testing
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.WallpaperInfo
import com.android.wallpaper.module.AlarmManagerWrapper
import com.android.wallpaper.module.BitmapCropper
import com.android.wallpaper.module.CurrentWallpaperInfoFactory
import com.android.wallpaper.module.CustomizationSections
import com.android.wallpaper.module.DefaultLiveWallpaperInfoFactory
import com.android.wallpaper.module.DrawableLayerResolver
import com.android.wallpaper.module.ExploreIntentChecker
import com.android.wallpaper.module.Injector
import com.android.wallpaper.module.LiveWallpaperInfoFactory
import com.android.wallpaper.module.NetworkStatusNotifier
import com.android.wallpaper.module.PackageStatusNotifier
import com.android.wallpaper.module.PartnerProvider
import com.android.wallpaper.module.SystemFeatureChecker
import com.android.wallpaper.module.UserEventLogger
import com.android.wallpaper.module.WallpaperPersister
import com.android.wallpaper.module.WallpaperPreferences
import com.android.wallpaper.module.WallpaperPreviewFragmentManager
import com.android.wallpaper.module.WallpaperRefresher
import com.android.wallpaper.module.WallpaperRotationRefresher
import com.android.wallpaper.module.WallpaperStatusChecker
import com.android.wallpaper.monitor.PerformanceMonitor
import com.android.wallpaper.network.Requester
import com.android.wallpaper.picker.ImagePreviewFragment
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
/** Test implementation of [Injector] */
open class TestInjector : Injector {
private var alarmManagerWrapper: AlarmManagerWrapper? = null
private var bitmapCropper: BitmapCropper? = null
private var categoryProvider: CategoryProvider? = null
private var currentWallpaperInfoFactory: CurrentWallpaperInfoFactory? = null
private var customizationSections: CustomizationSections? = null
private var drawableLayerResolver: DrawableLayerResolver? = null
private var exploreIntentChecker: ExploreIntentChecker? = 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 flags: BaseFlags? = null
private var undoInteractor: UndoInteractor? = null
override fun getAlarmManagerWrapper(context: Context): AlarmManagerWrapper {
return alarmManagerWrapper ?: TestAlarmManagerWrapper().also { alarmManagerWrapper = it }
}
override fun getBitmapCropper(): BitmapCropper {
return bitmapCropper ?: TestBitmapCropper().also { bitmapCropper = it }
}
override fun getCategoryProvider(context: Context): CategoryProvider {
return categoryProvider ?: TestCategoryProvider().also { categoryProvider = it }
}
override fun getCurrentWallpaperInfoFactory(context: Context): CurrentWallpaperInfoFactory {
return currentWallpaperInfoFactory
?: TestCurrentWallpaperInfoFactory(context.applicationContext).also {
currentWallpaperInfoFactory = it
}
}
override fun getCustomizationSections(activity: Activity): CustomizationSections {
return customizationSections
?: TestCustomizationSections().also { customizationSections = it }
}
override fun getDeepLinkRedirectIntent(context: Context, uri: Uri): Intent {
return Intent()
}
override fun getDisplayUtils(context: Context): DisplayUtils {
return DisplayUtils(context)
}
override fun getDownloadableIntentAction(): String? {
return null
}
override fun getDrawableLayerResolver(): DrawableLayerResolver {
return drawableLayerResolver
?: TestDrawableLayerResolver().also { drawableLayerResolver = it }
}
override fun getEffectsController(
context: Context,
listener: EffectsServiceListener
): EffectsController? {
return null
}
override fun getExploreIntentChecker(context: Context): ExploreIntentChecker {
return exploreIntentChecker ?: TestExploreIntentChecker().also { exploreIntentChecker = it }
}
override fun getIndividualPickerFragment(collectionId: String): IndividualPickerFragment {
return IndividualPickerFragment.newInstance(collectionId)
}
override fun getLiveWallpaperInfoFactory(context: Context): LiveWallpaperInfoFactory {
return DefaultLiveWallpaperInfoFactory()
}
override fun getNetworkStatusNotifier(context: Context): NetworkStatusNotifier {
return networkStatusNotifier
?: TestNetworkStatusNotifier().also { networkStatusNotifier = it }
}
override fun getPackageStatusNotifier(context: Context): PackageStatusNotifier {
return packageStatusNotifier
?: TestPackageStatusNotifier().also { packageStatusNotifier = it }
}
override fun getPartnerProvider(context: Context): PartnerProvider {
return partnerProvider ?: TestPartnerProvider().also { partnerProvider = it }
}
override fun getPerformanceMonitor(): PerformanceMonitor? {
return performanceMonitor ?: TestPerformanceMonitor().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 = ImagePreviewFragment()
fragment.arguments = args
return fragment
}
override fun getRequester(unused: Context): Requester {
return requester ?: TestRequester().also { requester = it }
}
override fun getSystemFeatureChecker(): SystemFeatureChecker {
return systemFeatureChecker ?: TestSystemFeatureChecker().also { systemFeatureChecker = it }
}
override fun getUserEventLogger(context: Context): UserEventLogger {
return userEventLogger ?: TestUserEventLogger().also { userEventLogger = it }
}
override fun getWallpaperManagerCompat(context: Context): WallpaperManagerCompat {
return wallpaperManagerCompat
?: TestWallpaperManagerCompat(context.applicationContext).also {
wallpaperManagerCompat = it
}
}
override fun getWallpaperPersister(context: Context): WallpaperPersister {
return wallpaperPersister
?: TestWallpaperPersister(context.applicationContext).also { wallpaperPersister = it }
}
override fun getPreferences(context: Context): WallpaperPreferences {
return prefs ?: TestWallpaperPreferences().also { prefs = it }
}
override fun getWallpaperPreviewFragmentManager(): WallpaperPreviewFragmentManager {
return wallpaperPreviewFragmentManager
?: TestWallpaperPreviewFragmentManager().also { wallpaperPreviewFragmentManager = it }
}
override fun getWallpaperRefresher(context: Context): WallpaperRefresher {
return wallpaperRefresher
?: TestWallpaperRefresher(context.applicationContext).also { wallpaperRefresher = it }
}
override fun getWallpaperRotationRefresher(): WallpaperRotationRefresher {
return wallpaperRotationRefresher
?: WallpaperRotationRefresher {
context: Context?,
listener: WallpaperRotationRefresher.Listener ->
// Not implemented
listener.onError()
}
.also { wallpaperRotationRefresher = it }
}
override fun getWallpaperStatusChecker(): WallpaperStatusChecker {
return object : WallpaperStatusChecker {
override fun isHomeStaticWallpaperSet(context: Context): Boolean {
return true
}
override fun isLockWallpaperSet(context: Context): Boolean {
return true
}
}
}
override fun getFlags(): BaseFlags {
return flags ?: object : BaseFlags() {}.also { flags = it }
}
override fun getUndoInteractor(context: Context): UndoInteractor {
return undoInteractor
?: UndoInteractor(
GlobalScope,
UndoRepository(),
HashMap()
) // Empty because we don't support undoing in WallpaperPicker2..also{}
}
}