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

Commit 03d8d7c8 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Added RingModeTracker" into rvc-dev am: 57404b39 am: 7e64adb6 am: 047d8474

Change-Id: Ic80a14cde5bd99a03ba050da205028499c885183
parents 5e3e56b4 047d8474
Loading
Loading
Loading
Loading
+20 −5
Original line number Original line Diff line number Diff line
@@ -57,7 +57,6 @@ import android.hardware.face.FaceManager;
import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.FingerprintManager.AuthenticationCallback;
import android.hardware.fingerprint.FingerprintManager.AuthenticationCallback;
import android.hardware.fingerprint.FingerprintManager.AuthenticationResult;
import android.hardware.fingerprint.FingerprintManager.AuthenticationResult;
import android.media.AudioManager;
import android.os.CancellationSignal;
import android.os.CancellationSignal;
import android.os.Handler;
import android.os.Handler;
import android.os.IRemoteCallback;
import android.os.IRemoteCallback;
@@ -82,6 +81,8 @@ import android.util.Log;
import android.util.SparseArray;
import android.util.SparseArray;
import android.util.SparseBooleanArray;
import android.util.SparseBooleanArray;


import androidx.lifecycle.Observer;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.widget.LockPatternUtils;
import com.android.internal.widget.LockPatternUtils;
import com.android.settingslib.WirelessUtils;
import com.android.settingslib.WirelessUtils;
@@ -97,6 +98,7 @@ import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.TaskStackChangeListener;
import com.android.systemui.shared.system.TaskStackChangeListener;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.util.Assert;
import com.android.systemui.util.Assert;
import com.android.systemui.util.RingerModeTracker;


import com.google.android.collect.Lists;
import com.google.android.collect.Lists;


@@ -258,6 +260,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
    private TrustManager mTrustManager;
    private TrustManager mTrustManager;
    private UserManager mUserManager;
    private UserManager mUserManager;
    private KeyguardBypassController mKeyguardBypassController;
    private KeyguardBypassController mKeyguardBypassController;
    private RingerModeTracker mRingerModeTracker;
    private int mFingerprintRunningState = BIOMETRIC_STATE_STOPPED;
    private int mFingerprintRunningState = BIOMETRIC_STATE_STOPPED;
    private int mFaceRunningState = BIOMETRIC_STATE_STOPPED;
    private int mFaceRunningState = BIOMETRIC_STATE_STOPPED;
    private LockPatternUtils mLockPatternUtils;
    private LockPatternUtils mLockPatternUtils;
@@ -295,6 +298,13 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab


    private final Handler mHandler;
    private final Handler mHandler;


    private final Observer<Integer> mRingerModeObserver = new Observer<Integer>() {
        @Override
        public void onChanged(Integer ringer) {
            mHandler.obtainMessage(MSG_RINGER_MODE_CHANGED, ringer, 0).sendToTarget();
        }
    };

    private SparseBooleanArray mFaceSettingEnabledForUser = new SparseBooleanArray();
    private SparseBooleanArray mFaceSettingEnabledForUser = new SparseBooleanArray();
    private BiometricManager mBiometricManager;
    private BiometricManager mBiometricManager;
    private IBiometricEnabledOnKeyguardCallback mBiometricEnabledCallback =
    private IBiometricEnabledOnKeyguardCallback mBiometricEnabledCallback =
