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

Commit 4fc729a3 authored by android-build-team Robot's avatar android-build-team Robot
Browse files

Snap for 7019547 from 3cea72fb to rvc-qpr2-release

Change-Id: If09535ad207de824036398e6636d37c695340477
parents 6dc24156 3cea72fb
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -3412,6 +3412,15 @@
                       android:value="com.android.settings.sound.MediaControlsSettings" />
        </activity>

        <receiver
            android:name=".media.BluetoothPairingReceiver"
            android:exported="true"
            android:permission="android.permission.BLUETOOTH_ADMIN">
            <intent-filter>
                <action android:name="com.android.settings.action.LAUNCH_BLUETOOTH_PAIRING"/>
            </intent-filter>/>
        </receiver>

        <!-- This is the longest AndroidManifest.xml ever. -->
    </application>
</manifest>
+1 −1
Original line number Diff line number Diff line
@@ -11482,7 +11482,7 @@
    <string name="pref_title_network_details">Network details</string>
    <!--  Warning text about the visibility of device name. [CHAR LIMIT=NONE] -->
    <string name="about_phone_device_name_warning">Your device name is visible to apps on your phone. It may also be seen by other people when you connect to Bluetooth devices or set up a Wi-Fi hotspot.</string>
    <string name="about_phone_device_name_warning">Your device name is visible to apps on your phone. It may also be seen by other people when you connect to Bluetooth devices, connect to a Wi-Fi network or set up a Wi-Fi hotspot.</string>
    <!-- Title for Connected device shortcut [CHAR LIMIT=30] -->
    <string name="devices_title">Devices</string>
+46 −0
Original line number Diff line number Diff line
/*
 * Copyright 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settings.media;

import android.app.settings.SettingsEnums;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;

import com.android.settings.R;
import com.android.settings.bluetooth.BluetoothPairingDetail;
import com.android.settings.core.SubSettingLauncher;
import com.android.settingslib.media.MediaOutputSliceConstants;

/**
 * BroadcastReceiver for handling media output intent
 */
public class BluetoothPairingReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (TextUtils.equals(MediaOutputSliceConstants.ACTION_LAUNCH_BLUETOOTH_PAIRING,
                intent.getAction())) {
            context.startActivity(new SubSettingLauncher(context)
                    .setDestination(BluetoothPairingDetail.class.getName())
                    .setTitleRes(R.string.bluetooth_pairing_page_title)
                    .setSourceMetricsCategory(SettingsEnums.BLUETOOTH_PAIRING_RECEIVER)
                    .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK)
                    .toIntent());
        }
    }
}
+26 −28
Original line number Diff line number Diff line
@@ -16,18 +16,15 @@

package com.android.settings.media;

import static android.app.PendingIntent.FLAG_UPDATE_CURRENT;

import static com.android.settings.slices.CustomSliceRegistry.MEDIA_OUTPUT_INDICATOR_SLICE_URI;

import android.annotation.ColorInt;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.media.session.MediaController;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;

import androidx.annotation.VisibleForTesting;
import androidx.core.graphics.drawable.IconCompat;
@@ -63,14 +60,9 @@ public class MediaOutputIndicatorSlice implements CustomSliceable {
                com.android.internal.R.drawable.ic_settings_bluetooth);
        final CharSequence title = mContext.getString(R.string.media_output_label_title,
                Utils.getApplicationLabel(mContext, getWorker().getPackageName()));
        final int requestCode = TextUtils.isEmpty(getWorker().getPackageName())
                ? 0
                : getWorker().getPackageName().hashCode();
        final PendingIntent primaryActionIntent = PendingIntent.getActivity(mContext,
                requestCode,
                getMediaOutputSliceIntent(), FLAG_UPDATE_CURRENT);
        final SliceAction primarySliceAction = SliceAction.createDeeplink(
                primaryActionIntent, icon, ListBuilder.ICON_IMAGE, title);
        final SliceAction primarySliceAction = SliceAction.create(
                getBroadcastIntent(mContext), icon, ListBuilder.ICON_IMAGE, title);

        @ColorInt final int color = Utils.getColorAccentDefaultColor(mContext);
        // To set an empty icon to indent the row
        final ListBuilder listBuilder = new ListBuilder(mContext, getUri(), ListBuilder.INFINITY)
