Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 56f299b8 authored by Andres Morales's avatar Andres Morales
Browse files

Add UserHandle to BeamShareData

Allows NfcService to start the beam transfer
process in the correct user.

Bug:17966846
Change-Id: Ie98c98e763f0c2eabf11afda645c421b0332a2f6
parent 808fe6f9
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@ package android.nfc;
import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.UserHandle;

/**
 * Class to IPC data to be shared over Android Beam.
@@ -14,11 +15,13 @@ import android.os.Parcelable;
public final class BeamShareData implements Parcelable {
    public final NdefMessage ndefMessage;
    public final Uri[] uris;
    public final UserHandle userHandle;
    public final int flags;

    public BeamShareData(NdefMessage msg, Uri[] uris, int flags) {
    public BeamShareData(NdefMessage msg, Uri[] uris, UserHandle userHandle, int flags) {
        this.ndefMessage = msg;
        this.uris = uris;
        this.userHandle = userHandle;
        this.flags = flags;
    }

@@ -35,6 +38,7 @@ public final class BeamShareData implements Parcelable {
        if (urisLength > 0) {
            dest.writeTypedArray(uris, 0);
        }
        dest.writeParcelable(userHandle, 0);
        dest.writeInt(this.flags);
    }

@@ -49,9 +53,10 @@ public final class BeamShareData implements Parcelable {
                uris = new Uri[numUris];
                source.readTypedArray(uris, Uri.CREATOR);
            }
            UserHandle userHandle = source.readParcelable(UserHandle.class.getClassLoader());
            int flags = source.readInt();

            return new BeamShareData(msg, uris, flags);
            return new BeamShareData(msg, uris, userHandle, flags);
        }

        @Override
+10 −3
Original line number Diff line number Diff line
@@ -18,12 +18,14 @@ package android.nfc;

import android.app.Activity;
import android.app.Application;
import android.content.ContentProvider;
import android.content.Intent;
import android.net.Uri;
import android.nfc.NfcAdapter.ReaderCallback;
import android.os.Binder;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.UserHandle;
import android.util.Log;

import java.util.ArrayList;
@@ -350,19 +352,24 @@ public final class NfcActivityManager extends IAppCallback.Stub
        if (urisCallback != null) {
            uris = urisCallback.createBeamUris(mDefaultEvent);
            if (uris != null) {
                ArrayList<Uri> validUris = new ArrayList<Uri>();
                for (Uri uri : uris) {
                    if (uri == null) {
                        Log.e(TAG, "Uri not allowed to be null.");
                        return null;
                        continue;
                    }
                    String scheme = uri.getScheme();
                    if (scheme == null || (!scheme.equalsIgnoreCase("file") &&
                            !scheme.equalsIgnoreCase("content"))) {
                        Log.e(TAG, "Uri needs to have " +
                                "either scheme file or scheme content");
                        return null;
                        continue;
                    }
                    uri = ContentProvider.maybeAddUserId(uri, UserHandle.myUserId());
                    validUris.add(uri);
                }

                uris = validUris.toArray(new Uri[validUris.size()]);
            }
        }
        if (uris != null && uris.length > 0) {
@@ -372,7 +379,7 @@ public final class NfcActivityManager extends IAppCallback.Stub
                        Intent.FLAG_GRANT_READ_URI_PERMISSION);
            }
        }
        return new BeamShareData(message, uris, flags);
        return new BeamShareData(message, uris, UserHandle.CURRENT, flags);
    }

    /** Callback from NFC service, usually on binder thread */