Fix turn screen on prefs

This commit is contained in:
Vitaliy 2020-05-29 15:36:14 +03:00
parent 6d160244ac
commit af13433571
5 changed files with 34 additions and 45 deletions

View file

@ -11,6 +11,7 @@
Thx - Hardy
-->
<string name="default_screen_timeout">Default screen timeout</string>
<string name="screen_timeout_descr">If the \"%1$s\" option is enabled, the activity time will depend on it.</string>
<string name="keep_screen_off">Keep screen off</string>
<string name="keep_screen_on">Keep screen on</string>

View file

@ -66,13 +66,11 @@ import net.osmand.map.MapTileDownloader.IMapDownloaderCallback;
import net.osmand.plus.AppInitializer;
import net.osmand.plus.AppInitializer.AppInitializeListener;
import net.osmand.plus.AppInitializer.InitEvents;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
import net.osmand.plus.HuaweiDrmHelper;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.MapMarkersHelper.MapMarkerChangedListener;
import net.osmand.plus.OnDismissDialogFragmentListener;
import net.osmand.plus.settings.backend.OsmAndAppCustomization.OsmAndAppCustomizationListener;
import net.osmand.plus.OsmAndConstants;
import net.osmand.plus.OsmAndLocationSimulation;
import net.osmand.plus.OsmandApplication;
@ -89,6 +87,7 @@ import net.osmand.plus.chooseplan.OsmLiveCancelledDialog;
import net.osmand.plus.dashboard.DashboardOnMap;
import net.osmand.plus.dashboard.DashboardOnMap.DashboardType;
import net.osmand.plus.dialogs.CrashBottomSheetDialogFragment;
import net.osmand.plus.dialogs.ImportGpxBottomSheetDialogFragment;
import net.osmand.plus.dialogs.RateUsBottomSheetDialogFragment;
import net.osmand.plus.dialogs.SendAnalyticsBottomSheetDialogFragment;
import net.osmand.plus.dialogs.WhatsNewDialogFragment;
@ -101,7 +100,6 @@ import net.osmand.plus.firstusage.FirstUsageWizardFragment;
import net.osmand.plus.helpers.AndroidUiHelper;
import net.osmand.plus.helpers.DiscountHelper;
import net.osmand.plus.helpers.ImportHelper;
import net.osmand.plus.dialogs.ImportGpxBottomSheetDialogFragment;
import net.osmand.plus.helpers.IntentHelper;
import net.osmand.plus.helpers.LockHelper;
import net.osmand.plus.helpers.LockHelper.LockUIAdapter;
@ -134,6 +132,8 @@ import net.osmand.plus.routing.TransportRoutingHelper.TransportRouteCalculationP
import net.osmand.plus.search.QuickSearchDialogFragment;
import net.osmand.plus.search.QuickSearchDialogFragment.QuickSearchTab;
import net.osmand.plus.search.QuickSearchDialogFragment.QuickSearchType;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.backend.OsmAndAppCustomization.OsmAndAppCustomizationListener;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.settings.fragments.BaseSettingsFragment;
import net.osmand.plus.settings.fragments.BaseSettingsFragment.SettingsScreenType;
@ -1968,9 +1968,7 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
}
public void changeKeyguardFlags() {
boolean turnScreenOnEnabled = getRoutingHelper().isFollowingMode();
int turnScreenOnTime = settings.TURN_SCREEN_ON_TIME_INT.get();
boolean enabled = turnScreenOnEnabled && (turnScreenOnTime > 0 || turnScreenOnTime == -1);
boolean enabled = settings.TURN_SCREEN_ON_TIME_INT.get() >= 0;
boolean keepScreenOn = !settings.USE_SYSTEM_SCREEN_TIMEOUT.get();
changeKeyguardFlags(enabled, keepScreenOn);
}

View file