@@ -1145,9 +1155,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
                }
                }
                mHandler.obtainMessage(MSG_SIM_STATE_CHANGE, args.subId, args.slotId, args.simState)
                mHandler.obtainMessage(MSG_SIM_STATE_CHANGE, args.subId, args.slotId, args.simState)
                        .sendToTarget();
                        .sendToTarget();
            } else if (AudioManager.RINGER_MODE_CHANGED_ACTION.equals(action)) {
                mHandler.sendMessage(mHandler.obtainMessage(MSG_RINGER_MODE_CHANGED,
                        intent.getIntExtra(AudioManager.EXTRA_RINGER_MODE, -1), 0));
            } else if (TelephonyManager.ACTION_PHONE_STATE_CHANGED.equals(action)) {
            } else if (TelephonyManager.ACTION_PHONE_STATE_CHANGED.equals(action)) {
                String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
                String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
                mHandler.sendMessage(mHandler.obtainMessage(MSG_PHONE_STATE_CHANGED, state));
                mHandler.sendMessage(mHandler.obtainMessage(MSG_PHONE_STATE_CHANGED, state));
@@ -1501,6 +1508,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
        mUserTrustIsUsuallyManaged.delete(userId);
        mUserTrustIsUsuallyManaged.delete(userId);
    }
    }


    private void registerRingerTracker() {
        mRingerModeTracker.getRingerMode().observeForever(mRingerModeObserver);
    }

    @VisibleForTesting
    @VisibleForTesting
    @Inject
    @Inject
    protected KeyguardUpdateMonitor(
    protected KeyguardUpdateMonitor(
@@ -1508,6 +1519,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
            @Main Looper mainLooper,
            @Main Looper mainLooper,
            BroadcastDispatcher broadcastDispatcher,
            BroadcastDispatcher broadcastDispatcher,
            DumpManager dumpManager,
            DumpManager dumpManager,
            RingerModeTracker ringerModeTracker,
            @Background Executor backgroundExecutor) {
            @Background Executor backgroundExecutor) {
        mContext = context;
        mContext = context;
        mSubscriptionManager = SubscriptionManager.from(context);
        mSubscriptionManager = SubscriptionManager.from(context);
@@ -1515,6 +1527,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
        mStrongAuthTracker = new StrongAuthTracker(context, this::notifyStrongAuthStateChanged);
        mStrongAuthTracker = new StrongAuthTracker(context, this::notifyStrongAuthStateChanged);
        mBackgroundExecutor = backgroundExecutor;
        mBackgroundExecutor = backgroundExecutor;
        mBroadcastDispatcher = broadcastDispatcher;
        mBroadcastDispatcher = broadcastDispatcher;
        mRingerModeTracker = ringerModeTracker;
        dumpManager.registerDumpable(getClass().getName(), this);
        dumpManager.registerDumpable(getClass().getName(), this);


        mHandler = new Handler(mainLooper) {
        mHandler = new Handler(mainLooper) {
@@ -1648,10 +1661,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
        filter.addAction(Intent.ACTION_SERVICE_STATE);
        filter.addAction(Intent.ACTION_SERVICE_STATE);
        filter.addAction(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED);
        filter.addAction(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED);
        filter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED);
        filter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED);
        filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION);
        filter.addAction(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED);
        filter.addAction(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED);
        mBroadcastDispatcher.registerReceiverWithHandler(mBroadcastReceiver, filter, mHandler);
        mBroadcastDispatcher.registerReceiverWithHandler(mBroadcastReceiver, filter, mHandler);


        mHandler.post(this::registerRingerTracker);

        final IntentFilter allUserFilter = new IntentFilter();
        final IntentFilter allUserFilter = new IntentFilter();
        allUserFilter.addAction(Intent.ACTION_USER_INFO_CHANGED);
        allUserFilter.addAction(Intent.ACTION_USER_INFO_CHANGED);
        allUserFilter.addAction(AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED);
        allUserFilter.addAction(AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED);
@@ -2802,6 +2816,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab


        mBroadcastDispatcher.unregisterReceiver(mBroadcastReceiver);
        mBroadcastDispatcher.unregisterReceiver(mBroadcastReceiver);
        mBroadcastDispatcher.unregisterReceiver(mBroadcastAllReceiver);
        mBroadcastDispatcher.unregisterReceiver(mBroadcastAllReceiver);
        mRingerModeTracker.getRingerMode().removeObserver(mRingerModeObserver);


        mHandler.removeCallbacksAndMessages(null);
        mHandler.removeCallbacksAndMessages(null);
    }
    }
