Example usage for android.content Intent FLAG_GRANT_PERSISTABLE_URI_PERMISSION

List of usage examples for android.content Intent FLAG_GRANT_PERSISTABLE_URI_PERMISSION

Introduction

In this page you can find the example usage for android.content Intent FLAG_GRANT_PERSISTABLE_URI_PERMISSION.

Prototype

int FLAG_GRANT_PERSISTABLE_URI_PERMISSION

To view the source code for android.content Intent FLAG_GRANT_PERSISTABLE_URI_PERMISSION.

Click Source Link

Document

When combined with #FLAG_GRANT_READ_URI_PERMISSION and/or #FLAG_GRANT_WRITE_URI_PERMISSION , the URI permission grant can be persisted across device reboots until explicitly revoked with Context#revokeUriPermission(Uri,int) .

Usage

From source file:com.mb.android.MainActivity.java

@android.webkit.JavascriptInterface
@org.xwalk.core.JavascriptInterface//from  w  w w.j  ava 2 s .co m
public void chooseDirectory() {

    getLogger().Info("begin chooseDirectory");

    if (!authorizeStorage(ExternalStoragePermissionRequestCode)) {
        return;
    }

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

        Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
        intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        startActivityForResult(intent, REQUEST_DIRECTORY_SAF);
    } else {

        getLogger().Info("creating intent for FilePickerActivity");
        Intent intent = new Intent(this, FilePickerActivity.class);
        // This works if you defined the intent filter
        // Intent i = new Intent(Intent.ACTION_GET_CONTENT);

        // Set these depending on your use case. These are the defaults.
        intent.putExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE, false);
        intent.putExtra(FilePickerActivity.EXTRA_ALLOW_CREATE_DIR, true);
        intent.putExtra(FilePickerActivity.EXTRA_MODE, FilePickerActivity.MODE_DIR);

        // Configure initial directory by specifying a String.
        // You could specify a String like "/storage/emulated/0/", but that can
        // dangerous. Always use Android's API calls to get paths to the SD-card or
        // internal memory.
        intent.putExtra(FilePickerActivity.EXTRA_START_PATH,
                Environment.getExternalStorageDirectory().getPath());

        getLogger().Info("startActivityForResult for FilePickerActivity");
        startActivityForResult(intent, REQUEST_DIRECTORY);
    }
}

From source file:org.kontalk.ui.AbstractComposeFragment.java

@TargetApi(Build.VERSION_CODES.KITKAT)
private Intent createGalleryIntent(boolean useSAF) {
    Intent intent;/*  w w w.  ja  va  2  s .com*/
    if (!useSAF) {
        intent = SystemUtils.externalIntent(Intent.ACTION_GET_CONTENT)
                .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    } else {
        intent = SystemUtils.externalIntent(Intent.ACTION_OPEN_DOCUMENT);
    }

    return intent.addCategory(Intent.CATEGORY_OPENABLE).setType("image/*")
            .addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION).putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
}

From source file:cn.edu.wyu.documentviewer.DocumentsActivity.java

private void onFinished(Uri... uris) {
    Log.d(TAG, "onFinished() " + Arrays.toString(uris));

    final Intent intent = new Intent();
    if (uris.length == 1) {
        intent.setData(uris[0]);//from  w  w  w. j a v  a 2  s .co m
    } else if (uris.length > 1) {
        final ClipData clipData = new ClipData(null, mState.acceptMimes, new ClipData.Item(uris[0]));
        for (int i = 1; i < uris.length; i++) {
            clipData.addItem(new ClipData.Item(uris[i]));
        }
        intent.setClipData(clipData);
    }

    if (mState.action == ACTION_GET_CONTENT) {
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    } else {
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION
                | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
    }

    setResult(Activity.RESULT_OK, intent);
    finish();
}

From source file:org.kontalk.ui.ComposeMessageFragment.java

/** Starts an activity for picture attachment selection. */
@TargetApi(Build.VERSION_CODES.KITKAT)//from w w  w.j av a 2s .  c o  m
private void selectGalleryAttachment() {
    Intent pictureIntent;

    if (!MediaStorage.isStorageAccessFrameworkAvailable()) {
        pictureIntent = new Intent(Intent.ACTION_GET_CONTENT).putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
                .addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
    } else {
        pictureIntent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    }

    pictureIntent.addCategory(Intent.CATEGORY_OPENABLE).setType("image/*")
            .addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION).putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);

    startActivityForResult(pictureIntent, SELECT_ATTACHMENT_OPENABLE);
}

