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:checkable="true"
android:title="@string/menu_auto_delete_updates" android:title="@string/menu_auto_delete_updates"
app:showAsAction="never" /> 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> </menu>

View File

@@ -115,4 +115,9 @@
<item quantity="one">1 hour</item> <item quantity="one">1 hour</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> hours</item> <item quantity="other"><xliff:g id="count">%d</xliff:g> hours</item>
</plurals> </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> </resources>

View File

@@ -180,6 +180,8 @@ public class UpdatesActivity extends UpdatesListActivity {
.setChecked(preferences.getBoolean(Constants.PREF_AUTO_UPDATES_CHECK, true)); .setChecked(preferences.getBoolean(Constants.PREF_AUTO_UPDATES_CHECK, true));
menu.findItem(R.id.menu_auto_delete_updates) menu.findItem(R.id.menu_auto_delete_updates)
.setChecked(preferences.getBoolean(Constants.PREF_AUTO_DELETE_UPDATES, false)); .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); return super.onCreateOptionsMenu(menu);
} }
@@ -214,6 +216,15 @@ public class UpdatesActivity extends UpdatesListActivity {
.apply(); .apply();
return true; 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); return super.onOptionsItemSelected(item);
} }

View File

@@ -16,6 +16,8 @@
package org.lineageos.updater; package org.lineageos.updater;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.support.design.widget.Snackbar; import android.support.design.widget.Snackbar;
import android.support.v7.app.AlertDialog; import android.support.v7.app.AlertDialog;
import android.support.v7.view.ActionMode; import android.support.v7.view.ActionMode;
@@ -29,12 +31,14 @@ import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.ImageButton; import android.widget.ImageButton;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import android.widget.TextView; import android.widget.TextView;
import org.lineageos.updater.controller.Controller; import org.lineageos.updater.controller.Controller;
import org.lineageos.updater.misc.BuildInfoUtils; import org.lineageos.updater.misc.BuildInfoUtils;
import org.lineageos.updater.misc.Constants;
import org.lineageos.updater.misc.FileUtils; import org.lineageos.updater.misc.FileUtils;
import org.lineageos.updater.misc.PermissionsUtils; import org.lineageos.updater.misc.PermissionsUtils;
import org.lineageos.updater.misc.StringGenerator; import org.lineageos.updater.misc.StringGenerator;
@@ -252,6 +256,39 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
notifyItemRangeChanged(position, getItemCount()); 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, private void setButtonAction(ImageButton button, Action action, final String downloadId,
boolean enabled) { boolean enabled) {
final View.OnClickListener clickListener; final View.OnClickListener clickListener;
@@ -264,7 +301,7 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
clickListener = !enabled ? null : new View.OnClickListener() { clickListener = !enabled ? null : new View.OnClickListener() {
@Override @Override
public void onClick(View view) { public void onClick(View view) {
mUpdaterController.startDownload(downloadId); startDownloadWithWarning(downloadId);
} }
}; };
break; 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_LAST_UPDATE_CHECK = "last_update_check";
public static final String PREF_AUTO_UPDATES_CHECK = "auto_updates_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_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"; public static final String UNCRYPT_FILE_EXT = ".uncrypt";

View File

@@ -167,6 +167,14 @@ public class Utils {
return !(info == null || !info.isConnected() || !info.isAvailable()); 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 * Compares two json formatted updates list files
* *