+8 −0
Original line number Original line Diff line number Diff line
@@ -74,6 +74,8 @@ import com.android.systemui.statusbar.policy.ZenModeController;
import com.android.systemui.statusbar.policy.ZenModeControllerImpl;
import com.android.systemui.statusbar.policy.ZenModeControllerImpl;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.tuner.TunerServiceImpl;
import com.android.systemui.tuner.TunerServiceImpl;
import com.android.systemui.util.RingerModeTracker;
import com.android.systemui.util.RingerModeTrackerImpl;
import com.android.systemui.volume.VolumeComponent;
import com.android.systemui.volume.VolumeComponent;
import com.android.systemui.volume.VolumeDialogComponent;
import com.android.systemui.volume.VolumeDialogComponent;
import com.android.systemui.volume.VolumeDialogControllerImpl;
import com.android.systemui.volume.VolumeDialogControllerImpl;
@@ -264,4 +266,10 @@ public abstract class DependencyBinder {
    @Binds
    @Binds
    public abstract VolumeComponent provideVolumeComponent(
    public abstract VolumeComponent provideVolumeComponent(
            VolumeDialogComponent volumeDialogComponent);
            VolumeDialogComponent volumeDialogComponent);

    /**
     */
    @Binds
    public abstract RingerModeTracker provideRingerModeTracker(
            RingerModeTrackerImpl ringerModeTrackerImpl);
}
}
+30 −25
Original line number Original line Diff line number Diff line
@@ -80,6 +80,11 @@ import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.ImageView.ScaleType;
import android.widget.TextView;
import android.widget.TextView;


import androidx.annotation.NonNull;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LifecycleRegistry;

import com.android.internal.R;
import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.colorextraction.ColorExtractor;
import com.android.internal.colorextraction.ColorExtractor;
@@ -116,6 +121,7 @@ import com.android.systemui.statusbar.phone.ScrimController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.EmergencyDialerConstants;
import com.android.systemui.util.EmergencyDialerConstants;
import com.android.systemui.util.RingerModeTracker;
import com.android.systemui.util.leak.RotationUtils;
import com.android.systemui.util.leak.RotationUtils;
import com.android.systemui.volume.SystemUIInterpolators.LogAccelerateInterpolator;
import com.android.systemui.volume.SystemUIInterpolators.LogAccelerateInterpolator;


