| package com.android.onboarding.process |
| |
| import android.annotation.TargetApi |
| import android.content.Context |
| import android.content.Intent |
| import android.os.Build |
| import android.util.Log |
| import javax.inject.Singleton |
| |
| /** Default production implementation of [OnboardingProcess]. */ |
| @Singleton |
| @TargetApi(Build.VERSION_CODES.O) |
| class OnboardingProcessImpl(private val context: Context) : OnboardingProcess { |
| |
| override fun keepAlive(reason: KeepAliveReason): KeepAliveToken { |
| context.startForegroundService(Intent(context, NotificationKeepAliveService::class.java)) |
| |
| val keepAliveToken = KeepAliveToken() |
| currentTokens.add(keepAliveToken) |
| |
| return keepAliveToken |
| } |
| |
| /** This token is used by the calling process to terminate the KeepAlive Service API. */ |
| inner class KeepAliveToken : AutoCloseable { |
| |
| override fun close() { |
| Log.d("OnboardingProcessImpl", "KeepAliveToken#close invoked - $this") |
| |
| currentTokens.remove(this) |
| |
| if (currentTokens.isEmpty()) { |
| context.stopService(Intent(context, NotificationKeepAliveService::class.java)) |
| } |
| } |
| } |
| |
| private companion object { |
| |
| val currentTokens = mutableSetOf<KeepAliveToken>() |
| } |
| } |