Migrate media output switcher metrics - 2/n

Bug: 172181610
Test: run statsd_testdrive 277 and check the
output correctness after content switching.

Change-Id: I5abb471452ec92670d220b2472eadbe77e243653
Merged-In: I5abb471452ec92670d220b2472eadbe77e243653
diff --git a/src/com/android/settings/media/MediaOutputSlice.java b/src/com/android/settings/media/MediaOutputSlice.java
index 6611e8d..2cc7a49 100644
--- a/src/com/android/settings/media/MediaOutputSlice.java
+++ b/src/com/android/settings/media/MediaOutputSlice.java
@@ -396,7 +396,7 @@
 
     @Override
     public Class getBackgroundWorkerClass() {
-        return MediaOutputSliceWorker.class;
+        return MediaDeviceUpdateWorker.class;
     }
 
     private boolean isVisible() {
diff --git a/src/com/android/settings/media/MediaOutputSliceWorker.java b/src/com/android/settings/media/MediaOutputSliceWorker.java
deleted file mode 100644
index 357b234..0000000
--- a/src/com/android/settings/media/MediaOutputSliceWorker.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright (C) 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 static android.media.MediaRoute2ProviderService.REASON_INVALID_COMMAND;
-import static android.media.MediaRoute2ProviderService.REASON_NETWORK_ERROR;
-import static android.media.MediaRoute2ProviderService.REASON_REJECTED;
-import static android.media.MediaRoute2ProviderService.REASON_ROUTE_NOT_AVAILABLE;
-import static android.media.MediaRoute2ProviderService.REASON_UNKNOWN_ERROR;
-
-import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.net.Uri;
-import android.util.Log;
-
-import com.android.settings.core.instrumentation.SettingsStatsLog;
-import com.android.settingslib.media.MediaDevice;
-
-/**
- * SliceBackgroundWorker for the MediaOutputSlice class.
- * It inherits from MediaDeviceUpdateWorker and add metrics logging.
- */
-public class MediaOutputSliceWorker extends MediaDeviceUpdateWorker {
-
-    private static final String TAG = "MediaOutputSliceWorker";
-    private static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG);
-
-    private MediaDevice mSourceDevice, mTargetDevice;
-    private int mWiredDeviceCount;
-    private int mConnectedBluetoothDeviceCount;
-    private int mRemoteDeviceCount;
-    private int mAppliedDeviceCountWithinRemoteGroup;
-
-    public MediaOutputSliceWorker(Context context, Uri uri) {
-        super(context, uri);
-    }
-
-    @Override
-    public void connectDevice(MediaDevice device) {
-        mSourceDevice = mLocalMediaManager.getCurrentConnectedDevice();
-        mTargetDevice = device;
-
-        if (DBG) {
-            Log.d(TAG, "connectDevice -"
-                    + " source:" + mSourceDevice.toString()
-                    + " target:" + mTargetDevice.toString());
-        }
-
-        super.connectDevice(device);
-    }
-
-    private int getLoggingDeviceType(MediaDevice device, boolean isSourceDevice) {
-        switch (device.getDeviceType()) {
-            case MediaDevice.MediaDeviceType.TYPE_PHONE_DEVICE:
-                return isSourceDevice
-                        ? SettingsStatsLog.MEDIA_OUTPUT_OP_SWITCH_REPORTED__SOURCE__BUILTIN_SPEAKER
-                        : SettingsStatsLog.MEDIA_OUTPUT_OP_SWITCH_REPORTED__TARGET__BUILTIN_SPEAKER;
-            case MediaDevice.MediaDeviceType.TYPE_3POINT5_MM_AUDIO_DEVICE:
-                return isSourceDevice
-                        ? SettingsStatsLog
-                        .MEDIA_OUTPUT_OP_SWITCH_REPORTED__SOURCE__WIRED_3POINT5_MM_AUDIO
-                        : SettingsStatsLog
-                                .MEDIA_OUTPUT_OP_SWITCH_REPORTED__TARGET__WIRED_3POINT5_MM_AUDIO;
-            case MediaDevice.MediaDeviceType.TYPE_USB_C_AUDIO_DEVICE:
-                return isSourceDevice
-                        ? SettingsStatsLog.MEDIA_OUTPUT_OP_SWITCH_REPORTED__SOURCE__USB_C_AUDIO
-                        : SettingsStatsLog.MEDIA_OUTPUT_OP_SWITCH_REPORTED__TARGET__USB_C_AUDIO;
-            case MediaDevice.MediaDeviceType.TYPE_BLUETOOTH_DEVICE:
-                return isSourceDevice
-                        ? SettingsStatsLog.MEDIA_OUTPUT_OP_SWITCH_REPORTED__SOURCE__BLUETOOTH
-                        : SettingsStatsLog.MEDIA_OUTPUT_OP_SWITCH_REPORTED__TARGET__BLUETOOTH;
-            case MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE:
-                return isSourceDevice
-                        ? SettingsStatsLog.MEDIA_OUTPUT_OP_SWITCH_REPORTED__SOURCE__REMOTE_SINGLE
-                        : SettingsStatsLog.MEDIA_OUTPUT_OP_SWITCH_REPORTED__TARGET__REMOTE_SINGLE;
-            case MediaDevice.MediaDeviceType.TYPE_CAST_GROUP_DEVICE:
-                return isSourceDevice
-                        ? SettingsStatsLog.MEDIA_OUTPUT_OP_SWITCH_REPORTED__SOURCE__REMOTE_GROUP
-                        : SettingsStatsLog.MEDIA_OUTPUT_OP_SWITCH_REPORTED__TARGET__REMOTE_GROUP;
-            default:
-                return isSourceDevice
-                        ? SettingsStatsLog.MEDIA_OUTPUT_OP_SWITCH_REPORTED__SOURCE__UNKNOWN_TYPE
-                        : SettingsStatsLog.MEDIA_OUTPUT_OP_SWITCH_REPORTED__TARGET__UNKNOWN_TYPE;
-        }
-    }
-
-    private int getLoggingSwitchOpSubResult(int reason) {
-        switch (reason) {
-            case REASON_REJECTED:
-                return SettingsStatsLog.MEDIA_OUTPUT_OP_SWITCH_REPORTED__SUBRESULT__REJECTED;
-            case REASON_NETWORK_ERROR:
-                return SettingsStatsLog.MEDIA_OUTPUT_OP_SWITCH_REPORTED__SUBRESULT__NETWORK_ERROR;
-            case REASON_ROUTE_NOT_AVAILABLE:
-                return SettingsStatsLog
-                        .MEDIA_OUTPUT_OP_SWITCH_REPORTED__SUBRESULT__ROUTE_NOT_AVAILABLE;
-            case REASON_INVALID_COMMAND:
-                return SettingsStatsLog.MEDIA_OUTPUT_OP_SWITCH_REPORTED__SUBRESULT__INVALID_COMMAND;
-            case REASON_UNKNOWN_ERROR:
-            default:
-                return SettingsStatsLog.MEDIA_OUTPUT_OP_SWITCH_REPORTED__SUBRESULT__UNKNOWN_ERROR;
-        }
-    }
-
-    private String getLoggingPackageName() {
-        final String packageName = getPackageName();
-        if (packageName != null && !packageName.isEmpty()) {
-            try {
-                final ApplicationInfo applicationInfo = mContext.getPackageManager()
-                        .getApplicationInfo(packageName, /* default flag */ 0);
-                if ((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0
-                        || (applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
-                    return packageName;
-                }
-            } catch (Exception ex) {
-                Log.e(TAG, packageName + "is invalid.");
-            }
-        }
-
-        return "";
-    }
-
-    private void updateLoggingDeviceCount() {
-        mWiredDeviceCount = mConnectedBluetoothDeviceCount = mRemoteDeviceCount = 0;
-        mAppliedDeviceCountWithinRemoteGroup = 0;
-
-        for (MediaDevice mediaDevice : mMediaDevices) {
-            if (mediaDevice.isConnected()) {
-                switch (mediaDevice.getDeviceType()) {
-                    case MediaDevice.MediaDeviceType.TYPE_3POINT5_MM_AUDIO_DEVICE:
-                    case MediaDevice.MediaDeviceType.TYPE_USB_C_AUDIO_DEVICE:
-                        mWiredDeviceCount++;
-                        break;
-                    case MediaDevice.MediaDeviceType.TYPE_BLUETOOTH_DEVICE:
-                        mConnectedBluetoothDeviceCount++;
-                        break;
-                    case MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE:
-                    case MediaDevice.MediaDeviceType.TYPE_CAST_GROUP_DEVICE:
-                        mRemoteDeviceCount++;
-                        break;
-                    default:
-                }
-            }
-        }
-
-        if (DBG) {
-            Log.d(TAG, "connected devices:" + " wired: " + mWiredDeviceCount
-                    + " bluetooth: " + mConnectedBluetoothDeviceCount
-                    + " remote: " + mRemoteDeviceCount);
-        }
-    }
-
-    @Override
-    public void onSelectedDeviceStateChanged(MediaDevice device, int state) {
-        if (DBG) {
-            Log.d(TAG, "onSelectedDeviceStateChanged - " + device.toString());
-        }
-
-        updateLoggingDeviceCount();
-
-        SettingsStatsLog.write(
-                SettingsStatsLog.MEDIAOUTPUT_OP_SWITCH_REPORTED,
-                getLoggingDeviceType(mSourceDevice, true),
-                getLoggingDeviceType(mTargetDevice, false),
-                SettingsStatsLog.MEDIA_OUTPUT_OP_SWITCH_REPORTED__RESULT__OK,
-                SettingsStatsLog.MEDIA_OUTPUT_OP_SWITCH_REPORTED__SUBRESULT__NO_ERROR,
-                getLoggingPackageName(),
-                mWiredDeviceCount,
-                mConnectedBluetoothDeviceCount,
-                mRemoteDeviceCount,
-                mAppliedDeviceCountWithinRemoteGroup);
-
-        super.onSelectedDeviceStateChanged(device, state);
-    }
-
-    @Override
-    public void onRequestFailed(int reason) {
-        if (DBG) {
-            Log.e(TAG, "onRequestFailed - " + reason);
-        }
-
-        updateLoggingDeviceCount();
-
-        SettingsStatsLog.write(
-                SettingsStatsLog.MEDIAOUTPUT_OP_SWITCH_REPORTED,
-                getLoggingDeviceType(mSourceDevice, true),
-                getLoggingDeviceType(mTargetDevice, false),
-                SettingsStatsLog.MEDIA_OUTPUT_OP_SWITCH_REPORTED__RESULT__ERROR,
-                getLoggingSwitchOpSubResult(reason),
-                getLoggingPackageName(),
-                mWiredDeviceCount,
-                mConnectedBluetoothDeviceCount,
-                mRemoteDeviceCount,
-                mAppliedDeviceCountWithinRemoteGroup);
-
-        super.onRequestFailed(reason);
-    }
-}