@@ -132,7 +138,8 @@ import javax.inject.Inject;
public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
        DialogInterface.OnShowListener,
        DialogInterface.OnShowListener,
        ConfigurationController.ConfigurationListener,
        ConfigurationController.ConfigurationListener,
        GlobalActionsPanelPlugin.Callbacks {
        GlobalActionsPanelPlugin.Callbacks,
        LifecycleOwner {


    public static final String SYSTEM_DIALOG_REASON_KEY = "reason";
    public static final String SYSTEM_DIALOG_REASON_KEY = "reason";
    public static final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";
    public static final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";
@@ -181,6 +188,9 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
    private final NotificationShadeDepthController mDepthController;
    private final NotificationShadeDepthController mDepthController;
    private final BlurUtils mBlurUtils;
    private final BlurUtils mBlurUtils;


    // Used for RingerModeTracker
    private final LifecycleRegistry mLifecycle = new LifecycleRegistry(this);

    private ArrayList<Action> mItems;
    private ArrayList<Action> mItems;
    private ActionsDialog mDialog;
    private ActionsDialog mDialog;


@@ -211,6 +221,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
    private List<ControlsServiceInfo> mControlsServiceInfos = new ArrayList<>();
    private List<ControlsServiceInfo> mControlsServiceInfos = new ArrayList<>();
    private ControlsController mControlsController;
    private ControlsController mControlsController;
    private SharedPreferences mControlsPreferences;
    private SharedPreferences mControlsPreferences;
    private final RingerModeTracker mRingerModeTracker;


    @VisibleForTesting
    @VisibleForTesting
    public enum GlobalActionsEvent implements UiEventLogger.UiEventEnum {
    public enum GlobalActionsEvent implements UiEventLogger.UiEventEnum {
@@ -249,7 +260,8 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
            ControlsUiController controlsUiController, IWindowManager iWindowManager,
            ControlsUiController controlsUiController, IWindowManager iWindowManager,
            @Background Executor backgroundExecutor,
            @Background Executor backgroundExecutor,
            ControlsListingController controlsListingController,
            ControlsListingController controlsListingController,
            ControlsController controlsController, UiEventLogger uiEventLogger) {
            ControlsController controlsController, UiEventLogger uiEventLogger,
            RingerModeTracker ringerModeTracker) {
        mContext = new ContextThemeWrapper(context, com.android.systemui.R.style.qs_theme);
        mContext = new ContextThemeWrapper(context, com.android.systemui.R.style.qs_theme);
        mWindowManagerFuncs = windowManagerFuncs;
        mWindowManagerFuncs = windowManagerFuncs;
        mAudioManager = audioManager;
        mAudioManager = audioManager;
@@ -276,6 +288,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
        mBackgroundExecutor = backgroundExecutor;
        mBackgroundExecutor = backgroundExecutor;
        mControlsListingController = controlsListingController;
        mControlsListingController = controlsListingController;
        mBlurUtils = blurUtils;
        mBlurUtils = blurUtils;
        mRingerModeTracker = ringerModeTracker;
        mControlsController = controlsController;
        mControlsController = controlsController;


        // receive broadcasts
        // receive broadcasts
@@ -296,6 +309,11 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,


        mShowSilentToggle = SHOW_SILENT_TOGGLE && !resources.getBoolean(
        mShowSilentToggle = SHOW_SILENT_TOGGLE && !resources.getBoolean(
                R.bool.config_useFixedVolume);
                R.bool.config_useFixedVolume);
        if (mShowSilentToggle) {
            mRingerModeTracker.getRingerMode().observe(this, ringer ->
                    mHandler.sendEmptyMessage(MESSAGE_REFRESH)
            );
        }


        mEmergencyAffordanceManager = new EmergencyAffordanceManager(context);
        mEmergencyAffordanceManager = new EmergencyAffordanceManager(context);
        mScreenshotHelper = new ScreenshotHelper(context);
        mScreenshotHelper = new ScreenshotHelper(context);
@@ -1003,16 +1021,13 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
        refreshSilentMode();
        refreshSilentMode();
        mAirplaneModeOn.updateState(mAirplaneState);
        mAirplaneModeOn.updateState(mAirplaneState);
        mAdapter.notifyDataSetChanged();
        mAdapter.notifyDataSetChanged();
        if (mShowSilentToggle) {
        mLifecycle.setCurrentState(Lifecycle.State.RESUMED);
            IntentFilter filter = new IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION);
            mBroadcastDispatcher.registerReceiver(mRingerModeReceiver, filter);
        }
    }
    }


    private void refreshSilentMode() {
    private void refreshSilentMode() {
        if (!mHasVibrator) {
        if (!mHasVibrator) {
            final boolean silentModeOn =
            Integer value = mRingerModeTracker.getRingerMode().getValue();
                    mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_NORMAL;
            final boolean silentModeOn = value != null && value != AudioManager.RINGER_MODE_NORMAL;
            ((ToggleAction) mSilentModeAction).updateState(
            ((ToggleAction) mSilentModeAction).updateState(
                    silentModeOn ? ToggleState.On : ToggleState.Off);
                    silentModeOn ? ToggleState.On : ToggleState.Off);
        }
        }
@@ -1026,14 +1041,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
            mDialog = null;
            mDialog = null;
        }
        }
        mWindowManagerFuncs.onGlobalActionsHidden();
        mWindowManagerFuncs.onGlobalActionsHidden();
        if (mShowSilentToggle) {
        mLifecycle.setCurrentState(Lifecycle.State.DESTROYED);
            try {
                mBroadcastDispatcher.unregisterReceiver(mRingerModeReceiver);
            } catch (IllegalArgumentException ie) {
                // ignore this
                Log.w(TAG, ie);
            }
        }
    }
    }


    /**
    /**
@@ -1580,15 +1588,6 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
        }
        }
    };
    };


    private BroadcastReceiver mRingerModeReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(AudioManager.RINGER_MODE_CHANGED_ACTION)) {
                mHandler.sendEmptyMessage(MESSAGE_REFRESH);
            }
        }
    };

    private ContentObserver mAirplaneModeObserver = new ContentObserver(new Handler()) {
    private ContentObserver mAirplaneModeObserver = new ContentObserver(new Handler()) {
        @Override
        @Override
        public void onChange(boolean selfChange) {
        public void onChange(boolean selfChange) {
@@ -1654,6 +1653,12 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
        }
        }
    }
    }


    @NonNull
    @Override
    public Lifecycle getLifecycle() {
        return mLifecycle;
    }

    private static final class ActionsDialog extends Dialog implements DialogInterface,
    private static final class ActionsDialog extends Dialog implements DialogInterface,
            ColorExtractor.OnColorsChangedListener {
            ColorExtractor.OnColorsChangedListener {


+21 −17
Original line number Original line Diff line number Diff line
@@ -22,10 +22,8 @@ import static com.android.systemui.util.Utils.useQsMediaPlayer;
import android.annotation.ColorInt;
import android.annotation.ColorInt;
import android.app.ActivityManager;
import android.app.ActivityManager;
import android.app.AlarmManager;
import android.app.AlarmManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.ColorStateList;
import android.content.res.ColorStateList;
import android.content.res.Configuration;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.Resources;
@@ -49,13 +47,16 @@ import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.TextView;


import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LifecycleRegistry;


import com.android.settingslib.Utils;
import com.android.settingslib.Utils;
import com.android.systemui.BatteryMeterView;
import com.android.systemui.BatteryMeterView;
import com.android.systemui.DualToneHandler;
import com.android.systemui.DualToneHandler;
import com.android.systemui.R;
import com.android.systemui.R;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
@@ -70,6 +71,7 @@ import com.android.systemui.statusbar.policy.Clock;
import com.android.systemui.statusbar.policy.DateView;
import com.android.systemui.statusbar.policy.DateView;
import com.android.systemui.statusbar.policy.NextAlarmController;
import com.android.systemui.statusbar.policy.NextAlarmController;
import com.android.systemui.statusbar.policy.ZenModeController;
import com.android.systemui.statusbar.policy.ZenModeController;
import com.android.systemui.util.RingerModeTracker;


import java.util.ArrayList;
import java.util.ArrayList;
import java.util.List;
import java.util.List;
@@ -86,7 +88,7 @@ import javax.inject.Named;
 */
 */