@ -33,6 +33,8 @@ public class LockHelper implements SensorEventListener {
private OsmandApplication app;
private CommonPreference<Integer> turnScreenOnTime;
private CommonPreference<Boolean> turnScreenOnSensor;
private CommonPreference<Boolean> useSystemScreenTimeout;
private CommonPreference<Boolean> turnScreenOnPowerButton;
private CommonPreference<Boolean> turnScreenOnNavigationInstructions;
@Nullable
@ -53,6 +55,8 @@ public class LockHelper implements SensorEventListener {
OsmandSettings settings = app.getSettings();
turnScreenOnTime = settings.TURN_SCREEN_ON_TIME_INT;
turnScreenOnSensor = settings.TURN_SCREEN_ON_SENSOR;
useSystemScreenTimeout = settings.USE_SYSTEM_SCREEN_TIMEOUT;
turnScreenOnPowerButton = settings.TURN_SCREEN_ON_POWER_BUTTON;
turnScreenOnNavigationInstructions = settings.TURN_SCREEN_ON_NAVIGATION_INSTRUCTIONS;
lockRunnable = new Runnable() {
@ -75,6 +79,8 @@ public class LockHelper implements SensorEventListener {
OsmandSettings settings = app.getSettings();
turnScreenOnTime = settings.TURN_SCREEN_ON_TIME_INT;
turnScreenOnSensor = settings.TURN_SCREEN_ON_SENSOR;
useSystemScreenTimeout = settings.USE_SYSTEM_SCREEN_TIMEOUT;
turnScreenOnPowerButton = settings.TURN_SCREEN_ON_POWER_BUTTON;
turnScreenOnNavigationInstructions = settings.TURN_SCREEN_ON_NAVIGATION_INSTRUCTIONS;
}
};
@ -107,15 +113,13 @@ public class LockHelper implements SensorEventListener {
private void lock() {
releaseWakeLocks();
int unlockTime = turnScreenOnTime.get();
if (lockUIAdapter != null && isFollowingMode() && unlockTime != -1) {
lockUIAdapter.lock();
if (lockUIAdapter != null) {
if (!(useSystemScreenTimeout.get() && turnScreenOnPowerButton.get()) && unlockTime != 0) {
lockUIAdapter.lock();
}
}
}
private boolean isFollowingMode() {
return app.getRoutingHelper().isFollowingMode();
}
private void timedUnlock(final long millis) {
uiHandler.removeCallbacks(lockRunnable);
if (wakeLock == null) {
@ -135,10 +139,10 @@ public class LockHelper implements SensorEventListener {
private void unlockEvent() {
int unlockTime = turnScreenOnTime.get();
if (unlockTime > 0) {
if (unlockTime > 0 && !useSystemScreenTimeout.get()) {
timedUnlock(unlockTime * 1000L);
} else if (unlockTime == -1) {
timedUnlock(-1);
} else {
timedUnlock(0);
}
}
@ -156,14 +160,6 @@ public class LockHelper implements SensorEventListener {
}
}
private void switchSensorOn() {
switchSensor(true);
}
private void switchSensorOff() {
switchSensor(false);
}
private void switchSensor(boolean on) {
SensorManager sensorManager = (SensorManager) app.getSystemService(Context.SENSOR_SERVICE);
if (sensorManager != null) {
@ -176,23 +172,18 @@ public class LockHelper implements SensorEventListener {
}
}
private boolean isSensorEnabled() {
return turnScreenOnSensor.get() && isFollowingMode();
}
public void onStart(@NonNull Activity activity) {
switchSensorOff();
switchSensor(false);
}
public void onStop(@NonNull Activity activity) {
lock();
if (!activity.isFinishing() && isSensorEnabled()) {
switchSensorOn();
if (!activity.isFinishing() && turnScreenOnSensor.get()) {
switchSensor(true);
}
}
public void setLockUIAdapter(@Nullable LockUIAdapter adapter) {
lockUIAdapter = adapter;
}
}

View file

@ -53,8 +53,8 @@ public class WakeTimeBottomSheet extends BasePreferenceBottomSheet {
keepScreenOnEnabled = savedInstanceState.getBoolean(KEEP_SCREEN_ON_ENABLED);
} else {
int savedValIndex = listPreference.getValueIndex();
keepScreenOnEnabled = savedValIndex == 0;
selectedEntryIndex = savedValIndex != 0 ? savedValIndex : 1;
keepScreenOnEnabled = savedValIndex <= 0;
selectedEntryIndex = savedValIndex > 0 ? savedValIndex : 1;
}
items.add(new TitleItem(listPreference.getDialogTitle()));

View file

@ -1,6 +1,5 @@
package net.osmand.plus.settings.fragments;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.fragment.app.FragmentManager;
@ -32,11 +31,9 @@ public class TurnScreenOnFragment extends BaseSettingsFragment implements OnPref
super.onBindPreferenceViewHolder(preference, holder);
String prefId = preference.getKey();
if (settings.TURN_SCREEN_ON_TIME_INT.getId().equals(prefId) && preference instanceof ListPreferenceEx) {
Object currentValue = ((ListPreferenceEx) preference).getValue();
ImageView imageView = (ImageView) holder.findViewById(android.R.id.icon);
if (imageView != null && currentValue instanceof Integer) {
boolean enabled = preference.isEnabled() && (Integer) currentValue != 0;
imageView.setEnabled(enabled);
TextView summaryView = (TextView) holder.findViewById(android.R.id.summary);
if (summaryView != null && !preference.isEnabled()) {
summaryView.setText(R.string.default_screen_timeout);
}
} else if ("turn_screen_on_info".equals(prefId) || "turn_screen_on_options_info".equals(prefId)) {
TextView titleView = (TextView) holder.findViewById(android.R.id.title);
@ -70,12 +67,11 @@ public class TurnScreenOnFragment extends BaseSettingsFragment implements OnPref
}
private void setupTurnScreenOnTimePref() {
Integer[] entryValues = new Integer[] {-1, 0, 5, 10, 15, 20, 30, 45, 60};
Integer[] entryValues = new Integer[] {0, 5, 10, 15, 20, 30, 45, 60};
String[] entries = new String[entryValues.length];
entries[0] = getString(R.string.shared_string_always);
entries[1] = getString(R.string.shared_string_never);
for (int i = 2; i < entryValues.length; i++) {
entries[0] = getString(R.string.keep_screen_on);
for (int i = 1; i < entryValues.length; i++) {
entries[i] = entryValues[i] + " " + getString(R.string.int_seconds);
}
@ -100,9 +96,12 @@ public class TurnScreenOnFragment extends BaseSettingsFragment implements OnPref
}
private void setupTurnScreenOnPowerButtonPref() {
ApplicationMode appMode = getSelectedAppMode();
boolean enabled = settings.TURN_SCREEN_ON_TIME_INT.getModeValue(appMode) == 0 || settings.USE_SYSTEM_SCREEN_TIMEOUT.getModeValue(appMode);
SwitchPreferenceEx turnScreenOnPowerButton = (SwitchPreferenceEx) findPreference(settings.TURN_SCREEN_ON_POWER_BUTTON.getId());
turnScreenOnPowerButton.setIcon(getPersistentPrefIcon(R.drawable.ic_action_power_button));
turnScreenOnPowerButton.setEnabled(enabled);
turnScreenOnPowerButton.setDescription(R.string.turn_screen_on_power_button_descr);
turnScreenOnPowerButton.setIcon(getPersistentPrefIcon(R.drawable.ic_action_power_button));
}
@Override