diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java
index 04c79fa494..5403f28b94 100644
--- a/app/src/main/java/eu/faircode/email/FragmentMessages.java
+++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java
@@ -255,6 +255,7 @@ import me.everything.android.ui.overscroll.adapters.RecyclerViewOverScrollDecorA
public class FragmentMessages extends FragmentBase implements SharedPreferences.OnSharedPreferenceChangeListener {
private ViewGroup view;
private SwipeRefreshLayoutEx swipeRefresh;
+ private TextView tvAirplane;
private TextView tvSupport;
private ImageButton ibHintSupport;
private ImageButton ibHintSwipe;
@@ -276,6 +277,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
private TextViewAutoCompleteAction etSearch;
private BottomNavigationView bottom_navigation;
private ContentLoadingProgressBar pbWait;
+ private Group grpAirplane;
private Group grpSupport;
private Group grpHintSupport;
private Group grpHintSwipe;
@@ -512,6 +514,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
// Get controls
swipeRefresh = view.findViewById(R.id.swipeRefresh);
+ tvAirplane = view.findViewById(R.id.tvAirplane);
tvSupport = view.findViewById(R.id.tvSupport);
ibHintSupport = view.findViewById(R.id.ibHintSupport);
ibHintSwipe = view.findViewById(R.id.ibHintSwipe);
@@ -534,6 +537,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
bottom_navigation = view.findViewById(R.id.bottom_navigation);
pbWait = view.findViewById(R.id.pbWait);
+ grpAirplane = view.findViewById(R.id.grpAirplane);
grpSupport = view.findViewById(R.id.grpSupport);
grpHintSupport = view.findViewById(R.id.grpHintSupport);
grpHintSwipe = view.findViewById(R.id.grpHintSwipe);
@@ -565,6 +569,16 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
}
});
+ grpAirplane.setVisibility(View.GONE);
+ tvAirplane.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(android.provider.Settings.ACTION_AIRPLANE_MODE_SETTINGS)
+ .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ v.getContext().startActivity(intent);
+ }
+ });
+
grpSupport.setVisibility(View.GONE);
tvSupport.setOnClickListener(new View.OnClickListener() {
@Override
@@ -4396,6 +4410,9 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
builder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
cm.registerNetworkCallback(builder.build(), networkCallback);
+ updateAirplaneMode(ConnectionHelper.airplaneMode(getContext()));
+ getContext().registerReceiver(airplanemode, new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED));
+
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
boolean compact = prefs.getBoolean("compact", false);
int zoom = prefs.getInt("view_zoom", compact ? 0 : 1);
@@ -4455,6 +4472,8 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
prefs.unregisterOnSharedPreferenceChangeListener(this);
+ getContext().unregisterReceiver(airplanemode);
+
ConnectivityManager cm = Helper.getSystemService(getContext(), ConnectivityManager.class);
cm.unregisterNetworkCallback(networkCallback);
@@ -4497,11 +4516,25 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
return;
if (!rvMessage.isComputingLayout())
adapter.checkInternet();
+ updateAirplaneMode(ConnectionHelper.airplaneMode(getContext()));
}
});
}
};
+ private BroadcastReceiver airplanemode = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ boolean on = intent.getBooleanExtra("state", false);
+ updateAirplaneMode(on);
+ }
+ };
+
+ private void updateAirplaneMode(boolean on) {
+ on = on && !ConnectionHelper.getNetworkState(getContext()).isConnected();
+ grpAirplane.setVisibility(on ? View.VISIBLE : View.GONE);
+ }
+
private boolean checkDoze() {
if (viewType != AdapterMessage.ViewType.UNIFIED)
return false;
diff --git a/app/src/main/res/drawable/twotone_flight_24.xml b/app/src/main/res/drawable/twotone_flight_24.xml
new file mode 100644
index 0000000000..74ab4a25ab
--- /dev/null
+++ b/app/src/main/res/drawable/twotone_flight_24.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/layout/fragment_messages.xml b/app/src/main/res/layout/fragment_messages.xml
index 6a3ff977d7..54c51564fd 100644
--- a/app/src/main/res/layout/fragment_messages.xml
+++ b/app/src/main/res/layout/fragment_messages.xml
@@ -16,6 +16,30 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
+
+
+
+
+ app:layout_constraintTop_toBottomOf="@+id/vSeparatorAirplane" />
+
+
Long press a folder for options, like adding a folder to the navigation menu for quick access
To limit battery and network usage not all folders and not all messages will be synchronized by default
+ Airplane mode is on
If you have a question or a problem, please use the support menu to get help
Swipe left to trash; Swipe right to archive (if available); The swipe actions can be configured in the account settings
Long press a message to start selecting multiple messages; Hold and swipe up or down to select more messages