Search in sources :

Example 1 with ReadableMap

use of com.facebook.react.bridge.ReadableMap in project react-native-image-picker by marcshilling.

the class ImagePickerModule method parseOptions.

private void parseOptions(final ReadableMap options) {
    noData = false;
    if (options.hasKey("noData")) {
        noData = options.getBoolean("noData");
    }
    maxWidth = 0;
    if (options.hasKey("maxWidth")) {
        maxWidth = options.getInt("maxWidth");
    }
    maxHeight = 0;
    if (options.hasKey("maxHeight")) {
        maxHeight = options.getInt("maxHeight");
    }
    quality = 100;
    if (options.hasKey("quality")) {
        quality = (int) (options.getDouble("quality") * 100);
    }
    rotation = 0;
    if (options.hasKey("rotation")) {
        rotation = options.getInt("rotation");
    }
    pickVideo = false;
    if (options.hasKey("mediaType") && options.getString("mediaType").equals("video")) {
        pickVideo = true;
    }
    videoQuality = 1;
    if (options.hasKey("videoQuality") && options.getString("videoQuality").equals("low")) {
        videoQuality = 0;
    }
    videoDurationLimit = 0;
    if (options.hasKey("durationLimit")) {
        videoDurationLimit = options.getInt("durationLimit");
    }
    saveToCameraRoll = false;
    if (options.hasKey("storageOptions")) {
        final ReadableMap storageOptions = options.getMap("storageOptions");
        if (storageOptions.hasKey("cameraRoll")) {
            saveToCameraRoll = storageOptions.getBoolean("cameraRoll");
        }
    }
}
Also used : ReadableMap(com.facebook.react.bridge.ReadableMap)

Example 2 with ReadableMap

use of com.facebook.react.bridge.ReadableMap in project react-native-image-picker by marcshilling.

the class ButtonsHelper method getCustomButtons.

@NonNull
private static LinkedList<Item> getCustomButtons(@NonNull final ReadableMap options) {
    LinkedList<Item> result = new LinkedList<>();
    if (!options.hasKey("customButtons")) {
        return result;
    }
    final ReadableArray customButtons = options.getArray("customButtons");
    for (int i = 0; i < customButtons.size(); i++) {
        final ReadableMap button = customButtons.getMap(i);
        final String title = button.getString("title");
        final String action = button.getString("name");
        result.add(new Item(title, action));
    }
    return result;
}
Also used : ReadableArray(com.facebook.react.bridge.ReadableArray) ReadableMap(com.facebook.react.bridge.ReadableMap) LinkedList(java.util.LinkedList) NonNull(android.support.annotation.NonNull)

Example 3 with ReadableMap

use of com.facebook.react.bridge.ReadableMap in project react-native-fcm by evollu.

the class SendNotificationTask method doInBackground.

