package com.fastaccess.ui.modules.code; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.Menu; import android.view.MenuItem; import com.annimon.stream.Objects; import com.fastaccess.R; import com.fastaccess.helper.ActivityHelper; import com.fastaccess.helper.AppHelper; import com.fastaccess.helper.BundleConstant; import com.fastaccess.helper.Bundler; import com.fastaccess.helper.InputHelper; import com.fastaccess.provider.rest.RestProvider; import com.fastaccess.ui.base.BaseActivity; import com.fastaccess.ui.base.mvp.presenter.BasePresenter; import com.fastaccess.ui.modules.gists.gist.GistActivity; import com.fastaccess.ui.modules.repos.code.files.activity.RepoFilesActivity; import com.fastaccess.ui.modules.repos.code.prettifier.ViewerFragment; import net.grandcentrix.thirtyinch.TiPresenter; import icepick.State; /** * Created by Kosh on 27 Nov 2016, 3:43 PM */ public class CodeViewerActivity extends BaseActivity { @State String url; @State String htmlUrl; public static void startActivity(@NonNull Context context, @NonNull String url, @NonNull String htmlUrl) { if (!InputHelper.isEmpty(url)) context.startActivity(createIntent(context, url, htmlUrl)); } public static Intent createIntent(@NonNull Context context, @NonNull String url, @NonNull String htmlUrl) { Intent intent = new Intent(context, CodeViewerActivity.class); intent.putExtras(Bundler.start() .put(BundleConstant.EXTRA_TWO, htmlUrl) .put(BundleConstant.EXTRA, url) .end()); return intent; } @Override protected int layout() { return R.layout.activity_fragment_layout; } @Override protected boolean isTransparent() { return true; } @Override protected boolean canBack() { return true; } @Override protected boolean isSecured() { return false; } @NonNull @Override public TiPresenter providePresenter() { return new BasePresenter(); } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState == null) { Intent intent = Objects.requireNonNull(getIntent(), "Intent is null"); Bundle bundle = Objects.requireNonNull(intent.getExtras()); //noinspection ConstantConditions url = Objects.requireNonNull(bundle.getString(BundleConstant.EXTRA), "Url is null"); htmlUrl = bundle.getString(BundleConstant.EXTRA_TWO); getSupportFragmentManager() .beginTransaction() .replace(R.id.container, ViewerFragment.newInstance(url), ViewerFragment.TAG) .commit(); } setTitle(Uri.parse(url).getLastPathSegment()); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.download_browser_menu, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (InputHelper.isEmpty(url)) return super.onOptionsItemSelected(item); if (item.getItemId() == R.id.download) { if (ActivityHelper.checkAndRequestReadWritePermission(this)) { RestProvider.downloadFile(this, url); } return true; } else if (item.getItemId() == R.id.browser) { ActivityHelper.openChooser(this, htmlUrl != null ? htmlUrl : url); return true; } else if (item.getItemId() == R.id.copy) { AppHelper.copyToClipboard(this, htmlUrl != null ? htmlUrl : url); return true; } else if (item.getItemId() == R.id.share) { ActivityHelper.shareUrl(this, htmlUrl != null ? htmlUrl : url); return true; } else if (item.getItemId() == android.R.id.home) { Uri uri = Uri.parse(url); if (uri.getHost().contains("gist.github")) { if (uri.getPathSegments() != null && !uri.getPathSegments().isEmpty() && uri.getPathSegments().size() >= 1) { GistActivity.createIntent(this, uri.getPathSegments().get(1)); } } else { RepoFilesActivity.startActivity(this, url); } finish(); return true; } return super.onOptionsItemSelected(item); } }