From source file:org.appspot.apprtc.CallActivity.java

void handleIntent(Intent intent) {
    if (intent == null || intent.getAction() == null) {
        return;/*from ww w  .j av a 2s .co m*/
    }

    if (intent.hasExtra(WebsocketService.EXTRA_ADDRESS)) {
        mServer = intent.getStringExtra(WebsocketService.EXTRA_ADDRESS);
    }

    if (intent.getAction().equals(ACTION_SHARE_FILE)) {
        User user = (User) intent.getSerializableExtra(WebsocketService.EXTRA_USER);
        mFileRecipient = user.Id;
        Intent i;
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
            i = new Intent();
            i.setAction(Intent.ACTION_GET_CONTENT);
            i.setType("*/*");
        } else {
            i = new Intent(Intent.ACTION_OPEN_DOCUMENT);
            i.addCategory(Intent.CATEGORY_OPENABLE);
            i.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
            i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            i.setType("*/*");
        }
        startActivityForResult(i, FILE_CODE);
    } else if (intent.getAction().equals(ACTION_HANG_UP)) {
        User user = (User) intent.getSerializableExtra(WebsocketService.EXTRA_USER);
        if (mAdditionalPeers.containsKey(user.Id)) {
            mAdditionalPeers.get(user.Id).getRemoteViews().setId("");
            updateRemoteViewList(mAdditionalPeers.get(user.Id).getRemoteViews());
            mAdditionalPeers.get(user.Id).close();
            mAdditionalPeers.remove(user.Id);
        } else if (mPeerId.equals(user.Id)) {
            onCallHangUp();
        }
    } else if (intent.getAction().equals(ACTION_TOGGLE_VIDEO)) {
        User user = (User) intent.getSerializableExtra(WebsocketService.EXTRA_USER);
        boolean enabled = intent.getBooleanExtra(CallActivity.EXTRA_VIDEO_CALL, true);

        if (mAdditionalPeers.containsKey(user.Id)) {
            mAdditionalPeers.get(user.Id).setVideoEnabled(enabled);
        } else if (mPeerId.equals(user.Id)) {
            onToggleVideo();
        }
    } else if (intent.getAction().equals(ACTION_TOGGLE_MIC)) {
        User user = (User) intent.getSerializableExtra(WebsocketService.EXTRA_USER);
        boolean enabled = intent.getBooleanExtra(CallActivity.EXTRA_MIC_ENABLED, true);

        if (mAdditionalPeers.containsKey(user.Id)) {
            mAdditionalPeers.get(user.Id).setAudioEnabled(enabled);
        } else if (mPeerId.equals(user.Id)) {
            onToggleMic();
        }
    } else if (intent.getAction().equals(ACTION_SEND_MESSAGE)) {
        User user = (User) intent.getSerializableExtra(WebsocketService.EXTRA_USER);
        String messageText = intent.getStringExtra(CallActivity.EXTRA_MESSAGE);

        if (mService != null) {

            SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
            fmt.setTimeZone(TimeZone.getTimeZone("GMT"));
            String time = fmt.format(new Date());
            mService.sendChatMessage(time, mService.getAccountName(), "Self", messageText, user.Id,
                    mService.getCurrentRoomName());
        }
    } else if (intent.getAction().equals(ACTION_NEW_CALL)) {

        String signaling = intent.getStringExtra(EXTRA_SIGNALING);
        if (signaling != null) {
            mSignaling = signaling;
        }

        if (mSignaling.equals("xmpp")) {
            mOwnJid = intent.getStringExtra(BroadcastTypes.EXTRA_ACCOUNT_JID);
            mPeerId = intent.getStringExtra(BroadcastTypes.EXTRA_JID);
            mPeerName = mPeerId;

            initiator = true;
            signalingParameters = new SignalingParameters(WebsocketService.getIceServers(), initiator, "", "",
                    "", null, null);
        } else {
            User user = (User) intent.getSerializableExtra(WebsocketService.EXTRA_USER);
            if (intent.hasExtra(WebsocketService.EXTRA_USERACTION)) {
                if (mConferenceId == null) {
                    SessionIdentifierGenerator gen = new SessionIdentifierGenerator();
                    mConferenceId = mOwnId + "_" + gen.nextSessionId();
                }
            }

            if (mPeerId.length() == 0) {
                callUser(user);
            } else if (!mPeerId.equals(user.Id)) { // don't call if already in call
                AdditionalPeerConnection additionalPeerConnection = new AdditionalPeerConnection(this, this,
                        this, true, user.Id, WebsocketService.getIceServers(), peerConnectionParameters,
                        rootEglBase, localRender,
                        getRemoteRenderScreen(user.Id, user.displayName, getUrl(user.buddyPicture)),
                        peerConnectionClient.getMediaStream(), "",
                        peerConnectionClient.getPeerConnectionFactory());

                mAdditionalPeers.put(user.Id, additionalPeerConnection);
                updateVideoView();
            }
        }
    } else if (intent.getAction().equals(WebsocketService.ACTION_ADD_ALL_CONFERENCE)) {
        ArrayList<User> users = getUsers();

        for (User user : users) {
            boolean added = false;
            if (!mPeerId.equals(user.Id) && !mAdditionalPeers.containsKey(user.Id)
                    && (mOwnId.compareTo(user.Id) < 0)) {
                AdditionalPeerConnection additionalPeerConnection = new AdditionalPeerConnection(this, this,
                        this, true, user.Id, WebsocketService.getIceServers(), peerConnectionParameters,
                        rootEglBase, localRender,
                        getRemoteRenderScreen(user.Id, user.displayName, getUrl(user.buddyPicture)),
                        peerConnectionClient.getMediaStream(), mConferenceId,
                        peerConnectionClient.getPeerConnectionFactory());

                mAdditionalPeers.put(user.Id, additionalPeerConnection);
                updateVideoView();
                added = true;
            }

        }

        if (mConferenceId == null) {
            SessionIdentifierGenerator gen = new SessionIdentifierGenerator();
            mConferenceId = mOwnId + "_" + gen.nextSessionId();
        }
    } else if (intent.getAction().equals(WebsocketService.ACTION_ADD_CONFERENCE_USER)) {
        User user = (User) intent.getSerializableExtra(WebsocketService.EXTRA_USER);
        String conferenceId = intent.getStringExtra(WebsocketService.EXTRA_CONFERENCE_ID);
        mOwnId = intent.getStringExtra(WebsocketService.EXTRA_OWN_ID);
        String userId = intent.getStringExtra(WebsocketService.EXTRA_ID);

        if (mConferenceId == null) {
            mConferenceId = conferenceId;
        }
        boolean added = false;
        if ((!mPeerId.equals(userId) && !mAdditionalPeers.containsKey(userId)
                && (mOwnId.compareTo(userId) < 0))) {
            if (user != null) {
                Log.d(TAG, "Calling conference: " + user.displayName);
            }

            if (peerConnectionClient.getMediaStream() != null) {
                String displayName = getString(R.string.unknown);
                String imgUrl = "";

                if (user != null) {
                    displayName = user.displayName;
                    imgUrl = getUrl(user.buddyPicture);
                }

                AdditionalPeerConnection additionalPeerConnection = new AdditionalPeerConnection(this, this,
                        this, true, userId, WebsocketService.getIceServers(), peerConnectionParameters,
                        rootEglBase, localRender, getRemoteRenderScreen(userId, displayName, imgUrl),
                        peerConnectionClient.getMediaStream(), mConferenceId,
                        peerConnectionClient.getPeerConnectionFactory());
                mAdditionalPeers.put(userId, additionalPeerConnection);
                updateVideoView();
                added = true;
            } else if (mPeerId.length() == 0) {
                // show the call as incoming
                String displayName = getString(R.string.unknown);
                String imgUrl = "";

                if (user != null) {
                    displayName = user.displayName;
                    imgUrl = getUrl(user.buddyPicture);
                }

                mPeerId = userId;
                mPeerName = displayName;

                ThumbnailsCacheManager.LoadImage(imgUrl, remoteUserImage, displayName, true, true);
                initiator = true;
                signalingParameters = new SignalingParameters(WebsocketService.getIceServers(), initiator, "",
                        "", "", null, null);
            } else {
                mQueuedPeers.add(user);
            }
        }

    } else if (intent.getAction().equals(WebsocketService.ACTION_REMOTE_ICE_CANDIDATE)) {
        SerializableIceCandidate candidate = (SerializableIceCandidate) intent
                .getParcelableExtra(WebsocketService.EXTRA_CANDIDATE);
        String id = intent.getStringExtra(WebsocketService.EXTRA_ID);
        String token = intent.getStringExtra(WebsocketService.EXTRA_TOKEN);

        if (token != null && token.length() != 0) {
            if (mTokenPeers.containsKey(candidate.from)) {
                IceCandidate ic = new IceCandidate(candidate.sdpMid, candidate.sdpMLineIndex, candidate.sdp);
                mTokenPeers.get(candidate.from).addRemoteIceCandidate(ic);
            }
        } else if (mAdditionalPeers.containsKey(candidate.from)) {
            IceCandidate ic = new IceCandidate(candidate.sdpMid, candidate.sdpMLineIndex, candidate.sdp);
            mAdditionalPeers.get(candidate.from).addRemoteIceCandidate(ic);
        } else if (id.equals(mSdpId)) {
            onRemoteIceCandidate(candidate, id, candidate.from);
        }

    } else if (intent.getAction().equals(WebsocketService.ACTION_REMOTE_DESCRIPTION)) {
        SerializableSessionDescription sdp = (SerializableSessionDescription) intent
                .getSerializableExtra(WebsocketService.EXTRA_REMOTE_DESCRIPTION);
        String token = intent.getStringExtra(WebsocketService.EXTRA_TOKEN);
        String id = intent.getStringExtra(WebsocketService.EXTRA_ID);
        String conferenceId = intent.getStringExtra(WebsocketService.EXTRA_CONFERENCE_ID);
        String signaling = intent.getStringExtra(EXTRA_SIGNALING);
        String ownJid = intent.getStringExtra(BroadcastTypes.EXTRA_ACCOUNT_JID);
        mSid = intent.getStringExtra(BroadcastTypes.EXTRA_SID);
        User user = (User) intent.getSerializableExtra(WebsocketService.EXTRA_USER);
        if (mConferenceId == null && conferenceId != null && conferenceId.length() != 0) {
            mConferenceId = conferenceId;
        }
        /*else if (conferenceId != null && mConferenceId != null && !mConferenceId.equals(conferenceId)) {
          // already in a conference, reject the invite
          return;
        }*/

        if (ownJid != null) {
            mOwnJid = ownJid;
        }

        if (signaling != null && signaling.equals("xmpp")) {
            mSignaling = signaling;
        }

        if (token != null && token.length() != 0) {
            if (mTokenPeers.containsKey(sdp.from)) {
                mTokenPeers.get(sdp.from)
                        .setRemoteDescription(new SessionDescription(sdp.type, sdp.description));
            }
        } else if (mPeerId.length() == 0 || mPeerId.equals(sdp.from)) {

            mSdpId = id;
            mPeerId = sdp.from;
            String imgUrl = "";
            if (user != null) {
                mPeerName = user.displayName;
                imgUrl = getUrl(user.buddyPicture);
            } else {
                mPeerName = getString(R.string.unknown);
            }
            ThumbnailsCacheManager.LoadImage(imgUrl, remoteUserImage, mPeerName, true, true);

            if (peerConnectionClient.isConnected()) {
                onRemoteDescription(sdp, token, id, conferenceId, "", "", "");
            } else {
                mRemoteSdp = sdp;
                mToken = token;
            }
        } else {
            if (mAdditionalPeers.containsKey(sdp.from)) {
                mAdditionalPeers.get(sdp.from)
                        .setRemoteDescription(new SessionDescription(sdp.type, sdp.description));
            } else {
                if (iceConnected && peerConnectionClient.getMediaStream() != null) {
                    addToCall(sdp, user);
                } else {
                    mQueuedRemoteConnections.add(new RemoteConnection(sdp, user));
                }
            }
        }
    }

}