protected Void doInBackground(Void... params) {
    try {
        String intentClassName = getMainActivityClassName();
        if (intentClassName == null) {
            return null;
        }
        String body = bundle.getString("body");
        if (body == null) {
            return null;
        }
        body = URLDecoder.decode(body, "UTF-8");
        Resources res = mContext.getResources();
        String packageName = mContext.getPackageName();
        String title = bundle.getString("title");
        if (title == null) {
            ApplicationInfo appInfo = mContext.getApplicationInfo();
            title = mContext.getPackageManager().getApplicationLabel(appInfo).toString();
        }
        title = URLDecoder.decode(title, "UTF-8");
        String ticker = bundle.getString("ticker");
        if (ticker != null)
            ticker = URLDecoder.decode(ticker, "UTF-8");
        String subText = bundle.getString("sub_text");
        if (subText != null)
            subText = URLDecoder.decode(subText, "UTF-8");
        NotificationCompat.Builder notification = new NotificationCompat.Builder(mContext).setContentTitle(title).setContentText(body).setTicker(ticker).setVisibility(NotificationCompat.VISIBILITY_PRIVATE).setAutoCancel(bundle.getBoolean("auto_cancel", true)).setNumber((int) bundle.getDouble("number")).setSubText(subText).setVibrate(new long[] { 0, DEFAULT_VIBRATION }).setExtras(bundle.getBundle("data"));
        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            String group = bundle.getString("group");
            if (group != null)
                group = URLDecoder.decode(group, "UTF-8");
            notification.setGroup(group);
        }
        if (bundle.containsKey("ongoing") && bundle.getBoolean("ongoing")) {
            notification.setOngoing(bundle.getBoolean("ongoing"));
        }
        // priority
        String priority = bundle.getString("priority", "");
        switch(priority) {
            case "min":
                notification.setPriority(NotificationCompat.PRIORITY_MIN);
                break;
            case "high":
                notification.setPriority(NotificationCompat.PRIORITY_HIGH);
                break;
            case "max":
                notification.setPriority(NotificationCompat.PRIORITY_MAX);
                break;
            default:
                notification.setPriority(NotificationCompat.PRIORITY_DEFAULT);
        }
        // icon
        String smallIcon = bundle.getString("icon", "ic_launcher");
        int smallIconResId = res.getIdentifier(smallIcon, "mipmap", packageName);
        if (smallIconResId == 0) {
            smallIconResId = res.getIdentifier(smallIcon, "drawable", packageName);
        }
        if (smallIconResId != 0) {
            notification.setSmallIcon(smallIconResId);
        }
        // large icon
        String largeIcon = bundle.getString("large_icon");
        if (largeIcon != null && android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            largeIcon = URLDecoder.decode(largeIcon, "UTF-8");
            if (largeIcon.startsWith("http://") || largeIcon.startsWith("https://")) {
                Bitmap bitmap = getBitmapFromURL(largeIcon);
                notification.setLargeIcon(bitmap);
            } else {
                int largeIconResId = res.getIdentifier(largeIcon, "mipmap", packageName);
                Bitmap largeIconBitmap = BitmapFactory.decodeResource(res, largeIconResId);
                if (largeIconResId != 0) {
                    notification.setLargeIcon(largeIconBitmap);
                }
            }
        }
        // big text
        String bigText = bundle.getString("big_text");
        if (bigText != null) {
            bigText = URLDecoder.decode(bigText, "UTF-8");
            notification.setStyle(new NotificationCompat.BigTextStyle().bigText(bigText));
        }
        // picture
        String picture = bundle.getString("picture");
        if (picture != null) {
            picture = URLDecoder.decode(picture, "UTF-8");
            NotificationCompat.BigPictureStyle bigPicture = new NotificationCompat.BigPictureStyle();
            if (picture.startsWith("http://") || picture.startsWith("https://")) {
                Bitmap bitmap = getBitmapFromURL(picture);
                bigPicture.bigPicture(bitmap);
            } else {
                int pictureResId = res.getIdentifier(picture, "mipmap", packageName);
                Bitmap pictureResIdBitmap = BitmapFactory.decodeResource(res, pictureResId);
                if (pictureResId != 0) {
                    bigPicture.bigPicture(pictureResIdBitmap);
                }
            }
            bigPicture.setBigContentTitle(title);
            bigPicture.setSummaryText(body);
            notification.setStyle(bigPicture);
        }
        // sound
        String soundName = bundle.getString("sound");
        if (soundName != null) {
            soundName = URLDecoder.decode(soundName, "UTF-8");
            if (soundName.equalsIgnoreCase("default")) {
                notification.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
            } else {
                int soundResourceId = res.getIdentifier(soundName, "raw", packageName);
                if (soundResourceId == 0) {
                    soundName = soundName.substring(0, soundName.lastIndexOf('.'));
                    soundResourceId = res.getIdentifier(soundName, "raw", packageName);
                }
                notification.setSound(Uri.parse("android.resource://" + packageName + "/" + soundResourceId));
            }
        }
        // color
        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            notification.setCategory(NotificationCompat.CATEGORY_CALL);
            String color = bundle.getString("color");
            if (color != null) {
                color = URLDecoder.decode(color, "UTF-8");
                notification.setColor(Color.parseColor(color));
            }
        }
        // vibrate
        if (bundle.containsKey("vibrate")) {
            long vibrate = Math.round(bundle.getDouble("vibrate", DEFAULT_VIBRATION));
            if (vibrate > 0) {
                notification.setVibrate(new long[] { 0, vibrate });
            } else {
                notification.setVibrate(null);
            }
        }
        // lights
        if (bundle.getBoolean("lights")) {
            notification.setDefaults(NotificationCompat.DEFAULT_LIGHTS);
        }
        if (bundle.containsKey("fire_date")) {
            Log.d(TAG, "broadcast intent if it is a scheduled notification");
            Intent i = new Intent("com.evollu.react.fcm.ReceiveLocalNotification");
            i.putExtras(bundle);
            LocalBroadcastManager.getInstance(mContext).sendBroadcast(i);
        }
        if (!mIsForeground || bundle.getBoolean("show_in_foreground")) {
            Intent intent = new Intent();
            intent.setClassName(mContext, intentClassName);
            intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
            intent.putExtras(bundle);
            String clickAction = bundle.getString("click_action");
            if (clickAction != null)
                clickAction = URLDecoder.decode(clickAction, "UTF-8");
            intent.setAction(clickAction);
            int notificationID = bundle.containsKey("id") ? bundle.getString("id", "").hashCode() : (int) System.currentTimeMillis();
            PendingIntent pendingIntent = PendingIntent.getActivity(mContext, notificationID, intent, PendingIntent.FLAG_UPDATE_CURRENT);
            notification.setContentIntent(pendingIntent);
            if (bundle.containsKey("android_actions")) {
                String androidActions = bundle.getString("android_actions");
                androidActions = URLDecoder.decode(androidActions, "UTF-8");
                WritableArray actions = ReactNativeJson.convertJsonToArray(new JSONArray(androidActions));
                for (int a = 0; a < actions.size(); a++) {
                    ReadableMap action = actions.getMap(a);
                    String actionTitle = action.getString("title");
                    String actionId = action.getString("id");
                    Intent actionIntent = new Intent();
                    actionIntent.setClassName(mContext, intentClassName);
                    actionIntent.setAction("com.evollu.react.fcm." + actionId + "_ACTION");
                    actionIntent.putExtras(bundle);
                    actionIntent.putExtra("_actionIdentifier", actionId);
                    actionIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
                    PendingIntent pendingActionIntent = PendingIntent.getActivity(mContext, notificationID, actionIntent, PendingIntent.FLAG_UPDATE_CURRENT);
                    notification.addAction(0, actionTitle, pendingActionIntent);
                }
            }
            Notification info = notification.build();
            NotificationManagerCompat.from(mContext).notify(notificationID, info);
        }
        if (bundle.getBoolean("wake_screen", false)) {
            PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
            if (pm != null && !pm.isScreenOn()) {
                PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, "FCMLock");
                wl.acquire(5000);
            }
        }
        // clear out one time scheduled notification once fired
        if (!bundle.containsKey("repeat_interval") && bundle.containsKey("fire_date")) {
            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.remove(bundle.getString("id"));
            editor.apply();
        }
    } catch (Exception e) {
        Log.e(TAG, "failed to send local notification", e);
    }
    return null;
}
Also used : WritableArray(com.facebook.react.bridge.WritableArray) SharedPreferences(android.content.SharedPreferences) ApplicationInfo(android.content.pm.ApplicationInfo) JSONArray(org.json.JSONArray) Intent(android.content.Intent) PendingIntent(android.app.PendingIntent) Notification(android.app.Notification) IOException(java.io.IOException) PowerManager(android.os.PowerManager) Bitmap(android.graphics.Bitmap) NotificationCompat(android.support.v4.app.NotificationCompat) ReadableMap(com.facebook.react.bridge.ReadableMap) Resources(android.content.res.Resources) PendingIntent(android.app.PendingIntent)