@@ -83,22 +75,6 @@ public class MediaOutputIndicatorSlice implements CustomSliceable {
        return listBuilder.build();
    }

    @VisibleForTesting
    Intent getMediaOutputSliceIntent() {
        final MediaController mediaController = getWorker().getActiveLocalMediaController();
        final Intent intent = new Intent()
                .setPackage(Utils.SETTINGS_PACKAGE_NAME)
                .setAction(MediaOutputSliceConstants.ACTION_MEDIA_OUTPUT)
                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        if (mediaController != null) {
            intent.putExtra(MediaOutputSliceConstants.KEY_MEDIA_SESSION_TOKEN,
                    mediaController.getSessionToken());
            intent.putExtra(MediaOutputSliceConstants.EXTRA_PACKAGE_NAME,
                    mediaController.getPackageName());
        }
        return intent;
    }

    private IconCompat createEmptyIcon() {
        final Bitmap bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
        return IconCompat.createWithBitmap(bitmap);
@@ -141,4 +117,26 @@ public class MediaOutputIndicatorSlice implements CustomSliceable {
                && getWorker().getMediaDevices().size() > 0
                && getWorker().getActiveLocalMediaController() != null;
    }

    @Override
    public void onNotifyChange(Intent intent) {
        final MediaController mediaController = getWorker().getActiveLocalMediaController();

        if (mediaController == null) {
            Log.d(TAG, "No active local media controller");
            return;
        }
        // Launch media output dialog
        mContext.sendBroadcast(new Intent()
                .setPackage(MediaOutputSliceConstants.SYSTEMUI_PACKAGE_NAME)
                .setAction(MediaOutputSliceConstants.ACTION_LAUNCH_MEDIA_OUTPUT_DIALOG)
                .putExtra(MediaOutputSliceConstants.KEY_MEDIA_SESSION_TOKEN,
                        mediaController.getSessionToken())
                .putExtra(MediaOutputSliceConstants.EXTRA_PACKAGE_NAME,
                        mediaController.getPackageName()));
        // Dismiss volume panel
        mContext.sendBroadcast(new Intent()
                .setPackage(MediaOutputSliceConstants.SETTINGS_PACKAGE_NAME)
                .setAction(MediaOutputSliceConstants.ACTION_CLOSE_PANEL));
    }
}
+32 −17
Original line number Diff line number Diff line
@@ -59,6 +59,9 @@ public class RemoteMediaSlice implements CustomSliceable {

    private static final String TAG = "RemoteMediaSlice";
    private static final String MEDIA_ID = "media_id";
    private static final String ACTION_LAUNCH_DIALOG = "action_launch_dialog";
    private static final String SESSION_INFO = "RoutingSessionInfo";
    private static final String CUSTOMIZED_ACTION = "customized_action";

    private final Context mContext;

@@ -77,6 +80,20 @@ public class RemoteMediaSlice implements CustomSliceable {
        final String id = intent.getStringExtra(MEDIA_ID);
        if (!TextUtils.isEmpty(id)) {
            getWorker().adjustSessionVolume(id, newPosition);
            return;
        }
        if (TextUtils.equals(ACTION_LAUNCH_DIALOG, intent.getStringExtra(CUSTOMIZED_ACTION))) {
            // Launch Media Output Dialog
            final RoutingSessionInfo info = intent.getParcelableExtra(SESSION_INFO);
            mContext.sendBroadcast(new Intent()
                    .setPackage(MediaOutputSliceConstants.SYSTEMUI_PACKAGE_NAME)
                    .setAction(MediaOutputSliceConstants.ACTION_LAUNCH_MEDIA_OUTPUT_DIALOG)
                    .putExtra(MediaOutputSliceConstants.EXTRA_PACKAGE_NAME,
                            info.getClientPackageName()));
            // Dismiss volume panel
            mContext.sendBroadcast(new Intent()
                    .setPackage(MediaOutputSliceConstants.SETTINGS_PACKAGE_NAME)
                    .setAction(MediaOutputSliceConstants.ACTION_CLOSE_PANEL));
        }
    }

@@ -133,8 +150,7 @@ public class RemoteMediaSlice implements CustomSliceable {
                    .setTitle(isMediaOutputDisabled ? spannableTitle : outputTitle)
                    .setSubtitle(info.getName())
                    .setTitleItem(emptyIcon, ListBuilder.ICON_IMAGE)
                    .setPrimaryAction(getMediaOutputSliceAction(
                            info.getClientPackageName(), isMediaOutputDisabled)));
                    .setPrimaryAction(getMediaOutputDialogAction(info, isMediaOutputDisabled)));
        }
        return listBuilder.build();
    }
@@ -167,23 +183,22 @@ public class RemoteMediaSlice implements CustomSliceable {
        return primarySliceAction;
    }

    private SliceAction getMediaOutputSliceAction(
            String packageName, boolean isMediaOutputDisabled) {
        final Intent intent = new Intent()
                .setAction(isMediaOutputDisabled
                        ? ""
                        : MediaOutputSliceConstants.ACTION_MEDIA_OUTPUT)
                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                .putExtra(MediaOutputSliceConstants.EXTRA_PACKAGE_NAME, packageName);
        final IconCompat icon = IconCompat.createWithResource(mContext,
                R.drawable.ic_volume_remote);
        final int requestCode = TextUtils.isEmpty(packageName) ? 0 : packageName.hashCode();
        final PendingIntent primaryActionIntent = PendingIntent.getActivity(mContext,
                requestCode, intent, 0 /* flags */);
    private SliceAction getMediaOutputDialogAction(RoutingSessionInfo info,
            boolean isMediaOutputDisabled) {
        final Intent intent = new Intent(getUri().toString())
                .setData(getUri())
                .setClass(mContext, SliceBroadcastReceiver.class)
                .putExtra(CUSTOMIZED_ACTION, isMediaOutputDisabled ? "" : ACTION_LAUNCH_DIALOG)
                .putExtra(SESSION_INFO, info)
                .addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
        final PendingIntent primaryBroadcastIntent = PendingIntent.getBroadcast(mContext,
                info.hashCode(), intent, PendingIntent.FLAG_UPDATE_CURRENT);
        final SliceAction primarySliceAction = SliceAction.createDeeplink(
                primaryActionIntent, icon, ListBuilder.ICON_IMAGE,
                primaryBroadcastIntent,
                IconCompat.createWithResource(mContext, R.drawable.ic_volume_remote),
                ListBuilder.ICON_IMAGE,
                mContext.getString(R.string.media_output_label_title,
                        Utils.getApplicationLabel(mContext, packageName)));
                        Utils.getApplicationLabel(mContext, info.getClientPackageName())));
        return primarySliceAction;
    }

Loading