From 85d3fc94158b7522c3b7755aa8884bb317d11d8c Mon Sep 17 00:00:00 2001 From: M66B Date: Thu, 9 Sep 2021 14:23:51 +0200 Subject: [PATCH] Forward raw: check suitable --- .../email/FragmentDialogForwardRaw.java | 71 +++++++++++++++++++ .../main/res/layout/dialog_forward_raw.xml | 15 ++++ 2 files changed, 86 insertions(+) diff --git a/app/src/main/java/eu/faircode/email/FragmentDialogForwardRaw.java b/app/src/main/java/eu/faircode/email/FragmentDialogForwardRaw.java index 9e45dfb775..99c2b5d527 100644 --- a/app/src/main/java/eu/faircode/email/FragmentDialogForwardRaw.java +++ b/app/src/main/java/eu/faircode/email/FragmentDialogForwardRaw.java @@ -23,6 +23,10 @@ import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +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.view.LayoutInflater; @@ -33,6 +37,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.core.content.FileProvider; +import androidx.lifecycle.Lifecycle; import androidx.lifecycle.LiveData; import androidx.lifecycle.Observer; @@ -53,6 +58,7 @@ public class FragmentDialogForwardRaw extends FragmentDialogBase { View dview = LayoutInflater.from(getContext()).inflate(R.layout.dialog_forward_raw, null); TextView tvRemaining = dview.findViewById(R.id.tvRemaining); TextView tvOption = dview.findViewById(R.id.tvOption); + TextView tvNoInternet = dview.findViewById(R.id.tvNoInternet); tvRemaining.setText(getString(R.string.title_eml_downloaded, "-")); @@ -172,6 +178,12 @@ public class FragmentDialogForwardRaw extends FragmentDialogBase { .create(); } + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + checkInternet.run(); + } + @Override public void onStart() { super.onStart(); @@ -184,6 +196,24 @@ public class FragmentDialogForwardRaw extends FragmentDialogBase { .setEnabled(enabled); } + @Override + public void onResume() { + super.onResume(); + + 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); + } + @Override public void onSaveInstanceState(@NonNull Bundle outState) { outState.putBoolean("fair:enabled", enabled); @@ -211,4 +241,45 @@ public class FragmentDialogForwardRaw extends FragmentDialogBase { Log.unexpectedError(getParentFragmentManager(), ex); } } + + private 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() { + ApplicationEx.getMainHandler().post(new Runnable() { + @Override + public void run() { + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) + checkInternet.run(); + } + }); + } + }; + + private Runnable checkInternet = new Runnable() { + @Override + public void run() { + try { + ConnectionHelper.NetworkState state = + ConnectionHelper.getNetworkState(getContext()); + getDialog().findViewById(R.id.tvNoInternet).setVisibility( + state.isSuitable() ? View.GONE : View.VISIBLE); + } catch (Throwable ex) { + Log.e(ex); + } + } + }; } diff --git a/app/src/main/res/layout/dialog_forward_raw.xml b/app/src/main/res/layout/dialog_forward_raw.xml index 95445aecad..e82a756520 100644 --- a/app/src/main/res/layout/dialog_forward_raw.xml +++ b/app/src/main/res/layout/dialog_forward_raw.xml @@ -57,5 +57,20 @@ android:textStyle="bold" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tvOption" /> + +