package com.architjn.acjmusicplayer.utils;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.util.Log;
import android.view.View;
import com.architjn.acjmusicplayer.R;
/**
* Created by architjn on 08/12/15.
*/
public class PermissionChecker {
public static final int REQUEST_CODE = 7;
private static final String TAG = "PermissionChecker";
private OnPermissionResponse response;
private Context context;
private Activity activity;
private View baseView;
public PermissionChecker(Context context, Activity activity, View baseView) {
this.context = context;
this.activity = activity;
this.baseView = baseView;
}
public void check(final String permission, final String customMsg,
final OnPermissionResponse response) {
check(permission, customMsg, response, false);
}
public void check(final String permission, final String customMsg,
final OnPermissionResponse response, final boolean checkDirectly) {
this.response = response;
new Thread(new Runnable() {
@Override
public void run() {
if (ContextCompat.checkSelfPermission(context, permission) ==
PackageManager.PERMISSION_GRANTED) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
response.onAccepted();
}
});
} else {
Log.v(TAG, "Waiting");
if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context,
permission) && !checkDirectly) {
Snackbar.make(baseView, customMsg,
Snackbar.LENGTH_INDEFINITE)
.setAction(R.string.ok, new View.OnClickListener() {
@Override
public void onClick(View view) {
ActivityCompat.requestPermissions((Activity) context,
new String[]{permission},
REQUEST_CODE);
}
})
.show();
} else {
ActivityCompat.requestPermissions(((Activity) context),
new String[]{permission},
REQUEST_CODE);
}
}
}
}).start();
}
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, final
@NonNull int[] grantResults) {
if (requestCode == PermissionChecker.REQUEST_CODE) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Storage permission has been granted
response.onAccepted();
} else {
//Storage permission has been denied
response.onDecline();
}
}
});
}
}
public interface OnPermissionResponse {
void onAccepted();
void onDecline();
}
}