forked from organicmaps/organicmaps
[android] TimetableFragment is refactored
This commit is contained in:
parent
a3712427de
commit
70846ae6d9
7 changed files with 183 additions and 161 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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<SimpleTimetableAdapter.BaseTimetableViewHolder>
|
||||
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<SimpleTimetableAdapter
|
|||
refreshComplement();
|
||||
}
|
||||
|
||||
void setTimetables(Timetable[] tts)
|
||||
@Override
|
||||
public void setTimetables(@Nullable String timetables)
|
||||
{
|
||||
mItems = new ArrayList<>(Arrays.asList(tts));
|
||||
if (timetables == null)
|
||||
return;
|
||||
Timetable[] items = OpeningHours.nativeTimetablesFromString(timetables);
|
||||
if (items == null)
|
||||
return;
|
||||
mItems = new ArrayList<>(Arrays.asList(items));
|
||||
refreshComplement();
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
|
|
@ -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<SimpleTimetableAdapter>
|
||||
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<SimpleTimet
|
|||
protected SimpleTimetableAdapter createAdapter()
|
||||
{
|
||||
mAdapter = new SimpleTimetableAdapter(this);
|
||||
if (mInitTts != null)
|
||||
mAdapter.setTimetables(mInitTts);
|
||||
mAdapter.setTimetables(mInitTimetables);
|
||||
return mAdapter;
|
||||
}
|
||||
|
||||
|
@ -55,16 +53,15 @@ public class SimpleTimetableFragment extends BaseMwmRecyclerFragment<SimpleTimet
|
|||
return mAdapter.getTimetables();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTimetables(String timetables)
|
||||
{
|
||||
mInitTimetables = timetables;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onHoursMinutesPicked(HoursMinutes from, HoursMinutes to, int id)
|
||||
{
|
||||
mAdapter.onHoursMinutesPicked(from, to, id);
|
||||
}
|
||||
|
||||
public void setTimetables(String ttsString)
|
||||
{
|
||||
if (ttsString == null)
|
||||
return;
|
||||
mInitTts = OpeningHours.nativeTimetablesFromString(ttsString);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,141 @@
|
|||
package com.mapswithme.maps.editor;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.annotation.StringRes;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
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 TimetableContainerFragment extends BaseMwmFragment implements OnBackPressListener
|
||||
{
|
||||
public static final String EXTRA_TIME = "Time";
|
||||
|
||||
private enum Mode
|
||||
{
|
||||
SIMPLE
|
||||
{
|
||||
@NonNull
|
||||
String getFragmentClassname() { return SimpleTimetableFragment.class.getName(); }
|
||||
@StringRes
|
||||
int getSwitchButtonLabel() { return R.string.editor_time_advanced; }
|
||||
},
|
||||
ADVANCED
|
||||
{
|
||||
@NonNull
|
||||
String getFragmentClassname() { return AdvancedTimetableFragment.class.getName(); }
|
||||
@StringRes
|
||||
int getSwitchButtonLabel() { return R.string.editor_time_simple; }
|
||||
};
|
||||
|
||||
@NonNull
|
||||
abstract String getFragmentClassname();
|
||||
@StringRes
|
||||
abstract int getSwitchButtonLabel();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private Mode mMode = Mode.ADVANCED;
|
||||
@NonNull
|
||||
private Fragment[] mFragments = new Fragment[Mode.values().length];
|
||||
@Nullable
|
||||
private TimetableProvider mTimetableProvider;
|
||||
|
||||
@SuppressWarnings("NullableProblems")
|
||||
@NonNull
|
||||
private TextView mSwitchMode;
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
|
||||
{
|
||||
return inflater.inflate(R.layout.fragment_timetable, container, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
|
||||
{
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
||||
initViews(view);
|
||||
mMode = Mode.ADVANCED;
|
||||
switchMode();
|
||||
|
||||
final Bundle args = getArguments();
|
||||
if (args != null && mTimetableProvider != null && !TextUtils.isEmpty(args.getString(EXTRA_TIME)))
|
||||
mTimetableProvider.setTimetables(args.getString(EXTRA_TIME));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public String getTimetable()
|
||||
{
|
||||
if (mTimetableProvider == null)
|
||||
return null;
|
||||
|
||||
return mTimetableProvider.getTimetables();
|
||||
}
|
||||
|
||||
private void initViews(View root)
|
||||
{
|
||||
mSwitchMode = root.findViewById(R.id.tv__mode_switch);
|
||||
mSwitchMode.setOnClickListener(v -> 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);
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
package com.mapswithme.maps.editor;
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
interface TimetableProvider
|
||||
{
|
||||
@Nullable String getTimetables();
|
||||
void setTimetables(@Nullable String timetables);
|
||||
}
|
Loading…
Add table
Reference in a new issue