aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/ui/AppLogViewerActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/ui/AppLogViewerActivity.java')
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/AppLogViewerActivity.java164
1 files changed, 164 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/AppLogViewerActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/AppLogViewerActivity.java
new file mode 100644
index 000000000..89027f7dd
--- /dev/null
+++ b/WordPress/src/main/java/org/wordpress/android/ui/AppLogViewerActivity.java
@@ -0,0 +1,164 @@
+package org.wordpress.android.ui;
+
+import android.content.ClipData;
+import android.content.ClipboardManager;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.AppCompatActivity;
+import android.text.Html;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ListView;
+import android.widget.TextView;
+
+import org.wordpress.android.R;
+import org.wordpress.android.util.AppLog;
+import org.wordpress.android.util.AppLog.T;
+import org.wordpress.android.util.ToastUtils;
+
+import java.util.ArrayList;
+
+/**
+ * views the activity log (see utils/AppLog.java)
+ */
+public class AppLogViewerActivity extends AppCompatActivity {
+ private static final int ID_SHARE = 1;
+ private static final int ID_COPY_TO_CLIPBOARD = 2;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.logviewer_activity);
+
+ ActionBar actionBar = getSupportActionBar();
+ if (actionBar != null) {
+ actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
+ actionBar.setDisplayShowTitleEnabled(true);
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ }
+
+ final ListView listView = (ListView) findViewById(android.R.id.list);
+ listView.setAdapter(new LogAdapter(this));
+ }
+
+ private class LogAdapter extends BaseAdapter {
+ private final ArrayList<String> mEntries;
+ private final LayoutInflater mInflater;
+
+ private LogAdapter(Context context) {
+ mEntries = AppLog.toHtmlList(context);
+ mInflater = LayoutInflater.from(context);
+ }
+
+ @Override
+ public int getCount() {
+ return mEntries.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mEntries.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ final LogViewHolder holder;
+ if (convertView == null) {
+ convertView = mInflater.inflate(R.layout.logviewer_listitem, parent, false);
+ holder = new LogViewHolder(convertView);
+ convertView.setTag(holder);
+ } else {
+ holder = (LogViewHolder) convertView.getTag();
+ }
+
+ // take the header lines (app version & device name) into account or else the
+ // line numbers shown here won't match the line numbers when the log is shared
+ int lineNum = position - AppLog.HEADER_LINE_COUNT + 1;
+ if (lineNum > 0) {
+ holder.txtLineNumber.setText(String.format("%02d", lineNum));
+ holder.txtLineNumber.setVisibility(View.VISIBLE);
+ } else {
+ holder.txtLineNumber.setVisibility(View.GONE);
+ }
+
+ holder.txtLogEntry.setText(Html.fromHtml(mEntries.get(position)));
+
+ return convertView;
+ }
+
+ private class LogViewHolder {
+ private final TextView txtLineNumber;
+ private final TextView txtLogEntry;
+
+ LogViewHolder(View view) {
+ txtLineNumber = (TextView) view.findViewById(R.id.text_line);
+ txtLogEntry = (TextView) view.findViewById(R.id.text_log);
+ }
+ }
+ }
+
+ private void shareAppLog() {
+ Intent intent = new Intent(Intent.ACTION_SEND);
+ intent.setType("text/plain");
+ intent.putExtra(Intent.EXTRA_TEXT, AppLog.toPlainText(this));
+ intent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.app_name) + " " + getTitle());
+ try {
+ startActivity(Intent.createChooser(intent, getString(R.string.reader_btn_share)));
+ } catch (android.content.ActivityNotFoundException ex) {
+ ToastUtils.showToast(this, R.string.reader_toast_err_share_intent);
+ }
+ }
+
+ private void copyAppLogToClipboard() {
+ try {
+ ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
+ clipboard.setPrimaryClip(ClipData.newPlainText("AppLog", AppLog.toPlainText(this)));
+ ToastUtils.showToast(this, R.string.logs_copied_to_clipboard);
+ } catch (Exception e) {
+ AppLog.e(T.UTILS, e);
+ ToastUtils.showToast(this, R.string.error_copy_to_clipboard);
+ }
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ super.onCreateOptionsMenu(menu);
+ // Copy to clipboard button
+ MenuItem item = menu.add(Menu.NONE, ID_COPY_TO_CLIPBOARD, Menu.NONE, android.R.string.copy);
+ item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
+ item.setIcon(R.drawable.ic_content_copy_white_24dp);
+ // Share button
+ item = menu.add(Menu.NONE, ID_SHARE, Menu.NONE, R.string.reader_btn_share);
+ item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
+ item.setIcon(R.drawable.ic_share_white_24dp);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(final MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ finish();
+ return true;
+ case ID_SHARE:
+ shareAppLog();
+ return true;
+ case ID_COPY_TO_CLIPBOARD:
+ copyAppLogToClipboard();
+ return true;
+ default:
+ return super.onOptionsItemSelected(item);
+ }
+ }
+}