package net.osmand.plus.osmedit.dialogs; import android.app.Dialog; import android.content.DialogInterface; import android.graphics.Typeface; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.DialogFragment; import android.support.v7.app.AlertDialog; import android.text.format.DateFormat; import android.util.TypedValue; import android.view.Gravity; import android.widget.TextView; import android.widget.TimePicker; import net.osmand.plus.R; import net.osmand.plus.osmedit.BasicEditPoiFragment; import net.osmand.util.OpeningHoursParser; public class OpeningHoursHoursDialogFragment extends DialogFragment { private static final String IS_START = "is_start"; private static final String BASIC_OPENING_HOUR_RULE = "basic_opening_hour_rule"; private static final String RULE_POSITION = "rule_position"; private static final String TIME_POSITION = "time_position"; @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Bundle args = getArguments(); final boolean isStart = args.getBoolean(IS_START); final OpeningHoursParser.BasicOpeningHourRule item = (OpeningHoursParser.BasicOpeningHourRule) args.getSerializable(BASIC_OPENING_HOUR_RULE); final int rulePosition = args.getInt(RULE_POSITION); final int timePosition = args.getInt(TIME_POSITION); boolean newTimeSpan = timePosition == item.timesSize(); if (newTimeSpan) { item.addTimeRange(9 * 60, 18 * 60); } final boolean createNew = rulePosition == -1 || newTimeSpan; AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); int time = isStart ? item.getStartTime(timePosition) : item.getEndTime(timePosition); int hour = time / 60; int minute = time - hour * 60; final TimePicker timePicker = new TimePicker(getActivity()); timePicker.setIs24HourView(DateFormat.is24HourFormat(getActivity())); timePicker.setCurrentHour(hour); timePicker.setCurrentMinute(minute); builder.setView(timePicker) .setPositiveButton(isStart && createNew ? R.string.next_proceed : R.string.shared_string_save, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { timePicker.clearFocus(); int minute = timePicker.getCurrentMinute(); int hourOfDay = timePicker.getCurrentHour(); int time = minute + hourOfDay * 60; if (isStart && createNew) { item.setStartTime(time, timePosition); OpeningHoursHoursDialogFragment .createInstance(item, rulePosition, false, timePosition) .show(getFragmentManager(), "TimePickerDialogFragment"); } else { if (isStart) { item.setStartTime(time, timePosition); } else { item.setEndTime(time, timePosition); } ((BasicEditPoiFragment) getParentFragment()) .setBasicOpeningHoursRule(item, rulePosition); } } }) .setNegativeButton(R.string.shared_string_cancel, null); int paddingInDp = 18; float density = getActivity().getResources().getDisplayMetrics().density; int paddingInPx = (int) (paddingInDp * density); final TypedValue textColorTypedValue = new TypedValue(); getActivity().getTheme().resolveAttribute(android.R.attr.textColorPrimary, textColorTypedValue, true); int textColor = textColorTypedValue.data; TextView titleTextView = new TextView(getActivity()); titleTextView.setText(isStart ? getActivity().getString(R.string.opening_at) : getActivity().getString(R.string.closing_at)); titleTextView.setPadding(paddingInPx, paddingInPx, paddingInPx, paddingInPx); titleTextView.setGravity(Gravity.CENTER_VERTICAL); titleTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18); titleTextView.setTextColor(textColor); Typeface typeface = titleTextView.getTypeface(); titleTextView.setTypeface(typeface, Typeface.BOLD); builder.setCustomTitle(titleTextView); return builder.create(); } public static OpeningHoursHoursDialogFragment createInstance( @NonNull OpeningHoursParser.BasicOpeningHourRule item, int rulePosition, boolean isStart, int timePosition) { OpeningHoursHoursDialogFragment fragment = new OpeningHoursHoursDialogFragment(); Bundle bundle = new Bundle(); bundle.putSerializable(BASIC_OPENING_HOUR_RULE, item); bundle.putInt(RULE_POSITION, rulePosition); bundle.putBoolean(IS_START, isStart); bundle.putInt(TIME_POSITION, timePosition); fragment.setArguments(bundle); return fragment; } }