package yuku.alkitab.base.ac;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.Toolbar;
import android.util.TypedValue;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.TextView;
import com.afollestad.materialdialogs.MaterialDialog;
import com.example.android.wizardpager.MainActivity;
import name.fraser.neil.plaintext.diff_match_patch;
import yuku.afw.V;
import yuku.alkitab.base.App;
import yuku.alkitab.base.S;
import yuku.alkitab.base.ac.base.BaseActivity;
import yuku.alkitab.debug.R;
import java.util.LinkedList;
public class PatchTextActivity extends BaseActivity {
public static final String EXTRA_baseBody = "baseBody";
public static final String EXTRA_extraInfo = "extraInfo";
public static final String EXTRA_referenceUrl = "referenceUrl";
public static final int REQCODE_send = 1;
EditText tBody;
CharSequence baseBody;
String extraInfo;
String referenceUrl;
public static Intent createIntent(final CharSequence baseBody, final String extraInfo, final String referenceUrl) {
final Intent res = new Intent(App.context, PatchTextActivity.class);
res.putExtra(EXTRA_baseBody, baseBody);
res.putExtra(EXTRA_extraInfo, extraInfo);
res.putExtra(EXTRA_referenceUrl, referenceUrl);
return res;
}
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_patch_text);
final Toolbar toolbar = V.get(this, R.id.toolbar);
setSupportActionBar(toolbar);
final ActionBar ab = getSupportActionBar();
assert ab != null;
ab.setDisplayHomeAsUpEnabled(true);
ab.setDisplayShowTitleEnabled(false);
tBody = V.get(this, R.id.tBody);
tBody.setTextColor(S.applied.fontColor);
tBody.setBackgroundColor(S.applied.backgroundColor);
tBody.setTypeface(S.applied.fontFace, S.applied.fontBold);
tBody.setTextSize(TypedValue.COMPLEX_UNIT_DIP, S.applied.fontSize2dp);
tBody.setLineSpacing(0, S.applied.lineSpacingMult);
baseBody = getIntent().getCharSequenceExtra(EXTRA_baseBody);
tBody.setText(baseBody, TextView.BufferType.EDITABLE);
extraInfo = getIntent().getStringExtra(EXTRA_extraInfo);
referenceUrl = getIntent().getStringExtra(EXTRA_referenceUrl);
new MaterialDialog.Builder(this)
.content(R.string.patch_text_intro)
.positiveText(R.string.ok)
.show();
}
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
getMenuInflater().inflate(R.menu.activity_patch_text, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(final Menu menu) {
final MenuItem menuReference = menu.findItem(R.id.menuReference);
menuReference.setVisible(referenceUrl != null);
return true;
}
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
if (item.getItemId() == R.id.menuReference) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(referenceUrl)));
return true;
} else if (item.getItemId() == R.id.menuSend) {
menuSend_click();
}
return super.onOptionsItemSelected(item);
}
void menuSend_click() {
final String baseText = baseBody.toString();
final String currentText = tBody.getText().toString();
final diff_match_patch dmp = new diff_match_patch();
final LinkedList<diff_match_patch.Diff> diffs = dmp.diff_main(baseText, currentText);
dmp.Diff_EditCost = 10;
dmp.diff_cleanupEfficiency(diffs);
dmp.diff_cleanupSemanticLossless(diffs);
final StringBuilder sb = new StringBuilder();
boolean hasEdits = false;
for (diff_match_patch.Diff diff : diffs) {
switch (diff.operation) {
case EQUAL:
sb.append(diff.text);
break;
case DELETE:
sb.append("<del>").append(diff.text).append("</del>");
hasEdits = true;
break;
case INSERT:
sb.append("<ins>").append(diff.text).append("</ins>");
hasEdits = true;
break;
}
}
if (!hasEdits) {
new MaterialDialog.Builder(this)
.content(R.string.patch_text_error_no_edits)
.positiveText(R.string.ok)
.show();
return;
}
final String patchTextMessage = "PATCHTEXT\n\n" + extraInfo + "\n\n" + sb.toString();
startActivityForResult(MainActivity.createIntent(App.context, patchTextMessage), REQCODE_send);
}
@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
if (requestCode == REQCODE_send && resultCode == RESULT_OK) {
setResult(RESULT_OK);
finish();
return;
}
super.onActivityResult(requestCode, resultCode, data);
}
}