New setting: Automatic app list updates only on wifi (fixes: #380)

This commit is contained in:
Daniel Martí 2013-10-24 14:21:35 +02:00
parent f16234e084
commit d6f0fbca98
5 changed files with 48 additions and 19 deletions

View File

@ -22,6 +22,7 @@
android:required="false" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

View File

@ -9,19 +9,21 @@
<string name="version">Version</string>
<string name="n_versions_available">%d versions available</string>
<string name="n_version_available">%d version available</string>
<string name="notify">Notify</string>
<string name="cache_downloaded">Cache downloaded apps</string>
<string name="keep_downloaded">Keep downloaded apk files on SD card</string>
<string name="updates">Updates</string>
<string name="other">Other</string>
<string name="notify_updates_available">Notify when new updates are available</string>
<string name="update_apps_list">Update app list from repositories automatically
</string>
<string name="update_history">Update history</string>
<string name="update_history_desc">Days to show new/updated apps</string>
<string name="last_update_check">Last repo scan: %s</string>
<string name="never">never</string>
<string name="automatic_repo_scan">Automatic repo scan</string>
<string name="update_apps_list">Update app list from repositories automatically</string>
<string name="automatic_scan_wifi">Only on wifi</string>
<string name="automatic_scan_wifi_desc">Update app lists automatically only on wifi</string>
<string name="notify">Notify</string>
<string name="notify_updates_available">Notify when new updates are available</string>
<string name="update_history">Update history</string>
<string name="update_history_desc">Days to show new/updated apps</string>
<string name="search_results">Search Results</string>
<string name="app_details">App Details</string>

View File

@ -5,6 +5,9 @@
android:summary="@string/update_apps_list" android:key="updateInterval"
android:defaultValue="24" android:entries="@array/updateIntervalNames"
android:entryValues="@array/updateIntervalValues" />
<CheckBoxPreference android:title="@string/automatic_scan_wifi"
android:defaultValue="false" android:summary="@string/automatic_scan_wifi_desc"
android:key="updateOnWifiOnly" />
<CheckBoxPreference android:title="@string/notify"
android:defaultValue="true" android:summary="@string/notify_updates_available"
android:key="updateNotify" />

View File

@ -22,7 +22,9 @@ import android.content.Intent;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.ListPreference;
import android.preference.CheckBoxPreference;
import android.view.MenuItem;
import android.support.v4.app.NavUtils;
@ -30,7 +32,7 @@ import android.support.v4.app.NavUtils;
import org.fdroid.fdroid.compat.ActionBarCompat;
public class PreferencesActivity extends PreferenceActivity implements
OnPreferenceClickListener {
OnPreferenceChangeListener {
Intent ret;
@ -39,10 +41,14 @@ public class PreferencesActivity extends PreferenceActivity implements
super.onCreate(savedInstanceState);
ActionBarCompat.create(this).setDisplayHomeAsUpEnabled(true);
addPreferencesFromResource(R.xml.preferences);
//for (String prefkey : new String[] { }) {
//Preference pref = findPreference(prefkey);
//pref.setOnPreferenceClickListener(this);
//}
for (String prefkey : new String[] { "updateInterval" }) {
Preference pref = findPreference(prefkey);
pref.setOnPreferenceChangeListener(this);
CheckBoxPreference onlyOnWifi = (CheckBoxPreference)
findPreference("updateOnWifiOnly");
onlyOnWifi.setEnabled(Integer.parseInt(
((ListPreference)pref).getValue()) > 0);
}
}
@Override
@ -56,13 +62,16 @@ public class PreferencesActivity extends PreferenceActivity implements
}
@Override
public boolean onPreferenceClick(Preference preference) {
// Currently no actions are returned
//String key = preference.getKey();
//if (key.equals("...")) {
Intent ret = new Intent();
setResult(RESULT_OK, ret);
public boolean onPreferenceChange(Preference preference, Object newValue) {
String key = preference.getKey();
if (key.equals("updateInterval")) {
int interval = Integer.parseInt(newValue.toString());
CheckBoxPreference onlyOnWifi = (CheckBoxPreference)
findPreference("updateOnWifiOnly");
onlyOnWifi.setEnabled(interval > 0);
return true;
}
return false;
}
}

View File

@ -30,6 +30,8 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.graphics.BitmapFactory;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.ResultReceiver;
import android.os.SystemClock;
@ -137,6 +139,18 @@ public class UpdateService extends IntentService implements ProgressListener {
+ "ms ago, interval is " + interval + " hours");
return;
}
// If we are to update the repos only on wifi, make sure that
// connection is active
if (prefs.getBoolean("updateOnWifiOnly", false)) {
ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo.State wifi = conMan.getNetworkInfo(1).getState();
if (wifi != NetworkInfo.State.CONNECTED &&
wifi != NetworkInfo.State.CONNECTING) {
Log.d("FDroid", "Skipping update - wifi not available");
return;
}
}
} else {
Log.d("FDroid", "Unscheduled (manually requested) update");
}