diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index 0dfbd8334a..aaf7320a24 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -113,6 +113,7 @@ public class AdapterMessage extends RecyclerView.Adapter 0 ? View.VISIBLE : View.GONE); + tvNoInternetAttachments.setVisibility(View.GONE); tvSubject.setText(message.subject); if (viewType == ViewType.THREAD || viewType == ViewType.SEARCH) @@ -466,7 +480,15 @@ public class AdapterMessage extends RecyclerView.Adapter 0 && show_expanded ? View.VISIBLE : View.GONE); bnvActions.setVisibility(viewType == ViewType.THREAD && show_expanded ? View.INVISIBLE : View.GONE); @@ -474,6 +496,7 @@ public class AdapterMessage extends RecyclerView.Adapter 0 ? View.VISIBLE : View.GONE); + + boolean downloading = false; + for (EntityAttachment attachment : attachments) + if (attachment.progress != null) { + downloading = true; + break; + } + + rvAttachment.setTag(downloading); + checkInternet(); } }); @@ -1457,73 +1524,77 @@ public class FragmentCompose extends FragmentEx { // Draft was deleted if (draft == null || draft.ui_hide) finish(); - else if (draft.content && state == State.NONE) { - state = State.LOADING; + else { + tvNoInternet.setTag(draft.content); + checkInternet(); - Bundle args = new Bundle(); - args.putLong("id", result.draft.id); - if (result.draft.replying != null) - args.putLong("reference", result.draft.replying); - else if (result.draft.forwarding != null) - args.putLong("reference", result.draft.forwarding); + if (draft.content && state == State.NONE) { + state = State.LOADING; - new SimpleTask() { - @Override - protected Spanned[] onLoad(final Context context, Bundle args) throws Throwable { - long id = args.getLong("id"); - final long reference = args.getLong("reference", -1); + Bundle args = new Bundle(); + args.putLong("id", result.draft.id); + if (result.draft.replying != null) + args.putLong("reference", result.draft.replying); + else if (result.draft.forwarding != null) + args.putLong("reference", result.draft.forwarding); - String body = EntityMessage.read(context, id); - String quote = (reference < 0 ? null : HtmlHelper.getQuote(context, reference, true)); + new SimpleTask() { + @Override + protected Spanned[] onLoad(final Context context, Bundle args) throws Throwable { + long id = args.getLong("id"); + final long reference = args.getLong("reference", -1); - return new Spanned[]{ - Html.fromHtml(body, cidGetter, null), - quote == null ? null : Html.fromHtml(quote, - new Html.ImageGetter() { - @Override - public Drawable getDrawable(String source) { - return HtmlHelper.decodeImage(source, context, reference, false); - } - }, - null)}; - } + String body = EntityMessage.read(context, id); + String quote = (reference < 0 ? null : HtmlHelper.getQuote(context, reference, true)); - @Override - protected void onLoaded(Bundle args, Spanned[] texts) { - etBody.setText(texts[0]); - etBody.setSelection(0); - tvReference.setText(texts[1]); + return new Spanned[]{ + Html.fromHtml(body, cidGetter, null), + quote == null ? null : Html.fromHtml(quote, + new Html.ImageGetter() { + @Override + public Drawable getDrawable(String source) { + return HtmlHelper.decodeImage(source, context, reference, false); + } + }, + null)}; + } - state = State.LOADED; - autosave = true; + @Override + protected void onLoaded(Bundle args, Spanned[] texts) { + etBody.setText(texts[0]); + etBody.setSelection(0); + tvReference.setText(texts[1]); - pbWait.setVisibility(View.GONE); - etBody.setVisibility(View.VISIBLE); - grpReference.setVisibility(texts[1] == null ? View.GONE : View.VISIBLE); - edit_bar.setVisibility(View.VISIBLE); - bottom_navigation.setVisibility(View.VISIBLE); - Helper.setViewsEnabled(view, true); + state = State.LOADED; + autosave = true; - getActivity().invalidateOptionsMenu(); + pbWait.setVisibility(View.GONE); + grpReference.setVisibility(texts[1] == null ? View.GONE : View.VISIBLE); + edit_bar.setVisibility(View.VISIBLE); + bottom_navigation.setVisibility(View.VISIBLE); + Helper.setViewsEnabled(view, true); - new Handler().post(new Runnable() { - @Override - public void run() { - if (TextUtils.isEmpty(etTo.getText())) - etTo.requestFocus(); - else if (TextUtils.isEmpty(etSubject.getText())) - etSubject.requestFocus(); - else - etBody.requestFocus(); - } - }); - } + getActivity().invalidateOptionsMenu(); - @Override - protected void onException(Bundle args, Throwable ex) { - Helper.unexpectedError(getContext(), getViewLifecycleOwner(), ex); - } - }.load(FragmentCompose.this, args); + new Handler().post(new Runnable() { + @Override + public void run() { + if (TextUtils.isEmpty(etTo.getText())) + etTo.requestFocus(); + else if (TextUtils.isEmpty(etSubject.getText())) + etSubject.requestFocus(); + else + etBody.requestFocus(); + } + }); + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Helper.unexpectedError(getContext(), getViewLifecycleOwner(), ex); + } + }.load(FragmentCompose.this, args); + } } } }); diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index cda112d37e..2f6f43bc3d 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -26,6 +26,10 @@ import android.content.SharedPreferences; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.drawable.Drawable; +import android.net.ConnectivityManager; +import android.net.Network; +import android.net.NetworkCapabilities; +import android.net.NetworkRequest; import android.os.Bundle; import android.os.Handler; import android.preference.PreferenceManager; @@ -1422,8 +1426,48 @@ public class FragmentMessages extends FragmentEx { public void onResume() { super.onResume(); grpSupport.setVisibility(Helper.isPro(getContext()) ? View.GONE : View.VISIBLE); + + ConnectivityManager cm = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkRequest.Builder builder = new NetworkRequest.Builder(); + builder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET); + cm.registerNetworkCallback(builder.build(), networkCallback); } + @Override + public void onPause() { + super.onPause(); + + ConnectivityManager cm = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE); + cm.unregisterNetworkCallback(networkCallback); + } + + ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() { + @Override + public void onAvailable(Network network) { + check(); + } + + @Override + public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) { + check(); + } + + @Override + public void onLost(Network network) { + check(); + } + + private void check() { + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) + adapter.checkInternet(); + } + }); + } + }; + @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.menu_messages, menu); diff --git a/app/src/main/res/layout/fragment_compose.xml b/app/src/main/res/layout/fragment_compose.xml index 3132ca5bbb..db427fe64b 100644 --- a/app/src/main/res/layout/fragment_compose.xml +++ b/app/src/main/res/layout/fragment_compose.xml @@ -185,6 +185,16 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/vSeparatorAttachments" /> + + + app:layout_constraintTop_toBottomOf="@+id/tvNoInternetAttachments" /> + + + + + +