package net.osmand.plus.osmedit.dialogs;
import android.app.Dialog;
import android.content.DialogInterface;
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 net.osmand.PlatformUtil;
import net.osmand.plus.R;
import net.osmand.plus.osmedit.BasicEditPoiFragment;
import net.osmand.util.OpeningHoursParser;
import org.apache.commons.logging.Log;
import java.util.Calendar;
public class OpeningHoursDaysDialogFragment extends DialogFragment {
private static final Log LOG = PlatformUtil.getLog(OpeningHoursDaysDialogFragment.class);
public static final String POSITION_TO_ADD = "position_to_add";
public static final String ITEM = "item";
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final OpeningHoursParser.BasicOpeningHourRule item =
(OpeningHoursParser.BasicOpeningHourRule) getArguments().getSerializable(ITEM);
final int positionToAdd = getArguments().getInt(POSITION_TO_ADD);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
final boolean createNew = positionToAdd == -1;
Calendar inst = Calendar.getInstance();
final int first = inst.getFirstDayOfWeek();
final boolean[] dayToShow = new boolean[7];
String[] daysToShow = new String[7];
for (int i = 0; i < 7; i++) {
int d = (first + i - 1) % 7 + 1;
inst.set(Calendar.DAY_OF_WEEK, d);
CharSequence dayName = DateFormat.format("EEEE", inst);
String result = "" + Character.toUpperCase(dayName.charAt(0)) +
dayName.subSequence(1, dayName.length());
daysToShow[i] = result; //$NON-NLS-1$
final int pos = (d + 5) % 7;
dayToShow[i] = item.getDays()[pos];
}
builder.setTitle(getResources().getString(R.string.working_days));
builder.setMultiChoiceItems(daysToShow, dayToShow, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
dayToShow[which] = isChecked;
}
});
builder.setPositiveButton(createNew ? R.string.next_proceed
: R.string.shared_string_save,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
boolean[] days = item.getDays();
for (int i = 0; i < 7; i++) {
days[(first + 5 + i) % 7] = dayToShow[i];
}
if (createNew) {
OpeningHoursHoursDialogFragment.createInstance(item, positionToAdd, true, 0)
.show(getFragmentManager(), "TimePickerDialogFragment");
} else {
((BasicEditPoiFragment) getParentFragment())
.setBasicOpeningHoursRule(item, positionToAdd);
}
}
});
builder.setNegativeButton(getActivity().getString(R.string.shared_string_cancel), null);
return builder.create();
}
public static OpeningHoursDaysDialogFragment createInstance(
@NonNull final OpeningHoursParser.BasicOpeningHourRule item,
final int positionToAdd) {
LOG.debug("createInstance(" + "item=" + item + ", positionToAdd=" + positionToAdd + ")");
OpeningHoursDaysDialogFragment daysDialogFragment = new OpeningHoursDaysDialogFragment();
Bundle bundle = new Bundle();
bundle.putSerializable(ITEM, item);
bundle.putInt(POSITION_TO_ADD, positionToAdd);
daysDialogFragment.setArguments(bundle);
return daysDialogFragment;
}
}