From 8fbbb646843b67cff662eb712987b800f8752a10 Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 11 May 2019 17:02:11 +0200 Subject: [PATCH] Less intrusive asking for help --- .../java/eu/faircode/email/ActivityView.java | 50 -------------- .../java/eu/faircode/email/ApplicationEx.java | 1 + .../eu/faircode/email/FragmentMessages.java | 66 +++++++++++++++++++ app/src/main/res/values/strings.xml | 1 + 4 files changed, 68 insertions(+), 50 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java index be68a91eee..ce5dacc2ff 100644 --- a/app/src/main/java/eu/faircode/email/ActivityView.java +++ b/app/src/main/java/eu/faircode/email/ActivityView.java @@ -47,8 +47,6 @@ import android.view.View; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; -import android.widget.Button; -import android.widget.CheckBox; import android.widget.ImageView; import android.widget.ScrollView; import android.widget.Toast; @@ -69,7 +67,6 @@ import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import com.bugsnag.android.Bugsnag; import com.google.android.material.snackbar.Snackbar; import org.json.JSONArray; @@ -415,7 +412,6 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB new Handler().post(checkIntent); checkFirst(); - checkBugsnag(); checkCrash(); pgpService = new OpenPgpServiceConnection(this, "org.sufficientlysecure.keychain"); @@ -674,52 +670,6 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB } } - private void checkBugsnag() { - final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); - if (prefs.getBoolean("first", true) || - prefs.getBoolean("crash_reports", false) || - prefs.getBoolean("crash_reports_confirmed", false)) - return; - - final View dview = LayoutInflater.from(this).inflate(R.layout.dialog_error_reporting, null); - final Button btnInfo = dview.findViewById(R.id.btnInfo); - final CheckBox cbNotAgain = dview.findViewById(R.id.cbNotAgain); - - final Intent info = new Intent(Intent.ACTION_VIEW); - info.setData(Uri.parse(Helper.FAQ_URI + "#user-content-faq104")); - info.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - - btnInfo.setVisibility( - info.resolveActivity(getPackageManager()) == null ? View.GONE : View.VISIBLE); - - btnInfo.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - startActivity(info); - } - }); - - new DialogBuilderLifecycle(this, this) - .setView(dview) - .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - prefs.edit().putBoolean("crash_reports", true).apply(); - if (cbNotAgain.isChecked()) - prefs.edit().putBoolean("crash_reports_confirmed", true).apply(); - Bugsnag.startSession(); - } - }) - .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - if (cbNotAgain.isChecked()) - prefs.edit().putBoolean("crash_reports_confirmed", true).apply(); - } - }) - .show(); - } - private void checkCrash() { new SimpleTask() { @Override diff --git a/app/src/main/java/eu/faircode/email/ApplicationEx.java b/app/src/main/java/eu/faircode/email/ApplicationEx.java index 386affaa2b..b6d67569dc 100644 --- a/app/src/main/java/eu/faircode/email/ApplicationEx.java +++ b/app/src/main/java/eu/faircode/email/ApplicationEx.java @@ -165,6 +165,7 @@ public class ApplicationEx extends Application { ignore.add("java.net.UnknownHostException"); ignore.add("java.net.SocketTimeoutException"); ignore.add("java.net.SocketException"); + // android.accounts.OperationCanceledException ignore.add("javax.mail.StoreClosedException"); ignore.add("javax.mail.FolderClosedException"); diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index badd7c4947..58809feab6 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -33,6 +33,7 @@ import android.net.ConnectivityManager; import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkRequest; +import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Parcel; @@ -53,6 +54,7 @@ import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.ArrayAdapter; +import android.widget.Button; import android.widget.CheckBox; import android.widget.ImageButton; import android.widget.SeekBar; @@ -83,6 +85,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; +import com.bugsnag.android.Bugsnag; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.snackbar.Snackbar; @@ -1966,6 +1969,8 @@ public class FragmentMessages extends FragmentBase { } }); } + + checkReporting(); } @Override @@ -2029,6 +2034,67 @@ public class FragmentMessages extends FragmentBase { } }; + + private void checkReporting() { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); + if (prefs.getBoolean("crash_reports", false) || + prefs.getBoolean("crash_reports_asked", false)) + return; + + final Snackbar snackbar = Snackbar.make(view, R.string.title_ask_help, Snackbar.LENGTH_INDEFINITE); + snackbar.setAction(R.string.title_info, new View.OnClickListener() { + @Override + public void onClick(View v) { + snackbar.dismiss(); + askReporting(); + } + }); + + snackbar.show(); + } + + private void askReporting() { + final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); + + final View dview = LayoutInflater.from(getContext()).inflate(R.layout.dialog_error_reporting, null); + final Button btnInfo = dview.findViewById(R.id.btnInfo); + final CheckBox cbNotAgain = dview.findViewById(R.id.cbNotAgain); + + final Intent info = new Intent(Intent.ACTION_VIEW); + info.setData(Uri.parse(Helper.FAQ_URI + "#user-content-faq104")); + info.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + + btnInfo.setVisibility( + info.resolveActivity(getContext().getPackageManager()) == null ? View.GONE : View.VISIBLE); + + btnInfo.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + startActivity(info); + } + }); + + new DialogBuilderLifecycle(getContext(), getViewLifecycleOwner()) + .setView(dview) + .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + prefs.edit().putBoolean("crash_reports", true).apply(); + if (cbNotAgain.isChecked()) + prefs.edit().putBoolean("crash_reports_asked", true).apply(); + Bugsnag.startSession(); + } + }) + .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (cbNotAgain.isChecked()) + prefs.edit().putBoolean("crash_reports_asked", true).apply(); + } + }) + .show(); + } + @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.menu_messages, menu); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f70865a08a..2ace4b18c1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -437,6 +437,7 @@ Showing images can leak privacy sensitive information Edit reformatted replied/forwarded message text? Delete local messages which are stored on the remote server too? + Help improve FairEmail Send error reports? Error reporting will help improve FairEmail