package com.kickstarter.viewmodels; import android.content.Context; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.kickstarter.libs.ActivityViewModel; import com.kickstarter.libs.Environment; import com.kickstarter.libs.utils.ObjectUtils; import com.kickstarter.services.apiresponses.PushNotificationEnvelope; import com.kickstarter.ui.IntentKey; import com.kickstarter.ui.activities.WebViewActivity; import com.kickstarter.viewmodels.outputs.WebViewViewModelOutputs; import rx.Observable; import rx.subjects.BehaviorSubject; import rx.subjects.PublishSubject; public final class WebViewViewModel extends ActivityViewModel<WebViewActivity> implements WebViewViewModelOutputs { private final PublishSubject<PushNotificationEnvelope> pushNotificationEnvelope = PublishSubject.create(); private final BehaviorSubject<String> toolbarTitle = BehaviorSubject.create(); @Override public @NonNull Observable<String> toolbarTitle() { return toolbarTitle; } private final BehaviorSubject<String> url = BehaviorSubject.create(); @Override public @NonNull Observable<String> url() { return url; } public final WebViewViewModelOutputs outputs = this; public WebViewViewModel(final @NonNull Environment environment) { super(environment); } @Override protected void onCreate(final @NonNull Context context, final @Nullable Bundle savedInstanceState) { super.onCreate(context, savedInstanceState); intent() .map(i -> i.getStringExtra(IntentKey.TOOLBAR_TITLE)) .ofType(String.class) .compose(bindToLifecycle()) .subscribe(toolbarTitle::onNext); intent() .map(i -> i.getStringExtra(IntentKey.URL)) .ofType(String.class) .compose(bindToLifecycle()) .subscribe(url::onNext); intent() .map(i -> i.getParcelableExtra(IntentKey.PUSH_NOTIFICATION_ENVELOPE)) .ofType(PushNotificationEnvelope.class) .compose(bindToLifecycle()) .subscribe(pushNotificationEnvelope::onNext); pushNotificationEnvelope .filter(ObjectUtils::isNotNull) .take(1) .compose(bindToLifecycle()) .subscribe(koala::trackPushNotification); } }