mirror of https://github.com/termux/termux-app
181 lines
5.8 KiB
Java
181 lines
5.8 KiB
Java
package com.termux.app.activities;
|
|
|
|
import androidx.annotation.NonNull;
|
|
import androidx.appcompat.app.ActionBar;
|
|
import androidx.appcompat.app.AppCompatActivity;
|
|
import androidx.appcompat.widget.Toolbar;
|
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
|
import androidx.recyclerview.widget.RecyclerView;
|
|
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.os.Bundle;
|
|
import android.view.Menu;
|
|
import android.view.MenuInflater;
|
|
import android.view.MenuItem;
|
|
|
|
import com.termux.R;
|
|
import com.termux.shared.termux.TermuxConstants;
|
|
import com.termux.shared.markdown.MarkdownUtils;
|
|
import com.termux.shared.interact.ShareUtils;
|
|
import com.termux.app.models.ReportInfo;
|
|
|
|
import org.commonmark.node.FencedCodeBlock;
|
|
|
|
import io.noties.markwon.Markwon;
|
|
import io.noties.markwon.recycler.MarkwonAdapter;
|
|
import io.noties.markwon.recycler.SimpleEntry;
|
|
|
|
public class ReportActivity extends AppCompatActivity {
|
|
|
|
private static final String EXTRA_REPORT_INFO = "report_info";
|
|
|
|
ReportInfo mReportInfo;
|
|
String mReportMarkdownString;
|
|
String mReportActivityMarkdownString;
|
|
|
|
@Override
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
setContentView(R.layout.activity_report);
|
|
|
|
Toolbar toolbar = findViewById(R.id.toolbar);
|
|
if (toolbar != null) {
|
|
setSupportActionBar(toolbar);
|
|
}
|
|
|
|
Bundle bundle = null;
|
|
Intent intent = getIntent();
|
|
if (intent != null)
|
|
bundle = intent.getExtras();
|
|
else if (savedInstanceState != null)
|
|
bundle = savedInstanceState;
|
|
|
|
updateUI(bundle);
|
|
|
|
}
|
|
|
|
@Override
|
|
protected void onNewIntent(Intent intent) {
|
|
super.onNewIntent(intent);
|
|
setIntent(intent);
|
|
|
|
if (intent != null)
|
|
updateUI(intent.getExtras());
|
|
}
|
|
|
|
private void updateUI(Bundle bundle) {
|
|
|
|
if (bundle == null) {
|
|
finish();
|
|
return;
|
|
}
|
|
|
|
mReportInfo = (ReportInfo) bundle.getSerializable(EXTRA_REPORT_INFO);
|
|
|
|
if (mReportInfo == null) {
|
|
finish();
|
|
return;
|
|
}
|
|
|
|
|
|
final ActionBar actionBar = getSupportActionBar();
|
|
if (actionBar != null) {
|
|
if (mReportInfo.reportTitle != null)
|
|
actionBar.setTitle(mReportInfo.reportTitle);
|
|
else
|
|
actionBar.setTitle(TermuxConstants.TERMUX_APP_NAME + " App Report");
|
|
}
|
|
|
|
|
|
RecyclerView recyclerView = findViewById(R.id.recycler_view);
|
|
|
|
final Markwon markwon = MarkdownUtils.getRecyclerMarkwonBuilder(this);
|
|
|
|
final MarkwonAdapter adapter = MarkwonAdapter.builderTextViewIsRoot(R.layout.activity_report_adapter_node_default)
|
|
.include(FencedCodeBlock.class, SimpleEntry.create(R.layout.activity_report_adapter_node_code_block, R.id.code_text_view))
|
|
.build();
|
|
|
|
recyclerView.setLayoutManager(new LinearLayoutManager(this));
|
|
recyclerView.setAdapter(adapter);
|
|
|
|
|
|
generateReportActivityMarkdownString();
|
|
adapter.setMarkdown(markwon, mReportActivityMarkdownString);
|
|
adapter.notifyDataSetChanged();
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
public void onSaveInstanceState(@NonNull Bundle outState) {
|
|
super.onSaveInstanceState(outState);
|
|
|
|
outState.putSerializable(EXTRA_REPORT_INFO, mReportInfo);
|
|
}
|
|
|
|
@Override
|
|
public boolean onCreateOptionsMenu(final Menu menu) {
|
|
final MenuInflater inflater = getMenuInflater();
|
|
inflater.inflate(R.menu.menu_report, menu);
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void onBackPressed() {
|
|
// Remove activity from recents menu on back button press
|
|
finishAndRemoveTask();
|
|
}
|
|
|
|
@Override
|
|
public boolean onOptionsItemSelected(final MenuItem item) {
|
|
int id = item.getItemId();
|
|
if (id == R.id.menu_item_share_report) {
|
|
if (mReportMarkdownString != null)
|
|
ShareUtils.shareText(this, getString(R.string.title_report_text), mReportMarkdownString);
|
|
} else if (id == R.id.menu_item_copy_report) {
|
|
if (mReportMarkdownString != null)
|
|
ShareUtils.copyTextToClipboard(this, mReportMarkdownString, null);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Generate the markdown {@link String} to be shown in {@link ReportActivity}.
|
|
*/
|
|
private void generateReportActivityMarkdownString() {
|
|
mReportMarkdownString = ReportInfo.getReportInfoMarkdownString(mReportInfo);
|
|
|
|
mReportActivityMarkdownString = "";
|
|
if (mReportInfo.reportStringPrefix != null)
|
|
mReportActivityMarkdownString += mReportInfo.reportStringPrefix;
|
|
|
|
mReportActivityMarkdownString += mReportMarkdownString;
|
|
|
|
if (mReportInfo.reportStringSuffix != null)
|
|
mReportActivityMarkdownString += mReportInfo.reportStringSuffix;
|
|
}
|
|
|
|
|
|
|
|
public static void startReportActivity(@NonNull final Context context, @NonNull final ReportInfo reportInfo) {
|
|
context.startActivity(newInstance(context, reportInfo));
|
|
}
|
|
|
|
public static Intent newInstance(@NonNull final Context context, @NonNull final ReportInfo reportInfo) {
|
|
Intent intent = new Intent(context, ReportActivity.class);
|
|
Bundle bundle = new Bundle();
|
|
bundle.putSerializable(EXTRA_REPORT_INFO, reportInfo);
|
|
intent.putExtras(bundle);
|
|
|
|
// Note that ReportActivity task has documentLaunchMode="intoExisting" set in AndroidManifest.xml
|
|
// which has equivalent behaviour to the following. The following dynamic way doesn't seem to
|
|
// work for notification pending intent, i.e separate task isn't created and activity is
|
|
// launched in the same task as TermuxActivity.
|
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
|
|
return intent;
|
|
}
|
|
|
|
}
|