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