public class QuickStatusBarHeader extends RelativeLayout implements
public class QuickStatusBarHeader extends RelativeLayout implements
        View.OnClickListener, NextAlarmController.NextAlarmChangeCallback,
        View.OnClickListener, NextAlarmController.NextAlarmChangeCallback,
        ZenModeController.Callback {
        ZenModeController.Callback, LifecycleOwner {
    private static final String TAG = "QuickStatusBarHeader";
    private static final String TAG = "QuickStatusBarHeader";
    private static final boolean DEBUG = false;
    private static final boolean DEBUG = false;


@@ -137,15 +139,9 @@ public class QuickStatusBarHeader extends RelativeLayout implements
    private DateView mDateView;
    private DateView mDateView;
    private BatteryMeterView mBatteryRemainingIcon;
    private BatteryMeterView mBatteryRemainingIcon;


    private BroadcastDispatcher mBroadcastDispatcher;
    // Used for RingerModeTracker
    private final LifecycleRegistry mLifecycle = new LifecycleRegistry(this);


    private final BroadcastReceiver mRingerReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            mRingerMode = intent.getIntExtra(AudioManager.EXTRA_RINGER_MODE, -1);
            updateStatusText();
        }
    };
    private boolean mHasTopCutout = false;
    private boolean mHasTopCutout = false;
    private int mRoundedCornerPadding = 0;
    private int mRoundedCornerPadding = 0;


