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

Commit 325ce73b authored by Guojing Yuan's avatar Guojing Yuan
Browse files

[CDM] Add POST_NOTIFICATION to the Watch role

Bug: 280360881

Test: manually checked the UI
Change-Id: I52fe47faa234115cb2422bb817015d089fc506fd
parent 3bef74d0
Loading
Loading
Loading
Loading
+13 −10
Original line number Diff line number Diff line
@@ -156,7 +156,7 @@
    <string name="permission_storage">Photos and media</string>

    <!-- Notification permission will be granted of corresponding profile [CHAR LIMIT=30] -->
    <string name="permission_notification">Notifications</string>
    <string name="permission_notifications">Notifications</string>

    <!-- Apps permission will be granted of corresponding profile [CHAR LIMIT=30] -->
    <string name="permission_app_streaming">Apps</string>
@@ -165,28 +165,31 @@
    <string name="permission_nearby_device_streaming">Streaming</string>

    <!-- Description of phone permission of corresponding profile [CHAR LIMIT=NONE] -->
    <string name="permission_phone_summary">Can make and manage phone calls</string>
    <string name="permission_phone_summary">Make and manage phone calls</string>

    <!-- Description of Call logs permission of corresponding profile [CHAR LIMIT=NONE] -->
    <string name="permission_call_logs_summary">Can read and write phone call log</string>
    <string name="permission_call_logs_summary">Read and write phone call log</string>

    <!-- Description of SMS permission of corresponding profile [CHAR LIMIT=NONE] -->
    <string name="permission_sms_summary">Can send and view SMS messages</string>
    <string name="permission_sms_summary">Send and view SMS messages</string>

    <!-- Description of contacts permission of corresponding profile [CHAR LIMIT=NONE] -->
    <string name="permission_contacts_summary">Can access your contacts</string>
    <string name="permission_contacts_summary">Access your contacts</string>

    <!-- Description of calendar permission of corresponding profile [CHAR LIMIT=NONE] -->
    <string name="permission_calendar_summary">Can access your calendar</string>
    <string name="permission_calendar_summary">Access your calendar</string>

    <!-- Description of microphone permission of corresponding profile [CHAR LIMIT=NONE] -->
    <string name="permission_microphone_summary">Can record audio</string>
    <string name="permission_microphone_summary">Record audio</string>

    <!-- Description of nearby devices' permission of corresponding profile [CHAR LIMIT=NONE] -->
    <string name="permission_nearby_devices_summary">Can find, connect to, and determine the relative position of nearby devices</string>
    <string name="permission_nearby_devices_summary">Find, connect to, and determine the relative position of nearby devices</string>

    <!-- Description of notification permission of corresponding profile [CHAR LIMIT=NONE] -->
    <string name="permission_notification_summary">Can read all notifications, including information like contacts, messages, and photos</string>
    <!-- Description of NLA (notification listener access) of corresponding profile [CHAR LIMIT=NONE] -->
    <string name="permission_notification_listener_access_summary">Read all notifications, including information like contacts, messages, and photos</string>

    <!-- Description of NLA & POST_NOTIFICATION of corresponding profile [CHAR LIMIT=NONE] -->
    <string name="permission_notifications_summary">\u2022 Read all notifications, including info like contacts, messages, and photos&lt;br/>\u2022 Send notifications&lt;br/>&lt;br/>You can manage this app\'s ability to read and send notifications anytime in Settings > Notifications.</string>

    <!-- Description of app streaming permission of corresponding profile [CHAR LIMIT=NONE] -->
    <string name="permission_app_streaming_summary">Stream your phone\u2019s apps</string>
+13 −12
Original line number Diff line number Diff line
@@ -27,13 +27,13 @@ import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTE

