package com.fastaccess.ui.modules.repos.code.commit.viewer;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.view.Menu;
import android.view.MenuItem;
import com.fastaccess.R;
import com.fastaccess.data.dao.CommitFileModel;
import com.fastaccess.helper.ActivityHelper;
import com.fastaccess.helper.AppHelper;
import com.fastaccess.helper.BundleConstant;
import com.fastaccess.helper.Bundler;
import com.fastaccess.helper.ViewHelper;
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.code.CodeViewerActivity;
import com.fastaccess.ui.widgets.DiffLineSpan;
import com.fastaccess.ui.widgets.FontTextView;
import com.fastaccess.ui.widgets.SpannableBuilder;
import net.grandcentrix.thirtyinch.TiPresenter;
import butterknife.BindString;
import butterknife.BindView;
import icepick.State;
/**
* Created by Kosh on 24 Apr 2017, 2:53 PM
*/
public class FullCommitFileActivity extends BaseActivity {
@BindView(R.id.textView) FontTextView textView;
@State CommitFileModel commitFileModel;
@BindView(R.id.changes) FontTextView changes;
@BindView(R.id.addition) FontTextView addition;
@BindView(R.id.deletion) FontTextView deletion;
@BindView(R.id.status) FontTextView status;
@BindString(R.string.changes) String changesText;
@BindString(R.string.addition) String additionText;
@BindString(R.string.deletion) String deletionText;
@BindString(R.string.status) String statusText;
public static void start(@NonNull Context context, @NonNull CommitFileModel fileModel) {
Intent starter = new Intent(context, FullCommitFileActivity.class);
starter.putExtras(Bundler.start()
.put(BundleConstant.ITEM, fileModel)
.end());
context.startActivity(starter);
}
@Override protected int layout() {
return R.layout.commit_file_full_layout;
}
@Override protected boolean isTransparent() {
return false;
}
@Override protected boolean canBack() {
return true;
}
@Override protected boolean isSecured() {
return false;
}
@NonNull @Override public TiPresenter providePresenter() {
return new BasePresenter();
}
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
commitFileModel = getIntent().getExtras().getParcelable(BundleConstant.ITEM);
}
if (commitFileModel == null || commitFileModel.getPatch() == null) {
finish();
return;
}
changes.setText(SpannableBuilder.builder()
.append(changesText)
.append("\n")
.bold(String.valueOf(commitFileModel.getChanges())));
addition.setText(SpannableBuilder.builder()
.append(additionText)
.append("\n")
.bold(String.valueOf(commitFileModel.getAdditions())));
deletion.setText(SpannableBuilder.builder()
.append(deletionText)
.append("\n")
.bold(String.valueOf(commitFileModel.getDeletions())));
status.setText(SpannableBuilder.builder()
.append(statusText)
.append("\n")
.bold(String.valueOf(commitFileModel.getStatus())));
setTitle(Uri.parse(commitFileModel.getFilename()).getLastPathSegment());
textView.setText(DiffLineSpan.getSpannable(commitFileModel.getPatch(),
ViewHelper.getPatchAdditionColor(this),
ViewHelper.getPatchDeletionColor(this),
ViewHelper.getPatchRefColor(this)));
}
@Override public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.commit_row_menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.open:
startActivity(CodeViewerActivity.createIntent(this, commitFileModel.getContentsUrl(), commitFileModel.getBlobUrl()));
return true;
case R.id.share:
ActivityHelper.shareUrl(this, commitFileModel.getBlobUrl());
return true;
case R.id.download:
if (ActivityHelper.checkAndRequestReadWritePermission(this)) {
RestProvider.downloadFile(this, commitFileModel.getRawUrl());
}
return true;
case R.id.copy:
AppHelper.copyToClipboard(this, commitFileModel.getBlobUrl());
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}