forked from organicmaps/organicmaps
[android-auto] Use toggles instead of checkboxes
Signed-off-by: Andrew Shkrob <andrew.shkrob.social@yandex.by>
This commit is contained in:
parent
cb9d92cef0
commit
f5c1343aa2
5 changed files with 67 additions and 38 deletions
|
@ -4,18 +4,18 @@ import androidx.annotation.NonNull;
|
|||
import androidx.annotation.StringRes;
|
||||
import androidx.car.app.CarContext;
|
||||
import androidx.car.app.model.Action;
|
||||
import androidx.car.app.model.CarIcon;
|
||||
import androidx.car.app.model.Header;
|
||||
import androidx.car.app.model.ItemList;
|
||||
import androidx.car.app.model.OnClickListener;
|
||||
import androidx.car.app.model.Row;
|
||||
import androidx.car.app.model.Template;
|
||||
import androidx.car.app.navigation.model.MapTemplate;
|
||||
import androidx.core.graphics.drawable.IconCompat;
|
||||
import androidx.lifecycle.LifecycleOwner;
|
||||
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.car.SurfaceRenderer;
|
||||
import app.organicmaps.car.screens.base.BaseMapScreen;
|
||||
import app.organicmaps.car.util.Toggle;
|
||||
import app.organicmaps.car.util.UiHelpers;
|
||||
import app.organicmaps.routing.RoutingOptions;
|
||||
import app.organicmaps.settings.RoadType;
|
||||
|
@ -48,19 +48,12 @@ public class DrivingOptionsScreen extends BaseMapScreen
|
|||
new DrivingOption(RoadType.Motorway, R.string.avoid_motorways)
|
||||
};
|
||||
|
||||
@NonNull
|
||||
private final CarIcon mCheckboxIcon;
|
||||
@NonNull
|
||||
private final CarIcon mCheckboxSelectedIcon;
|
||||
|
||||
@NonNull
|
||||
private final Map<RoadType, Boolean> mInitialDrivingOptionsState = new HashMap<>();
|
||||
|
||||
public DrivingOptionsScreen(@NonNull CarContext carContext, @NonNull SurfaceRenderer surfaceRenderer)
|
||||
{
|
||||
super(carContext, surfaceRenderer);
|
||||
mCheckboxIcon = new CarIcon.Builder(IconCompat.createWithResource(carContext, R.drawable.ic_check_box)).build();
|
||||
mCheckboxSelectedIcon = new CarIcon.Builder(IconCompat.createWithResource(carContext, R.drawable.ic_check_box_checked)).build();
|
||||
|
||||
initDrivingOptionsState();
|
||||
}
|
||||
|
@ -103,24 +96,21 @@ public class DrivingOptionsScreen extends BaseMapScreen
|
|||
{
|
||||
final ItemList.Builder builder = new ItemList.Builder();
|
||||
for (final DrivingOption drivingOption : mDrivingOptions)
|
||||
builder.addItem(createDrivingOptionCheckbox(drivingOption.roadType, drivingOption.text));
|
||||
builder.addItem(createDrivingOptionsToggle(drivingOption.roadType, drivingOption.text));
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private Row createDrivingOptionCheckbox(RoadType roadType, @StringRes int titleRes)
|
||||
private Row createDrivingOptionsToggle(RoadType roadType, @StringRes int title)
|
||||
{
|
||||
final Row.Builder builder = new Row.Builder();
|
||||
builder.setTitle(getCarContext().getString(titleRes));
|
||||
builder.setOnClickListener(() -> {
|
||||
final OnClickListener listener = () -> {
|
||||
if (RoutingOptions.hasOption(roadType))
|
||||
RoutingOptions.removeOption(roadType);
|
||||
else
|
||||
RoutingOptions.addOption(roadType);
|
||||
invalidate();
|
||||
});
|
||||
builder.setImage(RoutingOptions.hasOption(roadType) ? mCheckboxSelectedIcon : mCheckboxIcon);
|
||||
return builder.build();
|
||||
};
|
||||
return Toggle.create(getCarContext(), title, listener, RoutingOptions.hasOption(roadType));
|
||||
}
|
||||
|
||||
private void initDrivingOptionsState()
|
||||
|
|
|
@ -4,19 +4,19 @@ import androidx.annotation.NonNull;
|
|||
import androidx.annotation.StringRes;
|
||||
import androidx.car.app.CarContext;
|
||||
import androidx.car.app.model.Action;
|
||||
import androidx.car.app.model.CarIcon;
|
||||
import androidx.car.app.model.Header;
|
||||
import androidx.car.app.model.Item;
|
||||
import androidx.car.app.model.ItemList;
|
||||
import androidx.car.app.model.OnClickListener;
|
||||
import androidx.car.app.model.Row;
|
||||
import androidx.car.app.model.Template;
|
||||
import androidx.car.app.navigation.model.MapTemplate;
|
||||
import androidx.core.graphics.drawable.IconCompat;
|
||||
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.car.SurfaceRenderer;
|
||||
import app.organicmaps.car.screens.base.BaseMapScreen;
|
||||
import app.organicmaps.car.util.ThemeUtils;
|
||||
import app.organicmaps.car.util.Toggle;
|
||||
import app.organicmaps.car.util.UiHelpers;
|
||||
import app.organicmaps.util.Config;
|
||||
|
||||
|
@ -32,16 +32,9 @@ public class SettingsScreen extends BaseMapScreen
|
|||
void set(boolean newValue);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private final CarIcon mCheckboxIcon;
|
||||
@NonNull
|
||||
private final CarIcon mCheckboxSelectedIcon;
|
||||
|
||||
public SettingsScreen(@NonNull CarContext carContext, @NonNull SurfaceRenderer surfaceRenderer)
|
||||
{
|
||||
super(carContext, surfaceRenderer);
|
||||
mCheckboxIcon = new CarIcon.Builder(IconCompat.createWithResource(carContext, R.drawable.ic_check_box)).build();
|
||||
mCheckboxSelectedIcon = new CarIcon.Builder(IconCompat.createWithResource(carContext, R.drawable.ic_check_box_checked)).build();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
|
@ -70,8 +63,8 @@ public class SettingsScreen extends BaseMapScreen
|
|||
final ItemList.Builder builder = new ItemList.Builder();
|
||||
builder.addItem(createThemeItem());
|
||||
builder.addItem(createRoutingOptionsItem());
|
||||
builder.addItem(createSharedPrefsCheckbox(R.string.big_font, Config::isLargeFontsSize, Config::setLargeFontsSize));
|
||||
builder.addItem(createSharedPrefsCheckbox(R.string.transliteration_title, Config::isTransliteration, Config::setTransliteration));
|
||||
builder.addItem(createSharedPrefsToggle(R.string.big_font, Config::isLargeFontsSize, Config::setLargeFontsSize));
|
||||
builder.addItem(createSharedPrefsToggle(R.string.transliteration_title, Config::isTransliteration, Config::setTransliteration));
|
||||
builder.addItem(createHelpItem());
|
||||
return builder.build();
|
||||
}
|
||||
|
@ -108,17 +101,13 @@ public class SettingsScreen extends BaseMapScreen
|
|||
}
|
||||
|
||||
@NonNull
|
||||
private Row createSharedPrefsCheckbox(@StringRes int titleRes, @NonNull PrefsGetter getter, @NonNull PrefsSetter setter)
|
||||
private Row createSharedPrefsToggle(@StringRes int titleRes, @NonNull PrefsGetter getter, @NonNull PrefsSetter setter)
|
||||
{
|
||||
final boolean getterValue = getter.get();
|
||||
|
||||
final Row.Builder builder = new Row.Builder();
|
||||
builder.setTitle(getCarContext().getString(titleRes));
|
||||
builder.setOnClickListener(() -> {
|
||||
setter.set(!getterValue);
|
||||
final boolean enabled = getter.get();
|
||||
final OnClickListener listener = () -> {
|
||||
setter.set(!enabled);
|
||||
invalidate();
|
||||
});
|
||||
builder.setImage(getterValue ? mCheckboxSelectedIcon : mCheckboxIcon);
|
||||
return builder.build();
|
||||
};
|
||||
return Toggle.create(getCarContext(), titleRes, listener, enabled);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
package app.organicmaps.car.util;
|
||||
|
||||
import androidx.annotation.DrawableRes;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.car.app.CarContext;
|
||||
import androidx.car.app.annotations.RequiresCarApi;
|
||||
import androidx.car.app.model.CarIcon;
|
||||
import androidx.car.app.model.OnClickListener;
|
||||
import androidx.car.app.model.Row;
|
||||
import androidx.core.graphics.drawable.IconCompat;
|
||||
|
||||
import app.organicmaps.R;
|
||||
|
||||
public final class Toggle
|
||||
{
|
||||
@DrawableRes
|
||||
private static final int CHECKBOX_ICON = R.drawable.ic_checkbox;
|
||||
@DrawableRes
|
||||
private static final int CHECKBOX_CHECKED_ICON = R.drawable.ic_checkbox_checked;
|
||||
|
||||
@NonNull
|
||||
public static Row create(@NonNull final CarContext context, @StringRes int title, @NonNull final OnClickListener onClickListener, boolean checked)
|
||||
{
|
||||
final Row.Builder row = new Row.Builder();
|
||||
row.setTitle(context.getString(title));
|
||||
if (context.getCarAppApiLevel() >= 6)
|
||||
row.setToggle(createToggle(onClickListener, checked));
|
||||
else
|
||||
createCheckbox(row, context, onClickListener, checked);
|
||||
|
||||
return row.build();
|
||||
}
|
||||
|
||||
@RequiresCarApi(6)
|
||||
@NonNull
|
||||
private static androidx.car.app.model.Toggle createToggle(@NonNull final OnClickListener onClickListener, boolean checked)
|
||||
{
|
||||
return new androidx.car.app.model.Toggle.Builder((unused) -> onClickListener.onClick()).setChecked(checked).build();
|
||||
}
|
||||
|
||||
private static void createCheckbox(
|
||||
@NonNull final Row.Builder row, @NonNull final CarContext context, @NonNull final OnClickListener onClickListener, boolean checked)
|
||||
{
|
||||
row.setOnClickListener(onClickListener);
|
||||
row.setImage(new CarIcon.Builder(IconCompat.createWithResource(context, checked ? CHECKBOX_CHECKED_ICON : CHECKBOX_ICON)).build());
|
||||
}
|
||||
|
||||
private Toggle() {}
|
||||
}
|
Loading…
Add table
Reference in a new issue