Coverage Summary for Class: UuidCopyManager (cloud.mindbox.mobile_sdk.managers)

Class Class, % Method, % Branch, % Line, % Instruction, %
UuidCopyManager 0% (0/1) 0% (0/4) 0% (0/20) 0% (0/21) 0% (0/145)


 package cloud.mindbox.mobile_sdk.managers
 
 import android.app.Activity
 import android.content.ClipData
 import android.content.ClipboardManager
 import android.content.Context
 import androidx.core.content.ContextCompat
 import cloud.mindbox.mobile_sdk.repository.MindboxPreferences
 import java.util.Date
 
 internal object UuidCopyManager {
     private const val COPY_UUID_APP_OPEN_TIMES = 5
     private const val COPY_UUID_APP_OPEN_TIME_LIMIT = 10_000L
 
     // map of activity hash to list of activity start timestamps
     private val appOpenTimestampMap = HashMap<Int, ArrayList<Long>>()
 
     fun onAppMovedToForeground(activity: Activity) {
         val activityHash = activity.hashCode()
         appOpenTimestampMap[activityHash]?.let { activityOpenTimestampList ->
             activityOpenTimestampList.add(Date().time)
             appOpenTimestampMap.put(activityHash, activityOpenTimestampList)
         } ?: appOpenTimestampMap.put(activityHash, arrayListOf(Date().time))
         if (shouldCopyUuid(activityHash)) copyUuidToClipboard(activity.applicationContext)
     }
 
     private fun shouldCopyUuid(activityHash: Int): Boolean {
         val appOpenTimestampList = appOpenTimestampMap[activityHash] ?: return false
         if (!MindboxPreferences.uuidDebugEnabled) return false
         if (appOpenTimestampList.size < COPY_UUID_APP_OPEN_TIMES) return false
         val combinationStartTimestamp = appOpenTimestampList[
             appOpenTimestampList.size - COPY_UUID_APP_OPEN_TIMES
         ]
         val combinationEndTimestamp = appOpenTimestampList.last()
         return combinationStartTimestamp + COPY_UUID_APP_OPEN_TIME_LIMIT > combinationEndTimestamp
     }
 
     private fun copyUuidToClipboard(appContext: Context) {
         val uuid = MindboxPreferences.deviceUuid
         if (uuid.isNotEmpty()) {
             ContextCompat.getSystemService(appContext, ClipboardManager::class.java)
                 ?.let { clipboardManager ->
                     val clip = ClipData.newPlainText(uuid, uuid)
                     clipboardManager.setPrimaryClip(clip)
                 }
         }
     }
 }