Merge "Add fg playback restriction checks and logging" into main
diff --git a/services/audioflinger/IAfTrack.h b/services/audioflinger/IAfTrack.h
index c9c766f..04ae49e 100644
--- a/services/audioflinger/IAfTrack.h
+++ b/services/audioflinger/IAfTrack.h
@@ -395,6 +395,11 @@
     virtual bool isDisabled() const = 0;
 
     virtual int& fastIndex() = 0;
+
+    // Restricted due to OP_PLAY_AUDIO
+    virtual bool isPlaybackRestrictedOp() const = 0;
+    // Restricted due to OP_AUDIO_CONTROL_SOFT
+    virtual bool isPlaybackRestrictedControl() const = 0;
     virtual bool isPlaybackRestricted() const = 0;
 
     // Used by thread only
diff --git a/services/audioflinger/PlaybackTracks.h b/services/audioflinger/PlaybackTracks.h
index c335c70..6f39ee9 100644
--- a/services/audioflinger/PlaybackTracks.h
+++ b/services/audioflinger/PlaybackTracks.h
@@ -291,9 +291,20 @@
     bool isDisabled() const final;
 
     int& fastIndex() final { return mFastIndex; }
-    bool isPlaybackRestricted() const final {
+
+    bool isPlaybackRestrictedOp() const final {
         // The monitor is only created for tracks that can be silenced.
-        return mOpPlayAudioMonitor ? !mOpPlayAudioMonitor->hasOpPlayAudio() : false; }
+        return mOpPlayAudioMonitor ? !mOpPlayAudioMonitor->hasOpPlayAudio() : false;
+    }
+
+    bool isPlaybackRestrictedControl() const final {
+        return false;
+        // return mOpAudioControlSoftMonitor ? !mOpAudioControlSoftMonitor->hasOp() : false;
+    }
+
+    bool isPlaybackRestricted() const final {
+        return isPlaybackRestrictedOp() || isPlaybackRestrictedControl();
+    }
 
     const sp<AudioTrackServerProxy>& audioTrackServerProxy() const final {
         return mAudioTrackServerProxy;
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index 2d2ab54..1843030 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -5891,19 +5891,21 @@
                             /*muteState=*/{masterVolume == 0.f,
                                            mStreamTypes[track->streamType()].volume == 0.f,
                                            mStreamTypes[track->streamType()].mute,
-                                           track->isPlaybackRestricted(),
+                                           track->isPlaybackRestrictedOp(),
                                            vlf == 0.f && vrf == 0.f,
                                            vh == 0.f,
-                                           /*muteFromPortVolume=*/false});
+                                           /*muteFromPortVolume=*/false,
+                                           track->isPlaybackRestrictedControl()});
                 } else {
                     track->processMuteEvent_l(mAfThreadCallback->getOrCreateAudioManager(),
                             /*muteState=*/{masterVolume == 0.f,
                                            track->getPortVolume() == 0.f,
                                            /* muteFromStreamMuted= */ false,
-                                           track->isPlaybackRestricted(),
+                                           track->isPlaybackRestrictedOp(),
                                            vlf == 0.f && vrf == 0.f,
                                            vh == 0.f,
-                                           track->getPortMute()});
+                                           track->getPortMute(),
+                                           track->isPlaybackRestrictedControl()});
                 }
                 vlf *= volume;
                 vrf *= volume;
@@ -6093,19 +6095,21 @@
                             /*muteState=*/{masterVolume == 0.f,
                                            mStreamTypes[track->streamType()].volume == 0.f,
                                            mStreamTypes[track->streamType()].mute,
-                                           track->isPlaybackRestricted(),
+                                           track->isPlaybackRestrictedOp(),
                                            vlf == 0.f && vrf == 0.f,
                                            vh == 0.f,
-                                           /*muteFromPortVolume=*/false});
+                                           /*muteFromPortVolume=*/false,
+                                           track->isPlaybackRestrictedControl()});
                 } else {
                     track->processMuteEvent_l(mAfThreadCallback->getOrCreateAudioManager(),
                             /*muteState=*/{masterVolume == 0.f,
                                            track->getPortVolume() == 0.f,
                                            /* muteFromStreamMuted= */ false,
-                                           track->isPlaybackRestricted(),
+                                           track->isPlaybackRestrictedOp(),
                                            vlf == 0.f && vrf == 0.f,
                                            vh == 0.f,
-                                           track->getPortMute()});
+                                           track->getPortMute(),
+                                           track->isPlaybackRestrictedControl()});
                 }
                 // now apply the master volume and stream type volume and shaper volume
                 vlf *= v * vh;
@@ -6861,10 +6865,11 @@
                 /*muteState=*/{mMasterMute,
                                mStreamTypes[track->streamType()].volume == 0.f,
                                mStreamTypes[track->streamType()].mute,
-                               track->isPlaybackRestricted(),
+                               track->isPlaybackRestrictedOp(),
                                clientVolumeMute,
                                shaperVolume == 0.f,
-                               /*muteFromPortVolume=*/false});
+                               /*muteFromPortVolume=*/false,
+                               track->isPlaybackRestrictedControl()});
     } else {
         if (mMasterMute || track->isPlaybackRestricted()) {
             left = right = 0;
@@ -6890,10 +6895,11 @@
                 /*muteState=*/{mMasterMute,
                                track->getPortVolume() == 0.f,
                                /* muteFromStreamMuted= */ false,
-                               track->isPlaybackRestricted(),
+                               track->isPlaybackRestrictedOp(),
                                clientVolumeMute,
                                shaperVolume == 0.f,
-                               track->getPortMute()});
+                               track->getPortMute(),
+                               track->isPlaybackRestrictedControl()});
     }
 
     if (lastTrack) {