package com.google.android.stardroid.activities.util;
import android.Manifest;
import android.app.Activity;
import android.app.FragmentManager;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.util.Log;
import android.widget.Toast;
import com.google.android.stardroid.R;
import com.google.android.stardroid.activities.DynamicStarMapActivity;
import com.google.android.stardroid.activities.dialogs.LocationPermissionRationaleFragment;
import com.google.android.stardroid.control.LocationController;
import com.google.android.stardroid.util.MiscUtil;
/**
* Created by johntaylor on 4/2/16.
*/
public abstract class AbstractGooglePlayServicesChecker implements LocationPermissionRationaleFragment.Callback {
protected static final String TAG = MiscUtil.getTag(GooglePlayServicesChecker.class);
protected final Activity parent;
protected final SharedPreferences preferences;
private final LocationPermissionRationaleFragment rationaleDialog;
private final FragmentManager fragmentManager;
AbstractGooglePlayServicesChecker(Activity parent, SharedPreferences preferences,
LocationPermissionRationaleFragment rationaleDialog,
FragmentManager fragmentManager) {
this.parent = parent;
this.preferences = preferences;
this.rationaleDialog = rationaleDialog;
this.fragmentManager = fragmentManager;
rationaleDialog.setCallback(this);
}
/**
* Checks whether play services is available and up to date and prompts the user
* if necessary.
* <p/>
* Note that at present we only need it for location services so if the user is setting
* their location manually we don't do the check.
*/
public abstract void maybeCheckForGooglePlayServices();
protected void checkLocationServicesEnabled() {
if (ActivityCompat.checkSelfPermission(parent, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "Location permission not enabled - maybe prompting user");
// Check Permissions now
if (ActivityCompat.shouldShowRequestPermissionRationale(
parent, Manifest.permission.ACCESS_FINE_LOCATION)) {
rationaleDialog.show(fragmentManager, "Rationale Dialog");
} else {
requestLocationPermission();
}
} else {
Log.d(TAG, "Location permission is granted");
}
}
private void requestLocationPermission() {
ActivityCompat.requestPermissions(parent,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
DynamicStarMapActivity.GOOGLE_PLAY_SERVICES_REQUEST_LOCATION_PERMISSION_CODE);
}
/**
* Called after a request to check permissions.
*/
public void runAfterPermissionsCheck(int requestCode,
String[] permissions,
int[] grantResults) {
if (grantResults.length == 1
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.i(TAG, "User granted permission");
} else {
Log.i(TAG, "User denied permission");
// TODO(jontayler): Send them to the location dialog;
}
}
/**
* Called after the user is prompted to resolve any issues.
*/
public void runAfterDialog() {
// Just log for now.
Log.d(TAG, "Play Services Dialog has been shown");
}
public void done() {
Log.d(TAG, "Location rationale Dialog has been shown");
requestLocationPermission();
}
}