Implement the hide silent notifications toggle
Implement the hide silent notifications toggle on the notifications on lock screen page. This toggle will become invisible when the main toggle is unset. This toogle will replace the existing Notifications - notifications on the lock screen - hide silent conversations and notifications preference when the flag is enabled. Bug: 367455695 Flag: com.android.server.notification.notification_lock_screen_settings Test: adb shell settings put secure \ lock_screen_show_silent_notifications <1|0> Change-Id: Icc0b26afd199ec3f14237fd1cdb27981383ae69f
This commit is contained in:
@@ -8851,6 +8851,12 @@
|
|||||||
<!-- Security > Choose PIN/PW/Pattern > Notification redaction interstitial: Message asking the user how they want their profile notifications to appear when the device is locked [CHAR LIMIT=NONE] -->
|
<!-- Security > Choose PIN/PW/Pattern > Notification redaction interstitial: Message asking the user how they want their profile notifications to appear when the device is locked [CHAR LIMIT=NONE] -->
|
||||||
<string name="lock_screen_notifications_interstitial_message_profile">When your device is locked, how do you want profile notifications to show?</string>
|
<string name="lock_screen_notifications_interstitial_message_profile">When your device is locked, how do you want profile notifications to show?</string>
|
||||||
|
|
||||||
|
<!-- Notification Settings > Notifications on lock screen > Title for hiding silent notifications toggle. [CHAR LIMIT=30] -->
|
||||||
|
<string name="lock_screen_notification_hide_silent_title">Hide silent notifications</string>
|
||||||
|
|
||||||
|
<!-- Notification Settings > Notifications on lock screen > Summary for hiding seen notifications toggle. [CHAR LIMIT=30] -->
|
||||||
|
<string name="lock_screen_notification_hide_silent_summary">Silent notifications and conversations are removed from the lock screen.</string>
|
||||||
|
|
||||||
<!-- Security > Choose PIN/PW/Pattern > Notification redaction interstitial: Title for the screen asking the user how they want their profile notifications to appear when the device is locked [CHAR LIMIT=30] -->
|
<!-- Security > Choose PIN/PW/Pattern > Notification redaction interstitial: Title for the screen asking the user how they want their profile notifications to appear when the device is locked [CHAR LIMIT=30] -->
|
||||||
<string name="lock_screen_notifications_interstitial_title_profile">Profile notifications</string>
|
<string name="lock_screen_notifications_interstitial_title_profile">Profile notifications</string>
|
||||||
|
|
||||||
|
|||||||
@@ -35,4 +35,10 @@
|
|||||||
android:title="@string/lock_screen_notifications_summary_hide_profile"
|
android:title="@string/lock_screen_notifications_summary_hide_profile"
|
||||||
settings:controller="com.android.settings.notification.LockScreenNotificationShowSensitiveToggleController" />
|
settings:controller="com.android.settings.notification.LockScreenNotificationShowSensitiveToggleController" />
|
||||||
|
|
||||||
|
<SwitchPreferenceCompat
|
||||||
|
android:key="lock_screen_notification_hide_silent_toggle"
|
||||||
|
android:title="@string/lock_screen_notification_hide_silent_title"
|
||||||
|
android:summary="@string/lock_screen_notification_hide_silent_summary"
|
||||||
|
settings:controller="com.android.settings.notification.LockScreenNotificationHideSilentToggleController" />
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|||||||
@@ -0,0 +1,133 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2024 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.settings.notification;
|
||||||
|
|
||||||
|
import android.content.ContentResolver;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.database.ContentObserver;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.Looper;
|
||||||
|
import android.provider.Settings;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.lifecycle.Lifecycle;
|
||||||
|
import androidx.lifecycle.LifecycleEventObserver;
|
||||||
|
import androidx.lifecycle.LifecycleOwner;
|
||||||
|
import androidx.preference.Preference;
|
||||||
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
|
import com.android.settings.core.TogglePreferenceController;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controls the toggle that determines whether to show silent notifications when screen locked.
|
||||||
|
* Toggle for: Settings.Secure.LOCK_SCREEN_SHOW_SILENT_NOTIFICATIONS
|
||||||
|
*/
|
||||||
|
public class LockScreenNotificationHideSilentToggleController extends TogglePreferenceController
|
||||||
|
implements LifecycleEventObserver {
|
||||||
|
|
||||||
|
private static final int ON = 1;
|
||||||
|
private static final int OFF = 0;
|
||||||
|
|
||||||
|
@Nullable private Preference mPreference;
|
||||||
|
private final ContentResolver mContentResolver;
|
||||||
|
|
||||||
|
final ContentObserver mContentObserver = new ContentObserver(
|
||||||
|
new Handler(Looper.getMainLooper())) {
|
||||||
|
@Override
|
||||||
|
public void onChange(boolean selfChange, @Nullable Uri uri) {
|
||||||
|
if (mPreference == null) return;
|
||||||
|
updateState(mPreference);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public LockScreenNotificationHideSilentToggleController(@NonNull Context context,
|
||||||
|
@NonNull String preferenceKey) {
|
||||||
|
super(context, preferenceKey);
|
||||||
|
mContentResolver = context.getContentResolver();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStateChanged(@NonNull LifecycleOwner lifecycleOwner,
|
||||||
|
@NonNull Lifecycle.Event event) {
|
||||||
|
if (event == Lifecycle.Event.ON_RESUME) {
|
||||||
|
mContentResolver.registerContentObserver(
|
||||||
|
Settings.Secure.getUriFor(Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS),
|
||||||
|
/* notifyForDescendants= */ false, mContentObserver);
|
||||||
|
mContentResolver.registerContentObserver(
|
||||||
|
Settings.Secure.getUriFor(
|
||||||
|
Settings.Secure.LOCK_SCREEN_SHOW_SILENT_NOTIFICATIONS),
|
||||||
|
/* notifyForDescendants= */ false,
|
||||||
|
mContentObserver
|
||||||
|
);
|
||||||
|
} else if (event == Lifecycle.Event.ON_PAUSE) {
|
||||||
|
mContentResolver.unregisterContentObserver(mContentObserver);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void displayPreference(@NonNull PreferenceScreen screen) {
|
||||||
|
super.displayPreference(screen);
|
||||||
|
mPreference = screen.findPreference(getPreferenceKey());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateState(@NonNull Preference preference) {
|
||||||
|
super.updateState(preference);
|
||||||
|
setChecked(hideSilentNotificationsWhenLocked());
|
||||||
|
preference.setVisible(isAvailable());
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean hideSilentNotificationsWhenLocked() {
|
||||||
|
return Settings.Secure.getInt(mContext.getContentResolver(),
|
||||||
|
Settings.Secure.LOCK_SCREEN_SHOW_SILENT_NOTIFICATIONS, OFF) == OFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getAvailabilityStatus() {
|
||||||
|
if (!lockScreenShowNotification()) {
|
||||||
|
return CONDITIONALLY_UNAVAILABLE;
|
||||||
|
}
|
||||||
|
return AVAILABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Whether showing notifications on the lockscreen is enabled.
|
||||||
|
*/
|
||||||
|
private boolean lockScreenShowNotification() {
|
||||||
|
return Settings.Secure.getInt(mContext.getContentResolver(),
|
||||||
|
Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, OFF) == ON;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isChecked() {
|
||||||
|
return hideSilentNotificationsWhenLocked();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean setChecked(boolean isChecked) {
|
||||||
|
return Settings.Secure.putInt(mContext.getContentResolver(),
|
||||||
|
Settings.Secure.LOCK_SCREEN_SHOW_SILENT_NOTIFICATIONS, (isChecked ? OFF : ON));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSliceHighlightMenuRes() {
|
||||||
|
// not needed since it's not sliceable
|
||||||
|
return NO_RES;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user