Handle permission requests from fragments

pull/384/head
Alex Baker 9 years ago
parent 7fd5611264
commit 580337559e

@ -82,6 +82,7 @@ dependencies {
compile 'com.nononsenseapps:filepicker:2.5.0' compile 'com.nononsenseapps:filepicker:2.5.0'
compile 'com.android.support:design:23.1.1' compile 'com.android.support:design:23.1.1'
compile 'com.android.support:support-v13:23.1.1'
compile 'com.jakewharton:butterknife:7.0.1' compile 'com.jakewharton:butterknife:7.0.1'
compile 'com.jakewharton.timber:timber:4.1.0' compile 'com.jakewharton.timber:timber:4.1.0'
compile 'com.google.guava:guava-jdk5:17.0' compile 'com.google.guava:guava-jdk5:17.0'

@ -17,6 +17,7 @@ import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity;
import org.tasks.R; import org.tasks.R;
import org.tasks.activities.ClearGtaskDataActivity; import org.tasks.activities.ClearGtaskDataActivity;
import org.tasks.injection.InjectingPreferenceActivity; import org.tasks.injection.InjectingPreferenceActivity;
import org.tasks.preferences.ActivityPermissionRequestor;
import org.tasks.preferences.PermissionRequestor; import org.tasks.preferences.PermissionRequestor;
import org.tasks.scheduling.BackgroundScheduler; import org.tasks.scheduling.BackgroundScheduler;
@ -29,7 +30,7 @@ public class GtasksPreferences extends InjectingPreferenceActivity {
@Inject GtasksPreferenceService gtasksPreferenceService; @Inject GtasksPreferenceService gtasksPreferenceService;
@Inject BackgroundScheduler backgroundScheduler; @Inject BackgroundScheduler backgroundScheduler;
@Inject PermissionRequestor permissionRequestor; @Inject ActivityPermissionRequestor permissionRequestor;
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {

@ -16,6 +16,7 @@ import com.todoroo.astrid.gcal.GCalHelper;
import org.tasks.R; import org.tasks.R;
import org.tasks.activities.CalendarSelectionActivity; import org.tasks.activities.CalendarSelectionActivity;
import org.tasks.injection.InjectingPreferenceActivity; import org.tasks.injection.InjectingPreferenceActivity;
import org.tasks.preferences.ActivityPermissionRequestor;
import org.tasks.preferences.PermissionChecker; import org.tasks.preferences.PermissionChecker;
import org.tasks.preferences.PermissionRequestor; import org.tasks.preferences.PermissionRequestor;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
@ -37,7 +38,7 @@ public class DefaultsPreferences extends InjectingPreferenceActivity {
@Inject Preferences preferences; @Inject Preferences preferences;
@Inject GCalHelper calendarHelper; @Inject GCalHelper calendarHelper;
@Inject PermissionChecker permissionChecker; @Inject PermissionChecker permissionChecker;
@Inject PermissionRequestor permissionRequester; @Inject ActivityPermissionRequestor permissionRequester;
private Preference defaultCalendarPref; private Preference defaultCalendarPref;
@Override @Override

@ -15,6 +15,7 @@ import com.todoroo.astrid.voice.AACRecorder.AACRecorderCallbacks;
import org.tasks.R; import org.tasks.R;
import org.tasks.injection.InjectingAppCompatActivity; import org.tasks.injection.InjectingAppCompatActivity;
import org.tasks.preferences.ActivityPermissionRequestor;
import org.tasks.preferences.PermissionRequestor; import org.tasks.preferences.PermissionRequestor;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
@ -35,7 +36,7 @@ public class AACRecordingActivity extends InjectingAppCompatActivity implements
private String tempFile; private String tempFile;
@Inject Preferences preferences; @Inject Preferences preferences;
@Inject PermissionRequestor permissionRequestor; @Inject ActivityPermissionRequestor permissionRequestor;
@Bind(R.id.timer) Chronometer timer; @Bind(R.id.timer) Chronometer timer;

@ -18,6 +18,7 @@ import android.preference.PreferenceManager;
import org.tasks.R; import org.tasks.R;
import org.tasks.activities.TimePickerActivity; import org.tasks.activities.TimePickerActivity;
import org.tasks.injection.InjectingPreferenceActivity; import org.tasks.injection.InjectingPreferenceActivity;
import org.tasks.preferences.ActivityPermissionRequestor;
import org.tasks.preferences.Device; import org.tasks.preferences.Device;
import org.tasks.preferences.PermissionChecker; import org.tasks.preferences.PermissionChecker;
import org.tasks.preferences.PermissionRequestor; import org.tasks.preferences.PermissionRequestor;
@ -38,7 +39,7 @@ public class ReminderPreferences extends InjectingPreferenceActivity {
private static final int REQUEST_DEFAULT_REMIND = 10003; private static final int REQUEST_DEFAULT_REMIND = 10003;
@Inject Device device; @Inject Device device;
@Inject PermissionRequestor permissionRequestor; @Inject ActivityPermissionRequestor permissionRequestor;
@Inject PermissionChecker permissionChecker; @Inject PermissionChecker permissionChecker;
private CheckBoxPreference fieldMissedCalls; private CheckBoxPreference fieldMissedCalls;

@ -8,6 +8,7 @@ package com.todoroo.astrid.ui;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle; import android.os.Bundle;
import android.os.Parcelable; import android.os.Parcelable;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
@ -36,6 +37,7 @@ import org.tasks.location.Geofence;
import org.tasks.location.GeofenceService; import org.tasks.location.GeofenceService;
import org.tasks.location.PlacePicker; import org.tasks.location.PlacePicker;
import org.tasks.preferences.Device; import org.tasks.preferences.Device;
import org.tasks.preferences.FragmentPermissionRequestor;
import org.tasks.preferences.PermissionRequestor; import org.tasks.preferences.PermissionRequestor;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
import org.tasks.ui.HiddenTopArrayAdapter; import org.tasks.ui.HiddenTopArrayAdapter;
@ -79,7 +81,7 @@ public class ReminderControlSet extends TaskEditControlFragment {
@Inject AlarmService alarmService; @Inject AlarmService alarmService;
@Inject GeofenceService geofenceService; @Inject GeofenceService geofenceService;
@Inject PermissionRequestor permissionRequestor; @Inject FragmentPermissionRequestor permissionRequestor;
@Inject Device device; @Inject Device device;
@Inject Preferences preferences; @Inject Preferences preferences;
@Inject @ForActivity Context context; @Inject @ForActivity Context context;
@ -269,6 +271,17 @@ public class ReminderControlSet extends TaskEditControlFragment {
} }
} }
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == PermissionRequestor.REQUEST_LOCATION) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
pickLocation();
}
} else {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
public void addAlarmRow(final Long timestamp) { public void addAlarmRow(final Long timestamp) {
addAlarmRow(getLongDateStringWithTime(context, timestamp), new OnClickListener() { addAlarmRow(getLongDateStringWithTime(context, timestamp), new OnClickListener() {
@Override @Override

@ -8,6 +8,7 @@ import android.os.Bundle;
import com.todoroo.astrid.gcal.AndroidCalendar; import com.todoroo.astrid.gcal.AndroidCalendar;
import org.tasks.injection.InjectingAppCompatActivity; import org.tasks.injection.InjectingAppCompatActivity;
import org.tasks.preferences.ActivityPermissionRequestor;
import org.tasks.preferences.ActivityPreferences; import org.tasks.preferences.ActivityPreferences;
import org.tasks.preferences.PermissionRequestor; import org.tasks.preferences.PermissionRequestor;
@ -21,7 +22,7 @@ public class CalendarSelectionActivity extends InjectingAppCompatActivity implem
public static final String EXTRA_CALENDAR_NAME = "extra_calendar_name"; public static final String EXTRA_CALENDAR_NAME = "extra_calendar_name";
public static final String EXTRA_SHOW_NONE = "extra_show_none"; public static final String EXTRA_SHOW_NONE = "extra_show_none";
@Inject PermissionRequestor permissionRequestor; @Inject ActivityPermissionRequestor permissionRequestor;
@Inject ActivityPreferences preferences; @Inject ActivityPreferences preferences;
@Override @Override

@ -11,6 +11,7 @@ import com.google.common.base.Strings;
import com.nononsenseapps.filepicker.FilePickerActivity; import com.nononsenseapps.filepicker.FilePickerActivity;
import org.tasks.injection.InjectingAppCompatActivity; import org.tasks.injection.InjectingAppCompatActivity;
import org.tasks.preferences.ActivityPermissionRequestor;
import org.tasks.preferences.PermissionRequestor; import org.tasks.preferences.PermissionRequestor;
import java.io.File; import java.io.File;
@ -26,7 +27,7 @@ public class FileExplore extends InjectingAppCompatActivity {
public static final String EXTRA_START_PATH = "extra_start_path"; public static final String EXTRA_START_PATH = "extra_start_path";
public static final String EXTRA_DIRECTORY_MODE = "extra_directory_mode"; //$NON-NLS-1$ public static final String EXTRA_DIRECTORY_MODE = "extra_directory_mode"; //$NON-NLS-1$
@Inject PermissionRequestor permissionRequestor; @Inject ActivityPermissionRequestor permissionRequestor;
private boolean directoryMode; private boolean directoryMode;
private String startPath; private String startPath;

@ -0,0 +1,22 @@
package org.tasks.preferences;
import android.app.Activity;
import android.support.v4.app.ActivityCompat;
import javax.inject.Inject;
public class ActivityPermissionRequestor extends PermissionRequestor {
private final Activity activity;
@Inject
public ActivityPermissionRequestor(Activity activity, PermissionChecker permissionChecker) {
super(permissionChecker);
this.activity = activity;
}
protected void requestPermissions(String[] permissions, int rc) {
ActivityCompat.requestPermissions(activity, permissions, rc);
}
}

@ -0,0 +1,22 @@
package org.tasks.preferences;
import android.app.Fragment;
import android.support.v13.app.FragmentCompat;
import javax.inject.Inject;
public class FragmentPermissionRequestor extends PermissionRequestor {
private Fragment fragment;
@Inject
public FragmentPermissionRequestor(Fragment fragment, PermissionChecker permissionChecker) {
super(permissionChecker);
this.fragment = fragment;
}
@Override
protected void requestPermissions(String[] permissions, int rc) {
FragmentCompat.requestPermissions(fragment, permissions, rc);
}
}

@ -27,7 +27,7 @@ public class MiscellaneousPreferences extends InjectingPreferenceActivity {
@Inject Preferences preferences; @Inject Preferences preferences;
@Inject VoiceOutputAssistant voiceOutputAssistant; @Inject VoiceOutputAssistant voiceOutputAssistant;
@Inject PermissionRequestor permissionRequestor; @Inject ActivityPermissionRequestor permissionRequestor;
@Inject PermissionChecker permissionChecker; @Inject PermissionChecker permissionChecker;
@Inject BackgroundScheduler backgroundScheduler; @Inject BackgroundScheduler backgroundScheduler;

@ -1,13 +1,8 @@
package org.tasks.preferences; package org.tasks.preferences;
import android.Manifest; import android.Manifest;
import android.app.Activity;
import android.support.v4.app.ActivityCompat;
import javax.inject.Inject;
public class PermissionRequestor {
public abstract class PermissionRequestor {
public static final int REQUEST_FILE_WRITE = 50; public static final int REQUEST_FILE_WRITE = 50;
public static final int REQUEST_CALENDAR = 51; public static final int REQUEST_CALENDAR = 51;
public static final int REQUEST_MIC = 52; public static final int REQUEST_MIC = 52;
@ -15,12 +10,9 @@ public class PermissionRequestor {
public static final int REQUEST_LOCATION = 54; public static final int REQUEST_LOCATION = 54;
public static final int REQUEST_CONTACTS = 55; public static final int REQUEST_CONTACTS = 55;
private final Activity activity;
private final PermissionChecker permissionChecker; private final PermissionChecker permissionChecker;
@Inject public PermissionRequestor(PermissionChecker permissionChecker) {
public PermissionRequestor(Activity activity, PermissionChecker permissionChecker) {
this.activity = activity;
this.permissionChecker = permissionChecker; this.permissionChecker = permissionChecker;
} }
@ -78,7 +70,5 @@ public class PermissionRequestor {
requestPermissions(new String[] {permission}, rc); requestPermissions(new String[] {permission}, rc);
} }
private void requestPermissions(String[] permissions, int rc) { protected abstract void requestPermissions(String[] permissions, int requestCode);
ActivityCompat.requestPermissions(activity, permissions, rc);
}
} }

Loading…
Cancel
Save