From 9a759229f97b1127b7d477d03f220904c2652fcd Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Date: Mon, 30 Jun 2025 18:39:45 +0200 Subject: [PATCH] [android] Migrate editor screens to Material components Signed-off-by: Jean-Baptiste Charron --- .../editor/AdvancedTimetableFragment.java | 9 +- .../organicmaps/editor/CuisineAdapter.java | 9 +- .../organicmaps/editor/EditorFragment.java | 31 +++---- .../editor/FeatureCategoryAdapter.java | 7 +- .../editor/HoursMinutesPickerFragment.java | 15 ++-- .../organicmaps/editor/LanguagesAdapter.java | 7 +- .../organicmaps/editor/PhoneListAdapter.java | 6 +- .../editor/SelfServiceAdapter.java | 9 +- .../editor/SimpleTimetableAdapter.java | 23 ++--- .../app/organicmaps/editor/StreetAdapter.java | 11 +-- .../editor/TimetableContainerFragment.java | 4 +- .../src/main/res/layout/fragment_editor.xml | 84 +++++++++---------- .../main/res/layout/fragment_editor_host.xml | 2 +- .../src/main/res/layout/fragment_phone.xml | 2 +- .../src/main/res/layout/fragment_report.xml | 14 ++-- .../main/res/layout/fragment_timetable.xml | 2 +- .../layout/fragment_timetable_advanced.xml | 10 +-- .../src/main/res/layout/item_add_street.xml | 4 +- .../app/src/main/res/layout/item_cuisine.xml | 4 +- .../src/main/res/layout/item_editor_input.xml | 2 +- .../main/res/layout/item_feature_category.xml | 4 +- .../layout/item_feature_category_footer.xml | 4 +- .../app/src/main/res/layout/item_language.xml | 2 +- .../main/res/layout/item_localized_name.xml | 2 +- .../main/res/layout/item_opening_hours.xml | 8 +- .../app/src/main/res/layout/item_phone.xml | 4 +- .../src/main/res/layout/item_selection.xml | 4 +- .../app/src/main/res/layout/item_street.xml | 6 +- .../src/main/res/layout/item_timetable.xml | 46 +++++----- .../main/res/layout/item_timetable_add.xml | 2 +- .../layout/item_timetable_closed_hours.xml | 6 +- .../src/main/res/layout/localized_name.xml | 6 +- .../src/main/res/layout/tab_timepicker.xml | 2 +- 33 files changed, 180 insertions(+), 171 deletions(-) diff --git a/android/app/src/main/java/app/organicmaps/editor/AdvancedTimetableFragment.java b/android/app/src/main/java/app/organicmaps/editor/AdvancedTimetableFragment.java index 8adec6c59..580f5ca94 100644 --- a/android/app/src/main/java/app/organicmaps/editor/AdvancedTimetableFragment.java +++ b/android/app/src/main/java/app/organicmaps/editor/AdvancedTimetableFragment.java @@ -7,8 +7,6 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.webkit.WebView; -import android.widget.ImageView; -import android.widget.TextView; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; @@ -20,7 +18,10 @@ import app.organicmaps.util.Constants; import app.organicmaps.util.Graphics; import app.organicmaps.util.InputUtils; import app.organicmaps.util.UiUtils; + +import com.google.android.material.imageview.ShapeableImageView; import com.google.android.material.textfield.TextInputEditText; +import com.google.android.material.textview.MaterialTextView; public class AdvancedTimetableFragment extends BaseMwmFragment implements View.OnClickListener, TimetableProvider @@ -28,8 +29,8 @@ public class AdvancedTimetableFragment extends BaseMwmFragment private boolean mIsExampleShown; private TextInputEditText mInput; private WebView mExample; - private TextView mExamplesTitle; - private static ImageView mSaveButton; + private MaterialTextView mExamplesTitle; + private static ShapeableImageView mSaveButton; @Nullable private String mInitTimetables; @Nullable diff --git a/android/app/src/main/java/app/organicmaps/editor/CuisineAdapter.java b/android/app/src/main/java/app/organicmaps/editor/CuisineAdapter.java index 6fc1d9048..6d4fd5209 100644 --- a/android/app/src/main/java/app/organicmaps/editor/CuisineAdapter.java +++ b/android/app/src/main/java/app/organicmaps/editor/CuisineAdapter.java @@ -3,13 +3,14 @@ package app.organicmaps.editor; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.CheckBox; import android.widget.CompoundButton; -import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; +import com.google.android.material.checkbox.MaterialCheckBox; +import com.google.android.material.textview.MaterialTextView; + import app.organicmaps.R; import java.util.ArrayList; @@ -100,8 +101,8 @@ public class CuisineAdapter extends RecyclerView.Adapter mDetailsBlocks = new HashMap<>(); private final Map mSocialMediaBlocks = new HashMap<>(); - private TextView mReset; + private MaterialTextView mReset; private EditorHostFragment mParent; @@ -489,7 +490,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe mOpeningHours.setOnClickListener(this); final View cardMore = view.findViewById(R.id.cv__more); mDescription = findInput(cardMore); - TextView osmInfo = view.findViewById(R.id.osm_info); + MaterialTextView osmInfo = view.findViewById(R.id.osm_info); osmInfo.setMovementMethod(LinkMovementMethod.getInstance()); mReset = view.findViewById(R.id.reset); mReset.setOnClickListener(this); @@ -529,7 +530,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe private static TextInputEditText findInputAndInitBlock(View blockWithInput, @DrawableRes int icon, String hint) { - ((ImageView) blockWithInput.findViewById(R.id.icon)).setImageResource(icon); + ((ShapeableImageView) blockWithInput.findViewById(R.id.icon)).setImageResource(icon); final TextInputLayout input = blockWithInput.findViewById(R.id.custom_input); input.setHint(hint); return input.findViewById(R.id.input); diff --git a/android/app/src/main/java/app/organicmaps/editor/FeatureCategoryAdapter.java b/android/app/src/main/java/app/organicmaps/editor/FeatureCategoryAdapter.java index ceaf162e0..f55256d50 100644 --- a/android/app/src/main/java/app/organicmaps/editor/FeatureCategoryAdapter.java +++ b/android/app/src/main/java/app/organicmaps/editor/FeatureCategoryAdapter.java @@ -4,12 +4,13 @@ import android.text.method.LinkMovementMethod; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.recyclerview.widget.RecyclerView; +import com.google.android.material.textview.MaterialTextView; + import app.organicmaps.R; import app.organicmaps.editor.data.FeatureCategory; import app.organicmaps.util.UiUtils; @@ -78,7 +79,7 @@ public class FeatureCategoryAdapter extends RecyclerView.Adapter { - mOkButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE); + mOkButton = (MaterialButton) dialog.getButton(AlertDialog.BUTTON_POSITIVE); mOkButton.setOnClickListener(v -> { if (mSelectedTab == TAB_FROM) { @@ -134,19 +135,19 @@ public class HoursMinutesPickerFragment extends BaseMwmDialogFragment if (id != 0) { mPickerHoursLabel = mPicker.findViewById(id); - if (!(mPickerHoursLabel instanceof TextView)) + if (!(mPickerHoursLabel instanceof MaterialTextView)) mPickerHoursLabel = null; } mTabs = root.findViewById(R.id.tabs); - TextView tabView = (TextView) inflater.inflate(R.layout.tab_timepicker, mTabs, false); + MaterialTextView tabView = (MaterialTextView) inflater.inflate(R.layout.tab_timepicker, mTabs, false); tabView.setText(getResources().getString(R.string.editor_time_from)); final ColorStateList textColor = AppCompatResources.getColorStateList(requireContext(), ThemeUtils.isNightTheme(requireContext()) ? R.color.accent_color_selector_night : R.color.accent_color_selector); tabView.setTextColor(textColor); mTabs.addTab(mTabs.newTab().setCustomView(tabView), true); - tabView = (TextView) inflater.inflate(R.layout.tab_timepicker, mTabs, false); + tabView = (MaterialTextView) inflater.inflate(R.layout.tab_timepicker, mTabs, false); tabView.setText(getResources().getString(R.string.editor_time_to)); tabView.setTextColor(textColor); mTabs.addTab(mTabs.newTab().setCustomView(tabView), true); diff --git a/android/app/src/main/java/app/organicmaps/editor/LanguagesAdapter.java b/android/app/src/main/java/app/organicmaps/editor/LanguagesAdapter.java index d254354d7..97623fa7d 100644 --- a/android/app/src/main/java/app/organicmaps/editor/LanguagesAdapter.java +++ b/android/app/src/main/java/app/organicmaps/editor/LanguagesAdapter.java @@ -3,11 +3,12 @@ package app.organicmaps.editor; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; +import com.google.android.material.textview.MaterialTextView; + import app.organicmaps.R; import app.organicmaps.editor.data.Language; @@ -42,12 +43,12 @@ public class LanguagesAdapter extends RecyclerView.Adapter mFragment.onLanguageSelected(mLanguages[getBindingAdapterPosition()])); } diff --git a/android/app/src/main/java/app/organicmaps/editor/PhoneListAdapter.java b/android/app/src/main/java/app/organicmaps/editor/PhoneListAdapter.java index 36b0c2d3f..a49084391 100644 --- a/android/app/src/main/java/app/organicmaps/editor/PhoneListAdapter.java +++ b/android/app/src/main/java/app/organicmaps/editor/PhoneListAdapter.java @@ -4,11 +4,11 @@ import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ImageView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; +import com.google.android.material.imageview.ShapeableImageView; import com.google.android.material.textfield.TextInputLayout; import com.google.android.material.textfield.TextInputEditText; import app.organicmaps.R; @@ -94,7 +94,7 @@ public class PhoneListAdapter extends RecyclerView.Adapter days = new SparseArray<>(7); + SparseArray days = new SparseArray<>(7); View allday; SwitchCompat swAllday; View schedule; View openClose; View open; View close; - TextView tvOpen; - TextView tvClose; + MaterialTextView tvOpen; + MaterialTextView tvClose; View[] closedHours = new View[MAX_CLOSED_SPANS]; View addClosed; View deleteTimetable; @@ -316,7 +317,7 @@ class SimpleTimetableAdapter extends RecyclerView.Adapter checkBox.toggle()); - ((TextView) day.findViewById(R.id.tv__day)).setText(TimeFormatUtils.formatShortWeekday(dayIndex)); + ((MaterialTextView) day.findViewById(R.id.tv__day)).setText(TimeFormatUtils.formatShortWeekday(dayIndex)); } private void switchWorkingDay(@IntRange(from = 1, to = 7) int dayIndex) { - final CheckBox checkBox = days.get(dayIndex); + final MaterialCheckBox checkBox = days.get(dayIndex); if (checkBox.isChecked()) addWorkingDay(dayIndex, getBindingAdapterPosition()); else @@ -361,7 +362,7 @@ class SimpleTimetableAdapter extends RecyclerView.Adapter - - - - - - - + - - + - - - - - - + - - - - - - - - - - - - - - - + - - - + - - - + - - - - + - - + diff --git a/android/app/src/main/res/layout/fragment_editor_host.xml b/android/app/src/main/res/layout/fragment_editor_host.xml index b6af3c1fe..f815e061a 100644 --- a/android/app/src/main/res/layout/fragment_editor_host.xml +++ b/android/app/src/main/res/layout/fragment_editor_host.xml @@ -29,7 +29,7 @@ android:layout_marginEnd="?actionBarSize" tools:visibility="gone" /> - - - @@ -38,24 +38,24 @@ android:orientation="vertical" tools:visibility="gone"> - - + - + - @@ -77,7 +77,7 @@ android:padding="@dimen/margin_base" android:textAppearance="@style/MwmTextAppearance.Body1"/> - - - - - + - - - + diff --git a/android/app/src/main/res/layout/item_add_street.xml b/android/app/src/main/res/layout/item_add_street.xml index cf3a91355..bc4bbdea0 100644 --- a/android/app/src/main/res/layout/item_add_street.xml +++ b/android/app/src/main/res/layout/item_add_street.xml @@ -9,7 +9,7 @@ android:orientation="horizontal" android:padding="@dimen/margin_base"> - - - - - - - - - - - - - - - - - - - - - - - - - @@ -44,12 +44,12 @@ style="@style/MwmWidget.Editor.DayLayout" android:layout_weight="1"> - - @@ -61,12 +61,12 @@ style="@style/MwmWidget.Editor.DayLayout" android:layout_weight="1"> - - @@ -78,12 +78,12 @@ style="@style/MwmWidget.Editor.DayLayout" android:layout_weight="1"> - - @@ -95,12 +95,12 @@ style="@style/MwmWidget.Editor.DayLayout" android:layout_weight="1"> - - @@ -112,12 +112,12 @@ style="@style/MwmWidget.Editor.DayLayout" android:layout_weight="1"> - - @@ -133,12 +133,12 @@ android:id="@+id/day7" style="@style/MwmWidget.Editor.DayLayout"> - - @@ -162,7 +162,7 @@ android:orientation="horizontal" android:padding="@dimen/margin_half_plus"> - - - - - - - - + diff --git a/android/app/src/main/res/layout/item_timetable_add.xml b/android/app/src/main/res/layout/item_timetable_add.xml index 745307efe..3b9872f32 100644 --- a/android/app/src/main/res/layout/item_timetable_add.xml +++ b/android/app/src/main/res/layout/item_timetable_add.xml @@ -6,7 +6,7 @@ android:paddingBottom="@dimen/margin_base_plus" android:paddingTop="@dimen/margin_base_plus"> -