Convert KeyguardCoordinator to Kotlin
Bug: 254647461 Test: mp sysuig Change-Id: I82df1c97a39770ff40a9455ae8377d4c33b18426
This commit is contained in:
@@ -1,88 +0,0 @@
|
||||
/*
|
||||
* 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.notification.collection.coordinator;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.statusbar.StatusBarState;
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope;
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
|
||||
import com.android.systemui.statusbar.notification.collection.provider.SectionHeaderVisibilityProvider;
|
||||
import com.android.systemui.statusbar.notification.interruption.KeyguardNotificationVisibilityProvider;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
/**
|
||||
* Filters low priority and privacy-sensitive notifications from the lockscreen, and hides section
|
||||
* headers on the lockscreen.
|
||||
*/
|
||||
@CoordinatorScope
|
||||
public class KeyguardCoordinator implements Coordinator {
|
||||
private static final String TAG = "KeyguardCoordinator";
|
||||
private final KeyguardNotificationVisibilityProvider mKeyguardNotificationVisibilityProvider;
|
||||
private final SectionHeaderVisibilityProvider mSectionHeaderVisibilityProvider;
|
||||
private final StatusBarStateController mStatusBarStateController;
|
||||
|
||||
@Inject
|
||||
public KeyguardCoordinator(
|
||||
KeyguardNotificationVisibilityProvider keyguardNotificationVisibilityProvider,
|
||||
SectionHeaderVisibilityProvider sectionHeaderVisibilityProvider,
|
||||
StatusBarStateController statusBarStateController) {
|
||||
mKeyguardNotificationVisibilityProvider = keyguardNotificationVisibilityProvider;
|
||||
mSectionHeaderVisibilityProvider = sectionHeaderVisibilityProvider;
|
||||
mStatusBarStateController = statusBarStateController;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void attach(NotifPipeline pipeline) {
|
||||
|
||||
setupInvalidateNotifListCallbacks();
|
||||
// Filter at the "finalize" stage so that views remain bound by PreparationCoordinator
|
||||
pipeline.addFinalizeFilter(mNotifFilter);
|
||||
mKeyguardNotificationVisibilityProvider
|
||||
.addOnStateChangedListener(this::invalidateListFromFilter);
|
||||
updateSectionHeadersVisibility();
|
||||
}
|
||||
|
||||
private final NotifFilter mNotifFilter = new NotifFilter(TAG) {
|
||||
@Override
|
||||
public boolean shouldFilterOut(@NonNull NotificationEntry entry, long now) {
|
||||
return mKeyguardNotificationVisibilityProvider.shouldHideNotification(entry);
|
||||
}
|
||||
};
|
||||
|
||||
// TODO(b/206118999): merge this class with SensitiveContentCoordinator which also depends on
|
||||
// these same updates
|
||||
private void setupInvalidateNotifListCallbacks() {
|
||||
|
||||
}
|
||||
|
||||
private void invalidateListFromFilter(String reason) {
|
||||
updateSectionHeadersVisibility();
|
||||
mNotifFilter.invalidateList(reason);
|
||||
}
|
||||
|
||||
private void updateSectionHeadersVisibility() {
|
||||
boolean onKeyguard = mStatusBarStateController.getState() == StatusBarState.KEYGUARD;
|
||||
boolean neverShowSections = mSectionHeaderVisibilityProvider.getNeverShowSectionHeaders();
|
||||
boolean showSections = !onKeyguard && !neverShowSections;
|
||||
mSectionHeaderVisibilityProvider.setSectionHeadersVisible(showSections);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.notification.collection.coordinator
|
||||
|
||||
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
|
||||
import com.android.systemui.statusbar.notification.interruption.KeyguardNotificationVisibilityProvider
|
||||
import com.android.systemui.statusbar.notification.collection.provider.SectionHeaderVisibilityProvider
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController
|
||||
import com.android.systemui.statusbar.StatusBarState
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
* Filters low priority and privacy-sensitive notifications from the lockscreen, and hides section
|
||||
* headers on the lockscreen.
|
||||
*/
|
||||
@CoordinatorScope
|
||||
class KeyguardCoordinator @Inject constructor(
|
||||
private val keyguardNotificationVisibilityProvider: KeyguardNotificationVisibilityProvider,
|
||||
private val sectionHeaderVisibilityProvider: SectionHeaderVisibilityProvider,
|
||||
private val statusBarStateController: StatusBarStateController
|
||||
) : Coordinator {
|
||||
|
||||
override fun attach(pipeline: NotifPipeline) {
|
||||
setupInvalidateNotifListCallbacks()
|
||||
// Filter at the "finalize" stage so that views remain bound by PreparationCoordinator
|
||||
pipeline.addFinalizeFilter(notifFilter)
|
||||
keyguardNotificationVisibilityProvider.addOnStateChangedListener(::invalidateListFromFilter)
|
||||
updateSectionHeadersVisibility()
|
||||
}
|
||||
|
||||
private val notifFilter: NotifFilter = object : NotifFilter(TAG) {
|
||||
override fun shouldFilterOut(entry: NotificationEntry, now: Long): Boolean =
|
||||
keyguardNotificationVisibilityProvider.shouldHideNotification(entry)
|
||||
}
|
||||
|
||||
// TODO(b/206118999): merge this class with SensitiveContentCoordinator which also depends on
|
||||
// these same updates
|
||||
private fun setupInvalidateNotifListCallbacks() {}
|
||||
|
||||
private fun invalidateListFromFilter(reason: String) {
|
||||
updateSectionHeadersVisibility()
|
||||
notifFilter.invalidateList(reason)
|
||||
}
|
||||
|
||||
private fun updateSectionHeadersVisibility() {
|
||||
val onKeyguard = statusBarStateController.state == StatusBarState.KEYGUARD
|
||||
val neverShowSections = sectionHeaderVisibilityProvider.neverShowSectionHeaders
|
||||
val showSections = !onKeyguard && !neverShowSections
|
||||
sectionHeaderVisibilityProvider.sectionHeadersVisible = showSections
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val TAG = "KeyguardCoordinator"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user