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