package com.kickstarter.ui.activities;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Pair;
import android.view.View;
import com.kickstarter.R;
import com.kickstarter.libs.BaseActivity;
import com.kickstarter.libs.qualifiers.RequiresActivityViewModel;
import com.kickstarter.libs.utils.AnimationUtils;
import com.kickstarter.services.KSWebViewClient;
import com.kickstarter.ui.toolbars.KSToolbar;
import com.kickstarter.ui.views.KSWebView;
import com.kickstarter.viewmodels.WebViewViewModel;
import butterknife.Bind;
import butterknife.ButterKnife;
import rx.android.schedulers.AndroidSchedulers;
import static com.kickstarter.libs.utils.TransitionUtils.slideInFromLeft;
@RequiresActivityViewModel(WebViewViewModel.class)
public final class WebViewActivity extends BaseActivity<WebViewViewModel> implements KSWebViewClient.Delegate {
protected @Bind(R.id.web_view_toolbar) KSToolbar toolbar;
protected @Bind(R.id.web_view) KSWebView webView;
protected @Bind(R.id.loading_indicator_view) View loadingIndicatorView;
@Override
protected void onCreate(final @Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.web_view_layout);
ButterKnife.bind(this);
webView.client().setDelegate(this);
viewModel.outputs.toolbarTitle()
.compose(bindToLifecycle())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(toolbar::setTitle);
viewModel.outputs.url()
.compose(bindToLifecycle())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(webView::loadUrl);
}
@Override
public void back() {
// This logic is sound only for web view activities without RequestHandlers.
// TODO: Refactor the client to update web history properly for activities with RequestHandlers.
if (webView.canGoBack()) {
webView.goBack();
} else {
super.back();
}
}
@Override
public void webViewExternalLinkActivated(final @NonNull KSWebViewClient webViewClient, final @NonNull String url) {}
@Override
public void webViewOnPageStarted(final @NonNull KSWebViewClient webViewClient, final @Nullable String url) {
loadingIndicatorView.startAnimation(AnimationUtils.INSTANCE.appearAnimation());
}
@Override
public void webViewOnPageFinished(final @NonNull KSWebViewClient webViewClient, final @Nullable String url) {
loadingIndicatorView.startAnimation(AnimationUtils.INSTANCE.disappearAnimation());
}
@Override
public void webViewPageIntercepted(final @NonNull KSWebViewClient webViewClient, final @Nullable String url) {}
@Override
protected @Nullable Pair<Integer, Integer> exitTransition() {
return slideInFromLeft();
}
}