BaseEuiccAccessActivity.kt 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package im.angry.openeuicc.ui
  2. import android.content.ComponentName
  3. import android.content.Context
  4. import android.content.Intent
  5. import android.content.ServiceConnection
  6. import android.os.Bundle
  7. import android.os.IBinder
  8. import androidx.appcompat.app.AppCompatActivity
  9. import im.angry.openeuicc.core.EuiccChannelManager
  10. import im.angry.openeuicc.service.EuiccChannelManagerService
  11. import kotlinx.coroutines.CompletableDeferred
  12. abstract class BaseEuiccAccessActivity : AppCompatActivity() {
  13. val euiccChannelManagerLoaded = CompletableDeferred<Unit>()
  14. lateinit var euiccChannelManager: EuiccChannelManager
  15. lateinit var euiccChannelManagerService: EuiccChannelManagerService
  16. private val euiccChannelManagerServiceConnection = object : ServiceConnection {
  17. override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
  18. euiccChannelManagerService = (service!! as EuiccChannelManagerService.LocalBinder).service
  19. euiccChannelManager = euiccChannelManagerService.euiccChannelManager
  20. euiccChannelManagerLoaded.complete(Unit)
  21. onInit()
  22. }
  23. override fun onServiceDisconnected(name: ComponentName?) {
  24. // These activities should never lose the EuiccChannelManagerService connection
  25. finish()
  26. }
  27. }
  28. override fun onCreate(savedInstanceState: Bundle?) {
  29. super.onCreate(savedInstanceState)
  30. bindService(
  31. Intent(this, EuiccChannelManagerService::class.java),
  32. euiccChannelManagerServiceConnection,
  33. Context.BIND_AUTO_CREATE
  34. )
  35. }
  36. override fun onDestroy() {
  37. super.onDestroy()
  38. unbindService(euiccChannelManagerServiceConnection)
  39. }
  40. /**
  41. * When called, euiccChannelManager is guaranteed to have been initialized
  42. */
  43. abstract fun onInit()
  44. }