You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
172 lines
6.2 KiB
Java
172 lines
6.2 KiB
Java
package com.waveshare.epaperesp32loader.communication;
|
|
|
|
import android.Manifest;
|
|
import android.app.Activity;
|
|
import android.app.AlertDialog;
|
|
import android.content.DialogInterface;
|
|
import android.content.pm.PackageManager;
|
|
import android.content.res.Resources;
|
|
import android.support.annotation.NonNull;
|
|
import android.support.v4.app.ActivityCompat;
|
|
|
|
import com.waveshare.epaperesp32loader.R;
|
|
|
|
/**
|
|
* <h1>Permission helper</h1>
|
|
* The class provides functions for delayed operations,
|
|
* which require permissions and interaction with user.
|
|
*
|
|
* @author Waveshare team
|
|
* @version 1.0
|
|
* @since 8/16/2018
|
|
*/
|
|
|
|
public class PermissionHelper implements DialogInterface.OnDismissListener
|
|
{
|
|
// Permissions used in the application
|
|
//---------------------------------------------------------
|
|
public static final int REQ_BLUE = 0; // For bluetooth devices scanning
|
|
public static final int REQ_READ = 1; // For reading from external storage
|
|
|
|
// Permissions related messages
|
|
//---------------------------------------------------------
|
|
private static final String[] messages = new String[]
|
|
{
|
|
"Please accept the GPS Location permission",
|
|
"Please accept the Storage reading permission",
|
|
"The GPS Location permission is denied",
|
|
"The Storage Reading permission is denied",
|
|
};
|
|
|
|
// Full names of permissions
|
|
//---------------------------------------------------------
|
|
private static final String[] permissions = new String[]
|
|
{
|
|
Manifest.permission.ACCESS_COARSE_LOCATION,
|
|
Manifest.permission.READ_EXTERNAL_STORAGE,
|
|
};
|
|
|
|
// Wrapped names of permissions wrapped (used in requests)
|
|
//---------------------------------------------------------
|
|
private static final String[][] permissionArrays = new String[][]
|
|
{
|
|
new String[] { Manifest.permission.ACCESS_COARSE_LOCATION },
|
|
new String[] { Manifest.permission.READ_EXTERNAL_STORAGE },
|
|
};
|
|
|
|
// Granted permission event handler interface
|
|
//---------------------------------------------------------
|
|
public interface PermissionResponse
|
|
{
|
|
void invoke();
|
|
}
|
|
|
|
// Array of granted permission event handlers
|
|
//---------------------------------------------------------
|
|
private static PermissionResponse[] responses = new PermissionResponse[]
|
|
{
|
|
null,
|
|
null,
|
|
};
|
|
|
|
private Activity context; // Activity which needs a permission
|
|
private int reqCode; //
|
|
|
|
public PermissionHelper(Activity activity)
|
|
{
|
|
context = activity;
|
|
}
|
|
|
|
public AlertDialog show(int requestCode)
|
|
{
|
|
reqCode = requestCode;
|
|
AlertDialog.Builder dialog = new AlertDialog.Builder(context);
|
|
|
|
dialog.setTitle(R.string.dlg_note);
|
|
dialog.setOnDismissListener(this);
|
|
dialog.setPositiveButton(R.string.btn_okey, null);
|
|
dialog.setMessage(messages[reqCode]);
|
|
|
|
return dialog.show();
|
|
}
|
|
|
|
public void onDismiss(DialogInterface dialog)
|
|
{
|
|
if (reqCode >= permissions.length) return;
|
|
ActivityCompat.requestPermissions(context, permissionArrays[reqCode], reqCode);
|
|
}
|
|
|
|
// Interaction with user and sending the request permission
|
|
//---------------------------------------------------------
|
|
public boolean sendRequestPermission(int requestCode)
|
|
{
|
|
// Get permission if possible
|
|
//-----------------------------------------------------
|
|
if (requestCode >= permissions.length) return false;
|
|
String permission = permissions[requestCode];
|
|
|
|
// Return true if it is already granted
|
|
//-----------------------------------------------------
|
|
if (context.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED)
|
|
return true;
|
|
|
|
// Interact with user if it's needed
|
|
//-----------------------------------------------------
|
|
if (context.shouldShowRequestPermissionRationale(permission))
|
|
show(requestCode);
|
|
|
|
// Request the permission
|
|
//-----------------------------------------------------
|
|
else context.requestPermissions(permissionArrays[requestCode], requestCode);
|
|
|
|
return false;
|
|
}
|
|
|
|
// Getting and handling the request permission result
|
|
//---------------------------------------------------------
|
|
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
|
|
{
|
|
// Unknown result
|
|
//-----------------------------------------------------
|
|
if ((requestCode < 0) || (requestCode >= permissions.length))
|
|
return;
|
|
|
|
// Notify that permission is not granted yet
|
|
//-----------------------------------------------------
|
|
if (context.checkSelfPermission(permissions[requestCode]) != PackageManager.PERMISSION_GRANTED)
|
|
{
|
|
if (responses[requestCode] != null)
|
|
show(requestCode + permissions.length);
|
|
}
|
|
|
|
// Perform granted permission's response function
|
|
//-----------------------------------------------------
|
|
else if (responses[requestCode] != null)
|
|
responses[requestCode].invoke();
|
|
|
|
// Clear corresponded cell in responses array
|
|
//-----------------------------------------------------
|
|
responses[requestCode] = null;
|
|
}
|
|
|
|
// Set response on
|
|
//---------------------------------------------------------
|
|
public void setResponse(int requestCode, PermissionResponse response)
|
|
{
|
|
if ((requestCode < 0) || (requestCode >= responses.length)) return;
|
|
responses[requestCode] = response;
|
|
}
|
|
|
|
// Notification dialog
|
|
//---------------------------------------------------------
|
|
public static void note(Activity activity, int msg)
|
|
{
|
|
Resources resources = activity.getResources();
|
|
AlertDialog.Builder dialog = new AlertDialog.Builder(activity);
|
|
|
|
dialog.setTitle(resources.getString(R.string.dlg_note));
|
|
dialog.setPositiveButton(resources.getString(R.string.btn_okey), null);
|
|
dialog.setMessage(resources.getString(msg));
|
|
dialog.show();
|
|
}
|
|
} |