diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml
index 74b3483d3..4d85646e2 100644
--- a/src/main/AndroidManifest.xml
+++ b/src/main/AndroidManifest.xml
@@ -356,7 +356,7 @@
+ android:theme="@style/TasksDialog" />
adapter;
+ private final List calendars = new ArrayList<>();
+ private final List calendarNames = new ArrayList<>();
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
- final List calendars = calendarProvider.getCalendars();
- List calendarNames = transform(calendars, new Function() {
- @Override
- public String apply(AndroidCalendar androidCalendar) {
- return androidCalendar.getName();
- }
- });
-
- if (calendarNames.isEmpty()) {
- Toast.makeText(context, R.string.no_calendars_found, Toast.LENGTH_LONG).show();
- handler.dismiss();
+ if (savedInstanceState == null) {
+ fragmentPermissionRequestor.requestCalendarPermissions();
}
+ adapter = new ArrayAdapter<>(context, R.layout.simple_list_item_single_choice_themed, calendarNames);
+
AlertDialogBuilder builder = dialogBuilder.newDialog()
- .setItems(calendarNames, new DialogInterface.OnClickListener() {
+ .setAdapter(adapter, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
handler.selectedCalendar(calendars.get(which));
- dialog.dismiss();
+ }
+ })
+ .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialogInterface, int i) {
+ handler.cancel();
}
});
if (enableNone) {
- builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- }
- }).setNeutralButton(R.string.none, new DialogInterface.OnClickListener() {
+ builder.setNeutralButton(R.string.none, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
handler.selectedCalendar(AndroidCalendar.NONE);
- dialog.dismiss();
}
});
}
@@ -89,10 +84,53 @@ public class CalendarSelectionDialog extends InjectingDialogFragment {
}
@Override
- public void onDismiss(DialogInterface dialog) {
- super.onDismiss(dialog);
+ public void onResume() {
+ super.onResume();
+
+ if (permissionChecker.canAccessCalendars()) {
+ calendars.clear();
+ calendars.addAll(calendarProvider.getCalendars());
+ calendarNames.clear();
+ calendarNames.addAll(transform(calendars, new Function() {
+ @Override
+ public String apply(AndroidCalendar androidCalendar) {
+ return androidCalendar.getName();
+ }
+ }));
+ if (calendarNames.isEmpty()) {
+ Toast.makeText(context, R.string.no_calendars_found, Toast.LENGTH_LONG).show();
+ handler.cancel();
+ } else {
+ adapter.notifyDataSetChanged();
+ }
+ }
+ }
+
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ super.onCancel(dialog);
- handler.dismiss();
+ handler.cancel();
+ }
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+ if (requestCode == PermissionRequestor.REQUEST_CALENDAR) {
+ if (grantResults.length > 0 && !verifyPermissions(grantResults)) {
+ handler.cancel();
+ }
+ } else {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+ }
+ }
+
+ @Override
+ protected void inject(DialogFragmentComponent component) {
+ component.inject(this);
+ }
+
+ public void enableNone() {
+ enableNone = true;
}
public void setCalendarSelectionHandler(CalendarSelectionHandler handler) {
diff --git a/src/main/java/org/tasks/injection/DialogFragmentModule.java b/src/main/java/org/tasks/injection/DialogFragmentModule.java
index 522089610..a0c658579 100644
--- a/src/main/java/org/tasks/injection/DialogFragmentModule.java
+++ b/src/main/java/org/tasks/injection/DialogFragmentModule.java
@@ -3,6 +3,7 @@ package org.tasks.injection;
import android.app.Activity;
import android.content.Context;
import android.support.v4.app.DialogFragment;
+import android.support.v4.app.Fragment;
import dagger.Module;
import dagger.Provides;
@@ -20,6 +21,11 @@ public class DialogFragmentModule {
return dialogFragment.getActivity();
}
+ @Provides
+ public Fragment getFragment() {
+ return dialogFragment;
+ }
+
@Provides
@ForActivity
public Context getContext() {
diff --git a/src/main/res/layout/simple_list_item_single_choice_themed.xml b/src/main/res/layout/simple_list_item_single_choice_themed.xml
new file mode 100644
index 000000000..bfd402403
--- /dev/null
+++ b/src/main/res/layout/simple_list_item_single_choice_themed.xml
@@ -0,0 +1,25 @@
+
+
+
diff --git a/src/main/res/values/theme.xml b/src/main/res/values/theme.xml
index 2fd7a01fa..4c2a2f4b6 100644
--- a/src/main/res/values/theme.xml
+++ b/src/main/res/values/theme.xml
@@ -26,6 +26,7 @@
@@ -33,6 +34,7 @@