mirror of https://github.com/tasks/tasks
Add calendar selection activity and dialog
parent
251d28ddf6
commit
3b1879a776
@ -0,0 +1,21 @@
|
||||
package com.todoroo.astrid.gcal;
|
||||
|
||||
public class AndroidCalendar {
|
||||
private final String id;
|
||||
private final String name;
|
||||
|
||||
public static final AndroidCalendar NONE = new AndroidCalendar("-1", "NONE");
|
||||
|
||||
public AndroidCalendar(String id, String name) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,44 @@
|
||||
package org.tasks.activities;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
|
||||
import com.todoroo.astrid.gcal.AndroidCalendar;
|
||||
|
||||
import org.tasks.injection.InjectingAppCompatActivity;
|
||||
|
||||
public class CalendarSelectionActivity extends InjectingAppCompatActivity implements CalendarSelectionDialog.CalendarSelectionHandler {
|
||||
|
||||
private static final String FRAG_TAG_CALENDAR_PREFERENCE_SELECTION = "frag_tag_calendar_preference_selection";
|
||||
|
||||
public static final String EXTRA_CALENDAR_ID = "extra_calendar_id";
|
||||
public static final String EXTRA_CALENDAR_NAME = "extra_calendar_name";
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
FragmentManager supportFragmentManager = getSupportFragmentManager();
|
||||
CalendarSelectionDialog fragmentByTag = (CalendarSelectionDialog) supportFragmentManager.findFragmentByTag(FRAG_TAG_CALENDAR_PREFERENCE_SELECTION);
|
||||
if (fragmentByTag == null) {
|
||||
fragmentByTag = new CalendarSelectionDialog();
|
||||
fragmentByTag.enableNone();
|
||||
fragmentByTag.show(supportFragmentManager, FRAG_TAG_CALENDAR_PREFERENCE_SELECTION);
|
||||
}
|
||||
fragmentByTag.setCalendarSelectionHandler(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void selectedCalendar(final AndroidCalendar androidCalendar) {
|
||||
setResult(RESULT_OK, new Intent() {{
|
||||
putExtra(EXTRA_CALENDAR_ID, androidCalendar.getId());
|
||||
putExtra(EXTRA_CALENDAR_NAME, androidCalendar.getName());
|
||||
}});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dismiss() {
|
||||
finish();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,88 @@
|
||||
package org.tasks.activities;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.widget.ArrayAdapter;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.todoroo.astrid.gcal.AndroidCalendar;
|
||||
import com.todoroo.astrid.gcal.GCalHelper;
|
||||
|
||||
import org.tasks.R;
|
||||
import org.tasks.dialogs.DialogBuilder;
|
||||
import org.tasks.injection.InjectingDialogFragment;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
|
||||
import static com.google.common.collect.Lists.transform;
|
||||
|
||||
public class CalendarSelectionDialog extends InjectingDialogFragment {
|
||||
|
||||
public void enableNone() {
|
||||
enableNone = true;
|
||||
}
|
||||
|
||||
public interface CalendarSelectionHandler {
|
||||
void selectedCalendar(AndroidCalendar calendar);
|
||||
void dismiss();
|
||||
}
|
||||
|
||||
@Inject DialogBuilder dialogBuilder;
|
||||
@Inject GCalHelper gCalHelper;
|
||||
private CalendarSelectionHandler handler;
|
||||
private boolean enableNone;
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
final List<AndroidCalendar> calendars = gCalHelper.getCalendars();
|
||||
List<String> calendarNames = transform(calendars, new Function<AndroidCalendar, String>() {
|
||||
@Nullable
|
||||
@Override
|
||||
public String apply(AndroidCalendar androidCalendar) {
|
||||
return androidCalendar.getName();
|
||||
}
|
||||
});
|
||||
|
||||
ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(),
|
||||
android.R.layout.simple_list_item_1, calendarNames);
|
||||
|
||||
AlertDialog.Builder builder = dialogBuilder.newDialog()
|
||||
.setTitle(R.string.choose_calendar)
|
||||
.setSingleChoiceItems(adapter, 0, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, final int which) {
|
||||
handler.selectedCalendar(calendars.get(which));
|
||||
dialog.dismiss();
|
||||
}
|
||||
});
|
||||
if (enableNone) {
|
||||
builder.setNeutralButton(R.string.none, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
handler.selectedCalendar(AndroidCalendar.NONE);
|
||||
dialog.dismiss();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return builder.show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDismiss(DialogInterface dialog) {
|
||||
super.onDismiss(dialog);
|
||||
|
||||
handler.dismiss();
|
||||
}
|
||||
|
||||
public void setCalendarSelectionHandler(CalendarSelectionHandler handler) {
|
||||
this.handler = handler;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue