• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2019 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.wallpaper.testing
17 
18 import android.app.WallpaperColors
19 import android.graphics.Bitmap
20 import android.graphics.Color
21 import android.graphics.Point
22 import android.graphics.Rect
23 import android.net.Uri
24 import com.android.wallpaper.model.LiveWallpaperInfo
25 import com.android.wallpaper.model.LiveWallpaperPrefMetadata
26 import com.android.wallpaper.model.StaticWallpaperPrefMetadata
27 import com.android.wallpaper.model.WallpaperInfo
28 import com.android.wallpaper.module.WallpaperPersister
29 import com.android.wallpaper.module.WallpaperPreferences
30 import com.android.wallpaper.module.WallpaperPreferences.PendingDailyWallpaperUpdateStatus
31 import com.android.wallpaper.module.WallpaperPreferences.PendingWallpaperSetStatus
32 import com.android.wallpaper.module.WallpaperPreferences.PresentationMode
33 import com.android.wallpaper.picker.customization.shared.model.WallpaperDestination
34 import com.android.wallpaper.picker.data.WallpaperModel
35 import java.text.SimpleDateFormat
36 import java.util.Calendar
37 import java.util.Locale
38 import java.util.TimeZone
39 import javax.inject.Inject
40 import javax.inject.Singleton
41 
42 /** Test implementation of the WallpaperPreferences interface. Just keeps prefs in memory. */
43 @Singleton
44 open class TestWallpaperPreferences @Inject constructor() : WallpaperPreferences {
45 
46     private var appLaunchCount = 0
47     private var firstLaunchDate = 0
48     private var firstWallpaperApplyDate = 0
49     @PresentationMode private var wallpaperPresentationMode: Int
50     private var homeScreenAttributions: List<String?>?
51     private var homeScreenBitmapHashCode: Long = 0
52     private var homeWallpaperManagerId = 0
53     private var homeScreenServiceName: String? = null
54     private var lockScreenServiceName: String? = null
55     private var homeActionUrl: String? = null
56     private val homeBaseImageUrl: String? = null
57     private var homeCollectionId: String? = null
58     private var homeWallpaperRemoteId: String? = null
59     private var homeWallpaperRecentsKey: String? = null
60     private var lockScreenAttributions: List<String?>?
61     private var lockScreenBitmapHashCode: Long = 0
62     private var lockWallpaperManagerId = 0
63     private var lockActionUrl: String? = null
64     private var lockCollectionId: String? = null
65     private var lockWallpaperRemoteId: String? = null
66     private var lockWallpaperRecentsKey: String? = null
67     private val dailyRotations: MutableList<Long>
68     private var dailyWallpaperEnabledTimestamp: Long
69     private var lastDailyLogTimestamp: Long
70     private var lastAppActiveTimestamp: Long = 0
71     private var lastDailyWallpaperRotationStatus: Int
72     private var lastDailyWallpaperRotationStatusTimestamp: Long = 0
73     private val lastSyncTimestamp: Long = 0
74 
75     @PendingWallpaperSetStatus private var mPendingWallpaperSetStatus: Int
76 
77     @PendingDailyWallpaperUpdateStatus private var mPendingDailyWallpaperUpdateStatus = 0
78     private var mNumDaysDailyRotationFailed = 0
79     private var mNumDaysDailyRotationNotAttempted = 0
80     private var mHomeWallpaperEffects: String? = null
81     private var mLockWallpaperEffects: String? = null
82     private var mHomeStaticWallpaperPrefMetadata: StaticWallpaperPrefMetadata? = null
83     private var mLockStaticWallpaperPrefMetadata: StaticWallpaperPrefMetadata? = null
84     private var mHomeLiveWallpaperPrefMetadata: LiveWallpaperPrefMetadata? = null
85     private var mLockLiveWallpaperPrefMetadata: LiveWallpaperPrefMetadata? = null
86     private val mWallStoredColor: HashMap<String, String> = HashMap()
87 
88     private var hasSmallPreviewTooltipBeenShown = false
89     private var hasFullPreviewTooltipBeenShown = false
90 
91     init {
92         wallpaperPresentationMode = WallpaperPreferences.PRESENTATION_MODE_STATIC
93         homeScreenAttributions = mutableListOf<String?>("Android wallpaper")
94         lockScreenAttributions = mutableListOf("Android wallpaper")
95         dailyRotations = ArrayList()
96         dailyWallpaperEnabledTimestamp = -1
97         lastDailyLogTimestamp = -1
98         lastDailyWallpaperRotationStatus = -1
99         mPendingWallpaperSetStatus = WallpaperPreferences.WALLPAPER_SET_NOT_PENDING
100     }
101 
getWallpaperPresentationModenull102     override fun getWallpaperPresentationMode(): Int {
103         return wallpaperPresentationMode
104     }
105 
setWallpaperPresentationModenull106     override fun setWallpaperPresentationMode(@PresentationMode presentationMode: Int) {
107         wallpaperPresentationMode = presentationMode
108     }
109 
getHomeWallpaperAttributionsnull110     override fun getHomeWallpaperAttributions(): List<String?>? {
111         return homeScreenAttributions
112     }
113 
setHomeWallpaperAttributionsnull114     override fun setHomeWallpaperAttributions(attributions: List<String?>?) {
115         homeScreenAttributions = attributions
116     }
117 
getHomeWallpaperActionUrlnull118     override fun getHomeWallpaperActionUrl(): String? {
119         return homeActionUrl
120     }
121 
setHomeWallpaperActionUrlnull122     override fun setHomeWallpaperActionUrl(actionUrl: String?) {
123         homeActionUrl = actionUrl
124     }
125 
getHomeWallpaperCollectionIdnull126     override fun getHomeWallpaperCollectionId(): String? {
127         return homeCollectionId
128     }
129 
setHomeWallpaperCollectionIdnull130     override fun setHomeWallpaperCollectionId(collectionId: String?) {
131         homeCollectionId = collectionId
132     }
133 
clearHomeWallpaperMetadatanull134     override fun clearHomeWallpaperMetadata() {
135         homeScreenAttributions = null
136         wallpaperPresentationMode = WallpaperPreferences.PRESENTATION_MODE_STATIC
137         homeScreenBitmapHashCode = 0
138         homeScreenServiceName = null
139         homeWallpaperManagerId = 0
140     }
141 
setHomeStaticImageWallpaperMetadatanull142     override fun setHomeStaticImageWallpaperMetadata(metadata: StaticWallpaperPrefMetadata) {
143         mHomeStaticWallpaperPrefMetadata = metadata
144     }
145 
setHomeLiveWallpaperMetadatanull146     override fun setHomeLiveWallpaperMetadata(metadata: LiveWallpaperPrefMetadata) {
147         mHomeLiveWallpaperPrefMetadata = metadata
148     }
149 
getHomeWallpaperHashCodenull150     override fun getHomeWallpaperHashCode(): Long {
151         return homeScreenBitmapHashCode
152     }
153 
setHomeWallpaperHashCodenull154     override fun setHomeWallpaperHashCode(hashCode: Long) {
155         homeScreenBitmapHashCode = hashCode
156     }
157 
getHomeWallpaperServiceNamenull158     override fun getHomeWallpaperServiceName(): String? {
159         return homeScreenServiceName
160     }
161 
setHomeWallpaperServiceNamenull162     override fun setHomeWallpaperServiceName(serviceName: String?) {
163         homeScreenServiceName = serviceName
164         setFirstWallpaperApplyDateIfNeeded()
165     }
166 
getHomeWallpaperManagerIdnull167     override fun getHomeWallpaperManagerId(): Int {
168         return homeWallpaperManagerId
169     }
170 
setHomeWallpaperManagerIdnull171     override fun setHomeWallpaperManagerId(homeWallpaperId: Int) {
172         homeWallpaperManagerId = homeWallpaperId
173     }
174 
getHomeWallpaperRemoteIdnull175     override fun getHomeWallpaperRemoteId(): String? {
176         return homeWallpaperRemoteId
177     }
178 
setHomeWallpaperRemoteIdnull179     override fun setHomeWallpaperRemoteId(wallpaperRemoteId: String?) {
180         homeWallpaperRemoteId = wallpaperRemoteId
181         setFirstWallpaperApplyDateIfNeeded()
182     }
183 
getHomeWallpaperRecentsKeynull184     override fun getHomeWallpaperRecentsKey(): String? {
185         return homeWallpaperRecentsKey
186     }
187 
setHomeWallpaperRecentsKeynull188     override fun setHomeWallpaperRecentsKey(recentsKey: String?) {
189         homeWallpaperRecentsKey = recentsKey
190     }
191 
getHomeWallpaperEffectsnull192     override fun getHomeWallpaperEffects(): String? {
193         return mHomeWallpaperEffects
194     }
195 
setHomeWallpaperEffectsnull196     override fun setHomeWallpaperEffects(wallpaperEffects: String?) {
197         mHomeWallpaperEffects = wallpaperEffects
198     }
199 
getHomeWallpaperImageUrinull200     override fun getHomeWallpaperImageUri(): Uri? {
201         return mHomeStaticWallpaperPrefMetadata?.imageUri
202     }
203 
getLockWallpaperAttributionsnull204     override fun getLockWallpaperAttributions(): List<String?>? {
205         return lockScreenAttributions
206     }
207 
setLockWallpaperAttributionsnull208     override fun setLockWallpaperAttributions(attributions: List<String?>?) {
209         lockScreenAttributions = attributions
210     }
211 
getLockWallpaperActionUrlnull212     override fun getLockWallpaperActionUrl(): String? {
213         return lockActionUrl
214     }
215 
setLockWallpaperActionUrlnull216     override fun setLockWallpaperActionUrl(actionUrl: String?) {
217         lockActionUrl = actionUrl
218     }
219 
getLockWallpaperCollectionIdnull220     override fun getLockWallpaperCollectionId(): String? {
221         return lockCollectionId
222     }
223 
setLockWallpaperCollectionIdnull224     override fun setLockWallpaperCollectionId(collectionId: String?) {
225         lockCollectionId = collectionId
226     }
227 
clearLockWallpaperMetadatanull228     override fun clearLockWallpaperMetadata() {
229         lockScreenAttributions = null
230         lockScreenBitmapHashCode = 0
231         lockWallpaperManagerId = 0
232     }
233 
setLockStaticImageWallpaperMetadatanull234     override fun setLockStaticImageWallpaperMetadata(metadata: StaticWallpaperPrefMetadata) {
235         mLockStaticWallpaperPrefMetadata = metadata
236     }
237 
setLockLiveWallpaperMetadatanull238     override fun setLockLiveWallpaperMetadata(metadata: LiveWallpaperPrefMetadata) {
239         mLockLiveWallpaperPrefMetadata = metadata
240     }
241 
getLockWallpaperHashCodenull242     override fun getLockWallpaperHashCode(): Long {
243         return lockScreenBitmapHashCode
244     }
245 
setLockWallpaperHashCodenull246     override fun setLockWallpaperHashCode(hashCode: Long) {
247         lockScreenBitmapHashCode = hashCode
248     }
249 
getLockWallpaperServiceNamenull250     override fun getLockWallpaperServiceName(): String? {
251         return lockScreenServiceName
252     }
253 
setLockWallpaperServiceNamenull254     override fun setLockWallpaperServiceName(serviceName: String?) {
255         lockScreenServiceName = serviceName
256     }
257 
getLockWallpaperManagerIdnull258     override fun getLockWallpaperManagerId(): Int {
259         return lockWallpaperManagerId
260     }
261 
setLockWallpaperManagerIdnull262     override fun setLockWallpaperManagerId(lockWallpaperId: Int) {
263         lockWallpaperManagerId = lockWallpaperId
264     }
265 
getLockWallpaperRemoteIdnull266     override fun getLockWallpaperRemoteId(): String? {
267         return lockWallpaperRemoteId
268     }
269 
setLockWallpaperRemoteIdnull270     override fun setLockWallpaperRemoteId(wallpaperRemoteId: String?) {
271         lockWallpaperRemoteId = wallpaperRemoteId
272         setFirstWallpaperApplyDateIfNeeded()
273     }
274 
getLockWallpaperRecentsKeynull275     override fun getLockWallpaperRecentsKey(): String? {
276         return lockWallpaperRecentsKey
277     }
278 
setLockWallpaperRecentsKeynull279     override fun setLockWallpaperRecentsKey(recentsKey: String?) {
280         lockWallpaperRecentsKey = recentsKey
281     }
282 
getLockWallpaperEffectsnull283     override fun getLockWallpaperEffects(): String? {
284         return mLockWallpaperEffects
285     }
286 
setLockWallpaperEffectsnull287     override fun setLockWallpaperEffects(wallpaperEffects: String?) {
288         mLockWallpaperEffects = wallpaperEffects
289     }
290 
getLockWallpaperImageUrinull291     override fun getLockWallpaperImageUri(): Uri? {
292         return mLockStaticWallpaperPrefMetadata?.imageUri
293     }
294 
addDailyRotationnull295     override fun addDailyRotation(timestamp: Long) {
296         dailyRotations.add(timestamp)
297     }
298 
getLastDailyRotationTimestampnull299     override fun getLastDailyRotationTimestamp(): Long {
300         return if (dailyRotations.size == 0) {
301             -1
302         } else dailyRotations[dailyRotations.size - 1]
303     }
304 
getDailyWallpaperEnabledTimestampnull305     override fun getDailyWallpaperEnabledTimestamp(): Long {
306         return dailyWallpaperEnabledTimestamp
307     }
308 
setDailyWallpaperEnabledTimestampnull309     override fun setDailyWallpaperEnabledTimestamp(timestamp: Long) {
310         dailyWallpaperEnabledTimestamp = timestamp
311     }
312 
clearDailyRotationsnull313     override fun clearDailyRotations() {
314         dailyRotations.clear()
315     }
316 
getLastDailyLogTimestampnull317     override fun getLastDailyLogTimestamp(): Long {
318         return lastDailyLogTimestamp
319     }
320 
setLastDailyLogTimestampnull321     override fun setLastDailyLogTimestamp(timestamp: Long) {
322         lastDailyLogTimestamp = timestamp
323     }
324 
getLastAppActiveTimestampnull325     override fun getLastAppActiveTimestamp(): Long {
326         return lastAppActiveTimestamp
327     }
328 
setLastAppActiveTimestampnull329     override fun setLastAppActiveTimestamp(timestamp: Long) {
330         lastAppActiveTimestamp = timestamp
331     }
332 
setDailyWallpaperRotationStatusnull333     override fun setDailyWallpaperRotationStatus(status: Int, timestamp: Long) {
334         lastDailyWallpaperRotationStatus = status
335         lastDailyWallpaperRotationStatusTimestamp = timestamp
336     }
337 
setPendingWallpaperSetStatusSyncnull338     override fun setPendingWallpaperSetStatusSync(@PendingWallpaperSetStatus setStatus: Int) {
339         mPendingWallpaperSetStatus = setStatus
340     }
341 
342     @PendingWallpaperSetStatus
getPendingWallpaperSetStatusnull343     override fun getPendingWallpaperSetStatus(): Int {
344         return mPendingWallpaperSetStatus
345     }
346 
setPendingWallpaperSetStatusnull347     override fun setPendingWallpaperSetStatus(@PendingWallpaperSetStatus setStatus: Int) {
348         mPendingWallpaperSetStatus = setStatus
349     }
350 
setPendingDailyWallpaperUpdateStatusSyncnull351     override fun setPendingDailyWallpaperUpdateStatusSync(
352         @PendingDailyWallpaperUpdateStatus updateStatus: Int
353     ) {
354         mPendingDailyWallpaperUpdateStatus = updateStatus
355     }
356 
357     @PendingDailyWallpaperUpdateStatus
getPendingDailyWallpaperUpdateStatusnull358     override fun getPendingDailyWallpaperUpdateStatus(): Int {
359         return mPendingDailyWallpaperUpdateStatus
360     }
361 
setPendingDailyWallpaperUpdateStatusnull362     override fun setPendingDailyWallpaperUpdateStatus(
363         @PendingDailyWallpaperUpdateStatus updateStatus: Int
364     ) {
365         mPendingDailyWallpaperUpdateStatus = updateStatus
366     }
367 
getAppLaunchCountnull368     override fun getAppLaunchCount(): Int {
369         return appLaunchCount
370     }
371 
getFirstLaunchDateSinceSetupnull372     override fun getFirstLaunchDateSinceSetup(): Int {
373         return firstLaunchDate
374     }
375 
incrementAppLaunchednull376     override fun incrementAppLaunched() {
377         if (getFirstLaunchDateSinceSetup() == 0) {
378             setFirstLaunchDateSinceSetup(getCurrentDate())
379         }
380         val appLaunchCount = getAppLaunchCount()
381         if (appLaunchCount < Int.MAX_VALUE) {
382             setAppLaunchCount(appLaunchCount + 1)
383         }
384     }
385 
getFirstWallpaperApplyDateSinceSetupnull386     override fun getFirstWallpaperApplyDateSinceSetup(): Int {
387         return firstWallpaperApplyDate
388     }
389 
storeWallpaperColorsnull390     override fun storeWallpaperColors(
391         storedWallpaperId: String?,
392         wallpaperColors: WallpaperColors?,
393     ) {
394         if (storedWallpaperId == null || wallpaperColors == null) {
395             return
396         }
397         val primaryColor = wallpaperColors.primaryColor
398         var value = java.lang.String(primaryColor.toArgb().toString()) as String
399         val secondaryColor = wallpaperColors.secondaryColor
400         if (secondaryColor != null) {
401             value += "," + secondaryColor.toArgb()
402         }
403         val tertiaryColor = wallpaperColors.tertiaryColor
404         if (tertiaryColor != null) {
405             value += "," + tertiaryColor.toArgb()
406         }
407         mWallStoredColor[storedWallpaperId] = value
408     }
409 
getWallpaperColorsnull410     override fun getWallpaperColors(storedWallpaperId: String): WallpaperColors? {
411         if (mWallStoredColor.isEmpty()) {
412             return null
413         }
414         val value = mWallStoredColor[storedWallpaperId]
415         if (value == "") {
416             return null
417         }
418         val colorStrings =
419             value!!.split(",".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
420         val colorPrimary = Color.valueOf(colorStrings[0].toInt())
421         var colorSecondary: Color? = null
422         if (colorStrings.size >= 2) {
423             colorSecondary = Color.valueOf(colorStrings[1].toInt())
424         }
425         var colorTerTiary: Color? = null
426         if (colorStrings.size >= 3) {
427             colorTerTiary = Color.valueOf(colorStrings[2].toInt())
428         }
429         return WallpaperColors(
430             colorPrimary,
431             colorSecondary,
432             colorTerTiary,
433             WallpaperColors.HINT_FROM_BITMAP,
434         )
435     }
436 
updateDailyWallpaperSetnull437     override fun updateDailyWallpaperSet(
438         @WallpaperPersister.Destination destination: Int,
439         collectionId: String?,
440         wallpaperId: String?,
441     ) {
442         // Assign wallpaper info by destination.
443         when (destination) {
444             WallpaperPersister.DEST_HOME_SCREEN -> {
445                 setHomeWallpaperCollectionId(collectionId!!)
446                 setHomeWallpaperRemoteId(wallpaperId)
447             }
448             WallpaperPersister.DEST_LOCK_SCREEN -> {
449                 setLockWallpaperCollectionId(collectionId!!)
450                 setLockWallpaperRemoteId(wallpaperId!!)
451             }
452             WallpaperPersister.DEST_BOTH -> {
453                 setHomeWallpaperCollectionId(collectionId!!)
454                 setHomeWallpaperRemoteId(wallpaperId)
455                 setLockWallpaperCollectionId(collectionId)
456                 setLockWallpaperRemoteId(wallpaperId!!)
457             }
458         }
459     }
460 
storeLatestWallpapernull461     override fun storeLatestWallpaper(
462         which: Int,
463         wallpaperId: String,
464         wallpaper: LiveWallpaperInfo,
465         colors: WallpaperColors,
466     ) {}
467 
storeLatestWallpapernull468     override fun storeLatestWallpaper(
469         which: Int,
470         wallpaperId: String,
471         wallpaper: WallpaperInfo,
472         croppedWallpaperBitmap: Bitmap,
473         colors: WallpaperColors,
474     ) {}
475 
storeLatestWallpapernull476     override fun storeLatestWallpaper(
477         which: Int,
478         wallpaperId: String,
479         attributions: List<String>?,
480         actionUrl: String?,
481         collectionId: String?,
482         croppedWallpaperBitmap: Bitmap,
483         colors: WallpaperColors,
484     ) {}
485 
addStaticWallpaperToRecentWallpapersnull486     override suspend fun addStaticWallpaperToRecentWallpapers(
487         destination: WallpaperDestination,
488         wallpaperModel: WallpaperModel.StaticWallpaperModel,
489         bitmap: Bitmap,
490         cropHints: Map<Point, Rect>?,
491     ) {}
492 
addLiveWallpaperToRecentWallpapersnull493     override suspend fun addLiveWallpaperToRecentWallpapers(
494         destination: WallpaperDestination,
495         wallpaperModel: WallpaperModel.LiveWallpaperModel,
496     ) {}
497 
setHasSmallPreviewTooltipBeenShownnull498     override fun setHasSmallPreviewTooltipBeenShown(hasTooltipBeenShown: Boolean) {
499         this.hasSmallPreviewTooltipBeenShown = hasTooltipBeenShown
500     }
501 
getHasSmallPreviewTooltipBeenShownnull502     override fun getHasSmallPreviewTooltipBeenShown(): Boolean {
503         return hasSmallPreviewTooltipBeenShown
504     }
505 
setHasFullPreviewTooltipBeenShownnull506     override fun setHasFullPreviewTooltipBeenShown(hasTooltipBeenShown: Boolean) {
507         this.hasFullPreviewTooltipBeenShown = hasTooltipBeenShown
508     }
509 
getHasFullPreviewTooltipBeenShownnull510     override fun getHasFullPreviewTooltipBeenShown(): Boolean {
511         return hasFullPreviewTooltipBeenShown
512     }
513 
setAppLaunchCountnull514     private fun setAppLaunchCount(count: Int) {
515         appLaunchCount = count
516     }
517 
setFirstLaunchDateSinceSetupnull518     private fun setFirstLaunchDateSinceSetup(firstLaunchDate: Int) {
519         this.firstLaunchDate = firstLaunchDate
520     }
521 
setFirstWallpaperApplyDateSinceSetupnull522     private fun setFirstWallpaperApplyDateSinceSetup(firstWallpaperApplyDate: Int) {
523         this.firstWallpaperApplyDate = firstWallpaperApplyDate
524     }
525 
setFirstWallpaperApplyDateIfNeedednull526     private fun setFirstWallpaperApplyDateIfNeeded() {
527         if (getFirstWallpaperApplyDateSinceSetup() == 0) {
528             setFirstWallpaperApplyDateSinceSetup(getCurrentDate())
529         }
530     }
531 
getCurrentDatenull532     private fun getCurrentDate(): Int {
533         val calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"))
534         val format = SimpleDateFormat("yyyyMMdd", Locale.US)
535         return format.format(calendar.time).toInt()
536     }
537 }
538