Cómo manejar la intención con Kotlin y el conductor

Tengo tres vistas y una actividad. MainActivity – MainController – PushedController – NotificationOpenController.

El MainController contiene un button, cuando se presiona, hace algunas cosas en el recuadro negro y el dispositivo recibe una notificación en la bandeja de notifications.

Cuando se hace clic en la notificación, quiero que el comportamiento sea como si

router.pushController(RouterTransaction.with(NotificationOpenController(bundle)) .pushChangeHandler(VerticalChangeHandler()) .popChangeHandler(VerticalChangeHandler())) 

simplemente sucedió

Cualquier sugerencia o revisión relacionada con Kotlin es apreciada mientras hago esto para aprender el idioma

No estaba seguro de cómo lograr esto de manera adecuada a través de Intents, ¿quizás una transmisión? pero después de un poco de testing y error mi código ahora se ve así:

 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) App.graph.inject(this) setContentView(R.layout.activity_main_kotlin) Log.d(TAG,"${FirebaseInstanceId.getInstance().getToken()}") router = Conductor.attachRouter(this, controller_container, savedInstanceState) val startingIntent : Intent? = intent if(startingIntent?.extras != null){ transitionToNotificationOpenController(startingIntent?.extras) } else{ if (!router.hasRootController()) { router.setRoot(RouterTransaction.with(MainController())); } } } override fun onBackPressed() { if (!router.handleBack()) { super.onBackPressed() } } fun transitionToNotificationOpenController(bundl: Bundle?){ router.pushController(RouterTransaction.with(NotificationOpenController(bundl)) .pushChangeHandler(VerticalChangeHandler()) .popChangeHandler(VerticalChangeHandler())) } 

La intención de notificación se construye así

 val builder = NotificationCompat.Builder(this).setContentTitle("Title").setContentText("Text") val notificationIntent = Intent(this, MainActivity::class.java) notificationIntent.putExtra("message",messageBody) val contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT) ... manager.notify(1,builder.build()) 

Sin embargo, al usar este enfoque, la animation se equivoca y el usuario solo puede ver la vista emergente "típica" después de cargar o iniciar una nueva actividad, ya que hay un Curriculum de actividad al presionar la notificación, seguido de Pausa de actividad -> Actividad Reanudar después de presionar el button de retroceso.

Logrado el resultado deseado.

 <activity android:name=".ui.MainActivity" android:launchMode="singleTop" > 

Actividad principal:

 override fun onResume(){ super.onResume() val bundle : Bundle? = intent.extras if (bundle != null){ transitionToNotificationOpenController(bundle) } } /** * MainActivity is defined in AndroidManifest.xml as android:launchMode="singleTop" * onNewIntent acts as an entrypoint whenever an intent is received pointing to MainActivity, * since we don't want to launch a new instance of the Activity. * (because we want to keep the stack of RouterTransactions) */ override fun onNewIntent(intent : Intent){ setIntent(intent) }