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

Commit e5fd9cef authored by Yixiao Luo's avatar Yixiao Luo
Browse files

Add guardedBy annotation to related variables and functions in

TvInputHardwareManager

Bug: 319176501
Test: presubmit
Change-Id: I75d3a42e5b9f91bf48dda2797cd68ffd01ae1e7f
parent 4d29ed23
Loading
Loading
Loading
Loading
+60 −7
Original line number Diff line number Diff line
@@ -60,6 +60,7 @@ import android.util.SparseArray;
import android.util.SparseBooleanArray;
import android.view.Surface;

import com.android.internal.annotations.GuardedBy;
import com.android.internal.os.SomeArgs;
import com.android.internal.util.DumpUtils;
import com.android.internal.util.IndentingPrintWriter;
@@ -88,15 +89,25 @@ class TvInputHardwareManager implements TvInputHal.Callback {
    private final Context mContext;
    private final Listener mListener;
    private final TvInputHal mHal = new TvInputHal(this);

    private final Object mLock = new Object();

    @GuardedBy("mLock")
    private final SparseArray<Connection> mConnections = new SparseArray<>();
    @GuardedBy("mLock")
    private final List<TvInputHardwareInfo> mHardwareList = new ArrayList<>();
    @GuardedBy("mLock")
    private final List<HdmiDeviceInfo> mHdmiDeviceList = new ArrayList<>();
    /* A map from a device ID to the matching TV input ID. */
    @GuardedBy("mLock")
    private final SparseArray<String> mHardwareInputIdMap = new SparseArray<>();
    /* A map from a HDMI logical address to the matching TV input ID. */
    @GuardedBy("mLock")
    private final SparseArray<String> mHdmiInputIdMap = new SparseArray<>();
    @GuardedBy("mLock")
    private final Map<String, TvInputInfo> mInputMap = new ArrayMap<>();
    /* A map from a HDMI input parent ID to the related input IDs. */
    @GuardedBy("mLock")
    private final Map<String, List<String>> mHdmiParentInputMap = new ArrayMap<>();

    private final AudioManager mAudioManager;
@@ -114,16 +125,16 @@ class TvInputHardwareManager implements TvInputHal.Callback {
    private int mCurrentIndex = 0;
    private int mCurrentMaxIndex = 0;

    @GuardedBy("mLock")
    private final SparseBooleanArray mHdmiStateMap = new SparseBooleanArray();
    @GuardedBy("mLock")
    private final List<Message> mPendingHdmiDeviceEvents = new ArrayList<>();

    @GuardedBy("mLock")
    private final List<Message> mPendingTvinputInfoEvents = new ArrayList<>();

    // Calls to mListener should happen here.
    private final Handler mHandler = new ListenerHandler();

    private final Object mLock = new Object();

    public TvInputHardwareManager(Context context, Listener listener) {
        mContext = context;
        mListener = listener;
@@ -141,7 +152,9 @@ class TvInputHardwareManager implements TvInputHal.Callback {
                    hdmiControlService.addDeviceEventListener(mHdmiDeviceEventListener);
                    hdmiControlService.addSystemAudioModeChangeListener(
                            mHdmiSystemAudioModeChangeListener);
                    synchronized (mLock) {
                        mHdmiDeviceList.addAll(hdmiControlService.getInputDevices());
                    }
                } catch (RemoteException e) {
                    Slog.w(TAG, "Error registering listeners to HdmiControlService:", e);
                }
@@ -172,6 +185,7 @@ class TvInputHardwareManager implements TvInputHal.Callback {
        }
    }

    @GuardedBy("mLock")
    private void buildHardwareListLocked() {
        mHardwareList.clear();
        for (int i = 0; i < mConnections.size(); ++i) {
@@ -301,6 +315,7 @@ class TvInputHardwareManager implements TvInputHal.Callback {
        }
    }

    @GuardedBy("mLock")
    private boolean checkUidChangedLocked(
            Connection connection, int callingUid, int resolvedUserId) {
        Integer connectionCallingUid = connection.getCallingUidLocked();
@@ -496,6 +511,7 @@ class TvInputHardwareManager implements TvInputHal.Callback {
        }
    }

    @GuardedBy("mLock")
    private TvInputHardwareInfo findHardwareInfoForHdmiPortLocked(int port) {
        for (TvInputHardwareInfo hardwareInfo : mHardwareList) {
            if (hardwareInfo.getType() == TvInputHardwareInfo.TV_INPUT_TYPE_HDMI
@@ -506,6 +522,7 @@ class TvInputHardwareManager implements TvInputHal.Callback {
        return null;
    }

    @GuardedBy("mLock")
    private int findDeviceIdForInputIdLocked(String inputId) {
        for (int i = 0; i < mConnections.size(); ++i) {
            int key = mConnections.keyAt(i);
@@ -597,6 +614,7 @@ class TvInputHardwareManager implements TvInputHal.Callback {
        return false;
    }

    @GuardedBy("mLock")
    private void processPendingHdmiDeviceEventsLocked() {
        for (Iterator<Message> it = mPendingHdmiDeviceEvents.iterator(); it.hasNext(); ) {
            Message msg = it.next();
@@ -611,6 +629,7 @@ class TvInputHardwareManager implements TvInputHal.Callback {
    }


    @GuardedBy("mLock")
    private void processPendingTvInputInfoEventsLocked() {
        for (Iterator<Message> it = mPendingTvinputInfoEvents.iterator(); it.hasNext(); ) {
            Message msg = it.next();
@@ -748,6 +767,7 @@ class TvInputHardwareManager implements TvInputHal.Callback {

        // *Locked methods assume TvInputHardwareManager.mLock is held.

        @GuardedBy("mLock")
        public void resetLocked(TvInputHardwareImpl hardware, ITvInputHardwareCallback callback,
                TvInputInfo info, Integer callingUid, Integer resolvedUserId,
                ResourceClientProfile profile) {
@@ -776,50 +796,62 @@ class TvInputHardwareManager implements TvInputHal.Callback {
            }
        }

        @GuardedBy("mLock")
        public void updateConfigsLocked(TvStreamConfig[] configs) {
            mConfigs = configs;
        }

        @GuardedBy("mLock")
        public TvInputHardwareInfo getHardwareInfoLocked() {
            return mHardwareInfo;
        }

        @GuardedBy("mLock")
        public TvInputInfo getInfoLocked() {
            return mInfo;
        }

        @GuardedBy("mLock")
        public ITvInputHardware getHardwareLocked() {
            return mHardware;
        }

        @GuardedBy("mLock")
        public TvInputHardwareImpl getHardwareImplLocked() {
            return mHardware;
        }

        @GuardedBy("mLock")
        public ITvInputHardwareCallback getCallbackLocked() {
            return mCallback;
        }

        @GuardedBy("mLock")
        public TvStreamConfig[] getConfigsLocked() {
            return mConfigs;
        }

        @GuardedBy("mLock")
        public Integer getCallingUidLocked() {
            return mCallingUid;
        }

        @GuardedBy("mLock")
        public Integer getResolvedUserIdLocked() {
            return mResolvedUserId;
        }

        @GuardedBy("mLock")
        public void setOnFirstFrameCapturedLocked(Runnable runnable) {
            mOnFirstFrameCaptured = runnable;
        }

        @GuardedBy("mLock")
        public Runnable getOnFirstFrameCapturedLocked() {
            return mOnFirstFrameCaptured;
        }

        @GuardedBy("mLock")
        public ResourceClientProfile getResourceClientProfileLocked() {
            return mResourceClientProfile;
        }
@@ -844,6 +876,7 @@ class TvInputHardwareManager implements TvInputHal.Callback {
                    + " }";
        }

        @GuardedBy("mLock")
        public boolean updateCableConnectionStatusLocked(int cableConnectionStatus) {
            // Update connection status only if it's not default value
            if (cableConnectionStatus != TvInputHardwareInfo.CABLE_CONNECTION_STATUS_UNKNOWN
@@ -855,10 +888,12 @@ class TvInputHardwareManager implements TvInputHal.Callback {
            return mIsCableConnectionStatusUpdated;
        }

        @GuardedBy("mLock")
        private int getConfigsLengthLocked() {
            return mConfigs == null ? 0 : mConfigs.length;
        }

        @GuardedBy("mLock")
        private int getInputStateLocked() {
            int configsLength = getConfigsLengthLocked();
            if (configsLength > 0) {
@@ -880,7 +915,6 @@ class TvInputHardwareManager implements TvInputHal.Callback {

    private class TvInputHardwareImpl extends ITvInputHardware.Stub {
        private final TvInputHardwareInfo mInfo;
        private boolean mReleased = false;
        private final Object mImplLock = new Object();

        private final AudioManager.OnAudioPortUpdateListener mAudioListener =
@@ -909,30 +943,46 @@ class TvInputHardwareManager implements TvInputHal.Callback {
                }
            }
        };
        @GuardedBy("mImplLock")
        private boolean mReleased = false;
        @GuardedBy("mImplLock")
        private int mOverrideAudioType = AudioManager.DEVICE_NONE;
        @GuardedBy("mImplLock")
        private String mOverrideAudioAddress = "";
        @GuardedBy("mImplLock")
        private AudioDevicePort mAudioSource;
        @GuardedBy("mImplLock")
        private List<AudioDevicePort> mAudioSink = new ArrayList<>();
        @GuardedBy("mImplLock")
        private AudioPatch mAudioPatch = null;
        // Set to an invalid value for a volume, so that current volume can be applied at the
        // first call to updateAudioConfigLocked().
        @GuardedBy("mImplLock")
        private float mCommittedVolume = -1f;
        @GuardedBy("mImplLock")
        private float mSourceVolume = 0.0f;

        @GuardedBy("mImplLock")
        private TvStreamConfig mActiveConfig = null;

        @GuardedBy("mImplLock")
        private int mDesiredSamplingRate = 0;
        @GuardedBy("mImplLock")
        private int mDesiredChannelMask = AudioFormat.CHANNEL_OUT_DEFAULT;
        @GuardedBy("mImplLock")
        private int mDesiredFormat = AudioFormat.ENCODING_DEFAULT;

        public TvInputHardwareImpl(TvInputHardwareInfo info) {
            mInfo = info;
            mAudioManager.registerAudioPortUpdateListener(mAudioListener);
            if (mInfo.getAudioType() != AudioManager.DEVICE_NONE) {
                mAudioSource = findAudioDevicePort(mInfo.getAudioType(), mInfo.getAudioAddress());
                synchronized (mImplLock) {
                    mAudioSource =
                            findAudioDevicePort(mInfo.getAudioType(), mInfo.getAudioAddress());
                    findAudioSinkFromAudioPolicy(mAudioSink);
                }
            }
        }

        private void findAudioSinkFromAudioPolicy(List<AudioDevicePort> sinks) {
            sinks.clear();
@@ -1025,6 +1075,7 @@ class TvInputHardwareManager implements TvInputHal.Callback {
        /**
         * Update audio configuration (source, sink, patch) all up to current state.
         */
        @GuardedBy("mImplLock")
        private void updateAudioConfigLocked() {
            boolean sinkUpdated = updateAudioSinkLocked();
            boolean sourceUpdated = updateAudioSourceLocked();
@@ -1204,6 +1255,7 @@ class TvInputHardwareManager implements TvInputHal.Callback {
            }
        }

        @GuardedBy("mImplLock")
        private boolean updateAudioSourceLocked() {
            if (mInfo.getAudioType() == AudioManager.DEVICE_NONE) {
                return false;
@@ -1214,6 +1266,7 @@ class TvInputHardwareManager implements TvInputHal.Callback {
                    : !mAudioSource.equals(previousSource);
        }

        @GuardedBy("mImplLock")
        private boolean updateAudioSinkLocked() {
            if (mInfo.getAudioType() == AudioManager.DEVICE_NONE) {
                return false;