mirror of
https://github.com/M66B/FairEmail.git
synced 2025-03-15 08:29:24 +00:00
Added metered/unmetered indicator
This commit is contained in:
parent
934bf848fe
commit
278e1952f4
6 changed files with 132 additions and 1 deletions
|
@ -24,12 +24,17 @@ import android.content.Intent;
|
|||
import android.content.SharedPreferences;
|
||||
import android.media.RingtoneManager;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.Network;
|
||||
import android.net.NetworkCapabilities;
|
||||
import android.net.NetworkRequest;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.AdapterView;
|
||||
|
@ -73,6 +78,7 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS
|
|||
@Nullable
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
setSubtitle(R.string.title_advanced);
|
||||
setHasOptionsMenu(true);
|
||||
|
||||
View view = inflater.inflate(R.layout.fragment_options, container, false);
|
||||
|
||||
|
@ -324,6 +330,59 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS
|
|||
return view;
|
||||
}
|
||||
|
||||
@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);
|
||||
// Removed because of Android VPN service
|
||||
// builder.addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
|
||||
cm.registerNetworkCallback(builder.build(), networkCallback);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
ConnectivityManager cm = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
cm.unregisterNetworkCallback(networkCallback);
|
||||
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
private ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
|
||||
@Override
|
||||
public void onAvailable(Network network) {
|
||||
getActivity().invalidateOptionsMenu();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) {
|
||||
getActivity().invalidateOptionsMenu();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLost(Network network) {
|
||||
getActivity().invalidateOptionsMenu();
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||
inflater.inflate(R.menu.menu_options, menu);
|
||||
super.onCreateOptionsMenu(menu, inflater);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrepareOptionsMenu(Menu menu) {
|
||||
Boolean metered = Helper.isMetered(getContext());
|
||||
menu.findItem(R.id.menu_metered).setVisible(metered != null);
|
||||
if (metered != null)
|
||||
menu.findItem(R.id.menu_metered).setIcon(
|
||||
metered ? R.drawable.baseline_attach_money_24 : R.drawable.baseline_money_off_24);
|
||||
super.onPrepareOptionsMenu(menu);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
Log.i(Helper.TAG, "Result class=" + this.getClass().getSimpleName() +
|
||||
|
|
10
app/src/main/res/drawable/baseline_attach_money_24.xml
Executable file
10
app/src/main/res/drawable/baseline_attach_money_24.xml
Executable file
|
@ -0,0 +1,10 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M11.8,10.9c-2.27,-0.59 -3,-1.2 -3,-2.15 0,-1.09 1.01,-1.85 2.7,-1.85 1.78,0 2.44,0.85 2.5,2.1h2.21c-0.07,-1.72 -1.12,-3.3 -3.21,-3.81V3h-3v2.16c-1.94,0.42 -3.5,1.68 -3.5,3.61 0,2.31 1.91,3.46 4.7,4.13 2.5,0.6 3,1.48 3,2.41 0,0.69 -0.49,1.79 -2.7,1.79 -2.06,0 -2.87,-0.92 -2.98,-2.1h-2.2c0.12,2.19 1.76,3.42 3.68,3.83V21h3v-2.15c1.95,-0.37 3.5,-1.5 3.5,-3.55 0,-2.84 -2.43,-3.81 -4.7,-4.4z"/>
|
||||
</vector>
|
10
app/src/main/res/drawable/baseline_money_off_24.xml
Executable file
10
app/src/main/res/drawable/baseline_money_off_24.xml
Executable file
|
@ -0,0 +1,10 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M12.5,6.9c1.78,0 2.44,0.85 2.5,2.1h2.21c-0.07,-1.72 -1.12,-3.3 -3.21,-3.81V3h-3v2.16c-0.53,0.12 -1.03,0.3 -1.48,0.54l1.47,1.47c0.41,-0.17 0.91,-0.27 1.51,-0.27zM5.33,4.06L4.06,5.33 7.5,8.77c0,2.08 1.56,3.21 3.91,3.91l3.51,3.51c-0.34,0.48 -1.05,0.91 -2.42,0.91 -2.06,0 -2.87,-0.92 -2.98,-2.1h-2.2c0.12,2.19 1.76,3.42 3.68,3.83V21h3v-2.15c0.96,-0.18 1.82,-0.55 2.45,-1.12l2.22,2.22 1.27,-1.27L5.33,4.06z"/>
|
||||
</vector>
|
|
@ -468,6 +468,47 @@
|
|||
app:layout_constraintStart_toEndOf="@id/ivClosing"
|
||||
app:layout_constraintTop_toTopOf="@id/ivClosing" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ivMetered"
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:layout_marginTop="12dp"
|
||||
android:src="@drawable/baseline_attach_money_24"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvClosing" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvMetered"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="18dp"
|
||||
android:text="@string/title_legend_metered"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
||||
app:layout_constraintBottom_toBottomOf="@id/ivMetered"
|
||||
app:layout_constraintStart_toEndOf="@id/ivMetered"
|
||||
app:layout_constraintTop_toTopOf="@id/ivMetered" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ivUnmetered"
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:layout_marginTop="12dp"
|
||||
android:src="@drawable/baseline_money_off_24"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvMetered" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvUnmetered"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="18dp"
|
||||
android:text="@string/title_legend_unmetered"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
||||
app:layout_constraintBottom_toBottomOf="@id/ivUnmetered"
|
||||
app:layout_constraintStart_toEndOf="@id/ivUnmetered"
|
||||
app:layout_constraintTop_toTopOf="@id/ivUnmetered" />
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvDownloadFetch"
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -478,7 +519,7 @@
|
|||
android:textAppearance="@android:style/TextAppearance.Small"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/tvDownloadFetchLegend"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvClosing" />
|
||||
app:layout_constraintTop_toBottomOf="@id/tvUnmetered" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ivDownloadFetch"
|
||||
|
|
9
app/src/main/res/menu/menu_options.xml
Normal file
9
app/src/main/res/menu/menu_options.xml
Normal file
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item
|
||||
android:id="@+id/menu_metered"
|
||||
android:icon="@drawable/baseline_attach_money_24"
|
||||
android:title=""
|
||||
app:showAsAction="always" />
|
||||
</menu>
|
|
@ -338,6 +338,8 @@
|
|||
<string name="title_legend_synchronizing">Synchronizing</string>
|
||||
<string name="title_legend_downloading">Downloading</string>
|
||||
<string name="title_legend_closing">Closing</string>
|
||||
<string name="title_legend_metered">Connection is metered</string>
|
||||
<string name="title_legend_unmetered">Connection is unmetered</string>
|
||||
<string name="title_legend_sync_keep">Number of days to synchronize / to keep messages</string>
|
||||
<string name="title_legend_download_fetch">Number of message bodies downloaded / headers fetched</string>
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue