Skip to content

Commit 6e3c812

Browse files
committed
Merge pull request #1399 from garvankeeley/power-saving-options
Motion detection options: off, on, or extra power savings
2 parents 8d4eed6 + eaaa672 commit 6e3c812

File tree

6 files changed

+82
-4
lines changed

6 files changed

+82
-4
lines changed

android/src/main/java/org/mozilla/mozstumbler/client/subactivities/PreferencesScreen.java

+25-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import android.preference.PreferenceActivity;
1818
import android.preference.PreferenceGroup;
1919
import android.text.TextUtils;
20-
import android.widget.Toast;
2120

2221
import org.mozilla.mozstumbler.R;
2322
import org.mozilla.mozstumbler.client.ClientPrefs;
@@ -33,6 +32,7 @@ public class PreferencesScreen extends PreferenceActivity {
3332
private CheckBoxPreference mEnableShowMLSLocations;
3433
private CheckBoxPreference mCrashReportsOn;
3534
private ListPreference mMapTileDetail;
35+
private ListPreference mPowerSavingMode;
3636

3737
private ClientPrefs getPrefs() {
3838
return ClientPrefs.getInstance(this);
@@ -58,6 +58,11 @@ protected void onCreate(Bundle savedInstanceState) {
5858
mMapTileDetail.setValueIndex(valueIndex);
5959
updateMapDetailTitle(valueIndex);
6060

61+
mPowerSavingMode = (ListPreference) getPreferenceManager().findPreference(Prefs.POWER_SAVING_MODE);
62+
valueIndex = Prefs.getInstance(this).getPowerSavingMode().ordinal();
63+
mPowerSavingMode.setValueIndex(valueIndex);
64+
updatePowerSavingMode(valueIndex);
65+
6166
setPreferenceListener();
6267
setButtonListeners();
6368
}
@@ -119,6 +124,11 @@ private void updateMapDetailTitle(int index) {
119124
mMapTileDetail.getEntries()[index]);
120125
}
121126

127+
private void updatePowerSavingMode(int index) {
128+
mPowerSavingMode.setTitle(getString(R.string.power_saving_mode) + ": " +
129+
mPowerSavingMode.getEntries()[index]);
130+
}
131+
122132
private void setPreferenceListener() {
123133
mNicknamePreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
124134
@Override
@@ -186,6 +196,20 @@ public boolean onPreferenceChange(Preference preference, Object newValue) {
186196
return true;
187197
}
188198
});
199+
mPowerSavingMode.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
200+
@Override
201+
public boolean onPreferenceChange(Preference preference, Object newValue) {
202+
final int i = mPowerSavingMode.findIndexOfValue(newValue.toString());
203+
getPrefs().setPowerSavingMode(i);
204+
updatePowerSavingMode(i);
205+
final MainApp app = ((MainApp) getApplication());
206+
if (app.isScanningOrPaused()) {
207+
app.stopScanning();
208+
app.startScanning();
209+
}
210+
return true;
211+
}
212+
});
189213
}
190214

191215
private void setNicknamePreferenceTitle(String nickname) {

android/src/main/java/org/mozilla/mozstumbler/service/Prefs.java

+23
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public class Prefs {
1818
public static final String NICKNAME_PREF = "nickname";
1919
public static final String EMAIL_PREF = "email";
2020
public static final String WIFI_ONLY = "wifi_only";
21+
public static final String POWER_SAVING_MODE = "power_saving_mode_type";
2122
protected static final String PREFS_FILE = Prefs.class.getSimpleName();
2223
private static final String LOG_TAG = AppGlobals.makeLogTag(Prefs.class.getSimpleName());
2324
private static final String USER_AGENT_PREF = "user-agent";
@@ -39,6 +40,8 @@ public class Prefs {
3940
private static final String SAVE_STUMBLE_LOGS = "save_stumble_logs";
4041
private final SharedPreferences mSharedPrefs;
4142

43+
public enum PowerSavingModeOptions { Off, On, Aggressive }
44+
4245
protected static Prefs sInstance;
4346

4447
protected Prefs(Context context) {
@@ -256,4 +259,24 @@ public void setMotionChangeTimeWindowSeconds(int value) {
256259
apply(editor);
257260
}
258261

262+
public void setPowerSavingMode(int index) {
263+
if (index >= PowerSavingModeOptions.values().length) {
264+
index = 0;
265+
}
266+
setPowerSavingMode(PowerSavingModeOptions.values()[index]);
267+
}
268+
269+
public void setPowerSavingMode(PowerSavingModeOptions mode) {
270+
SharedPreferences.Editor editor = getPrefs().edit();
271+
editor.putInt(POWER_SAVING_MODE, mode.ordinal());
272+
apply(editor);
273+
}
274+
275+
public PowerSavingModeOptions getPowerSavingMode() {
276+
int i = getPrefs().getInt(POWER_SAVING_MODE, 1);
277+
if (i >= PowerSavingModeOptions.values().length) {
278+
i = 0;
279+
}
280+
return PowerSavingModeOptions.values()[i];
281+
}
259282
}

android/src/main/java/org/mozilla/mozstumbler/service/stumblerthread/scanners/ScanManager.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,8 @@ public Location getLocation() {
242242
private final BroadcastReceiver mDetectUserIdleReceiver = new BroadcastReceiver() {
243243
@Override
244244
public void onReceive(Context context, Intent intent) {
245-
if (!isScanning()) {
245+
if (!isScanning() ||
246+
Prefs.getInstance(mAppContext).getPowerSavingMode() == Prefs.PowerSavingModeOptions.Off) {
246247
return;
247248
}
248249
stopScanning();
@@ -267,7 +268,9 @@ public void onReceive(Context context, Intent intent) {
267268
startScanning(context);
268269
mMotionSensor.stop();
269270

270-
mLocationChangeSensor.quickCheckForFalsePositiveAfterMotionSensorMovement();
271+
if (Prefs.getInstance(mAppContext).getPowerSavingMode() == Prefs.PowerSavingModeOptions.Aggressive) {
272+
mLocationChangeSensor.quickCheckForFalsePositiveAfterMotionSensorMovement();
273+
}
271274

272275
Intent sendIntent = new Intent(ACTION_SCAN_PAUSED_USER_MOTIONLESS);
273276
sendIntent.putExtra(ACTION_EXTRA_IS_PAUSED, mIsMotionlessPausedState);

android/src/main/res/values/arrays.xml

+7
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,11 @@
1515
<item>60%</item>
1616
<item>75%</item>
1717
</string-array>
18+
19+
<string-array name="power_saving_mode_options_intvalues">
20+
<item>0</item>
21+
<item>1</item>
22+
<item>2</item>
23+
</string-array>
24+
1825
</resources>

android/src/main/res/values/strings.xml

+10-1
Original file line numberDiff line numberDiff line change
@@ -159,9 +159,18 @@
159159
<string name="motion_detection_options_conjunction">in</string>
160160
<string name="map_scanning_paused_no_motion">Location not changing, scanning paused.</string>
161161

162-
163162
<string name="save_stumble_logs">Save Stumble Logs</string>
164163
<string name="create_log_archive_failure">Unable to create archive directory for logs</string>
165164
<string name="create_log_archive_success">Logs will be save to:</string>
165+
<string name="category_power_saving">Power Saving</string>
166+
<string name="power_saving_mode">Motion detection</string>
167+
<string name="power_saving_mode_summary">Pauses and unpauses the app if you aren\'t moving.
168+
If your GPS takes a long time to get a fix, don\'t use extra power saving mode.</string>
169+
170+
<string-array name="power_saving_mode_options">
171+
<item>Off</item>
172+
<item>On</item>
173+
<item>On, extra power saving</item>
174+
</string-array>
166175

167176
</resources>

android/src/main/res/xml/stumbler_preferences.xml

+12
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,18 @@
1313
android:summary="@string/enter_email_longtext" />
1414
</PreferenceCategory>
1515

16+
<PreferenceCategory android:title="@string/category_power_saving" >
17+
18+
<!-- friendly reminder: the android:key must match the name of the value in [Client]Prefs.java -->
19+
<ListPreference
20+
android:key="power_saving_mode_type"
21+
android:title="@string/power_saving_mode"
22+
android:entries="@array/power_saving_mode_options"
23+
android:entryValues="@array/power_saving_mode_options_intvalues"
24+
android:summary="@string/power_saving_mode_summary"
25+
/>
26+
</PreferenceCategory>
27+
1628
<PreferenceCategory android:title="@string/category_network_usage" >
1729

1830
<CheckBoxPreference

0 commit comments

Comments
 (0)