From 76c2354d00f1b7224f106ef2cdbf39cdcdcdb463 Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 30 Dec 2018 12:35:34 +0000 Subject: [PATCH] Improved error handling --- .../eu/faircode/email/FragmentAccount.java | 112 +++++++++++------- .../eu/faircode/email/FragmentIdentity.java | 50 +++++--- app/src/main/res/layout/fragment_account.xml | 13 ++ app/src/main/res/layout/fragment_identity.xml | 13 ++ app/src/main/res/layout/fragment_setup.xml | 1 + 5 files changed, 127 insertions(+), 62 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FragmentAccount.java b/app/src/main/java/eu/faircode/email/FragmentAccount.java index ff277920b2..599ed55965 100644 --- a/app/src/main/java/eu/faircode/email/FragmentAccount.java +++ b/app/src/main/java/eu/faircode/email/FragmentAccount.java @@ -96,7 +96,6 @@ public class FragmentAccount extends FragmentEx { private EditText etUser; private TextInputLayout tilPassword; - private TextView tvName; private EditText etName; private Button btnColor; private View vwColor; @@ -123,6 +122,8 @@ public class FragmentAccount extends FragmentEx { private Button btnSave; private ContentLoadingProgressBar pbSave; + private TextView tvError; + private ContentLoadingProgressBar pbWait; private Group grpServer; @@ -166,7 +167,6 @@ public class FragmentAccount extends FragmentEx { tilPassword = view.findViewById(R.id.tilPassword); etName = view.findViewById(R.id.etName); - tvName = view.findViewById(R.id.tvName); btnColor = view.findViewById(R.id.btnColor); vwColor = view.findViewById(R.id.vwColor); ibColorDefault = view.findViewById(R.id.ibColorDefault); @@ -192,6 +192,7 @@ public class FragmentAccount extends FragmentEx { btnSave = view.findViewById(R.id.btnSave); pbSave = view.findViewById(R.id.pbSave); + tvError = view.findViewById(R.id.tvError); pbWait = view.findViewById(R.id.pbWait); @@ -257,12 +258,9 @@ public class FragmentAccount extends FragmentEx { } }); - btnAutoConfig.setEnabled(false); - btnAutoConfig.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Bundle args = new Bundle(); args.putString("domain", etDomain.getText().toString()); @@ -414,14 +412,6 @@ public class FragmentAccount extends FragmentEx { btnCheck.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Helper.setViewsEnabled(view, false); - btnAuthorize.setEnabled(false); - btnCheck.setEnabled(false); - pbCheck.setVisibility(View.VISIBLE); - tvIdle.setVisibility(View.GONE); - grpFolders.setVisibility(View.GONE); - btnSave.setVisibility(View.GONE); - Provider provider = (Provider) spProvider.getSelectedItem(); Bundle args = new Bundle(); @@ -435,6 +425,26 @@ public class FragmentAccount extends FragmentEx { args.putInt("auth_type", authorized == null ? Helper.AUTH_TYPE_PASSWORD : provider.getAuthType()); new SimpleTask() { + @Override + protected void onInit(Bundle args) { + Helper.setViewsEnabled(view, false); + btnAuthorize.setEnabled(false); + btnCheck.setEnabled(false); + pbCheck.setVisibility(View.VISIBLE); + tvIdle.setVisibility(View.GONE); + grpFolders.setVisibility(View.GONE); + btnSave.setVisibility(View.GONE); + tvError.setVisibility(View.GONE); + } + + @Override + protected void onCleanup(Bundle args) { + Helper.setViewsEnabled(view, true); + btnAuthorize.setEnabled(true); + btnCheck.setEnabled(true); + pbCheck.setVisibility(View.GONE); + } + @Override protected CheckResult onLoad(Context context, Bundle args) throws Throwable { long id = args.getLong("id"); @@ -524,11 +534,6 @@ public class FragmentAccount extends FragmentEx { @Override protected void onLoaded(Bundle args, CheckResult result) { - Helper.setViewsEnabled(view, true); - btnAuthorize.setEnabled(true); - btnCheck.setEnabled(true); - pbCheck.setVisibility(View.GONE); - tvIdle.setVisibility(result.idle ? View.GONE : View.VISIBLE); setFolders(result.folders); @@ -543,21 +548,21 @@ public class FragmentAccount extends FragmentEx { @Override protected void onException(Bundle args, Throwable ex) { - Helper.setViewsEnabled(view, true); - btnAuthorize.setEnabled(true); - btnCheck.setEnabled(true); - pbCheck.setVisibility(View.GONE); grpFolders.setVisibility(View.GONE); btnSave.setVisibility(View.GONE); if (ex instanceof IllegalArgumentException) Snackbar.make(view, ex.getMessage(), Snackbar.LENGTH_LONG).show(); - else - new DialogBuilderLifecycle(getContext(), getViewLifecycleOwner()) - .setMessage(Helper.formatThrowable(ex)) - .setPositiveButton(android.R.string.cancel, null) - .create() - .show(); + else { + tvError.setText(Helper.formatThrowable(ex)); + tvError.setVisibility(View.VISIBLE); + new Handler().post(new Runnable() { + @Override + public void run() { + ((ScrollView) view).smoothScrollTo(0, tvError.getBottom()); + } + }); + } } }.load(FragmentAccount.this, args); } @@ -566,12 +571,6 @@ public class FragmentAccount extends FragmentEx { btnSave.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Helper.setViewsEnabled(view, false); - btnAuthorize.setEnabled(false); - btnCheck.setEnabled(false); - btnSave.setEnabled(false); - pbSave.setVisibility(View.VISIBLE); - Provider provider = (Provider) spProvider.getSelectedItem(); EntityFolder drafts = (EntityFolder) spDrafts.getSelectedItem(); @@ -619,6 +618,25 @@ public class FragmentAccount extends FragmentEx { args.putSerializable("junk", junk); new SimpleTask() { + @Override + protected void onInit(Bundle args) { + Helper.setViewsEnabled(view, false); + btnAuthorize.setEnabled(false); + btnCheck.setEnabled(false); + btnSave.setEnabled(false); + pbSave.setVisibility(View.VISIBLE); + tvError.setVisibility(View.GONE); + } + + @Override + protected void onCleanup(Bundle args) { + Helper.setViewsEnabled(view, true); + btnAuthorize.setEnabled(true); + btnCheck.setEnabled(true); + btnSave.setEnabled(true); + pbSave.setVisibility(View.GONE); + } + @Override protected Void onLoad(Context context, Bundle args) throws Throwable { long id = args.getLong("id"); @@ -834,20 +852,18 @@ public class FragmentAccount extends FragmentEx { @Override protected void onException(Bundle args, Throwable ex) { - Helper.setViewsEnabled(view, true); - btnAuthorize.setEnabled(true); - btnCheck.setEnabled(true); - btnSave.setEnabled(true); - pbSave.setVisibility(View.GONE); - if (ex instanceof IllegalArgumentException) Snackbar.make(view, ex.getMessage(), Snackbar.LENGTH_LONG).show(); - else - new DialogBuilderLifecycle(getContext(), getViewLifecycleOwner()) - .setMessage(Helper.formatThrowable(ex)) - .setPositiveButton(android.R.string.cancel, null) - .create() - .show(); + else { + tvError.setText(Helper.formatThrowable(ex)); + tvError.setVisibility(View.VISIBLE); + new Handler().post(new Runnable() { + @Override + public void run() { + ((ScrollView) view).smoothScrollTo(0, tvError.getBottom()); + } + }); + } } }.load(FragmentAccount.this, args); } @@ -864,6 +880,9 @@ public class FragmentAccount extends FragmentEx { // Initialize Helper.setViewsEnabled(view, false); + + btnAutoConfig.setEnabled(false); + btnAuthorize.setVisibility(View.GONE); cbStartTls.setVisibility(View.GONE); cbInsecure.setVisibility(View.GONE); @@ -878,6 +897,7 @@ public class FragmentAccount extends FragmentEx { btnSave.setVisibility(View.GONE); pbSave.setVisibility(View.GONE); + tvError.setVisibility(View.GONE); grpServer.setVisibility(View.GONE); grpAuthorize.setVisibility(View.GONE); diff --git a/app/src/main/java/eu/faircode/email/FragmentIdentity.java b/app/src/main/java/eu/faircode/email/FragmentIdentity.java index 5d39ac993c..411153ef64 100644 --- a/app/src/main/java/eu/faircode/email/FragmentIdentity.java +++ b/app/src/main/java/eu/faircode/email/FragmentIdentity.java @@ -52,6 +52,7 @@ import android.widget.ImageButton; import android.widget.ImageView; import android.widget.ScrollView; import android.widget.Spinner; +import android.widget.TextView; import com.android.colorpicker.ColorPickerDialog; import com.android.colorpicker.ColorPickerSwatch; @@ -110,6 +111,8 @@ public class FragmentIdentity extends FragmentEx { private Button btnSave; private ContentLoadingProgressBar pbSave; + private TextView tvError; + private ContentLoadingProgressBar pbWait; private Group grpAuthorize; @@ -149,8 +152,10 @@ public class FragmentIdentity extends FragmentEx { btnAdvanced = view.findViewById(R.id.btnAdvanced); spProvider = view.findViewById(R.id.spProvider); + etDomain = view.findViewById(R.id.etDomain); btnAutoConfig = view.findViewById(R.id.btnAutoConfig); + etHost = view.findViewById(R.id.etHost); cbStartTls = view.findViewById(R.id.cbStartTls); cbInsecure = view.findViewById(R.id.cbInsecure); @@ -169,6 +174,8 @@ public class FragmentIdentity extends FragmentEx { btnSave = view.findViewById(R.id.btnSave); pbSave = view.findViewById(R.id.pbSave); + tvError = view.findViewById(R.id.tvError); + pbWait = view.findViewById(R.id.pbWait); grpAuthorize = view.findViewById(R.id.grpAuthorize); @@ -348,8 +355,6 @@ public class FragmentIdentity extends FragmentEx { } }); - btnAutoConfig.setEnabled(false); - btnAutoConfig.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -413,10 +418,6 @@ public class FragmentIdentity extends FragmentEx { btnSave.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Helper.setViewsEnabled(view, false); - btnSave.setEnabled(false); - pbSave.setVisibility(View.VISIBLE); - EntityAccount account = (EntityAccount) spAccount.getSelectedItem(); String name = etName.getText().toString(); @@ -450,6 +451,21 @@ public class FragmentIdentity extends FragmentEx { args.putSerializable("sent", (EntityFolder) spSent.getSelectedItem()); new SimpleTask() { + @Override + protected void onInit(Bundle args) { + Helper.setViewsEnabled(view, false); + btnSave.setEnabled(false); + pbSave.setVisibility(View.VISIBLE); + tvError.setVisibility(View.GONE); + } + + @Override + protected void onCleanup(Bundle args) { + Helper.setViewsEnabled(view, true); + btnSave.setEnabled(true); + pbSave.setVisibility(View.GONE); + } + @Override protected Void onLoad(Context context, Bundle args) throws Throwable { long id = args.getLong("id"); @@ -596,18 +612,18 @@ public class FragmentIdentity extends FragmentEx { @Override protected void onException(Bundle args, Throwable ex) { - Helper.setViewsEnabled(view, true); - btnSave.setEnabled(true); - pbSave.setVisibility(View.GONE); - if (ex instanceof IllegalArgumentException) Snackbar.make(view, ex.getMessage(), Snackbar.LENGTH_LONG).show(); - else - new DialogBuilderLifecycle(getContext(), getViewLifecycleOwner()) - .setMessage(Helper.formatThrowable(ex)) - .setPositiveButton(android.R.string.cancel, null) - .create() - .show(); + else { + tvError.setText(Helper.formatThrowable(ex)); + tvError.setVisibility(View.VISIBLE); + new Handler().post(new Runnable() { + @Override + public void run() { + ((ScrollView) view).smoothScrollTo(0, tvError.getBottom()); + } + }); + } } }.load(FragmentIdentity.this, args); } @@ -619,11 +635,13 @@ public class FragmentIdentity extends FragmentEx { // Initialize Helper.setViewsEnabled(view, false); + btnAutoConfig.setEnabled(false); cbInsecure.setVisibility(View.GONE); tilPassword.setPasswordVisibilityToggleEnabled(id < 0); btnSave.setVisibility(View.GONE); btnAdvanced.setVisibility(View.GONE); pbSave.setVisibility(View.GONE); + tvError.setVisibility(View.GONE); grpAuthorize.setVisibility(View.GONE); grpAdvanced.setVisibility(View.GONE); diff --git a/app/src/main/res/layout/fragment_account.xml b/app/src/main/res/layout/fragment_account.xml index 85c201bfdc..7de3f39020 100644 --- a/app/src/main/res/layout/fragment_account.xml +++ b/app/src/main/res/layout/fragment_account.xml @@ -560,6 +560,19 @@ app:layout_constraintStart_toEndOf="@id/btnSave" app:layout_constraintTop_toTopOf="@id/btnSave" /> + + + +