From 70846ae6d9949d6cea1eef7497611ddda8fb329b Mon Sep 17 00:00:00 2001 From: Arsentiy Milchakov Date: Fri, 28 Jun 2019 11:36:27 +0300 Subject: [PATCH] [android] TimetableFragment is refactored --- .../editor/AdvancedTimetableFragment.java | 17 ++- .../maps/editor/EditorHostFragment.java | 6 +- .../maps/editor/SimpleTimetableAdapter.java | 13 +- .../maps/editor/SimpleTimetableFragment.java | 23 ++- .../editor/TimetableContainerFragment.java | 141 ++++++++++++++++++ .../maps/editor/TimetableFragment.java | 135 ----------------- .../maps/editor/TimetableProvider.java | 9 ++ 7 files changed, 183 insertions(+), 161 deletions(-) create mode 100644 android/src/com/mapswithme/maps/editor/TimetableContainerFragment.java delete mode 100644 android/src/com/mapswithme/maps/editor/TimetableFragment.java create mode 100644 android/src/com/mapswithme/maps/editor/TimetableProvider.java diff --git a/android/src/com/mapswithme/maps/editor/AdvancedTimetableFragment.java b/android/src/com/mapswithme/maps/editor/AdvancedTimetableFragment.java index a3b152d19e..f7b52bbca0 100644 --- a/android/src/com/mapswithme/maps/editor/AdvancedTimetableFragment.java +++ b/android/src/com/mapswithme/maps/editor/AdvancedTimetableFragment.java @@ -2,6 +2,7 @@ package com.mapswithme.maps.editor; import android.os.Bundle; import android.support.annotation.DrawableRes; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; @@ -19,23 +20,24 @@ import com.mapswithme.util.UiUtils; public class AdvancedTimetableFragment extends BaseMwmFragment implements View.OnClickListener, - TimetableFragment.TimetableProvider + TimetableProvider { private boolean mIsExampleShown; private EditText mInput; private WebView mExample; - private Timetable[] mInitTimetables; + @Nullable + private String mInitTimetables; private TextView mExamplesTitle; @Nullable @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_timetable_advanced, container, false); } @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); initViews(view); @@ -97,15 +99,16 @@ public class AdvancedTimetableFragment extends BaseMwmFragment return mInput.getText().toString(); } - public void setTimetables(String timetables) + @Override + public void setTimetables(@Nullable String timetables) { - mInitTimetables = OpeningHours.nativeTimetablesFromString(timetables); + mInitTimetables = timetables; refreshTimetables(); } private void refreshTimetables() { if (mInput != null && mInitTimetables != null) - mInput.setText(OpeningHours.nativeTimetablesToString(mInitTimetables)); + mInput.setText(mInitTimetables); } } diff --git a/android/src/com/mapswithme/maps/editor/EditorHostFragment.java b/android/src/com/mapswithme/maps/editor/EditorHostFragment.java index bdf9f09ac0..884f92566b 100644 --- a/android/src/com/mapswithme/maps/editor/EditorHostFragment.java +++ b/android/src/com/mapswithme/maps/editor/EditorHostFragment.java @@ -207,8 +207,8 @@ public class EditorHostFragment extends BaseMwmToolbarFragment protected void editTimetable() { final Bundle args = new Bundle(); - args.putString(TimetableFragment.EXTRA_TIME, Editor.nativeGetOpeningHours()); - editWithFragment(Mode.OPENING_HOURS, R.string.editor_time_title, args, TimetableFragment.class, false); + args.putString(TimetableContainerFragment.EXTRA_TIME, Editor.nativeGetOpeningHours()); + editWithFragment(Mode.OPENING_HOURS, R.string.editor_time_title, args, TimetableContainerFragment.class, false); } protected void editStreet() @@ -268,7 +268,7 @@ public class EditorHostFragment extends BaseMwmToolbarFragment switch (mMode) { case OPENING_HOURS: - final String timetables = ((TimetableFragment) getChildFragmentManager().findFragmentByTag(TimetableFragment.class.getName())).getTimetable(); + final String timetables = ((TimetableContainerFragment) getChildFragmentManager().findFragmentByTag(TimetableContainerFragment.class.getName())).getTimetable(); if (OpeningHours.nativeIsTimetableStringValid(timetables)) { Editor.nativeSetOpeningHours(timetables); diff --git a/android/src/com/mapswithme/maps/editor/SimpleTimetableAdapter.java b/android/src/com/mapswithme/maps/editor/SimpleTimetableAdapter.java index d71d8067c0..3b625d11ee 100644 --- a/android/src/com/mapswithme/maps/editor/SimpleTimetableAdapter.java +++ b/android/src/com/mapswithme/maps/editor/SimpleTimetableAdapter.java @@ -2,6 +2,7 @@ package com.mapswithme.maps.editor; import android.support.annotation.IdRes; import android.support.annotation.IntRange; +import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.SwitchCompat; @@ -29,7 +30,7 @@ import java.util.List; class SimpleTimetableAdapter extends RecyclerView.Adapter implements HoursMinutesPickerFragment.OnPickListener, - TimetableFragment.TimetableProvider + TimetableProvider { private static final int TYPE_TIMETABLE = 0; private static final int TYPE_ADD_TIMETABLE = 1; @@ -52,9 +53,15 @@ class SimpleTimetableAdapter extends RecyclerView.Adapter(Arrays.asList(tts)); + if (timetables == null) + return; + Timetable[] items = OpeningHours.nativeTimetablesFromString(timetables); + if (items == null) + return; + mItems = new ArrayList<>(Arrays.asList(items)); refreshComplement(); notifyDataSetChanged(); } diff --git a/android/src/com/mapswithme/maps/editor/SimpleTimetableFragment.java b/android/src/com/mapswithme/maps/editor/SimpleTimetableFragment.java index 36a4f9fcbd..840ef8b4ba 100644 --- a/android/src/com/mapswithme/maps/editor/SimpleTimetableFragment.java +++ b/android/src/com/mapswithme/maps/editor/SimpleTimetableFragment.java @@ -3,7 +3,6 @@ package com.mapswithme.maps.editor; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -11,14 +10,14 @@ import android.view.ViewGroup; import com.mapswithme.maps.R; import com.mapswithme.maps.base.BaseMwmRecyclerFragment; import com.mapswithme.maps.editor.data.HoursMinutes; -import com.mapswithme.maps.editor.data.Timetable; public class SimpleTimetableFragment extends BaseMwmRecyclerFragment - implements TimetableFragment.TimetableProvider, + implements TimetableProvider, HoursMinutesPickerFragment.OnPickListener { private SimpleTimetableAdapter mAdapter; - private Timetable[] mInitTts; + @Nullable + private String mInitTimetables; @Override public void onCreate(@Nullable Bundle savedInstanceState) @@ -31,8 +30,7 @@ public class SimpleTimetableFragment extends BaseMwmRecyclerFragment switchMode()); + } + + @Override + public boolean onBackPressed() + { + return false; + } + + private void switchMode() + { + switch (mMode) + { + case SIMPLE: + setMode(Mode.ADVANCED); + break; + case ADVANCED: + setMode(Mode.SIMPLE); + break; + } + } + + private void setMode(Mode mode) + { + final String filledTimetables = mTimetableProvider != null ? mTimetableProvider.getTimetables() + : OpeningHours.nativeTimetablesToString(OpeningHours.nativeGetDefaultTimetables()); + if (!OpeningHours.nativeIsTimetableStringValid(filledTimetables)) + { + FragmentActivity activity = getActivity(); + if (activity == null) + return; + + new AlertDialog.Builder(activity) + .setMessage(R.string.editor_correct_mistake) + .setPositiveButton(android.R.string.ok, null) + .show(); + return; + } + + mMode = mode; + mSwitchMode.setText(mMode.getSwitchButtonLabel()); + + if (mFragments[mMode.ordinal()] == null) + mFragments[mMode.ordinal()] = Fragment.instantiate(getActivity(), mMode.getFragmentClassname()); + Fragment fragment = mFragments[mMode.ordinal()]; + getChildFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).commit(); + + mTimetableProvider = (TimetableProvider) fragment; + mTimetableProvider.setTimetables(filledTimetables); + } +} diff --git a/android/src/com/mapswithme/maps/editor/TimetableFragment.java b/android/src/com/mapswithme/maps/editor/TimetableFragment.java deleted file mode 100644 index 4c73e1b06d..0000000000 --- a/android/src/com/mapswithme/maps/editor/TimetableFragment.java +++ /dev/null @@ -1,135 +0,0 @@ -package com.mapswithme.maps.editor; - -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; -import android.support.v7.app.AlertDialog; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import com.mapswithme.maps.R; -import com.mapswithme.maps.base.BaseMwmFragment; -import com.mapswithme.maps.base.OnBackPressListener; - -public class TimetableFragment extends BaseMwmFragment - implements View.OnClickListener, - OnBackPressListener -{ - interface TimetableProvider - { - String getTimetables(); - } - - public static final String EXTRA_TIME = "Time"; - - private boolean mIsAdvancedMode; - - private TextView mSwitchMode; - - // TODO @yunikkk simplify, extract interface - private SimpleTimetableFragment mSimpleModeFragment; - private AdvancedTimetableFragment mAdvancedModeFragment; - - protected EditorHostFragment mParent; - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) - { - return inflater.inflate(R.layout.fragment_timetable, container, false); - } - - @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) - { - super.onViewCreated(view, savedInstanceState); - - mParent = (EditorHostFragment) getParentFragment(); - - initViews(view); - mIsAdvancedMode = true; - switchMode(); - - final Bundle args = getArguments(); - if (args != null && !TextUtils.isEmpty(args.getString(EXTRA_TIME))) - mSimpleModeFragment.setTimetables(args.getString(EXTRA_TIME)); - } - - public String getTimetable() - { - return mIsAdvancedMode ? mAdvancedModeFragment.getTimetables() - : mSimpleModeFragment.getTimetables(); - } - - private void initViews(View root) - { - mSwitchMode = (TextView) root.findViewById(R.id.tv__mode_switch); - mSwitchMode.setOnClickListener(this); - } - - @Override - public void onClick(View v) - { - switch (v.getId()) - { - case R.id.tv__mode_switch: - switchMode(); - break; - } - } - - @Override - public boolean onBackPressed() - { - return false; - } - - private void switchMode() - { - if (!mIsAdvancedMode) - { - final String filledTimetables = mSimpleModeFragment != null ? mSimpleModeFragment.getTimetables() - : OpeningHours.nativeTimetablesToString(OpeningHours.nativeGetDefaultTimetables()); - if (!OpeningHours.nativeIsTimetableStringValid(filledTimetables)) - { - new AlertDialog.Builder(getActivity()) - .setMessage(R.string.editor_correct_mistake) - .setPositiveButton(android.R.string.ok, null) - .show(); - return; - } - mIsAdvancedMode = true; - mSwitchMode.setText(R.string.editor_time_simple); - mAdvancedModeFragment = (AdvancedTimetableFragment) attachFragment(mAdvancedModeFragment, AdvancedTimetableFragment.class.getName()); - mAdvancedModeFragment.setTimetables(filledTimetables); - } - else - { - final String filledTimetables = mAdvancedModeFragment != null ? mAdvancedModeFragment.getTimetables() - : OpeningHours.nativeTimetablesToString(OpeningHours.nativeGetDefaultTimetables()); - if (!OpeningHours.nativeIsTimetableStringValid(filledTimetables)) - { - new AlertDialog.Builder(getActivity()) - .setMessage(R.string.editor_correct_mistake) - .setPositiveButton(android.R.string.ok, null) - .show(); - return; - } - mIsAdvancedMode = false; - mSwitchMode.setText(R.string.editor_time_advanced); - mSimpleModeFragment = (SimpleTimetableFragment) attachFragment(mSimpleModeFragment, SimpleTimetableFragment.class.getName()); - mSimpleModeFragment.setTimetables(filledTimetables); - } - } - - private Fragment attachFragment(Fragment current, String className) - { - Fragment fragment = current == null ? Fragment.instantiate(getActivity(), className) - : current; - getChildFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).commit(); - return fragment; - } -} diff --git a/android/src/com/mapswithme/maps/editor/TimetableProvider.java b/android/src/com/mapswithme/maps/editor/TimetableProvider.java new file mode 100644 index 0000000000..f3b26c94d5 --- /dev/null +++ b/android/src/com/mapswithme/maps/editor/TimetableProvider.java @@ -0,0 +1,9 @@ +package com.mapswithme.maps.editor; + +import android.support.annotation.Nullable; + +interface TimetableProvider +{ + @Nullable String getTimetables(); + void setTimetables(@Nullable String timetables); +}