hide speed cameras from ui

This commit is contained in:
veliymolfar 2020-06-10 16:36:30 +03:00
parent 678306870b
commit 66413f856e
6 changed files with 104 additions and 47 deletions

View file

@ -37,6 +37,7 @@ import net.osmand.data.PointDescription;
import net.osmand.data.QuadRect;
import net.osmand.data.RotatedTileBox;
import net.osmand.map.ITileSource;
import net.osmand.plus.dialogs.SpeedCamerasBottomSheet;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.ContextMenuAdapter;
import net.osmand.plus.ContextMenuAdapter.ItemClickListener;
@ -569,6 +570,9 @@ public class MapActivityActions implements DialogProvider {
if (targets.hasTooLongDistanceToNavigate()) {
app.showToastMessage(R.string.route_is_too_long_v2);
}
if (!settings.SPEED_CAMERAS_ALERT_SHOWED.get()) {
SpeedCamerasBottomSheet.showInstance(mapActivity.getSupportFragmentManager(), null);
}
}
public void recalculateRoute(boolean showDialog) {

View file

@ -7,6 +7,9 @@ import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import net.osmand.plus.OsmandApplication;
@ -20,9 +23,10 @@ public class SpeedCamerasBottomSheet extends MenuBottomSheetDialogFragment {
public static final String TAG = SpeedCamerasBottomSheet.class.getName();
private OsmandApplication app;
public static void showInstance(@NonNull FragmentManager fm) {
public static void showInstance(@NonNull FragmentManager fm, @Nullable Fragment targetFragment) {
if (!fm.isStateSaved()) {
SpeedCamerasBottomSheet bottomSheet = new SpeedCamerasBottomSheet();
bottomSheet.setTargetFragment(targetFragment, 0);
bottomSheet.show(fm, TAG);
}
}
@ -36,19 +40,34 @@ public class SpeedCamerasBottomSheet extends MenuBottomSheetDialogFragment {
@Override
public void createMenuItems(Bundle savedInstanceState) {
View root = UiUtilities.getInflater(app, nightMode).inflate(R.layout.bottom_sheet_speed_cameras, null);
((ImageView) root.findViewById(R.id.icon)).setImageResource(R.drawable.img_speed_camera_warning);
((ImageView) root.findViewById(R.id.icon)).setImageDrawable(ContextCompat.getDrawable(requireContext(), R.drawable.img_speed_camera_warning));
((TextView) root.findViewById(R.id.description)).setText(getDescriptionText());
items.add(new BaseBottomSheetItem.Builder().setCustomView(root).create());
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
UiUtilities.setupDialogButton(nightMode, rightButton, getDismissButtonType(), R.string.keep_active);
}
@Override
protected void onRightBottomButtonClick() {
super.onRightBottomButtonClick();
setDialogShowed();
dismiss();
}
@Override
protected void onDismissButtonClickAction() {
super.onDismissButtonClickAction();
app.getSettings().SPEED_CAMERAS_UNINSTALLED.set(true);
app.getSettings().SPEAK_SPEED_CAMERA.set(false);
app.getSettings().SHOW_CAMERAS.set(false);
Fragment targetFragment = getTargetFragment();
if (targetFragment instanceof OnSpeedCamerasUninstallListener) {
((OnSpeedCamerasUninstallListener) targetFragment).onSpeedCamerasUninstalled();
}
setDialogShowed();
dismiss();
}
@Override
@ -67,4 +86,12 @@ public class SpeedCamerasBottomSheet extends MenuBottomSheetDialogFragment {
String text = getString(R.string.speed_cameras_legal_descr, keepActive, uninstall);
return UiUtilities.setWordsMediumFont(app, text, keepActive, uninstall);
}
private void setDialogShowed() {
app.getSettings().SPEED_CAMERAS_ALERT_SHOWED.set(true);
}
public interface OnSpeedCamerasUninstallListener {
void onSpeedCamerasUninstalled();
}
}

View file

@ -2108,6 +2108,9 @@ public class OsmandSettings {
public final OsmandPreference<Boolean> SPEAK_SPEED_CAMERA = new BooleanPreference("speak_cameras", false).makeProfile().cache();
public final OsmandPreference<Boolean> SPEAK_TUNNELS = new BooleanPreference("speak_tunnels", false).makeProfile().cache();
public final OsmandPreference<Boolean> SPEED_CAMERAS_UNINSTALLED = new BooleanPreference("speed_cameras_uninstalled", false).makeGlobal().cache();
public final OsmandPreference<Boolean> SPEED_CAMERAS_ALERT_SHOWED = new BooleanPreference("speed_cameras_alert_showed", false).makeGlobal().cache();
public final OsmandPreference<Boolean> ANNOUNCE_WPT = new BooleanPreference("announce_wpt", true) {
@Override
protected boolean setValue(Object prefs, Boolean val) {

View file

@ -7,6 +7,7 @@ import android.widget.ImageView;
import androidx.fragment.app.FragmentManager;
import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceViewHolder;
import androidx.preference.SwitchPreferenceCompat;
@ -14,20 +15,28 @@ import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.activities.SettingsGeneralActivity;
import net.osmand.plus.dialogs.SendAnalyticsBottomSheetDialogFragment;
import net.osmand.plus.dialogs.SendAnalyticsBottomSheetDialogFragment.OnSendAnalyticsPrefsUpdate;
import net.osmand.plus.dialogs.SpeedCamerasBottomSheet;
import net.osmand.plus.dialogs.SpeedCamerasBottomSheet.OnSpeedCamerasUninstallListener;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.settings.preferences.ListPreferenceEx;
import net.osmand.plus.settings.preferences.SwitchPreferenceEx;
public class GlobalSettingsFragment extends BaseSettingsFragment implements SendAnalyticsBottomSheetDialogFragment.OnSendAnalyticsPrefsUpdate, OnPreferenceChanged {
public class GlobalSettingsFragment extends BaseSettingsFragment
implements OnSendAnalyticsPrefsUpdate, OnPreferenceChanged,
OnSpeedCamerasUninstallListener {
public static final String TAG = GlobalSettingsFragment.class.getSimpleName();
private static final String SEND_ANONYMOUS_DATA_PREF_ID = "send_anonymous_data";
private static final String DIALOGS_AND_NOTIFICATIONS_PREF_ID = "dialogs_and_notifications";
private static final String UNINSTALL_SPEED_CAMERAS_PREF_ID = "uninstall_speed_cameras";
private static final String LEGAL_CATEGORY_ID = "legal";
private Preference uninstallSpeedCameras;
private PreferenceCategory legalCategory;
@Override
protected void setupPreferences() {
@ -38,7 +47,12 @@ public class GlobalSettingsFragment extends BaseSettingsFragment implements Send
setupSendAnonymousDataPref();
setupDialogsAndNotificationsPref();
setupEnableProxyPref();
setupUninstallSpeedCamerasPref();
legalCategory = (PreferenceCategory) findPreference(LEGAL_CATEGORY_ID);
uninstallSpeedCameras = (Preference) findPreference(UNINSTALL_SPEED_CAMERAS_PREF_ID);
uninstallSpeedCameras.setIcon(getPersistentPrefIcon(R.drawable.ic_speed_camera_disabled));
if (settings.SPEED_CAMERAS_UNINSTALLED.get()) {
onSpeedCamerasUninstalled();
}
}
@Override
@ -117,7 +131,7 @@ public class GlobalSettingsFragment extends BaseSettingsFragment implements Send
if (UNINSTALL_SPEED_CAMERAS_PREF_ID.equals(prefId)) {
FragmentManager fm = getFragmentManager();
if (fm != null) {
SpeedCamerasBottomSheet.showInstance(fm);
SpeedCamerasBottomSheet.showInstance(fm, this);
}
}
return super.onPreferenceClick(preference);
@ -207,8 +221,11 @@ public class GlobalSettingsFragment extends BaseSettingsFragment implements Send
enableProxy.setIcon(getPersistentPrefIcon(R.drawable.ic_action_proxy));
}
private void setupUninstallSpeedCamerasPref() {
Preference uninstallSpeedCameras = (Preference) findPreference(UNINSTALL_SPEED_CAMERAS_PREF_ID);
uninstallSpeedCameras.setIcon(getPersistentPrefIcon(R.drawable.ic_speed_camera_disabled));
@Override
public void onSpeedCamerasUninstalled() {
if (uninstallSpeedCameras != null && legalCategory != null) {
uninstallSpeedCameras.setVisible(false);
legalCategory.setVisible(false);
}
}
}

View file

@ -9,8 +9,11 @@ import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.SwitchCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.preference.Preference;
import androidx.preference.PreferenceViewHolder;
@ -19,6 +22,7 @@ import androidx.preference.SwitchPreferenceCompat;
import net.osmand.AndroidUtils;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.dialogs.SpeedCamerasBottomSheet;
import net.osmand.plus.dialogs.SpeedCamerasBottomSheet.OnSpeedCamerasUninstallListener;
import net.osmand.plus.helpers.FontCache;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.R;
@ -28,30 +32,34 @@ import java.lang.ref.WeakReference;
import static net.osmand.plus.UiUtilities.CompoundButtonType.TOOLBAR;
public class ScreenAlertsFragment extends BaseSettingsFragment {
public class ScreenAlertsFragment extends BaseSettingsFragment implements OnSpeedCamerasUninstallListener {
public static final String TAG = ScreenAlertsFragment.class.getSimpleName();
private static final String SHOW_ROUTING_ALARMS_INFO = "show_routing_alarms_info";
private static final String SCREEN_ALERTS_IMAGE = "screen_alerts_image";
private static final String SHOW_CAMERAS = "show_cameras";
private SwitchPreferenceCompat showCameras;
@Override
protected void setupPreferences() {
Preference showRoutingAlarmsInfo = findPreference(SHOW_ROUTING_ALARMS_INFO);
SwitchPreferenceCompat showTrafficWarnings = (SwitchPreferenceCompat) findPreference(settings.SHOW_TRAFFIC_WARNINGS.getId());
SwitchPreferenceCompat showPedestrian = (SwitchPreferenceCompat) findPreference(settings.SHOW_PEDESTRIAN.getId());
SwitchPreferenceCompat showCameras = (SwitchPreferenceCompat) findPreference(settings.SHOW_CAMERAS.getId());
SwitchPreferenceCompat showTunnels = (SwitchPreferenceCompat) findPreference(settings.SHOW_TUNNELS.getId());
showCameras = (SwitchPreferenceCompat) findPreference(settings.SHOW_CAMERAS.getId());
showRoutingAlarmsInfo.setIcon(getContentIcon(R.drawable.ic_action_info_dark));
showTrafficWarnings.setIcon(getIcon(R.drawable.list_warnings_traffic_calming));
showPedestrian.setIcon(getIcon(R.drawable.list_warnings_pedestrian));
showCameras.setIcon(getIcon(R.drawable.list_warnings_speed_camera));
showTunnels.setIcon(getIcon(R.drawable.list_warnings_tunnel));
showCameras.setIcon(getIcon(R.drawable.list_warnings_speed_camera));
setupScreenAlertsImage();
enableDisablePreferences(settings.SHOW_ROUTING_ALARMS.getModeValue(getSelectedAppMode()));
if (settings.SPEED_CAMERAS_UNINSTALLED.get()) {
onSpeedCamerasUninstalled();
}
}
@Override
@ -112,7 +120,7 @@ public class ScreenAlertsFragment extends BaseSettingsFragment {
deviceImage.setImageDrawable(getDeviceImage());
warningIcon.setImageDrawable(getWarningIcon());
} else if (SHOW_CAMERAS.equals(key)) {
setupSpeedCamerasAlert(app, requireMyActivity(), holder, isNightMode());
setupSpeedCamerasAlert(app, requireMyActivity(), holder, this, isNightMode());
}
}
}
@ -155,7 +163,11 @@ public class ScreenAlertsFragment extends BaseSettingsFragment {
return null;
}
public static void setupSpeedCamerasAlert(OsmandApplication app, FragmentActivity activity, PreferenceViewHolder holder, boolean nightMode) {
public static void setupSpeedCamerasAlert(@NonNull OsmandApplication app,
@NonNull FragmentActivity activity,
@NonNull PreferenceViewHolder holder,
@Nullable Fragment targetFragment,
boolean nightMode) {
ImageView alertIcon = (ImageView) holder.itemView.findViewById(R.id.alert_icon);
TextView alertTitle = (TextView) holder.itemView.findViewById(R.id.alert_title);
TextView alertSubTitle = (TextView) holder.itemView.findViewById(R.id.alert_subtitle);
@ -176,14 +188,22 @@ public class ScreenAlertsFragment extends BaseSettingsFragment {
? app.getResources().getColor(R.color.active_color_primary_dark)
: app.getResources().getColor(R.color.active_color_primary_light));
final WeakReference<FragmentActivity> weakActivity = new WeakReference<>(activity);
final WeakReference<Fragment> weakFragment = new WeakReference<>(targetFragment);
alertSubTitle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentActivity a = weakActivity.get();
if (a != null) {
SpeedCamerasBottomSheet.showInstance(a.getSupportFragmentManager());
SpeedCamerasBottomSheet.showInstance(a.getSupportFragmentManager(), weakFragment.get());
}
}
});
}
@Override
public void onSpeedCamerasUninstalled() {
if (showCameras != null) {
showCameras.setVisible(false);
}
}
}

View file

@ -1,8 +1,6 @@
package net.osmand.plus.settings.fragments;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
@ -12,14 +10,13 @@ import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.SwitchCompat;
import androidx.core.content.ContextCompat;
import androidx.preference.Preference;
import androidx.preference.PreferenceViewHolder;
import androidx.preference.SwitchPreferenceCompat;
import net.osmand.AndroidUtils;
import net.osmand.plus.dialogs.SpeedCamerasBottomSheet.OnSpeedCamerasUninstallListener;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.R;
@ -37,9 +34,10 @@ import static net.osmand.plus.settings.backend.OsmandSettings.VOICE_PROVIDER_NOT
import static net.osmand.plus.UiUtilities.CompoundButtonType.TOOLBAR;
import static net.osmand.plus.activities.SettingsNavigationActivity.MORE_VALUE;
public class VoiceAnnouncesFragment extends BaseSettingsFragment {
public class VoiceAnnouncesFragment extends BaseSettingsFragment implements OnSpeedCamerasUninstallListener {
public static final String TAG = VoiceAnnouncesFragment.class.getSimpleName();
private Preference speakCamera;
@Override
protected void createToolbar(LayoutInflater inflater, View view) {
@ -100,6 +98,10 @@ public class VoiceAnnouncesFragment extends BaseSettingsFragment {
setupInterruptMusicPref();
}
enableDisablePreferences(!settings.VOICE_MUTE.getModeValue(getSelectedAppMode()));
speakCamera = findPreference(settings.SPEAK_SPEED_CAMERA.getId());
if (settings.SPEED_CAMERAS_UNINSTALLED.get()) {
onSpeedCamerasUninstalled();
}
}
private void setupSpeedLimitExceedPref() {
@ -209,29 +211,6 @@ public class VoiceAnnouncesFragment extends BaseSettingsFragment {
getPreferenceScreen().addPreference(interruptMusicPref);
}
public void confirmSpeedCamerasDlg() {
Context ctx = getContext();
if (ctx == null) {
return;
}
AlertDialog.Builder bld = new AlertDialog.Builder(UiUtilities.getThemedContext(ctx, isNightMode()));
bld.setMessage(R.string.confirm_usage_speed_cameras);
bld.setPositiveButton(R.string.shared_string_yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
onConfirmPreferenceChange(
settings.SPEAK_SPEED_CAMERA.getId(), true, ApplyQueryType.SNACK_BAR);
SwitchPreferenceCompat speakSpeedCamera = (SwitchPreferenceCompat) findPreference(settings.SPEAK_SPEED_CAMERA.getId());
if (speakSpeedCamera != null) {
speakSpeedCamera.setChecked(true);
}
}
});
bld.setNegativeButton(R.string.shared_string_cancel, null);
bld.show();
}
private void updateMenu() {
MapActivity mapActivity = getMapActivity();
if (mapActivity != null) {
@ -253,7 +232,7 @@ public class VoiceAnnouncesFragment extends BaseSettingsFragment {
imageView.setEnabled(preference.isEnabled() && !OsmandSettings.VOICE_PROVIDER_NOT_USE.equals(currentValue));
}
} else if (settings.SPEAK_SPEED_CAMERA.getId().equals(preference.getKey())) {
ScreenAlertsFragment.setupSpeedCamerasAlert(app, requireMyActivity(), holder, isNightMode());
ScreenAlertsFragment.setupSpeedCamerasAlert(app, requireMyActivity(), holder, this, isNightMode());
}
}
@ -277,8 +256,8 @@ public class VoiceAnnouncesFragment extends BaseSettingsFragment {
}
if (prefId.equals(settings.SPEAK_SPEED_CAMERA.getId())) {
if (!settings.SPEAK_SPEED_CAMERA.getModeValue(selectedMode)) {
confirmSpeedCamerasDlg();
return false;
return onConfirmPreferenceChange(
settings.SPEAK_SPEED_CAMERA.getId(), true, ApplyQueryType.SNACK_BAR);
} else {
return onConfirmPreferenceChange(
settings.SPEAK_SPEED_CAMERA.getId(), false, ApplyQueryType.SNACK_BAR);
@ -315,4 +294,11 @@ public class VoiceAnnouncesFragment extends BaseSettingsFragment {
super.onApplyPreferenceChange(prefId, applyToAllProfiles, newValue);
}
}
@Override
public void onSpeedCamerasUninstalled() {
if (speakCamera != null) {
speakCamera.setVisible(false);
}
}
}