@@ -154,7 +150,7 @@ public class QuickStatusBarHeader extends RelativeLayout implements
            NextAlarmController nextAlarmController, ZenModeController zenModeController,
            NextAlarmController nextAlarmController, ZenModeController zenModeController,
            StatusBarIconController statusBarIconController,
            StatusBarIconController statusBarIconController,
            ActivityStarter activityStarter,
            ActivityStarter activityStarter,
            CommandQueue commandQueue, BroadcastDispatcher broadcastDispatcher) {
            CommandQueue commandQueue, RingerModeTracker ringerModeTracker) {
        super(context, attrs);
        super(context, attrs);
        mAlarmController = nextAlarmController;
        mAlarmController = nextAlarmController;
        mZenController = zenModeController;
        mZenController = zenModeController;
@@ -162,8 +158,11 @@ public class QuickStatusBarHeader extends RelativeLayout implements
        mActivityStarter = activityStarter;
        mActivityStarter = activityStarter;
        mDualToneHandler = new DualToneHandler(
        mDualToneHandler = new DualToneHandler(
                new ContextThemeWrapper(context, R.style.QSHeaderTheme));
                new ContextThemeWrapper(context, R.style.QSHeaderTheme));
        mBroadcastDispatcher = broadcastDispatcher;
        mCommandQueue = commandQueue;
        mCommandQueue = commandQueue;
        ringerModeTracker.getRingerModeInternal().observe(this, ringer -> {
            mRingerMode = ringer;
            updateStatusText();
        });
    }
    }


    @Override
    @Override
@@ -484,12 +483,11 @@ public class QuickStatusBarHeader extends RelativeLayout implements
        if (listening) {
        if (listening) {
            mZenController.addCallback(this);
            mZenController.addCallback(this);
            mAlarmController.addCallback(this);
            mAlarmController.addCallback(this);
            mBroadcastDispatcher.registerReceiver(mRingerReceiver,
            mLifecycle.setCurrentState(Lifecycle.State.RESUMED);
                    new IntentFilter(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION));
        } else {
        } else {
            mZenController.removeCallback(this);
            mZenController.removeCallback(this);
            mAlarmController.removeCallback(this);
            mAlarmController.removeCallback(this);
            mBroadcastDispatcher.unregisterReceiver(mRingerReceiver);
            mLifecycle.setCurrentState(Lifecycle.State.DESTROYED);
        }
        }
    }
    }


@@ -586,4 +584,10 @@ public class QuickStatusBarHeader extends RelativeLayout implements
            lp.rightMargin = sideMargins;
            lp.rightMargin = sideMargins;
        }
        }
    }
    }

    @NonNull
    @Override
    public Lifecycle getLifecycle() {
        return mLifecycle;
    }
}
}
+25 −18
Original line number Original line Diff line number Diff line
@@ -39,6 +39,8 @@ import android.telecom.TelecomManager;
import android.text.format.DateFormat;
import android.text.format.DateFormat;
import android.util.Log;
import android.util.Log;


import androidx.lifecycle.Observer;

import com.android.systemui.R;
import com.android.systemui.R;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.qualifiers.DisplayId;
import com.android.systemui.dagger.qualifiers.DisplayId;
@@ -64,6 +66,7 @@ import com.android.systemui.statusbar.policy.RotationLockController.RotationLock
import com.android.systemui.statusbar.policy.SensorPrivacyController;
import com.android.systemui.statusbar.policy.SensorPrivacyController;
import com.android.systemui.statusbar.policy.UserInfoController;
import com.android.systemui.statusbar.policy.UserInfoController;
import com.android.systemui.statusbar.policy.ZenModeController;
import com.android.systemui.statusbar.policy.ZenModeController;
import com.android.systemui.util.RingerModeTracker;
import com.android.systemui.util.time.DateFormatUtil;
import com.android.systemui.util.time.DateFormatUtil;


