aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/org/pacien/tincapp/intent/BroadcastMapper.kt
blob: 1382f0a3ec603c844bf8383c74110cb7927c95b7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package org.pacien.tincapp.intent

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.support.v4.content.LocalBroadcastManager
import org.pacien.tincapp.context.App

/**
 * @author pacien
 */
class BroadcastMapper(private val actionHandlers: Map<String, () -> Unit>) : BroadcastReceiver() {
  private val broadcastManager = LocalBroadcastManager.getInstance(App.getContext())
  private val intentFilter = actionHandlers.keys.fold(IntentFilter(), { filter, action -> filter.apply { addAction(action) } })

  fun register() = broadcastManager.registerReceiver(this, intentFilter)
  fun unregister() = broadcastManager.unregisterReceiver(this)
  override fun onReceive(context: Context?, intent: Intent?) = actionHandlers[intent?.action]?.invoke() ?: Unit
}