Example 4 with ReadableMap

use of com.facebook.react.bridge.ReadableMap in project react-native-gesture-handler by kmagiera.

the class RNGestureHandlerModule method handleHitSlopProperty.

private static void handleHitSlopProperty(GestureHandler handler, ReadableMap config) {
    if (config.getType(KEY_HIT_SLOP) == ReadableType.Number) {
        float hitSlop = PixelUtil.toPixelFromDIP(config.getDouble(KEY_HIT_SLOP));
        handler.setHitSlop(hitSlop, hitSlop, hitSlop, hitSlop, HIT_SLOP_NONE, HIT_SLOP_NONE);
    } else {
        ReadableMap hitSlop = config.getMap(KEY_HIT_SLOP);
        float left = HIT_SLOP_NONE, top = HIT_SLOP_NONE, right = HIT_SLOP_NONE, bottom = HIT_SLOP_NONE;
        float width = HIT_SLOP_NONE, height = HIT_SLOP_NONE;
        if (hitSlop.hasKey(KEY_HIT_SLOP_HORIZONTAL)) {
            float horizontalPad = PixelUtil.toPixelFromDIP(hitSlop.getDouble(KEY_HIT_SLOP_HORIZONTAL));
            left = right = horizontalPad;
        }
        if (hitSlop.hasKey(KEY_HIT_SLOP_VERTICAL)) {
            float verticalPad = PixelUtil.toPixelFromDIP(hitSlop.getDouble(KEY_HIT_SLOP_VERTICAL));
            top = bottom = verticalPad;
        }
        if (hitSlop.hasKey(KEY_HIT_SLOP_LEFT)) {
            left = PixelUtil.toPixelFromDIP(hitSlop.getDouble(KEY_HIT_SLOP_LEFT));
        }
        if (hitSlop.hasKey(KEY_HIT_SLOP_TOP)) {
            top = PixelUtil.toPixelFromDIP(hitSlop.getDouble(KEY_HIT_SLOP_TOP));
        }
        if (hitSlop.hasKey(KEY_HIT_SLOP_RIGHT)) {
            right = PixelUtil.toPixelFromDIP(hitSlop.getDouble(KEY_HIT_SLOP_RIGHT));
        }
        if (hitSlop.hasKey(KEY_HIT_SLOP_BOTTOM)) {
            bottom = PixelUtil.toPixelFromDIP(hitSlop.getDouble(KEY_HIT_SLOP_BOTTOM));
        }
        if (hitSlop.hasKey(KEY_HIT_SLOP_WIDTH)) {
            width = PixelUtil.toPixelFromDIP(hitSlop.getDouble(KEY_HIT_SLOP_WIDTH));
        }
        if (hitSlop.hasKey(KEY_HIT_SLOP_HEIGHT)) {
            height = PixelUtil.toPixelFromDIP(hitSlop.getDouble(KEY_HIT_SLOP_HEIGHT));
        }
        handler.setHitSlop(left, top, right, bottom, width, height);
    }
}
Also used : ReadableMap(com.facebook.react.bridge.ReadableMap)

