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

Commit 954c4345 authored by Evan Chen's avatar Evan Chen
Browse files

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 bd4f2c2f)
parent 038fd80c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ license {
android_app {
    name: "CompanionDeviceManager",
    defaults: ["platform_app_defaults"],
    certificate: "platform",
    srcs: ["src/**/*.java"],

    static_libs: [
+1 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@
    <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.HIDE_NON_SYSTEM_OVERLAY_WINDOWS"/>
    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS"/>

    <application
        android:allowClearUserData="true"
+22 −6
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.companion.AssociationRequest;
import android.companion.CompanionDeviceManager;
import android.companion.IAssociationRequestCallback;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.MacAddress;
import android.os.Bundle;
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_RESULT_RECEIVER = "result_receiver";

    // Activity result: Internal Error.
    private static final int RESULT_INTERNAL_ERROR = 2;

    // AssociationRequestsProcessor -> UI
    private static final int RESULT_CODE_ASSOCIATION_CREATED = 0;
    private static final String EXTRA_ASSOCIATION = "association";
@@ -191,6 +195,20 @@ public class CompanionDeviceActivity extends AppCompatActivity {
    private void initUI() {
        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);

        mTitle = findViewById(R.id.title);
@@ -203,8 +221,6 @@ public class CompanionDeviceActivity extends AppCompatActivity {
        mButtonAllow.setOnClickListener(this::onPositiveButtonClick);
        findViewById(R.id.btn_negative).setOnClickListener(this::onNegativeButtonClick);

        final CharSequence appLabel = getApplicationLabel(this, mRequest.getPackageName());

        if (mRequest.isSelfManaged()) {
            initUiForSelfManagedAssociation(appLabel);
        } else if (mRequest.isSingleDevice()) {
@@ -257,7 +273,7 @@ public class CompanionDeviceActivity extends AppCompatActivity {
        if (DEBUG) Log.i(TAG, "onAssociationCreated(), association=" + association);

        // 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) {
@@ -284,10 +300,10 @@ public class CompanionDeviceActivity extends AppCompatActivity {
        }

        // ... 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);

        final Intent data = new Intent();
@@ -297,7 +313,7 @@ public class CompanionDeviceActivity extends AppCompatActivity {
                data.putExtra(CompanionDeviceManager.EXTRA_DEVICE, mSelectedDevice.getDevice());
            }
        }
        setResult(association != null ? RESULT_OK : RESULT_CANCELED, data);
        setResult(resultCode, data);

        finish();
    }
+6 −7
Original line number Diff line number Diff line
@@ -50,14 +50,13 @@ class Utils {
    }

    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 ApplicationInfo appInfo;
        try {
            appInfo = packageManager.getApplicationInfo(packageName, 0);
        } catch (PackageManager.NameNotFoundException e) {
            throw new RuntimeException(e);
        }

        final ApplicationInfo appInfo = packageManager.getApplicationInfoAsUser(
                packageName, PackageManager.ApplicationInfoFlags.of(0), userId);

        return packageManager.getApplicationLabel(appInfo);
    }