Warn user about downloading update package via mobile data

Based on: 8928492535
This commit is contained in:
Gabriele M
2017-08-07 16:43:37 +02:00
parent cdc4849767
commit acd7387d23
7 changed files with 81 additions and 1 deletions

View File

@@ -0,0 +1,13 @@
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingEnd="16dp"
android:paddingStart="16dp"
android:paddingTop="16dp">
<CheckBox
android:id="@+id/checkbox"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</FrameLayout>

View File

@@ -17,4 +17,9 @@
android:checkable="true"
android:title="@string/menu_auto_delete_updates"
app:showAsAction="never" />
<item
android:id="@+id/menu_mobile_data_warning"
android:checkable="true"
android:title="@string/menu_mobile_data_warning"
app:showAsAction="never" />
</menu>

View File

@@ -115,4 +115,9 @@
<item quantity="one">1 hour</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> hours</item>
</plurals>
<string name="update_on_mobile_data_title">Warning</string>
<string name="update_on_mobile_data_message">You\'re about to download an update package using mobile data which is likely going to cause high data usage. Would you like to proceed?</string>
<string name="checkbox_mobile_data_warning">Do not show again</string>
<string name="menu_mobile_data_warning">Mobile data warning</string>
</resources>

View File

@@ -180,6 +180,8 @@ public class UpdatesActivity extends UpdatesListActivity {
.setChecked(preferences.getBoolean(Constants.PREF_AUTO_UPDATES_CHECK, true));
menu.findItem(R.id.menu_auto_delete_updates)
.setChecked(preferences.getBoolean(Constants.PREF_AUTO_DELETE_UPDATES, false));
menu.findItem(R.id.menu_mobile_data_warning)
.setChecked(preferences.getBoolean(Constants.PREF_MOBILE_DATA_WARNING, true));
return super.onCreateOptionsMenu(menu);
}
@@ -214,6 +216,15 @@ public class UpdatesActivity extends UpdatesListActivity {
.apply();
return true;
}
case R.id.menu_mobile_data_warning: {
boolean enable = !item.isChecked();
item.setChecked(enable);
PreferenceManager.getDefaultSharedPreferences(UpdatesActivity.this)
.edit()
.putBoolean(Constants.PREF_MOBILE_DATA_WARNING, enable)
.apply();
return true;
}
}
return super.onOptionsItemSelected(item);
}

View File

@@ -16,6 +16,8 @@
package org.lineageos.updater;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AlertDialog;
import android.support.v7.view.ActionMode;
@@ -29,12 +31,14 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.ImageButton;
import android.widget.ProgressBar;
import android.widget.TextView;
import org.lineageos.updater.controller.Controller;
import org.lineageos.updater.misc.BuildInfoUtils;
import org.lineageos.updater.misc.Constants;
import org.lineageos.updater.misc.FileUtils;
import org.lineageos.updater.misc.PermissionsUtils;
import org.lineageos.updater.misc.StringGenerator;
@@ -252,6 +256,39 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
notifyItemRangeChanged(position, getItemCount());
}
private void startDownloadWithWarning(final String downloadId) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mActivity);
boolean warn = preferences.getBoolean(Constants.PREF_MOBILE_DATA_WARNING, true);
if (Utils.isOnWifiOrEthernet(mActivity) || !warn) {
mUpdaterController.startDownload(downloadId);
return;
}
View checkboxView = LayoutInflater.from(mActivity).inflate(R.layout.checkbox_view, null);
CheckBox checkbox = (CheckBox) checkboxView.findViewById(R.id.checkbox);
checkbox.setText(R.string.checkbox_mobile_data_warning);
new AlertDialog.Builder(mActivity)
.setTitle(R.string.update_on_mobile_data_title)
.setMessage(R.string.update_on_mobile_data_message)
.setView(checkboxView)
.setPositiveButton(R.string.action_description_download,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (checkbox.isChecked()) {
preferences.edit()
.putBoolean(Constants.PREF_MOBILE_DATA_WARNING, false)
.apply();
mActivity.supportInvalidateOptionsMenu();
}
mUpdaterController.startDownload(downloadId);
}
})
.setNegativeButton(android.R.string.cancel, null)
.show();
}
private void setButtonAction(ImageButton button, Action action, final String downloadId,
boolean enabled) {
final View.OnClickListener clickListener;
@@ -264,7 +301,7 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
clickListener = !enabled ? null : new View.OnClickListener() {
@Override
public void onClick(View view) {
mUpdaterController.startDownload(downloadId);
startDownloadWithWarning(downloadId);
}
};
break;

View File

@@ -26,6 +26,7 @@ public final class Constants {
public static final String PREF_LAST_UPDATE_CHECK = "last_update_check";
public static final String PREF_AUTO_UPDATES_CHECK = "auto_updates_check";
public static final String PREF_AUTO_DELETE_UPDATES = "auto_delete_updates";
public static final String PREF_MOBILE_DATA_WARNING = "pref_mobile_data_warning";
public static final String UNCRYPT_FILE_EXT = ".uncrypt";

View File

@@ -167,6 +167,14 @@ public class Utils {
return !(info == null || !info.isConnected() || !info.isAvailable());
}
public static boolean isOnWifiOrEthernet(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(
Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
return (info != null && (info.getType() == ConnectivityManager.TYPE_ETHERNET
|| info.getType() == ConnectivityManager.TYPE_WIFI));
}
/**
* Compares two json formatted updates list files
*