Компонент, определяющий жизненный цикл, который требует разрешения - PullRequest
2 голосов
/ 13 марта 2019

Допустим, у меня есть компонент, который необходимо инициализировать и уничтожить в зависимости от жизненного цикла действия.Однако этому компоненту сначала должны быть предоставлены разрешения от пользователя.Каков наилучший способ сделать это?

Должен ли я подписаться на одного и того же наблюдателя в двух разных позициях или есть лучший способ сделать это без дублирования кода?

1 Ответ

1 голос
/ 22 марта 2019

Вы можете реализовать класс с учетом жизненного цикла, инкапсулирующий работу, чувствительную к разрешению:

class MyLifecycleAware {

    private var blObject: Any? = null

    /**
    * Manually call this method when permission granted
    */
    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun init() = withPermission {
        // code will be invoked only if permission was granted
        blObject = TODO("Initialize business logic")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    fun destroy() {
        blObject?.destroy()
        blObject = null
    }

    /**
     * Wrap any permission sensitive actions with this check 
     */
    private inline fun withPermission(action: () -> Unit) {
        val permissionGranted = TODO("Check permission granted")
        if (permissionGranted)
            action()
    }
}
...