|
|
@ -14,9 +14,7 @@ import org.tasks.calendars.CalendarProvider;
|
|
|
|
import org.tasks.dialogs.DialogBuilder;
|
|
|
|
import org.tasks.dialogs.DialogBuilder;
|
|
|
|
import org.tasks.injection.DialogFragmentComponent;
|
|
|
|
import org.tasks.injection.DialogFragmentComponent;
|
|
|
|
import org.tasks.injection.InjectingDialogFragment;
|
|
|
|
import org.tasks.injection.InjectingDialogFragment;
|
|
|
|
import org.tasks.preferences.FragmentPermissionRequestor;
|
|
|
|
|
|
|
|
import org.tasks.preferences.PermissionChecker;
|
|
|
|
import org.tasks.preferences.PermissionChecker;
|
|
|
|
import org.tasks.preferences.PermissionRequestor;
|
|
|
|
|
|
|
|
import org.tasks.themes.Theme;
|
|
|
|
import org.tasks.themes.Theme;
|
|
|
|
import org.tasks.ui.SingleCheckedArrayAdapter;
|
|
|
|
import org.tasks.ui.SingleCheckedArrayAdapter;
|
|
|
|
|
|
|
|
|
|
|
@ -26,7 +24,6 @@ import java.util.List;
|
|
|
|
import javax.inject.Inject;
|
|
|
|
import javax.inject.Inject;
|
|
|
|
|
|
|
|
|
|
|
|
import static com.google.common.collect.Lists.transform;
|
|
|
|
import static com.google.common.collect.Lists.transform;
|
|
|
|
import static org.tasks.PermissionUtil.verifyPermissions;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public class CalendarSelectionDialog extends InjectingDialogFragment {
|
|
|
|
public class CalendarSelectionDialog extends InjectingDialogFragment {
|
|
|
|
|
|
|
|
|
|
|
@ -48,25 +45,31 @@ public class CalendarSelectionDialog extends InjectingDialogFragment {
|
|
|
|
|
|
|
|
|
|
|
|
@Inject DialogBuilder dialogBuilder;
|
|
|
|
@Inject DialogBuilder dialogBuilder;
|
|
|
|
@Inject CalendarProvider calendarProvider;
|
|
|
|
@Inject CalendarProvider calendarProvider;
|
|
|
|
@Inject FragmentPermissionRequestor fragmentPermissionRequestor;
|
|
|
|
|
|
|
|
@Inject PermissionChecker permissionChecker;
|
|
|
|
@Inject PermissionChecker permissionChecker;
|
|
|
|
@Inject Theme theme;
|
|
|
|
@Inject Theme theme;
|
|
|
|
|
|
|
|
|
|
|
|
private CalendarSelectionHandler handler;
|
|
|
|
private CalendarSelectionHandler handler;
|
|
|
|
private String selected;
|
|
|
|
|
|
|
|
private SingleCheckedArrayAdapter adapter;
|
|
|
|
private SingleCheckedArrayAdapter adapter;
|
|
|
|
private final List<AndroidCalendar> calendars = new ArrayList<>();
|
|
|
|
private final List<AndroidCalendar> calendars = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
@NonNull
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
|
|
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
|
|
|
fragmentPermissionRequestor.requestCalendarPermissions();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Bundle arguments = getArguments();
|
|
|
|
Bundle arguments = getArguments();
|
|
|
|
selected = arguments.getString(EXTRA_SELECTED);
|
|
|
|
String selected = arguments.getString(EXTRA_SELECTED);
|
|
|
|
|
|
|
|
|
|
|
|
theme.applyToContext(getActivity());
|
|
|
|
theme.applyToContext(getActivity());
|
|
|
|
adapter = new SingleCheckedArrayAdapter(getActivity(), transform(calendars, AndroidCalendar::getName), theme.getThemeAccent()) {
|
|
|
|
|
|
|
|
|
|
|
|
int selectedIndex = -1;
|
|
|
|
|
|
|
|
calendars.clear();
|
|
|
|
|
|
|
|
calendars.addAll(calendarProvider.getCalendars());
|
|
|
|
|
|
|
|
if (calendars.isEmpty()) {
|
|
|
|
|
|
|
|
Toast.makeText(getActivity(), R.string.no_calendars_found, Toast.LENGTH_LONG).show();
|
|
|
|
|
|
|
|
handler.cancel();
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
calendars.add(0, new AndroidCalendar(null, getString(R.string.dont_add_to_calendar), -1));
|
|
|
|
|
|
|
|
List<String> calendarNames = transform(calendars, AndroidCalendar::getName);
|
|
|
|
|
|
|
|
adapter = new SingleCheckedArrayAdapter(getActivity(), calendarNames, theme.getThemeAccent()) {
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
protected int getDrawable(int position) {
|
|
|
|
protected int getDrawable(int position) {
|
|
|
|
return R.drawable.ic_event_24dp;
|
|
|
|
return R.drawable.ic_event_24dp;
|
|
|
@ -77,9 +80,11 @@ public class CalendarSelectionDialog extends InjectingDialogFragment {
|
|
|
|
return calendars.get(position).getColor();
|
|
|
|
return calendars.get(position).getColor();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
selectedIndex = Strings.isNullOrEmpty(selected) ? 0 : calendarNames.indexOf(selected);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return dialogBuilder.newDialog()
|
|
|
|
return dialogBuilder.newDialog()
|
|
|
|
.setSingleChoiceItems(adapter, -1, (dialog, which) -> handler.selectedCalendar(calendars.get(which)))
|
|
|
|
.setSingleChoiceItems(adapter, selectedIndex, (dialog, which) -> handler.selectedCalendar(calendars.get(which)))
|
|
|
|
.setOnDismissListener(dialogInterface -> handler.cancel())
|
|
|
|
.setOnDismissListener(dialogInterface -> handler.cancel())
|
|
|
|
.show();
|
|
|
|
.show();
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -88,21 +93,8 @@ public class CalendarSelectionDialog extends InjectingDialogFragment {
|
|
|
|
public void onResume() {
|
|
|
|
public void onResume() {
|
|
|
|
super.onResume();
|
|
|
|
super.onResume();
|
|
|
|
|
|
|
|
|
|
|
|
if (permissionChecker.canAccessCalendars()) {
|
|
|
|
if (!permissionChecker.canAccessCalendars()) {
|
|
|
|
calendars.clear();
|
|
|
|
|
|
|
|
calendars.addAll(calendarProvider.getCalendars());
|
|
|
|
|
|
|
|
if (calendars.isEmpty()) {
|
|
|
|
|
|
|
|
Toast.makeText(getActivity(), R.string.no_calendars_found, Toast.LENGTH_LONG).show();
|
|
|
|
|
|
|
|
handler.cancel();
|
|
|
|
handler.cancel();
|
|
|
|
} else {
|
|
|
|
|
|
|
|
calendars.add(0, new AndroidCalendar(null, getString(R.string.dont_add_to_calendar), -1));
|
|
|
|
|
|
|
|
if (Strings.isNullOrEmpty(selected)) {
|
|
|
|
|
|
|
|
adapter.setChecked(0);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
adapter.setChecked(selected);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
adapter.notifyDataSetChanged();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -113,17 +105,6 @@ public class CalendarSelectionDialog extends InjectingDialogFragment {
|
|
|
|
handler.cancel();
|
|
|
|
handler.cancel();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
|
|
|
|
|
|
|
if (requestCode == PermissionRequestor.REQUEST_CALENDAR) {
|
|
|
|
|
|
|
|
if (!verifyPermissions(grantResults)) {
|
|
|
|
|
|
|
|
handler.cancel();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
protected void inject(DialogFragmentComponent component) {
|
|
|
|
protected void inject(DialogFragmentComponent component) {
|
|
|
|
component.inject(this);
|
|
|
|
component.inject(this);
|
|
|
|