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

Commit 62e98c42 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Use Volume Group core callback in volume preference rather than intent"

parents 51541ec2 59f209da
Loading
Loading
Loading
Loading
+83 −3
Original line number Original line Diff line number Diff line
@@ -27,6 +27,8 @@ import android.media.AudioAttributes;
import android.media.AudioManager;
import android.media.AudioManager;
import android.media.Ringtone;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.media.RingtoneManager;
import android.media.audiopolicy.AudioProductStrategies;
import android.media.audiopolicy.AudioVolumeGroups;
import android.net.Uri;
import android.net.Uri;
import android.os.Handler;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.HandlerThread;
@@ -41,6 +43,7 @@ import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.SeekBar.OnSeekBarChangeListener;


import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.os.SomeArgs;


/**
/**
 * Turns a {@link SeekBar} into a volume control.
 * Turns a {@link SeekBar} into a volume control.
@@ -62,6 +65,26 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba
        void onMuted(boolean muted, boolean zenMuted);
        void onMuted(boolean muted, boolean zenMuted);
    }
    }


    private static final int MSG_GROUP_VOLUME_CHANGED = 1;
    private final Handler mVolumeHandler = new VolumeHandler();
    private final AudioProductStrategies mAudioProductStrategies;
    private AudioAttributes mAttributes;
    private int mVolumeGroupId;

    private final AudioManager.VolumeGroupCallback mVolumeGroupCallback =
            new AudioManager.VolumeGroupCallback() {
        @Override
        public void onAudioVolumeGroupChanged(int group, int flags) {
            if (mHandler == null) {
                return;
            }
            SomeArgs args = SomeArgs.obtain();
            args.arg1 = group;
            args.arg2 = flags;
            mVolumeHandler.sendMessage(mHandler.obtainMessage(MSG_GROUP_VOLUME_CHANGED, args));
        }
    };

    @UnsupportedAppUsage
    @UnsupportedAppUsage
    private final Context mContext;
    private final Context mContext;
    private final H mUiHandler = new H();
    private final H mUiHandler = new H();
@@ -137,6 +160,15 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba
            mRingerMode = mAudioManager.getRingerModeInternal();
            mRingerMode = mAudioManager.getRingerModeInternal();
        }
        }
        mZenMode = mNotificationManager.getZenMode();
        mZenMode = mNotificationManager.getZenMode();

        mAudioProductStrategies = mAudioManager.getAudioProductStrategies();
        if (mAudioProductStrategies.size() > 0) {
            mVolumeGroupId = mAudioProductStrategies.getVolumeGroupIdForLegacyStreamType(
                    mStreamType);
            mAttributes = mAudioProductStrategies.getAudioAttributesForLegacyStreamType(
                    mStreamType);
        }

        mMaxStreamVolume = mAudioManager.getStreamMaxVolume(mStreamType);
        mMaxStreamVolume = mAudioManager.getStreamMaxVolume(mStreamType);
        mCallback = callback;
        mCallback = callback;
        mOriginalStreamVolume = mAudioManager.getStreamVolume(mStreamType);
        mOriginalStreamVolume = mAudioManager.getStreamVolume(mStreamType);
@@ -297,6 +329,9 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba
        postStopSample();
        postStopSample();
        mContext.getContentResolver().unregisterContentObserver(mVolumeObserver);
        mContext.getContentResolver().unregisterContentObserver(mVolumeObserver);
        mReceiver.setListening(false);
        mReceiver.setListening(false);
        if (mAudioProductStrategies.size() > 0) {
            unregisterVolumeGroupCb();
        }
        mSeekBar.setOnSeekBarChangeListener(null);
        mSeekBar.setOnSeekBarChangeListener(null);
        mHandler.getLooper().quitSafely();
        mHandler.getLooper().quitSafely();
        mHandler = null;
        mHandler = null;
@@ -314,6 +349,9 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba
                System.getUriFor(System.VOLUME_SETTINGS_INT[mStreamType]),
                System.getUriFor(System.VOLUME_SETTINGS_INT[mStreamType]),
                false, mVolumeObserver);
                false, mVolumeObserver);
        mReceiver.setListening(true);
        mReceiver.setListening(true);
        if (mAudioProductStrategies.size() > 0) {
            registerVolumeGroupCb();
        }
    }
    }


    public void revertVolume() {
    public void revertVolume() {
@@ -469,7 +507,9 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba
            if (AudioManager.VOLUME_CHANGED_ACTION.equals(action)) {
            if (AudioManager.VOLUME_CHANGED_ACTION.equals(action)) {
                int streamType = intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE, -1);
                int streamType = intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE, -1);
                int streamValue = intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_VALUE, -1);
                int streamValue = intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_VALUE, -1);
                if (mAudioProductStrategies.size() == 0) {
                    updateVolumeSlider(streamType, streamValue);
                    updateVolumeSlider(streamType, streamValue);
                }
            } else if (AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION.equals(action)) {
            } else if (AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION.equals(action)) {
                if (mNotificationOrRing) {
                if (mNotificationOrRing) {
                    mRingerMode = mAudioManager.getRingerModeInternal();
                    mRingerMode = mAudioManager.getRingerModeInternal();
@@ -479,8 +519,18 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba
                }
                }
            } else if (AudioManager.STREAM_DEVICES_CHANGED_ACTION.equals(action)) {
            } else if (AudioManager.STREAM_DEVICES_CHANGED_ACTION.equals(action)) {
                int streamType = intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE, -1);
                int streamType = intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE, -1);
                if (mAudioProductStrategies.size() == 0) {
                    int streamVolume = mAudioManager.getStreamVolume(streamType);
                    updateVolumeSlider(streamType, streamVolume);
                } else {
                    int volumeGroup = mAudioProductStrategies.getVolumeGroupIdForLegacyStreamType(
                            streamType);
                    if (volumeGroup != AudioVolumeGroups.DEFAULT_VOLUME_GROUP
                            && volumeGroup == mVolumeGroupId) {
                        int streamVolume = mAudioManager.getStreamVolume(streamType);
                        int streamVolume = mAudioManager.getStreamVolume(streamType);
                        updateVolumeSlider(streamType, streamVolume);
                        updateVolumeSlider(streamType, streamVolume);
                    }
                }
            } else if (NotificationManager.ACTION_INTERRUPTION_FILTER_CHANGED.equals(action)) {
            } else if (NotificationManager.ACTION_INTERRUPTION_FILTER_CHANGED.equals(action)) {
                mZenMode = mNotificationManager.getZenMode();
                mZenMode = mNotificationManager.getZenMode();
                updateSlider();
                updateSlider();
@@ -506,4 +556,34 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba
            }
            }
        }
        }
    }
    }

    private void registerVolumeGroupCb() {
        if (mVolumeGroupId != AudioVolumeGroups.DEFAULT_VOLUME_GROUP) {
            mAudioManager.registerVolumeGroupCallback(Runnable::run, mVolumeGroupCallback);
            mLastProgress = mAudioManager.getVolumeIndexForAttributes(mAttributes);
        }
    }

    private void unregisterVolumeGroupCb() {
        if (mVolumeGroupId != AudioVolumeGroups.DEFAULT_VOLUME_GROUP) {
            mAudioManager.unregisterVolumeGroupCallback(mVolumeGroupCallback);
        }
    }

    private class VolumeHandler extends Handler {
        @Override
        public void handleMessage(Message msg) {
            SomeArgs args = (SomeArgs) msg.obj;
            switch (msg.what) {
                case MSG_GROUP_VOLUME_CHANGED:
                    int group = (int) args.arg1;
                    if (mVolumeGroupId != group
                            || mVolumeGroupId == AudioVolumeGroups.DEFAULT_VOLUME_GROUP) {
                        return;
                    }
                    updateSlider();
                    break;
            }
        }
    }
}
}