import java.util.Locale;
import java.util.Locale;
@@ -109,7 +112,6 @@ public class PhoneStatusBarPolicy
    private final SharedPreferences mSharedPreferences;
    private final SharedPreferences mSharedPreferences;
    private final DateFormatUtil mDateFormatUtil;
    private final DateFormatUtil mDateFormatUtil;
    private final TelecomManager mTelecomManager;
    private final TelecomManager mTelecomManager;
    private final AudioManager mAudioManager;


    private final Handler mHandler = new Handler();
    private final Handler mHandler = new Handler();
    private final CastController mCast;
    private final CastController mCast;
@@ -132,6 +134,7 @@ public class PhoneStatusBarPolicy
    private final Executor mUiBgExecutor;
    private final Executor mUiBgExecutor;
    private final SensorPrivacyController mSensorPrivacyController;
    private final SensorPrivacyController mSensorPrivacyController;
    private final RecordingController mRecordingController;
    private final RecordingController mRecordingController;
    private final RingerModeTracker mRingerModeTracker;


    private boolean mZenVisible;
    private boolean mZenVisible;
    private boolean mVolumeVisible;
    private boolean mVolumeVisible;
@@ -154,10 +157,11 @@ public class PhoneStatusBarPolicy
            KeyguardStateController keyguardStateController,
            KeyguardStateController keyguardStateController,
            LocationController locationController,
            LocationController locationController,
            SensorPrivacyController sensorPrivacyController, IActivityManager iActivityManager,
            SensorPrivacyController sensorPrivacyController, IActivityManager iActivityManager,
            AlarmManager alarmManager, UserManager userManager, AudioManager audioManager,
            AlarmManager alarmManager, UserManager userManager,
            RecordingController recordingController,
            RecordingController recordingController,
            @Nullable TelecomManager telecomManager, @DisplayId int displayId,
            @Nullable TelecomManager telecomManager, @DisplayId int displayId,
            @Main SharedPreferences sharedPreferences, DateFormatUtil dateFormatUtil) {
            @Main SharedPreferences sharedPreferences, DateFormatUtil dateFormatUtil,
            RingerModeTracker ringerModeTracker) {
        mIconController = iconController;
        mIconController = iconController;
        mCommandQueue = commandQueue;
        mCommandQueue = commandQueue;
        mBroadcastDispatcher = broadcastDispatcher;
        mBroadcastDispatcher = broadcastDispatcher;
@@ -179,8 +183,8 @@ public class PhoneStatusBarPolicy
        mSensorPrivacyController = sensorPrivacyController;
        mSensorPrivacyController = sensorPrivacyController;
        mRecordingController = recordingController;
        mRecordingController = recordingController;
        mUiBgExecutor = uiBgExecutor;
        mUiBgExecutor = uiBgExecutor;
        mAudioManager = audioManager;
        mTelecomManager = telecomManager;
        mTelecomManager = telecomManager;
        mRingerModeTracker = ringerModeTracker;


        mSlotCast = resources.getString(com.android.internal.R.string.status_bar_cast);
        mSlotCast = resources.getString(com.android.internal.R.string.status_bar_cast);
        mSlotHotspot = resources.getString(com.android.internal.R.string.status_bar_hotspot);
        mSlotHotspot = resources.getString(com.android.internal.R.string.status_bar_hotspot);
@@ -208,8 +212,7 @@ public class PhoneStatusBarPolicy
    public void init() {
    public void init() {
        // listen for broadcasts
        // listen for broadcasts
        IntentFilter filter = new IntentFilter();
        IntentFilter filter = new IntentFilter();
        filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION);

        filter.addAction(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION);
        filter.addAction(AudioManager.ACTION_HEADSET_PLUG);
        filter.addAction(AudioManager.ACTION_HEADSET_PLUG);
        filter.addAction(Intent.ACTION_SIM_STATE_CHANGED);
        filter.addAction(Intent.ACTION_SIM_STATE_CHANGED);
        filter.addAction(TelecomManager.ACTION_CURRENT_TTY_MODE_CHANGED);
        filter.addAction(TelecomManager.ACTION_CURRENT_TTY_MODE_CHANGED);
@@ -217,6 +220,10 @@ public class PhoneStatusBarPolicy
        filter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE);
        filter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE);
        filter.addAction(Intent.ACTION_MANAGED_PROFILE_REMOVED);
        filter.addAction(Intent.ACTION_MANAGED_PROFILE_REMOVED);
        mBroadcastDispatcher.registerReceiverWithHandler(mIntentReceiver, filter, mHandler);
        mBroadcastDispatcher.registerReceiverWithHandler(mIntentReceiver, filter, mHandler);
        Observer<Integer> observer = ringer -> mHandler.post(this::updateVolumeZen);

        mRingerModeTracker.getRingerMode().observeForever(observer);
        mRingerModeTracker.getRingerModeInternal().observeForever(observer);


        // listen for user / profile change.
        // listen for user / profile change.
        try {
        try {
@@ -350,16 +357,20 @@ public class PhoneStatusBarPolicy
        }
        }


        if (!ZenModeConfig.isZenOverridingRinger(zen, mZenController.getConsolidatedPolicy())) {
        if (!ZenModeConfig.isZenOverridingRinger(zen, mZenController.getConsolidatedPolicy())) {
            if (mAudioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_VIBRATE) {
            final Integer ringerModeInternal =
                    mRingerModeTracker.getRingerModeInternal().getValue();
            if (ringerModeInternal != null) {
                if (ringerModeInternal == AudioManager.RINGER_MODE_VIBRATE) {
                    volumeVisible = true;
                    volumeVisible = true;
                    volumeIconId = R.drawable.stat_sys_ringer_vibrate;
                    volumeIconId = R.drawable.stat_sys_ringer_vibrate;
                    volumeDescription = mResources.getString(R.string.accessibility_ringer_vibrate);
                    volumeDescription = mResources.getString(R.string.accessibility_ringer_vibrate);
            } else if (mAudioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_SILENT) {
                } else if (ringerModeInternal == AudioManager.RINGER_MODE_SILENT) {
                    volumeVisible = true;
                    volumeVisible = true;
                    volumeIconId = R.drawable.stat_sys_ringer_silent;
                    volumeIconId = R.drawable.stat_sys_ringer_silent;
                    volumeDescription = mResources.getString(R.string.accessibility_ringer_silent);
                    volumeDescription = mResources.getString(R.string.accessibility_ringer_silent);
                }
                }
            }
            }
        }


        if (zenVisible) {
        if (zenVisible) {
            mIconController.setIcon(mSlotZen, zenIconId, zenDescription);
            mIconController.setIcon(mSlotZen, zenIconId, zenDescription);
@@ -616,10 +627,6 @@ public class PhoneStatusBarPolicy
        public void onReceive(Context context, Intent intent) {
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            String action = intent.getAction();
            switch (action) {
            switch (action) {
                case AudioManager.RINGER_MODE_CHANGED_ACTION:
                case AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION:
                    updateVolumeZen();
                    break;
                case Intent.ACTION_SIM_STATE_CHANGED:
                case Intent.ACTION_SIM_STATE_CHANGED:
                    // Avoid rebroadcast because SysUI is direct boot aware.
                    // Avoid rebroadcast because SysUI is direct boot aware.
                    if (intent.getBooleanExtra(Intent.EXTRA_REBROADCAST_ON_UNLOCK, false)) {
                    if (intent.getBooleanExtra(Intent.EXTRA_REBROADCAST_ON_UNLOCK, false)) {
Loading