List of usage examples for android.support.v4.os ResultReceiver ResultReceiver
ResultReceiver(Parcel in)
From source file:com.vonglasow.michael.satstat.utils.PermissionHelper.java
/** * Requests permissions to be granted to this application. * /*from w w w . j a v a2 s. co m*/ * 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) //.setCategory(Notification.CATEGORY_STATUS) .setAutoCancel(true).setWhen(0).setContentIntent(permPendingIntent).setStyle(null); NotificationManager notificationManager = (NotificationManager) context .getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(requestCode, builder.build()); }
From source file:net.sf.xfd.provider.PublicProvider.java
final boolean checkAccess(Uri uri, String grantMode, String necessaryMode) { try {/*from w ww. j a v a 2s .co m*/ verifyMac(uri, grantMode, necessaryMode); return true; } catch (FileNotFoundException fnfe) { final Context context = getContext(); assert context != null; ObjectIntMap<String> decisions = null; final String caller = getCallingPackage(); if (!TextUtils.isEmpty(caller)) { decisions = accessCache.get(uri.getPath()); if (decisions == null) { decisions = new ObjectIntHashMap<>(); } else { //noinspection SynchronizationOnLocalVariableOrMethodParameter synchronized (decisions) { final int decision = decisions.get(caller); switch (decision) { case RESPONSE_ALLOW: return true; } } } } final ArrayBlockingQueue<Bundle> queue = new ArrayBlockingQueue<>(1); //noinspection RestrictedApi final ResultReceiver receiver = new ResultReceiver(new Handler(Looper.getMainLooper())) { @Override protected void onReceiveResult(int resultCode, Bundle resultData) { try { queue.offer(resultData, 4, TimeUnit.SECONDS); } catch (InterruptedException ignored) { } } }; try { final Intent intent = authActivityIntent(context); if (intent == null) return false; final Bundle result; final CharSequence resolved = base.resolve(uri.getPath()); // try to ensure, that no more than one dialog can appear at once uxLock.lockInterruptibly(); try { context.startActivity(intent.putExtra(EXTRA_MODE, necessaryMode).putExtra(EXTRA_CALLER, caller) .putExtra(EXTRA_UID, Binder.getCallingUid()).putExtra(EXTRA_CALLBACK, receiver) .putExtra(EXTRA_PATH, resolved)); result = queue.poll(10, TimeUnit.SECONDS); } finally { uxLock.unlock(); } int decision = RESPONSE_DENY; if (result != null) { decision = result.getInt(EXTRA_RESPONSE, -1); } if (decision == RESPONSE_ALLOW) { if (decisions != null) { //noinspection SynchronizationOnLocalVariableOrMethodParameter synchronized (decisions) { decisions.put(caller, RESPONSE_ALLOW); accessCache.put(uri.getPath(), decisions); } } return true; } } catch (InterruptedException ignored) { } } return false; }