package com.fastaccess.ui.modules.repos.code.prettifier;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ProgressBar;
import com.fastaccess.R;
import com.fastaccess.helper.ActivityHelper;
import com.fastaccess.helper.BundleConstant;
import com.fastaccess.helper.Bundler;
import com.fastaccess.helper.InputHelper;
import com.fastaccess.helper.Logger;
import com.fastaccess.helper.PrefGetter;
import com.fastaccess.ui.base.BaseFragment;
import com.fastaccess.ui.widgets.StateLayout;
import com.prettifier.pretty.PrettifyWebView;
import butterknife.BindView;
import icepick.State;
/**
* Created by Kosh on 28 Nov 2016, 9:27 PM
*/
public class ViewerFragment extends BaseFragment<ViewerMvp.View, ViewerPresenter> implements ViewerMvp.View {
public static final String TAG = ViewerFragment.class.getSimpleName();
@BindView(R.id.readmeLoader) ProgressBar loader;
@BindView(R.id.webView) PrettifyWebView webView;
@BindView(R.id.stateLayout) StateLayout stateLayout;
@State boolean isWrap = PrefGetter.isWrapCode();
public static ViewerFragment newInstance(@NonNull String url) {
return newInstance(url, false);
}
public static ViewerFragment newInstance(@NonNull String url, boolean isRepo) {
return newInstance(Bundler.start()
.put(BundleConstant.ITEM, url)
.put(BundleConstant.EXTRA, isRepo)
.end());
}
private static ViewerFragment newInstance(@NonNull Bundle bundle) {
ViewerFragment fragmentView = new ViewerFragment();
fragmentView.setArguments(bundle);
return fragmentView;
}
@Override public void onSetImageUrl(@NonNull String url) {
onShowMdProgress();
webView.loadImage(url);
webView.setOnContentChangedListener(this);
webView.setVisibility(View.VISIBLE);
getActivity().supportInvalidateOptionsMenu();
}
@Override public void onSetMdText(@NonNull String text, String baseUrl) {
webView.setVisibility(View.VISIBLE);
webView.setGithubContent(text, baseUrl);
webView.setOnContentChangedListener(this);
getActivity().supportInvalidateOptionsMenu();
}
@Override public void onSetCode(@NonNull String text) {
webView.setVisibility(View.VISIBLE);
webView.setSource(text, isWrap, getPresenter().url());
webView.setOnContentChangedListener(this);
getActivity().supportInvalidateOptionsMenu();
}
@Override public void onShowError(@NonNull String msg) {
hideProgress();
showErrorMessage(msg);
}
@Override public void onShowError(@StringRes int msg) {
hideProgress();
onShowError(getString(msg));
}
@Override public void onShowMdProgress() {
loader.setVisibility(View.VISIBLE);
stateLayout.showProgress();
}
@Override public void openUrl(@NonNull String url) {
ActivityHelper.startCustomTab(getActivity(), url);
}
@Override public void showProgress(@StringRes int resId) {
onShowMdProgress();
}
@Override public void hideProgress() {
loader.setVisibility(View.GONE);
stateLayout.hideProgress();
}
@Override public void showErrorMessage(@NonNull String msgRes) {
hideProgress();
super.showErrorMessage(msgRes);
}
@Override public void showMessage(int titleRes, int msgRes) {
hideProgress();
super.showMessage(titleRes, msgRes);
}
@Override public void showMessage(@NonNull String titleRes, @NonNull String msgRes) {
hideProgress();
super.showMessage(titleRes, msgRes);
}
@Override protected int fragmentLayout() {
return R.layout.general_viewer_layout;
}
@NonNull @Override public ViewerPresenter providePresenter() {
return new ViewerPresenter();
}
@Override public void onContentChanged(int progress) {
if (progress == 100) {
if (stateLayout != null) hideProgress();
}
}
@Override public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override protected void onFragmentCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
if (InputHelper.isEmpty(getPresenter().downloadedStream())) {
getPresenter().onHandleIntent(getArguments());
} else {
if (getPresenter().isMarkDown()) {
onSetMdText(getPresenter().downloadedStream(), getArguments().getString(BundleConstant.EXTRA));
} else {
onSetCode(getPresenter().downloadedStream());
}
}
getActivity().supportInvalidateOptionsMenu();
}
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.wrap_menu_option, menu);
menu.findItem(R.id.wrap).setVisible(false);
}
@Override public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
MenuItem menuItem = menu.findItem(R.id.wrap);
Logger.e(getPresenter().isMarkDown() || getPresenter().isRepo() || getPresenter().isImage());
if (getPresenter().isMarkDown() || getPresenter().isRepo() || getPresenter().isImage()) {
menuItem.setVisible(false);
} else {
menuItem.setVisible(true).setCheckable(true).setChecked(isWrap);
}
}
@Override public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.wrap) {
item.setChecked(!item.isChecked());
isWrap = item.isChecked();
onSetCode(getPresenter().downloadedStream());
}
return super.onOptionsItemSelected(item);
}
}