import static com.android.companiondevicemanager.CompanionDeviceDiscoveryService.DiscoveryState;
import static com.android.companiondevicemanager.CompanionDeviceDiscoveryService.DiscoveryState.FINISHED_TIMEOUT;
import static com.android.companiondevicemanager.CompanionDeviceResources.PERMISSION_TYPES;
import static com.android.companiondevicemanager.CompanionDeviceResources.PROFILES_NAME;
import static com.android.companiondevicemanager.CompanionDeviceResources.PROFILE_ICON;
import static com.android.companiondevicemanager.CompanionDeviceResources.SUMMARIES;
import static com.android.companiondevicemanager.CompanionDeviceResources.PROFILE_PERMISSIONS;
import static com.android.companiondevicemanager.CompanionDeviceResources.PROFILE_NAMES;
import static com.android.companiondevicemanager.CompanionDeviceResources.PROFILE_ICONS;
import static com.android.companiondevicemanager.CompanionDeviceResources.PROFILE_SUMMARIES;
import static com.android.companiondevicemanager.CompanionDeviceResources.SUPPORTED_PROFILES;
import static com.android.companiondevicemanager.CompanionDeviceResources.SUPPORTED_SELF_MANAGED_PROFILES;
import static com.android.companiondevicemanager.CompanionDeviceResources.TITLES;
import static com.android.companiondevicemanager.CompanionDeviceResources.PROFILE_TITLES;
import static com.android.companiondevicemanager.Utils.getApplicationLabel;
import static com.android.companiondevicemanager.Utils.getHtmlFromResources;
import static com.android.companiondevicemanager.Utils.getIcon;
@@ -482,7 +482,7 @@ public class CompanionDeviceActivity extends FragmentActivity implements
            return;
        }

        title = getHtmlFromResources(this, TITLES.get(deviceProfile), deviceName);
        title = getHtmlFromResources(this, PROFILE_TITLES.get(deviceProfile), deviceName);
        setupPermissionList(deviceProfile);

        // Summary is not needed for selfManaged dialog.
@@ -525,7 +525,7 @@ public class CompanionDeviceActivity extends FragmentActivity implements

        mSelectedDevice = requireNonNull(deviceFilterPairs.get(0));

        final Drawable profileIcon = getIcon(this, PROFILE_ICON.get(deviceProfile));
        final Drawable profileIcon = getIcon(this, PROFILE_ICONS.get(deviceProfile));

        updatePermissionUi();

@@ -545,14 +545,14 @@ public class CompanionDeviceActivity extends FragmentActivity implements
            throw new RuntimeException("Unsupported profile " + deviceProfile);
        }

        profileIcon = getIcon(this, PROFILE_ICON.get(deviceProfile));
        profileIcon = getIcon(this, PROFILE_ICONS.get(deviceProfile));

        if (deviceProfile == null) {
            title = getHtmlFromResources(this, R.string.chooser_title_non_profile, appLabel);
            mButtonNotAllowMultipleDevices.setText(R.string.consent_no);
        } else {
            title = getHtmlFromResources(this,
                    R.string.chooser_title, getString(PROFILES_NAME.get(deviceProfile)));
                    R.string.chooser_title, getString(PROFILE_NAMES.get(deviceProfile)));
        }

        mDeviceAdapter = new DeviceListAdapter(this, this::onDeviceClicked);
@@ -609,10 +609,10 @@ public class CompanionDeviceActivity extends FragmentActivity implements

    private void updatePermissionUi() {
        final String deviceProfile = mRequest.getDeviceProfile();
        final int summaryResourceId = SUMMARIES.get(deviceProfile);
        final int summaryResourceId = PROFILE_SUMMARIES.get(deviceProfile);
        final String remoteDeviceName = mSelectedDevice.getDisplayName();
        final Spanned title = getHtmlFromResources(
                this, TITLES.get(deviceProfile), mAppLabel, remoteDeviceName);
                this, PROFILE_TITLES.get(deviceProfile), mAppLabel, remoteDeviceName);
        final Spanned summary;

        // No need to show permission consent dialog if it is a isSkipPrompt(true)
