From 22d9d16e782c29f43aee8072b4c3d33aa74ff8ef Mon Sep 17 00:00:00 2001 From: Eugene Susla Date: Tue, 27 Oct 2020 12:47:25 -0700 Subject: [PATCH] Propagate callingPackage explicitly within CDM Activity.getCallingPackage seems to be returning null in come cases Fixes: 170461416 Bug: 167592848 Test: manual Change-Id: I507b9434e792f79e7905f1983879a062d1a6fec7 (cherry picked from commit 2a7a57711e8dbe2ac8705350e42a9d3f26a8edae) --- .../android/companion/AssociationRequest.java | 29 ++++++++++++++----- .../DeviceChooserActivity.java | 7 +++++ .../CompanionDeviceManagerService.java | 1 + 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/core/java/android/companion/AssociationRequest.java b/core/java/android/companion/AssociationRequest.java index 1f57c7d9d2f18..417cbc6bb9b94 100644 --- a/core/java/android/companion/AssociationRequest.java +++ b/core/java/android/companion/AssociationRequest.java @@ -46,6 +46,7 @@ public final class AssociationRequest implements Parcelable { private final boolean mSingleDevice; private final List> mDeviceFilters; + private String mCallingPackage; private AssociationRequest( boolean singleDevice, @Nullable List> deviceFilters) { @@ -57,6 +58,7 @@ public final class AssociationRequest implements Parcelable { this( in.readByte() != 0, in.readParcelableList(new ArrayList<>(), AssociationRequest.class.getClassLoader())); + setCallingPackage(in.readString()); } /** @hide */ @@ -72,32 +74,45 @@ public final class AssociationRequest implements Parcelable { return mDeviceFilters; } + /** @hide */ + public String getCallingPackage() { + return mCallingPackage; + } + + /** @hide */ + public void setCallingPackage(String pkg) { + mCallingPackage = pkg; + } + @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; AssociationRequest that = (AssociationRequest) o; - return mSingleDevice == that.mSingleDevice && - Objects.equals(mDeviceFilters, that.mDeviceFilters); + return mSingleDevice == that.mSingleDevice + && Objects.equals(mDeviceFilters, that.mDeviceFilters) + && Objects.equals(mCallingPackage, that.mCallingPackage); } @Override public int hashCode() { - return Objects.hash(mSingleDevice, mDeviceFilters); + return Objects.hash(mSingleDevice, mDeviceFilters, mCallingPackage); } @Override public String toString() { - return "AssociationRequest{" + - "mSingleDevice=" + mSingleDevice + - ", mDeviceFilters=" + mDeviceFilters + - '}'; + return "AssociationRequest{" + + "mSingleDevice=" + mSingleDevice + + ", mDeviceFilters=" + mDeviceFilters + + ", mCallingPackage=" + mCallingPackage + + '}'; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeByte((byte) (mSingleDevice ? 1 : 0)); dest.writeParcelableList(mDeviceFilters, flags); + dest.writeString(mCallingPackage); } @Override diff --git a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceChooserActivity.java b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceChooserActivity.java index 16ef59f201f17..e501e1269aeb3 100644 --- a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceChooserActivity.java +++ b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceChooserActivity.java @@ -18,6 +18,8 @@ package com.android.companiondevicemanager; import static android.companion.BluetoothDeviceFilterUtils.getDeviceMacAddress; +import static java.util.Objects.requireNonNull; + import android.app.Activity; import android.companion.CompanionDeviceManager; import android.content.Intent; @@ -116,6 +118,11 @@ public class DeviceChooserActivity extends Activity { } } + @Override + public String getCallingPackage() { + return requireNonNull(getService().mRequest.getCallingPackage()); + } + @Override public void setTitle(CharSequence title) { final TextView titleView = findViewById(R.id.title); diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java index 29fc1674bab92..b581e0b07f426 100644 --- a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java +++ b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java @@ -300,6 +300,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind mFindDeviceCallback = callback; mRequest = request; mCallingPackage = callingPackage; + request.setCallingPackage(callingPackage); callback.asBinder().linkToDeath(CompanionDeviceManagerService.this /* recipient */, 0); final long callingIdentity = Binder.clearCallingIdentity();