mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-27 16:33:38 +00:00
[android] Migrate editor screens to Material components
Signed-off-by: Jean-Baptiste Charron <jeanbaptiste.charron@outlook.fr>
This commit is contained in:
committed by
Konstantin Pastbin
parent
a3e1666ede
commit
9a759229f9
@@ -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
|
||||
|
||||
@@ -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<CuisineAdapter.ViewHold
|
||||
|
||||
protected class ViewHolder extends RecyclerView.ViewHolder implements CompoundButton.OnCheckedChangeListener
|
||||
{
|
||||
final TextView cuisine;
|
||||
final CheckBox selected;
|
||||
final MaterialTextView cuisine;
|
||||
final MaterialCheckBox selected;
|
||||
|
||||
public ViewHolder(View itemView)
|
||||
{
|
||||
|
||||
@@ -8,8 +8,6 @@ import android.text.method.LinkMovementMethod;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.CallSuper;
|
||||
import androidx.annotation.DrawableRes;
|
||||
@@ -22,8 +20,11 @@ import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.imageview.ShapeableImageView;
|
||||
import com.google.android.material.textfield.TextInputLayout;
|
||||
import com.google.android.material.textfield.TextInputEditText;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
|
||||
import app.organicmaps.Framework;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.base.BaseMwmFragment;
|
||||
@@ -46,7 +47,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
|
||||
{
|
||||
final static String LAST_INDEX_OF_NAMES_ARRAY = "LastIndexOfNamesArray";
|
||||
|
||||
private TextView mCategory;
|
||||
private MaterialTextView mCategory;
|
||||
private View mCardName;
|
||||
private View mCardAddress;
|
||||
private View mCardDetails;
|
||||
@@ -89,20 +90,20 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
|
||||
};
|
||||
|
||||
private MultilanguageAdapter mNamesAdapter;
|
||||
private TextView mNamesCaption;
|
||||
private TextView mAddLanguage;
|
||||
private TextView mMoreLanguages;
|
||||
private MaterialTextView mNamesCaption;
|
||||
private MaterialTextView mAddLanguage;
|
||||
private MaterialTextView mMoreLanguages;
|
||||
|
||||
private TextView mStreet;
|
||||
private MaterialTextView mStreet;
|
||||
private TextInputEditText mHouseNumber;
|
||||
private TextInputEditText mBuildingLevels;
|
||||
|
||||
// Define Metadata entries, that have more tricky logic, separately.
|
||||
private TextView mPhone;
|
||||
private TextView mEditPhoneLink;
|
||||
private TextView mCuisine;
|
||||
private MaterialTextView mPhone;
|
||||
private MaterialTextView mEditPhoneLink;
|
||||
private MaterialTextView mCuisine;
|
||||
private SwitchCompat mWifi;
|
||||
private TextView mSelfService;
|
||||
private MaterialTextView mSelfService;
|
||||
private SwitchCompat mOutdoorSeating;
|
||||
|
||||
// Default Metadata entries.
|
||||
@@ -132,12 +133,12 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
|
||||
private TextInputLayout mInputBuildingLevels;
|
||||
|
||||
private View mEmptyOpeningHours;
|
||||
private TextView mOpeningHours;
|
||||
private MaterialTextView mOpeningHours;
|
||||
private View mEditOpeningHours;
|
||||
private TextInputEditText mDescription;
|
||||
private final Map<Metadata.MetadataType, View> mDetailsBlocks = new HashMap<>();
|
||||
private final Map<Metadata.MetadataType, View> 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);
|
||||
|
||||
@@ -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<RecyclerView.Vi
|
||||
protected class FeatureViewHolder extends RecyclerView.ViewHolder
|
||||
{
|
||||
@NonNull
|
||||
private final TextView mName;
|
||||
private final MaterialTextView mName;
|
||||
@NonNull
|
||||
private final View mSelected;
|
||||
|
||||
@@ -106,7 +107,7 @@ public class FeatureCategoryAdapter extends RecyclerView.Adapter<RecyclerView.Vi
|
||||
FooterViewHolder(@NonNull View itemView)
|
||||
{
|
||||
super(itemView);
|
||||
TextView categoryUnsuitableText = itemView.findViewById(R.id.editor_category_unsuitable_text);
|
||||
MaterialTextView categoryUnsuitableText = itemView.findViewById(R.id.editor_category_unsuitable_text);
|
||||
categoryUnsuitableText.setMovementMethod(LinkMovementMethod.getInstance());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,8 +8,6 @@ import android.os.Bundle;
|
||||
import android.text.format.DateFormat;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
import android.widget.TimePicker;
|
||||
|
||||
import androidx.annotation.IntRange;
|
||||
@@ -19,8 +17,11 @@ import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.content.res.AppCompatResources;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.tabs.TabLayout;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.base.BaseMwmDialogFragment;
|
||||
import app.organicmaps.editor.data.HoursMinutes;
|
||||
@@ -48,7 +49,7 @@ public class HoursMinutesPickerFragment extends BaseMwmDialogFragment
|
||||
private TabLayout mTabs;
|
||||
|
||||
private int mId;
|
||||
private Button mOkButton;
|
||||
private MaterialButton mOkButton;
|
||||
|
||||
public interface OnPickListener
|
||||
{
|
||||
@@ -90,7 +91,7 @@ public class HoursMinutesPickerFragment extends BaseMwmDialogFragment
|
||||
.create();
|
||||
|
||||
dialog.setOnShowListener(dialogInterface -> {
|
||||
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);
|
||||
|
||||
@@ -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<LanguagesAdapter.Hold
|
||||
|
||||
protected class Holder extends RecyclerView.ViewHolder
|
||||
{
|
||||
TextView name;
|
||||
MaterialTextView name;
|
||||
|
||||
public Holder(View itemView)
|
||||
{
|
||||
super(itemView);
|
||||
name = (TextView) itemView;
|
||||
name = (MaterialTextView) itemView;
|
||||
itemView.setOnClickListener(v -> mFragment.onLanguageSelected(mLanguages[getBindingAdapterPosition()]));
|
||||
}
|
||||
|
||||
|
||||
@@ -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<PhoneListAdapter.View
|
||||
{
|
||||
private int mPosition = -1;
|
||||
private final TextInputEditText mInput;
|
||||
private final ImageView deleteButton;
|
||||
private final ShapeableImageView deleteButton;
|
||||
|
||||
public ViewHolder(@NonNull View itemView)
|
||||
{
|
||||
@@ -116,7 +116,7 @@ public class PhoneListAdapter extends RecyclerView.Adapter<PhoneListAdapter.View
|
||||
deleteButton.setOnClickListener(this);
|
||||
// TODO: setting icons from code because icons defined in layout XML are white.
|
||||
deleteButton.setImageResource(R.drawable.ic_delete);
|
||||
((ImageView) itemView.findViewById(R.id.phone_icon)).setImageResource(R.drawable.ic_phone);
|
||||
((ShapeableImageView) itemView.findViewById(R.id.phone_icon)).setImageResource(R.drawable.ic_phone);
|
||||
}
|
||||
|
||||
public void setPosition(int position)
|
||||
|
||||
@@ -4,12 +4,13 @@ import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.google.android.material.radiobutton.MaterialRadioButton;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.util.Utils;
|
||||
|
||||
@@ -51,8 +52,8 @@ public class SelfServiceAdapter extends RecyclerView.Adapter<SelfServiceAdapter.
|
||||
|
||||
protected class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener
|
||||
{
|
||||
final TextView selfServiceDef;
|
||||
final CompoundButton selected;
|
||||
final MaterialTextView selfServiceDef;
|
||||
final MaterialRadioButton selected;
|
||||
|
||||
public ViewHolder(View itemView)
|
||||
{
|
||||
|
||||
@@ -4,11 +4,8 @@ import android.util.SparseArray;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.IdRes;
|
||||
import androidx.annotation.IntRange;
|
||||
@@ -17,6 +14,10 @@ import androidx.appcompat.widget.SwitchCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
import com.google.android.material.checkbox.MaterialCheckBox;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.editor.data.HoursMinutes;
|
||||
import app.organicmaps.editor.data.TimeFormatUtils;
|
||||
@@ -185,15 +186,15 @@ class SimpleTimetableAdapter extends RecyclerView.Adapter<SimpleTimetableAdapter
|
||||
// Limit closed spans to avoid dynamic inflation of views in recycler's children. Yeah, its a hack.
|
||||
static final int MAX_CLOSED_SPANS = 10;
|
||||
|
||||
SparseArray<CheckBox> days = new SparseArray<>(7);
|
||||
SparseArray<MaterialCheckBox> 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<SimpleTimetableAdapter
|
||||
else
|
||||
{
|
||||
UiUtils.show(closedHours[i]);
|
||||
((TextView) closedHours[i].findViewById(R.id.tv__closed)).setText(timespan.toString());
|
||||
((MaterialTextView) closedHours[i].findViewById(R.id.tv__closed)).setText(timespan.toString());
|
||||
}
|
||||
|
||||
i++;
|
||||
@@ -333,18 +334,18 @@ class SimpleTimetableAdapter extends RecyclerView.Adapter<SimpleTimetableAdapter
|
||||
private void addDay(@IntRange(from = 1, to = 7) final int dayIndex, @IdRes int id)
|
||||
{
|
||||
final View day = itemView.findViewById(id);
|
||||
final CheckBox checkBox = day.findViewById(R.id.chb__day);
|
||||
final MaterialCheckBox checkBox = day.findViewById(R.id.chb__day);
|
||||
// Save index of the day to get it back when checkbox will be toggled.
|
||||
checkBox.setTag(dayIndex);
|
||||
days.put(dayIndex, checkBox);
|
||||
day.setOnClickListener(v -> 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<SimpleTimetableAdapter
|
||||
|
||||
private class AddTimetableViewHolder extends BaseTimetableViewHolder
|
||||
{
|
||||
private final Button mAdd;
|
||||
private final MaterialButton mAdd;
|
||||
|
||||
AddTimetableViewHolder(View itemView)
|
||||
{
|
||||
|
||||
@@ -4,12 +4,13 @@ import android.content.res.Resources;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.google.android.material.radiobutton.MaterialRadioButton;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
|
||||
import app.organicmaps.MwmApplication;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.dialog.EditTextDialogFragment;
|
||||
@@ -86,9 +87,9 @@ public class StreetAdapter extends RecyclerView.Adapter<StreetAdapter.BaseViewHo
|
||||
|
||||
protected class StreetViewHolder extends BaseViewHolder implements View.OnClickListener
|
||||
{
|
||||
final TextView streetDef;
|
||||
final TextView streetLoc;
|
||||
final CompoundButton selected;
|
||||
final MaterialTextView streetDef;
|
||||
final MaterialTextView streetLoc;
|
||||
final MaterialRadioButton selected;
|
||||
|
||||
public StreetViewHolder(View itemView)
|
||||
{
|
||||
|
||||
@@ -7,7 +7,6 @@ import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -19,6 +18,7 @@ import app.organicmaps.R;
|
||||
import app.organicmaps.base.BaseMwmFragment;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
|
||||
public class TimetableContainerFragment extends BaseMwmFragment implements TimetableChangedListener
|
||||
{
|
||||
@@ -71,7 +71,7 @@ public class TimetableContainerFragment extends BaseMwmFragment implements Timet
|
||||
|
||||
@SuppressWarnings("NullableProblems")
|
||||
@NonNull
|
||||
private TextView mSwitchMode;
|
||||
private MaterialTextView mSwitchMode;
|
||||
|
||||
@SuppressWarnings("NullableProblems")
|
||||
@NonNull
|
||||
|
||||
Reference in New Issue
Block a user