From b0179b2b13e735ac03ce23a0d04167c555fb67fa Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 6 Aug 2018 13:04:53 +0000 Subject: [PATCH] Added about navigation menu, moved debug info Closes #12 --- .../java/eu/faircode/email/ActivityView.java | 53 ++------- .../java/eu/faircode/email/FragmentAbout.java | 105 ++++++++++++++++++ app/src/main/res/layout/fragment_about.xml | 63 +++++++++++ app/src/main/res/layout/fragment_eula.xml | 2 +- app/src/main/res/values/strings.xml | 12 +- 5 files changed, 184 insertions(+), 51 deletions(-) create mode 100644 app/src/main/java/eu/faircode/email/FragmentAbout.java create mode 100644 app/src/main/res/layout/fragment_about.xml diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java index 85def28fdb..9b993a0027 100644 --- a/app/src/main/java/eu/faircode/email/ActivityView.java +++ b/app/src/main/java/eu/faircode/email/ActivityView.java @@ -49,20 +49,13 @@ import android.widget.CheckBox; import android.widget.ListView; import android.widget.TextView; -import java.util.Date; import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - -import javax.mail.Address; -import javax.mail.internet.InternetAddress; public class ActivityView extends ActivityBase implements FragmentManager.OnBackStackChangedListener, SharedPreferences.OnSharedPreferenceChangeListener { private boolean newIntent = false; private DrawerLayout drawerLayout; private ListView drawerList; private ActionBarDrawerToggle drawerToggle; - private ExecutorService executor = Executors.newCachedThreadPool(); static final int LOADER_ACCOUNT_PUT = 1; static final int LOADER_IDENTITY_PUT = 2; @@ -114,8 +107,8 @@ public class ActivityView extends ActivityBase implements FragmentManager.OnBack case R.string.menu_setup: onMenuSetup(); break; - case R.string.menu_debug: - onMenuDebug(); + case R.string.menu_about: + onMenuAbout(); break; } @@ -286,7 +279,7 @@ public class ActivityView extends ActivityBase implements FragmentManager.OnBack public void updateDrawer() { ArrayAdapterDrawer drawerArray = new ArrayAdapterDrawer(this, R.layout.item_drawer); drawerArray.add(new DrawerItem(ActivityView.this, R.string.menu_setup)); - drawerArray.add(new DrawerItem(ActivityView.this, R.string.menu_debug)); + drawerArray.add(new DrawerItem(ActivityView.this, R.string.menu_about)); drawerList.setAdapter(drawerArray); } @@ -302,42 +295,10 @@ public class ActivityView extends ActivityBase implements FragmentManager.OnBack startActivity(new Intent(ActivityView.this, ActivitySetup.class)); } - private void onMenuDebug() { - executor.submit(new Runnable() { - @Override - public void run() { - try { - DB db = DB.getInstance(ActivityView.this); - EntityFolder drafts = db.folder().getPrimaryFolder(EntityFolder.TYPE_DRAFTS); - if (drafts != null) { - StringBuilder info = Helper.getDebugInfo(); - info.insert(0, getString(R.string.title_debug_info) + "\n\n\n\n"); - - Address to = new InternetAddress("marcel+email@faircode.eu", "FairCode"); - - EntityMessage draft = new EntityMessage(); - draft.account = drafts.account; - draft.folder = drafts.id; - draft.to = MessageHelper.encodeAddresses(new Address[]{to}); - draft.subject = BuildConfig.APPLICATION_ID + " debug info"; - draft.body = "
" + info.toString().replaceAll("\\r?\\n", "
") + "
"; - draft.received = new Date().getTime(); - draft.seen = false; - draft.ui_seen = false; - draft.ui_hide = false; - draft.id = db.message().insertMessage(draft); - - EntityOperation.queue(ActivityView.this, draft, EntityOperation.ADD); - EntityOperation.process(ActivityView.this); - - startActivity(new Intent(ActivityView.this, ActivityCompose.class) - .putExtra("id", draft.id)); - } - } catch (Throwable ex) { - Log.w(Helper.TAG, ex + "\n" + Log.getStackTraceString(ex)); - } - } - }); + private void onMenuAbout() { + FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); + fragmentTransaction.replace(R.id.content_frame, new FragmentAbout()).addToBackStack("about"); + fragmentTransaction.commit(); } private class DrawerItem { diff --git a/app/src/main/java/eu/faircode/email/FragmentAbout.java b/app/src/main/java/eu/faircode/email/FragmentAbout.java new file mode 100644 index 0000000000..bc0141dddd --- /dev/null +++ b/app/src/main/java/eu/faircode/email/FragmentAbout.java @@ -0,0 +1,105 @@ +package eu.faircode.email; + +/* + This file is part of Safe email. + + Safe email is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + NetGuard is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with NetGuard. If not, see . + + Copyright 2018 by Marcel Bokhorst (M66B) +*/ + +import android.content.Intent; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +import java.util.Date; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import javax.mail.Address; +import javax.mail.internet.InternetAddress; + +public class FragmentAbout extends FragmentEx { + private ExecutorService executor = Executors.newCachedThreadPool(); + + @Override + @Nullable + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + setSubtitle(R.string.menu_about); + setHasOptionsMenu(true); + + View view = inflater.inflate(R.layout.fragment_about, container, false); + + TextView tvVersion = view.findViewById(R.id.tvVersion); + Button btnDebugInfo = view.findViewById(R.id.btnDebugInfo); + + tvVersion.setText(getString(R.string.title_version, BuildConfig.VERSION_NAME)); + + btnDebugInfo.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + executor.submit(new Runnable() { + @Override + public void run() { + try { + DB db = DB.getInstance(getContext()); + EntityFolder drafts = db.folder().getPrimaryFolder(EntityFolder.TYPE_DRAFTS); + if (drafts != null) { + StringBuilder info = Helper.getDebugInfo(); + info.insert(0, getString(R.string.title_debug_info_remark) + "\n\n\n\n"); + + Address to = new InternetAddress("marcel+email@faircode.eu", "FairCode"); + + EntityMessage draft = new EntityMessage(); + draft.account = drafts.account; + draft.folder = drafts.id; + draft.to = MessageHelper.encodeAddresses(new Address[]{to}); + draft.subject = BuildConfig.APPLICATION_ID + " debug info"; + draft.body = "
" + info.toString().replaceAll("\\r?\\n", "
") + "
"; + draft.received = new Date().getTime(); + draft.seen = false; + draft.ui_seen = false; + draft.ui_hide = false; + draft.id = db.message().insertMessage(draft); + + EntityOperation.queue(getContext(), draft, EntityOperation.ADD); + EntityOperation.process(getContext()); + + startActivity(new Intent(getContext(), ActivityCompose.class) + .putExtra("id", draft.id)); + } + } catch (Throwable ex) { + Log.w(Helper.TAG, ex + "\n" + Log.getStackTraceString(ex)); + } + } + }); + } + }); + + return view; + } + + @Override + public void onPrepareOptionsMenu(Menu menu) { + menu.clear(); + } +} diff --git a/app/src/main/res/layout/fragment_about.xml b/app/src/main/res/layout/fragment_about.xml new file mode 100644 index 0000000000..49c4ae2850 --- /dev/null +++ b/app/src/main/res/layout/fragment_about.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + +