package com.plusonelabs.calendar.util;
import android.Manifest;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.support.annotation.NonNull;
import android.support.v4.content.ContextCompat;
import com.plusonelabs.calendar.MainActivity;
import com.plusonelabs.calendar.prefs.InstanceSettings;
/**
* @author yvolk@yurivolkov.com
*/
public class PermissionsUtil {
public final static String PERMISSION = Manifest.permission.READ_CALENDAR;
private PermissionsUtil() {
// Empty
}
@NonNull
public static PendingIntent getPermittedPendingIntent(InstanceSettings settings, Intent intent) {
Intent intentPermitted = getPermittedIntent(settings.getContext(), intent);
return PendingIntent.getActivity(settings.getContext(), settings.getWidgetId(), intentPermitted, PendingIntent
.FLAG_UPDATE_CURRENT);
}
@NonNull
public static Intent getPermittedIntent(@NonNull Context context, @NonNull Intent intent) {
return arePermissionsGranted(context) ? intent : MainActivity.intentToStartMe(context);
}
public static boolean arePermissionsGranted(Context context) {
return isTestMode() || ContextCompat.checkSelfPermission(context, PERMISSION) == PackageManager.PERMISSION_GRANTED;
}
/**
* Based on
* http://stackoverflow.com/questions/21367646/how-to-determine-if-android-application-is-started-with-junit-testing-instrument
*/
private static boolean isTestMode() {
try {
Class.forName("com.plusonelabs.calendar.calendar.MockCalendarContentProvider");
return true;
} catch (ClassNotFoundException e) {
// Ignore
}
return false;
}
}