/* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.statusbar.policy; import android.hardware.SensorPrivacyManager; import androidx.annotation.NonNull; import com.android.systemui.dagger.SysUISingleton; import java.util.ArrayList; import java.util.List; /** * Controls sensor privacy state and notification. */ @SysUISingleton public class SensorPrivacyControllerImpl implements SensorPrivacyController, SensorPrivacyManager.OnAllSensorPrivacyChangedListener { private SensorPrivacyManager mSensorPrivacyManager; private final List mListeners = new ArrayList<>(1); private Object mLock = new Object(); private boolean mSensorPrivacyEnabled; /** * Public constructor. */ public SensorPrivacyControllerImpl(@NonNull SensorPrivacyManager sensorPrivacyManager) { mSensorPrivacyManager = sensorPrivacyManager; } @Override public void init() { mSensorPrivacyEnabled = mSensorPrivacyManager.isAllSensorPrivacyEnabled(); mSensorPrivacyManager.addAllSensorPrivacyListener(this); } /** * Returns whether sensor privacy is enabled. */ public boolean isSensorPrivacyEnabled() { synchronized (mLock) { return mSensorPrivacyEnabled; } } /** * Adds the provided listener for callbacks when sensor privacy state changes. */ public void addCallback(@NonNull OnSensorPrivacyChangedListener listener) { synchronized (mLock) { mListeners.add(listener); notifyListenerLocked(listener); } } /** * Removes the provided listener from callbacks when sensor privacy state changes. */ public void removeCallback(@NonNull OnSensorPrivacyChangedListener listener) { synchronized (mLock) { mListeners.remove(listener); } } /** * Callback invoked by the SensorPrivacyService when sensor privacy state changes. */ public void onAllSensorPrivacyChanged(boolean enabled) { synchronized (mLock) { mSensorPrivacyEnabled = enabled; for (OnSensorPrivacyChangedListener listener : mListeners) { notifyListenerLocked(listener); } } } private void notifyListenerLocked(OnSensorPrivacyChangedListener listener) { listener.onSensorPrivacyChanged(mSensorPrivacyEnabled); } }