Example 5 with ReadableMap

use of com.facebook.react.bridge.ReadableMap in project react-native-fbsdk by facebook.

the class Utility method reactArrayToPhotoList.

public static List<SharePhoto> reactArrayToPhotoList(ReadableArray photos) {
    List<SharePhoto> list = new ArrayList<>(photos.size());
    for (int i = 0; i < photos.size(); i++) {
        ReadableMap photoDetail = photos.getMap(i);
        list.add(buildSharePhoto(photoDetail));
    }
    return list;
}
Also used : SharePhoto(com.facebook.share.model.SharePhoto) ArrayList(java.util.ArrayList) ReadableMap(com.facebook.react.bridge.ReadableMap)

Aggregations

ReadableMap (com.facebook.react.bridge.ReadableMap)23 WritableMap (com.facebook.react.bridge.WritableMap)6 ReadableArray (com.facebook.react.bridge.ReadableArray)4 ReadableMapKeySetIterator (com.facebook.react.bridge.ReadableMapKeySetIterator)4 IOException (java.io.IOException)4 WritableArray (com.facebook.react.bridge.WritableArray)3 Resources (android.content.res.Resources)2 NonNull (android.support.annotation.NonNull)2 Nullable (android.support.annotation.Nullable)2 Promise (com.facebook.react.bridge.Promise)2 ArrayList (java.util.ArrayList)2 HashMap (java.util.HashMap)2 Activity (android.app.Activity)1 Notification (android.app.Notification)1 PendingIntent (android.app.PendingIntent)1 DialogInterface (android.content.DialogInterface)1 Intent (android.content.Intent)1 SharedPreferences (android.content.SharedPreferences)1 ApplicationInfo (android.content.pm.ApplicationInfo)1 Bitmap (android.graphics.Bitmap)1