@@ -680,7 +680,8 @@ public class CompanionDeviceActivity extends FragmentActivity implements
    // and when mPermissionListRecyclerView is fully populated.
    // Lastly, disable the Allow and Don't allow buttons.
    private void setupPermissionList(String deviceProfile) {
        final List<Integer> permissionTypes = new ArrayList<>(PERMISSION_TYPES.get(deviceProfile));
        final List<Integer> permissionTypes = new ArrayList<>(
                PROFILE_PERMISSIONS.get(deviceProfile));
        mPermissionListAdapter.setPermissionType(permissionTypes);
        mPermissionListRecyclerView.setAdapter(mPermissionListAdapter);
        mPermissionListRecyclerView.setLayoutManager(mPermissionsLayoutManager);
+107 −52
Original line number Diff line number Diff line
@@ -22,28 +22,15 @@ import static android.companion.AssociationRequest.DEVICE_PROFILE_COMPUTER;
import static android.companion.AssociationRequest.DEVICE_PROFILE_GLASSES;
import static android.companion.AssociationRequest.DEVICE_PROFILE_NEARBY_DEVICE_STREAMING;
import static android.companion.AssociationRequest.DEVICE_PROFILE_WATCH;

import static com.android.companiondevicemanager.PermissionListAdapter.PERMISSION_APP_STREAMING;
import static com.android.companiondevicemanager.PermissionListAdapter.PERMISSION_CALENDAR;
import static com.android.companiondevicemanager.PermissionListAdapter.PERMISSION_CALL_LOGS;
import static com.android.companiondevicemanager.PermissionListAdapter.PERMISSION_CHANGE_MEDIA_OUTPUT;
import static com.android.companiondevicemanager.PermissionListAdapter.PERMISSION_CONTACTS;
import static com.android.companiondevicemanager.PermissionListAdapter.PERMISSION_MICROPHONE;
import static com.android.companiondevicemanager.PermissionListAdapter.PERMISSION_NEARBY_DEVICES;
import static com.android.companiondevicemanager.PermissionListAdapter.PERMISSION_NEARBY_DEVICE_STREAMING;
import static com.android.companiondevicemanager.PermissionListAdapter.PERMISSION_NOTIFICATION;
import static com.android.companiondevicemanager.PermissionListAdapter.PERMISSION_PHONE;
import static com.android.companiondevicemanager.PermissionListAdapter.PERMISSION_SMS;
import static com.android.companiondevicemanager.PermissionListAdapter.PERMISSION_STORAGE;
import static android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE;

import static java.util.Collections.unmodifiableMap;
import static java.util.Collections.unmodifiableSet;

import android.os.Build;
import android.util.ArrayMap;
import android.util.ArraySet;

import com.android.media.flags.Flags;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -54,7 +41,85 @@ import java.util.Set;
 * for the corresponding profile.
 */
final class CompanionDeviceResources {
    static final Map<String, Integer> TITLES;

    // Permission resources
    private static final int PERMISSION_NOTIFICATION_LISTENER_ACCESS = 0;
    private static final int PERMISSION_STORAGE = 1;
    private static final int PERMISSION_APP_STREAMING = 2;
    private static final int PERMISSION_PHONE = 3;
    private static final int PERMISSION_SMS = 4;
    private static final int PERMISSION_CONTACTS = 5;
    private static final int PERMISSION_CALENDAR = 6;
    private static final int PERMISSION_NEARBY_DEVICES = 7;
    private static final int PERMISSION_NEARBY_DEVICE_STREAMING = 8;
    private static final int PERMISSION_MICROPHONE = 9;
    private static final int PERMISSION_CALL_LOGS = 10;
    // Notification Listener Access & POST_NOTIFICATION permission
    private static final int PERMISSION_NOTIFICATIONS = 11;
    private static final int PERMISSION_CHANGE_MEDIA_OUTPUT = 12;

    static final Map<Integer, Integer> PERMISSION_TITLES;
    static {
        final Map<Integer, Integer> map = new ArrayMap<>();
        map.put(PERMISSION_NOTIFICATION_LISTENER_ACCESS, R.string.permission_notifications);
        map.put(PERMISSION_STORAGE, R.string.permission_storage);
        map.put(PERMISSION_APP_STREAMING, R.string.permission_app_streaming);
        map.put(PERMISSION_PHONE, R.string.permission_phone);
        map.put(PERMISSION_SMS, R.string.permission_sms);
        map.put(PERMISSION_CONTACTS, R.string.permission_contacts);
        map.put(PERMISSION_CALENDAR, R.string.permission_calendar);
        map.put(PERMISSION_NEARBY_DEVICES, R.string.permission_nearby_devices);
        map.put(PERMISSION_NEARBY_DEVICE_STREAMING, R.string.permission_nearby_device_streaming);
        map.put(PERMISSION_MICROPHONE, R.string.permission_microphone);
        map.put(PERMISSION_CALL_LOGS, R.string.permission_call_logs);
        map.put(PERMISSION_NOTIFICATIONS, R.string.permission_notifications);
        map.put(PERMISSION_CHANGE_MEDIA_OUTPUT, R.string.permission_media_routing_control);
        PERMISSION_TITLES = unmodifiableMap(map);
    }

    static final Map<Integer, Integer> PERMISSION_SUMMARIES;
    static {
        final Map<Integer, Integer> map = new ArrayMap<>();
        map.put(PERMISSION_NOTIFICATION_LISTENER_ACCESS,
                R.string.permission_notification_listener_access_summary);
        map.put(PERMISSION_STORAGE, R.string.permission_storage_summary);
        map.put(PERMISSION_APP_STREAMING, R.string.permission_app_streaming_summary);
        map.put(PERMISSION_PHONE, R.string.permission_phone_summary);
        map.put(PERMISSION_SMS, R.string.permission_sms_summary);
        map.put(PERMISSION_CONTACTS, R.string.permission_contacts_summary);
        map.put(PERMISSION_CALENDAR, R.string.permission_calendar_summary);
        map.put(PERMISSION_NEARBY_DEVICES, R.string.permission_nearby_devices_summary);
        map.put(PERMISSION_NEARBY_DEVICE_STREAMING,
                R.string.permission_nearby_device_streaming_summary);
        map.put(PERMISSION_MICROPHONE, R.string.permission_microphone_summary);
        map.put(PERMISSION_CALL_LOGS, R.string.permission_call_logs_summary);
        map.put(PERMISSION_NOTIFICATIONS, R.string.permission_notifications_summary);
        map.put(PERMISSION_CHANGE_MEDIA_OUTPUT, R.string.permission_media_routing_control_summary);
        PERMISSION_SUMMARIES = unmodifiableMap(map);
    }

    static final Map<Integer, Integer> PERMISSION_ICONS;
    static {
        final Map<Integer, Integer> map = new ArrayMap<>();
        map.put(PERMISSION_NOTIFICATION_LISTENER_ACCESS, R.drawable.ic_permission_notifications);
        map.put(PERMISSION_STORAGE, R.drawable.ic_permission_storage);
        map.put(PERMISSION_APP_STREAMING, R.drawable.ic_permission_app_streaming);
        map.put(PERMISSION_PHONE, R.drawable.ic_permission_phone);
        map.put(PERMISSION_SMS, R.drawable.ic_permission_sms);
        map.put(PERMISSION_CONTACTS, R.drawable.ic_permission_contacts);
        map.put(PERMISSION_CALENDAR, R.drawable.ic_permission_calendar);
        map.put(PERMISSION_NEARBY_DEVICES, R.drawable.ic_permission_nearby_devices);
        map.put(PERMISSION_NEARBY_DEVICE_STREAMING,
                R.drawable.ic_permission_nearby_device_streaming);
        map.put(PERMISSION_MICROPHONE, R.drawable.ic_permission_microphone);
        map.put(PERMISSION_CALL_LOGS, R.drawable.ic_permission_call_logs);
        map.put(PERMISSION_NOTIFICATIONS, R.drawable.ic_permission_notifications);
        map.put(PERMISSION_CHANGE_MEDIA_OUTPUT, R.drawable.ic_permission_media_routing_control);
        PERMISSION_ICONS = unmodifiableMap(map);
    }

    // Profile resources
    static final Map<String, Integer> PROFILE_TITLES;
    static {
        final Map<String, Integer> map = new ArrayMap<>();
        map.put(DEVICE_PROFILE_APP_STREAMING, R.string.title_app_streaming);
@@ -65,71 +130,61 @@ final class CompanionDeviceResources {
        map.put(DEVICE_PROFILE_GLASSES, R.string.confirmation_title_glasses);
        map.put(null, R.string.confirmation_title);

        TITLES = unmodifiableMap(map);
        PROFILE_TITLES = unmodifiableMap(map);
    }

    static final Map<String, Integer> PROFILE_SUMMARIES;
    static {
        final Map<String, Integer> map = new ArrayMap<>();
        map.put(DEVICE_PROFILE_WATCH, R.string.summary_watch);
        map.put(DEVICE_PROFILE_GLASSES, R.string.summary_glasses);
        map.put(null, R.string.summary_generic);

        PROFILE_SUMMARIES = unmodifiableMap(map);
    }

    static final Map<String, List<Integer>> PERMISSION_TYPES;
    static final Map<String, List<Integer>> PROFILE_PERMISSIONS;
    static {
        final Map<String, List<Integer>> map = new ArrayMap<>();
        map.put(DEVICE_PROFILE_APP_STREAMING, Arrays.asList(PERMISSION_APP_STREAMING));
        map.put(DEVICE_PROFILE_COMPUTER, Arrays.asList(
                PERMISSION_NOTIFICATION, PERMISSION_STORAGE));
                PERMISSION_NOTIFICATION_LISTENER_ACCESS, PERMISSION_STORAGE));
        map.put(DEVICE_PROFILE_NEARBY_DEVICE_STREAMING,
                Arrays.asList(PERMISSION_NEARBY_DEVICE_STREAMING));
        if (!Flags.enablePrivilegedRoutingForMediaRoutingControl()) {
            map.put(DEVICE_PROFILE_WATCH, Arrays.asList(PERMISSION_NOTIFICATION, PERMISSION_PHONE,
                    PERMISSION_CALL_LOGS, PERMISSION_SMS, PERMISSION_CONTACTS, PERMISSION_CALENDAR,
                    PERMISSION_NEARBY_DEVICES));
        } else {
            map.put(DEVICE_PROFILE_WATCH, Arrays.asList(PERMISSION_NOTIFICATION, PERMISSION_PHONE,
        if (Build.VERSION.SDK_INT > UPSIDE_DOWN_CAKE) {
            map.put(DEVICE_PROFILE_WATCH, Arrays.asList(PERMISSION_NOTIFICATIONS, PERMISSION_PHONE,
                    PERMISSION_CALL_LOGS, PERMISSION_SMS, PERMISSION_CONTACTS, PERMISSION_CALENDAR,
                    PERMISSION_NEARBY_DEVICES, PERMISSION_CHANGE_MEDIA_OUTPUT));
        } else {
            map.put(DEVICE_PROFILE_WATCH, Arrays.asList(PERMISSION_NOTIFICATION_LISTENER_ACCESS,
                    PERMISSION_PHONE, PERMISSION_CALL_LOGS, PERMISSION_SMS, PERMISSION_CONTACTS,
                    PERMISSION_CALENDAR, PERMISSION_NEARBY_DEVICES));
        }
        map.put(DEVICE_PROFILE_GLASSES, Arrays.asList(PERMISSION_NOTIFICATION, PERMISSION_PHONE,
                PERMISSION_SMS, PERMISSION_CONTACTS, PERMISSION_MICROPHONE,
        map.put(DEVICE_PROFILE_GLASSES, Arrays.asList(PERMISSION_NOTIFICATION_LISTENER_ACCESS,
                PERMISSION_PHONE, PERMISSION_SMS, PERMISSION_CONTACTS, PERMISSION_MICROPHONE,
                PERMISSION_NEARBY_DEVICES));

        PERMISSION_TYPES = unmodifiableMap(map);
        PROFILE_PERMISSIONS = unmodifiableMap(map);
    }

    static final Map<String, Integer> SUMMARIES;
    static {
        final Map<String, Integer> map = new ArrayMap<>();
        map.put(DEVICE_PROFILE_WATCH, R.string.summary_watch);
        map.put(DEVICE_PROFILE_GLASSES, R.string.summary_glasses);
        map.put(null, R.string.summary_generic);

        SUMMARIES = unmodifiableMap(map);
    }

    static final Map<String, Integer> PROFILES_NAME;
    static final Map<String, Integer> PROFILE_NAMES;
    static {
        final Map<String, Integer> map = new ArrayMap<>();
        map.put(DEVICE_PROFILE_WATCH, R.string.profile_name_watch);
        map.put(DEVICE_PROFILE_GLASSES, R.string.profile_name_glasses);
        map.put(null, R.string.profile_name_generic);

        PROFILES_NAME = unmodifiableMap(map);
    }

    static final Map<String, Integer> PROFILES_NAME_MULTI;
    static {
        final Map<String, Integer> map = new ArrayMap<>();
        map.put(DEVICE_PROFILE_GLASSES, R.string.profile_name_generic);
        map.put(DEVICE_PROFILE_WATCH, R.string.profile_name_watch);
        map.put(null, R.string.profile_name_generic);

        PROFILES_NAME_MULTI = unmodifiableMap(map);
        PROFILE_NAMES = unmodifiableMap(map);
    }

    static final Map<String, Integer> PROFILE_ICON;
    static final Map<String, Integer> PROFILE_ICONS;
    static {
        final Map<String, Integer> map = new ArrayMap<>();
        map.put(DEVICE_PROFILE_WATCH, R.drawable.ic_watch);
        map.put(DEVICE_PROFILE_GLASSES, R.drawable.ic_glasses);
        map.put(null, R.drawable.ic_device_other);

        PROFILE_ICON = unmodifiableMap(map);
        PROFILE_ICONS = unmodifiableMap(map);
    }

    static final Set<String> SUPPORTED_PROFILES;
+9 −77

File changed.

Preview size limit exceeded, changes collapsed.