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

Commit ec890517 authored by Eric Laurent's avatar Eric Laurent Committed by Automerger Merge Worker
Browse files

Merge "SpatializerHelper: Deliver metrics to MediaMetrics" into tm-dev am:...

Merge "SpatializerHelper: Deliver metrics to MediaMetrics" into tm-dev am: e2049a89 am: 6280ea5e am: 39cf0dcd am: 735965fa

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18510742



Change-Id: Ib838b2d5ae7d86eae16c003400371a2aff11fb22
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 6957e3ff 735965fa
Loading
Loading
Loading
Loading
+10 −0
Original line number Original line Diff line number Diff line
@@ -107,6 +107,9 @@ public class MediaMetrics {


        public static final Key<String> EVENT = createKey("event#", String.class);
        public static final Key<String> EVENT = createKey("event#", String.class);


        // Generally string "true" or "false"
        public static final Key<String> ENABLED = createKey("enabled", String.class);

        // event generated is external (yes, no)
        // event generated is external (yes, no)
        public static final Key<String> EXTERNAL = createKey("external", String.class);
        public static final Key<String> EXTERNAL = createKey("external", String.class);


@@ -122,6 +125,13 @@ public class MediaMetrics {
        public static final Key<String> GROUP =
        public static final Key<String> GROUP =
                createKey("group", String.class);
                createKey("group", String.class);


        // Generally string "true" or "false"
        public static final Key<String> HAS_HEAD_TRACKER =
                createKey("hasHeadTracker", String.class);     // spatializer
        // Generally string "true" or "false"
        public static final Key<String> HEAD_TRACKER_ENABLED =
                createKey("headTrackerEnabled", String.class); // spatializer

        public static final Key<Integer> INDEX = createKey("index", Integer.class); // volume
        public static final Key<Integer> INDEX = createKey("index", Integer.class); // volume
        public static final Key<String> LOG_SESSION_ID = createKey("logSessionId", String.class);
        public static final Key<String> LOG_SESSION_ID = createKey("logSessionId", String.class);
        public static final Key<Integer> MAX_INDEX = createKey("maxIndex", Integer.class); // vol
        public static final Key<Integer> MAX_INDEX = createKey("maxIndex", Integer.class); // vol
+42 −5
Original line number Original line Diff line number Diff line
@@ -34,6 +34,7 @@ import android.media.ISpatializerHeadTrackerAvailableCallback;
import android.media.ISpatializerHeadTrackingCallback;
import android.media.ISpatializerHeadTrackingCallback;
import android.media.ISpatializerHeadTrackingModeCallback;
import android.media.ISpatializerHeadTrackingModeCallback;
import android.media.ISpatializerOutputCallback;
import android.media.ISpatializerOutputCallback;
import android.media.MediaMetrics;
import android.media.SpatializationLevel;
import android.media.SpatializationLevel;
import android.media.SpatializationMode;
import android.media.SpatializationMode;
import android.media.Spatializer;
import android.media.Spatializer;
@@ -524,6 +525,7 @@ public class SpatializerHelper {
        final int deviceType = ada.getType();
        final int deviceType = ada.getType();
        final boolean wireless = isWireless(deviceType);
        final boolean wireless = isWireless(deviceType);
        boolean isInList = false;
        boolean isInList = false;
        SADeviceState deviceUpdated = null; // non-null on update.


        for (SADeviceState deviceState : mSADevices) {
        for (SADeviceState deviceState : mSADevices) {
            if (deviceType == deviceState.mDeviceType
            if (deviceType == deviceState.mDeviceType
@@ -531,6 +533,7 @@ public class SpatializerHelper {
                isInList = true;
                isInList = true;
                if (forceEnable) {
                if (forceEnable) {
                    deviceState.mEnabled = true;
                    deviceState.mEnabled = true;
                    deviceUpdated = deviceState;
                }
                }
                break;
                break;
            }
            }
@@ -540,25 +543,54 @@ public class SpatializerHelper {
                    wireless ? ada.getAddress() : "");
                    wireless ? ada.getAddress() : "");
            dev.mEnabled = true;
            dev.mEnabled = true;
            mSADevices.add(dev);
            mSADevices.add(dev);
            deviceUpdated = dev;
        }
        }
        if (deviceUpdated != null) {
            onRoutingUpdated();
            onRoutingUpdated();
            mAudioService.persistSpatialAudioDeviceSettings();
            mAudioService.persistSpatialAudioDeviceSettings();
            logDeviceState(deviceUpdated, "addCompatibleAudioDevice");
        }
    }

    private static final String METRICS_DEVICE_PREFIX = "audio.spatializer.device.";

    // Device logging is accomplished in the Java Audio Service level.
    // (System capabilities is done in the Native AudioPolicyManager level).
    //
    // There may be different devices with the same device type (aliasing).
    // We always send the full device state info on each change.
    private void logDeviceState(SADeviceState deviceState, String event) {
        final String deviceName = AudioSystem.getDeviceName(deviceState.mDeviceType);
        new MediaMetrics.Item(METRICS_DEVICE_PREFIX + deviceName)
            .set(MediaMetrics.Property.ADDRESS, deviceState.mDeviceAddress)
            .set(MediaMetrics.Property.ENABLED, deviceState.mEnabled ? "true" : "false")
            .set(MediaMetrics.Property.EVENT, TextUtils.emptyIfNull(event))
            .set(MediaMetrics.Property.HAS_HEAD_TRACKER,
                    deviceState.mHasHeadTracker ? "true" : "false") // this may be updated later.
            .set(MediaMetrics.Property.HEAD_TRACKER_ENABLED,
                    deviceState.mHeadTrackerEnabled ? "true" : "false")
            .record();
    }
    }


    synchronized void removeCompatibleAudioDevice(@NonNull AudioDeviceAttributes ada) {
    synchronized void removeCompatibleAudioDevice(@NonNull AudioDeviceAttributes ada) {
        loglogi("removeCompatibleAudioDevice: dev=" + ada);
        loglogi("removeCompatibleAudioDevice: dev=" + ada);
        final int deviceType = ada.getType();
        final int deviceType = ada.getType();
        final boolean wireless = isWireless(deviceType);
        final boolean wireless = isWireless(deviceType);
        SADeviceState deviceUpdated = null; // non-null on update.


        for (SADeviceState deviceState : mSADevices) {
        for (SADeviceState deviceState : mSADevices) {
            if (deviceType == deviceState.mDeviceType
            if (deviceType == deviceState.mDeviceType
                    && (!wireless || ada.getAddress().equals(deviceState.mDeviceAddress))) {
                    && (!wireless || ada.getAddress().equals(deviceState.mDeviceAddress))) {
                deviceState.mEnabled = false;
                deviceState.mEnabled = false;
                deviceUpdated = deviceState;
                break;
                break;
            }
            }
        }
        }
        if (deviceUpdated != null) {
            onRoutingUpdated();
            onRoutingUpdated();
            mAudioService.persistSpatialAudioDeviceSettings();
            mAudioService.persistSpatialAudioDeviceSettings();
            logDeviceState(deviceUpdated, "removeCompatibleAudioDevice");
        }
    }
    }


    /**
    /**
@@ -630,8 +662,10 @@ public class SpatializerHelper {
            }
            }
        }
        }
        if (!knownDevice) {
        if (!knownDevice) {
            mSADevices.add(new SADeviceState(ada.getType(), ada.getAddress()));
            final SADeviceState deviceState = new SADeviceState(ada.getType(), ada.getAddress());
            mSADevices.add(deviceState);
            mAudioService.persistSpatialAudioDeviceSettings();
            mAudioService.persistSpatialAudioDeviceSettings();
            logDeviceState(deviceState, "addWirelessDeviceIfNew"); // may be updated later.
        }
        }
    }
    }


@@ -1070,6 +1104,7 @@ public class SpatializerHelper {
                Log.i(TAG, "setHeadTrackerEnabled enabled:" + enabled + " device:" + ada);
                Log.i(TAG, "setHeadTrackerEnabled enabled:" + enabled + " device:" + ada);
                deviceState.mHeadTrackerEnabled = enabled;
                deviceState.mHeadTrackerEnabled = enabled;
                mAudioService.persistSpatialAudioDeviceSettings();
                mAudioService.persistSpatialAudioDeviceSettings();
                logDeviceState(deviceState, "setHeadTrackerEnabled");
                break;
                break;
            }
            }
        }
        }
@@ -1119,6 +1154,7 @@ public class SpatializerHelper {
                if (!deviceState.mHasHeadTracker) {
                if (!deviceState.mHasHeadTracker) {
                    deviceState.mHasHeadTracker = true;
                    deviceState.mHasHeadTracker = true;
                    mAudioService.persistSpatialAudioDeviceSettings();
                    mAudioService.persistSpatialAudioDeviceSettings();
                    logDeviceState(deviceState, "setHasHeadTracker");
                }
                }
                return deviceState.mHeadTrackerEnabled;
                return deviceState.mHeadTrackerEnabled;
            }
            }
@@ -1585,6 +1621,7 @@ public class SpatializerHelper {
            SADeviceState devState = SADeviceState.fromPersistedString(setting);
            SADeviceState devState = SADeviceState.fromPersistedString(setting);
            if (devState != null) {
            if (devState != null) {
                mSADevices.add(devState);
                mSADevices.add(devState);
                logDeviceState(devState, "setSADeviceSettings");
            }
            }
        }
        }
    }
    }