Search in sources :

Example 1 with OnRequestPermissionsResultCallback

use of android.support.v4.app.ActivityCompat.OnRequestPermissionsResultCallback in project satstat by mvglasow.

the class PermissionHelper method requestPermissions.

/**
 * Requests permissions to be granted to this application.
 *
 * This method is a wrapper around
 * {@link android.support.v4.app.ActivityCompat#requestPermissions(android.app.Activity, String[], int)}
 * which works in a similar way, except it can be called from non-activity contexts. When called, it
 * displays a notification with a customizable title and text. When the user taps the notification, an
 * activity is launched in which the user is prompted to allow or deny the request.
 *
 * After the user has made a choice,
 * {@link android.support.v4.app.ActivityCompat.OnRequestPermissionsResultCallback#onRequestPermissionsResult(int, String[], int[])}
 * is called, reporting whether the permissions were granted or not.
 *
 * @param context The context from which the request was made. The context supplied must implement
 * {@link android.support.v4.app.ActivityCompat.OnRequestPermissionsResultCallback} and will receive the
 * result of the operation.
 * @param permissions The requested permissions
 * @param requestCode Application specific request code to match with a result reported to
 * {@link android.support.v4.app.ActivityCompat.OnRequestPermissionsResultCallback#onRequestPermissionsResult(int, String[], int[])}
 * @param notificationTitle The title for the notification
 * @param notificationText The text for the notification
 * @param notificationIcon Resource identifier for the notification icon
 */
public static <T extends Context & OnRequestPermissionsResultCallback> void requestPermissions(final T context, String[] permissions, int requestCode, String notificationTitle, String notificationText, int notificationIcon) {
    ResultReceiver resultReceiver = new ResultReceiver(new Handler(Looper.getMainLooper())) {

        @Override
        protected void onReceiveResult(int resultCode, Bundle resultData) {
            String[] outPermissions = resultData.getStringArray(Const.KEY_PERMISSIONS);
            int[] grantResults = resultData.getIntArray(Const.KEY_GRANT_RESULTS);
            context.onRequestPermissionsResult(resultCode, outPermissions, grantResults);
        }
    };
    Intent permIntent = new Intent(context, PermissionRequestActivity.class);
    permIntent.putExtra(Const.KEY_RESULT_RECEIVER, resultReceiver);
    permIntent.putExtra(Const.KEY_PERMISSIONS, permissions);
    permIntent.putExtra(Const.KEY_REQUEST_CODE, requestCode);
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
    stackBuilder.addNextIntent(permIntent);
    PendingIntent permPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
    NotificationCompat.Builder builder = new NotificationCompat.Builder(context).setSmallIcon(notificationIcon).setContentTitle(notificationTitle).setContentText(notificationText).setOngoing(true).setAutoCancel(true).setWhen(0).setContentIntent(permPendingIntent).setStyle(null);
    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(requestCode, builder.build());
}
Also used : NotificationManager(android.app.NotificationManager) Bundle(android.os.Bundle) TaskStackBuilder(android.support.v4.app.TaskStackBuilder) Handler(android.os.Handler) Intent(android.content.Intent) PendingIntent(android.app.PendingIntent) NotificationCompat(android.support.v4.app.NotificationCompat) PendingIntent(android.app.PendingIntent) TaskStackBuilder(android.support.v4.app.TaskStackBuilder) ResultReceiver(android.support.v4.os.ResultReceiver)

Aggregations

NotificationManager (android.app.NotificationManager)1 PendingIntent (android.app.PendingIntent)1 Intent (android.content.Intent)1 Bundle (android.os.Bundle)1 Handler (android.os.Handler)1 NotificationCompat (android.support.v4.app.NotificationCompat)1 TaskStackBuilder (android.support.v4.app.TaskStackBuilder)1 ResultReceiver (android.support.v4.os.ResultReceiver)1