Skip to content

Commit 5649886

Browse files
idoybhGenkzsz11
authored andcommitted
base: Improve notification header toggle
* Actually toggle on runtime (no restart required now) * Solve a bug where notification headers would sometimes shortly show * Improve some code, unregister click listeners when headers are invisible Change-Id: I5a72f01e438b0c769476383dc834d162b6356f11
1 parent 4727147 commit 5649886

3 files changed

Lines changed: 59 additions & 8 deletions

File tree

packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSectionsManager.kt

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -160,11 +160,14 @@ class NotificationSectionsManager @Inject internal constructor(
160160
silentHeaderView, layoutInflater, R.layout.status_bar_notification_section_header
161161
).apply {
162162
if (mShowHeaders) {
163+
setVisibility(View.VISIBLE)
163164
setHeaderText(R.string.notification_section_header_gentle)
164165
setOnHeaderClickListener { onGentleHeaderClick() }
165166
setOnClearAllClickListener { onClearGentleNotifsClick(it) }
166167
} else {
167168
setVisibility(View.GONE)
169+
setOnHeaderClickListener(null)
170+
setOnClearAllClickListener(null)
168171
}
169172

170173
if (mCenterHeaders) {
@@ -177,10 +180,12 @@ class NotificationSectionsManager @Inject internal constructor(
177180
alertingHeaderView, layoutInflater, R.layout.status_bar_notification_section_header
178181
).apply {
179182
if (mShowHeaders) {
183+
setVisibility(View.VISIBLE)
180184
setHeaderText(R.string.notification_section_header_alerting)
181185
setOnHeaderClickListener { onGentleHeaderClick() }
182186
} else {
183187
setVisibility(View.GONE)
188+
setOnHeaderClickListener(null)
184189
}
185190

186191
if (mCenterHeaders) {
@@ -191,13 +196,15 @@ class NotificationSectionsManager @Inject internal constructor(
191196
}
192197
peopleHubSubscription?.unsubscribe()
193198
peopleHubSubscription = null
194-
peopleHeaderView = reinflateView(peopleHeaderView, layoutInflater, R.layout.people_strip
195-
).apply {
196-
if (!mShowHeaders) {
197-
setVisibility(View.GONE)
198-
} else {
199-
setOnHeaderClickListener(View.OnClickListener { onPeopleHeaderClick() })
200-
}
199+
peopleHeaderView = reinflateView(peopleHeaderView, layoutInflater, R.layout.people_strip)
200+
.apply {
201+
if (!mShowHeaders) {
202+
setVisibility(View.GONE)
203+
setOnHeaderClickListener(null)
204+
} else {
205+
setVisibility(View.VISIBLE)
206+
setOnHeaderClickListener(View.OnClickListener { onPeopleHeaderClick() })
207+
}
201208

202209
if (mCenterHeaders) {
203210
setLabelGravity(Gravity.CENTER or Gravity.CENTER_VERTICAL)
@@ -212,10 +219,12 @@ class NotificationSectionsManager @Inject internal constructor(
212219
incomingHeaderView, layoutInflater, R.layout.status_bar_notification_section_header
213220
).apply {
214221
if (mShowHeaders) {
222+
setVisibility(View.VISIBLE)
215223
setHeaderText(R.string.notification_section_header_incoming)
216224
setOnHeaderClickListener { onGentleHeaderClick() }
217225
} else {
218226
setVisibility(View.GONE)
227+
setOnHeaderClickListener(null)
219228
}
220229

221230
if (mCenterHeaders) {
@@ -229,6 +238,14 @@ class NotificationSectionsManager @Inject internal constructor(
229238
.also(keyguardMediaController::attach)
230239
}
231240

241+
fun setHeadersVisibility(visible: Boolean) {
242+
if (mShowHeaders != visible) {
243+
mShowHeaders = visible
244+
reinflateViews(LayoutInflater.from(parent.context))
245+
if (visible) updateSectionBoundaries("headers toggled on")
246+
}
247+
}
248+
232249
override fun beginsSection(view: View, previous: View?): Boolean =
233250
view === silentHeaderView ||
234251
view === mediaControlsView ||
@@ -342,6 +359,7 @@ class NotificationSectionsManager @Inject internal constructor(
342359
// target, but won't be once they are moved / removed after the pass has completed.
343360

344361
val showHeaders = statusBarStateController.state != StatusBarState.KEYGUARD
362+
&& mShowHeaders
345363
val usingPeopleFiltering = sectionsFeatureManager.isFilteringEnabled()
346364
val usingMediaControls = sectionsFeatureManager.isMediaControlsEnabled()
347365

packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import android.content.Intent;
4343
import android.content.res.Configuration;
4444
import android.content.res.Resources;
45+
import android.database.ContentObserver;
4546
import android.graphics.Canvas;
4647
import android.graphics.Color;
4748
import android.graphics.Outline;
@@ -51,7 +52,9 @@
5152
import android.graphics.PorterDuff;
5253
import android.graphics.PorterDuffXfermode;
5354
import android.graphics.Rect;
55+
import android.net.Uri;
5456
import android.os.Bundle;
57+
import android.os.Handler;
5558
import android.os.ServiceManager;
5659
import android.os.UserHandle;
5760
import android.provider.Settings;
@@ -548,6 +551,34 @@ public void getOutline(View view, Outline outline) {
548551
updateDecorViews(useDarkText);
549552
};
550553

554+
private CustomSettingsObserver mCustomSettingsObserver = new CustomSettingsObserver(new Handler());
555+
private class CustomSettingsObserver extends ContentObserver {
556+
CustomSettingsObserver(Handler handler) {
557+
super(handler);
558+
}
559+
560+
void observe() {
561+
mContext.getContentResolver().registerContentObserver(Settings.System.getUriFor(
562+
Settings.System.NOTIFICATION_HEADERS),
563+
false, this, UserHandle.USER_ALL);
564+
}
565+
566+
void stop() {
567+
mContext.getContentResolver().unregisterContentObserver(this);
568+
}
569+
570+
@Override
571+
public void onChange(boolean selfChange, Uri uri) {
572+
update();
573+
}
574+
575+
void update() {
576+
boolean enabled = Settings.System.getIntForUser(getContext().getContentResolver(),
577+
Settings.System.NOTIFICATION_HEADERS, 1, UserHandle.USER_CURRENT) == 1;
578+
mSectionsManager.setHeadersVisibility(enabled);
579+
}
580+
}
581+
551582
@Inject
552583
public NotificationStackScrollLayout(
553584
@Named(VIEW_CONTEXT) Context context,
@@ -870,6 +901,7 @@ protected void onAttachedToWindow() {
870901
((SysuiStatusBarStateController) Dependency.get(StatusBarStateController.class))
871902
.addCallback(mStateListener, SysuiStatusBarStateController.RANK_STACK_SCROLLER);
872903
Dependency.get(ConfigurationController.class).addCallback(this);
904+
mCustomSettingsObserver.observe();
873905
}
874906

875907
@Override
@@ -878,6 +910,7 @@ protected void onDetachedFromWindow() {
878910
super.onDetachedFromWindow();
879911
Dependency.get(StatusBarStateController.class).removeCallback(mStateListener);
880912
Dependency.get(ConfigurationController.class).removeCallback(this);
913+
mCustomSettingsObserver.stop();
881914
}
882915

883916
@Override

packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/PeopleHubView.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ class PeopleHubView(context: Context, attrs: AttributeSet) :
9595
}
9696
}
9797

98-
fun setOnHeaderClickListener(listener: OnClickListener) = label.setOnClickListener(listener)
98+
fun setOnHeaderClickListener(listener: OnClickListener?) = label.setOnClickListener(listener)
9999

100100
private inner class PersonDataListenerImpl(val avatarView: ImageView) :
101101
DataListener<PersonViewModel?> {

0 commit comments

Comments
 (0)