BaseEuiccAccessActivity.kt 1.8 KB

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