Make CompanionDeviceManager.apk to platform signed
Inorder to make CompanionDeviceMananger to be able to
get appInfo from non-0 profile we need to add
android.permission.INTERACT_ACROSS_USERS permission and
make CompanionDeviceManager.ap platform signed.
Fix: 215160795
Test: atest CtsCompanionDeviceManagerCoreTestCases
atest CtsCompanionDeviceManagerUiAutomationTestCases
atest CtsOsTestCases:CompanionDeviceManagerTest
Change-Id: I26cebadcdef05274436cd454b4d635d82eb2b7e2
(cherry picked from commit bd4f2c2f8a)
This commit is contained in:
@@ -34,6 +34,7 @@ license {
|
|||||||
android_app {
|
android_app {
|
||||||
name: "CompanionDeviceManager",
|
name: "CompanionDeviceManager",
|
||||||
defaults: ["platform_app_defaults"],
|
defaults: ["platform_app_defaults"],
|
||||||
|
certificate: "platform",
|
||||||
srcs: ["src/**/*.java"],
|
srcs: ["src/**/*.java"],
|
||||||
|
|
||||||
static_libs: [
|
static_libs: [
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
<uses-permission android:name="android.permission.RADIO_SCAN_WITHOUT_LOCATION"/>
|
<uses-permission android:name="android.permission.RADIO_SCAN_WITHOUT_LOCATION"/>
|
||||||
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
|
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
|
||||||
<uses-permission android:name="android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS"/>
|
<uses-permission android:name="android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS"/>
|
||||||
|
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS"/>
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:allowClearUserData="true"
|
android:allowClearUserData="true"
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ import android.companion.AssociationRequest;
|
|||||||
import android.companion.CompanionDeviceManager;
|
import android.companion.CompanionDeviceManager;
|
||||||
import android.companion.IAssociationRequestCallback;
|
import android.companion.IAssociationRequestCallback;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.net.MacAddress;
|
import android.net.MacAddress;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
@@ -71,6 +72,9 @@ public class CompanionDeviceActivity extends AppCompatActivity {
|
|||||||
private static final String EXTRA_ASSOCIATION_REQUEST = "association_request";
|
private static final String EXTRA_ASSOCIATION_REQUEST = "association_request";
|
||||||
private static final String EXTRA_RESULT_RECEIVER = "result_receiver";
|
private static final String EXTRA_RESULT_RECEIVER = "result_receiver";
|
||||||
|
|
||||||
|
// Activity result: Internal Error.
|
||||||
|
private static final int RESULT_INTERNAL_ERROR = 2;
|
||||||
|
|
||||||
// AssociationRequestsProcessor -> UI
|
// AssociationRequestsProcessor -> UI
|
||||||
private static final int RESULT_CODE_ASSOCIATION_CREATED = 0;
|
private static final int RESULT_CODE_ASSOCIATION_CREATED = 0;
|
||||||
private static final String EXTRA_ASSOCIATION = "association";
|
private static final String EXTRA_ASSOCIATION = "association";
|
||||||
@@ -191,6 +195,20 @@ public class CompanionDeviceActivity extends AppCompatActivity {
|
|||||||
private void initUI() {
|
private void initUI() {
|
||||||
if (DEBUG) Log.d(TAG, "initUI(), request=" + mRequest);
|
if (DEBUG) Log.d(TAG, "initUI(), request=" + mRequest);
|
||||||
|
|
||||||
|
final String packageName = mRequest.getPackageName();
|
||||||
|
final int userId = mRequest.getUserId();
|
||||||
|
final CharSequence appLabel;
|
||||||
|
|
||||||
|
try {
|
||||||
|
appLabel = getApplicationLabel(this, packageName, userId);
|
||||||
|
} catch (PackageManager.NameNotFoundException e) {
|
||||||
|
Log.w(TAG, "Package u" + userId + "/" + packageName + " not found.");
|
||||||
|
|
||||||
|
CompanionDeviceDiscoveryService.stop(this);
|
||||||
|
setResultAndFinish(null, RESULT_INTERNAL_ERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
setContentView(R.layout.activity_confirmation);
|
setContentView(R.layout.activity_confirmation);
|
||||||
|
|
||||||
mTitle = findViewById(R.id.title);
|
mTitle = findViewById(R.id.title);
|
||||||
@@ -203,8 +221,6 @@ public class CompanionDeviceActivity extends AppCompatActivity {
|
|||||||
mButtonAllow.setOnClickListener(this::onPositiveButtonClick);
|
mButtonAllow.setOnClickListener(this::onPositiveButtonClick);
|
||||||
findViewById(R.id.btn_negative).setOnClickListener(this::onNegativeButtonClick);
|
findViewById(R.id.btn_negative).setOnClickListener(this::onNegativeButtonClick);
|
||||||
|
|
||||||
final CharSequence appLabel = getApplicationLabel(this, mRequest.getPackageName());
|
|
||||||
|
|
||||||
if (mRequest.isSelfManaged()) {
|
if (mRequest.isSelfManaged()) {
|
||||||
initUiForSelfManagedAssociation(appLabel);
|
initUiForSelfManagedAssociation(appLabel);
|
||||||
} else if (mRequest.isSingleDevice()) {
|
} else if (mRequest.isSingleDevice()) {
|
||||||
@@ -257,7 +273,7 @@ public class CompanionDeviceActivity extends AppCompatActivity {
|
|||||||
if (DEBUG) Log.i(TAG, "onAssociationCreated(), association=" + association);
|
if (DEBUG) Log.i(TAG, "onAssociationCreated(), association=" + association);
|
||||||
|
|
||||||
// Don't need to notify the app, CdmService has already done that. Just finish.
|
// Don't need to notify the app, CdmService has already done that. Just finish.
|
||||||
setResultAndFinish(association);
|
setResultAndFinish(association, RESULT_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void cancel(boolean discoveryTimeout) {
|
private void cancel(boolean discoveryTimeout) {
|
||||||
@@ -284,10 +300,10 @@ public class CompanionDeviceActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ... then set result and finish ("sending" onActivityResult()).
|
// ... then set result and finish ("sending" onActivityResult()).
|
||||||
setResultAndFinish(null);
|
setResultAndFinish(null, RESULT_CANCELED);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setResultAndFinish(@Nullable AssociationInfo association) {
|
private void setResultAndFinish(@Nullable AssociationInfo association, int resultCode) {
|
||||||
if (DEBUG) Log.i(TAG, "setResultAndFinish(), association=" + association);
|
if (DEBUG) Log.i(TAG, "setResultAndFinish(), association=" + association);
|
||||||
|
|
||||||
final Intent data = new Intent();
|
final Intent data = new Intent();
|
||||||
@@ -297,7 +313,7 @@ public class CompanionDeviceActivity extends AppCompatActivity {
|
|||||||
data.putExtra(CompanionDeviceManager.EXTRA_DEVICE, mSelectedDevice.getDevice());
|
data.putExtra(CompanionDeviceManager.EXTRA_DEVICE, mSelectedDevice.getDevice());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
setResult(association != null ? RESULT_OK : RESULT_CANCELED, data);
|
setResult(resultCode, data);
|
||||||
|
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,14 +50,13 @@ class Utils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static @NonNull CharSequence getApplicationLabel(
|
static @NonNull CharSequence getApplicationLabel(
|
||||||
@NonNull Context context, @NonNull String packageName) {
|
@NonNull Context context, @NonNull String packageName, int userId)
|
||||||
|
throws PackageManager.NameNotFoundException {
|
||||||
final PackageManager packageManager = context.getPackageManager();
|
final PackageManager packageManager = context.getPackageManager();
|
||||||
final ApplicationInfo appInfo;
|
|
||||||
try {
|
final ApplicationInfo appInfo = packageManager.getApplicationInfoAsUser(
|
||||||
appInfo = packageManager.getApplicationInfo(packageName, 0);
|
packageName, PackageManager.ApplicationInfoFlags.of(0), userId);
|
||||||
} catch (PackageManager.NameNotFoundException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
return packageManager.getApplicationLabel(appInfo);
|
return packageManager.getApplicationLabel(appInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user