diff options
| author | 2016-09-15 17:01:52 +0000 | |
|---|---|---|
| committer | 2016-09-15 17:01:56 +0000 | |
| commit | 7ca068feeb92961ef1fff299d4f0d8489df0810e (patch) | |
| tree | becc0c9849ce9b4da9800fc7806b1ae6c6ec3e6a | |
| parent | 92581b332e0d3c075e84cfe05e30e27fd41d0804 (diff) | |
| parent | 98a448633c65364e002c2b2c56494428d87929ed (diff) | |
Merge "Non-blockable notification packages." into nyc-mr1-dev
4 files changed, 29 insertions, 11 deletions
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index b047cdf3c69f..9881fe37df8f 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -2553,4 +2553,7 @@ <item>110,119:112</item> --> <string-array translatable="false" name="config_convert_to_emergency_number_map" /> + + <!-- An array of packages for which notifications cannot be blocked. --> + <string-array translatable="false" name="config_nonBlockableNotificationPackages" /> </resources> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 4613b7803376..8ca9ef66cd62 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2701,4 +2701,6 @@ <java-symbol type="drawable" name="ic_restart" /> <java-symbol type="array" name="config_convert_to_emergency_number_map" /> + + <java-symbol type="array" name="config_nonBlockableNotificationPackages" /> </resources> diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java index b3a1893832e6..98957ddd5c00 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java @@ -113,8 +113,11 @@ import com.android.systemui.statusbar.stack.NotificationStackScrollLayout; import com.android.systemui.statusbar.stack.StackStateAnimator; import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Locale; +import java.util.Set; import static android.service.notification.NotificationListenerService.Ranking.IMPORTANCE_HIGH; @@ -268,6 +271,8 @@ public abstract class BaseStatusBar extends SystemUI implements protected boolean mVrMode; + private Set<String> mNonBlockablePkgs; + @Override // NotificationData.Environment public boolean isDeviceProvisioned() { return mDeviceProvisioned; @@ -824,6 +829,9 @@ public abstract class BaseStatusBar extends SystemUI implements Slog.e(TAG, "Failed to register VR mode state listener: " + e); } + mNonBlockablePkgs = new HashSet<String>(); + Collections.addAll(mNonBlockablePkgs, mContext.getResources().getStringArray( + com.android.internal.R.array.config_nonBlockableNotificationPackages)); } protected void notifyUserAboutHiddenNotifications() { @@ -1104,7 +1112,8 @@ public abstract class BaseStatusBar extends SystemUI implements settingsButton.setVisibility(View.GONE); } - guts.bindImportance(pmUser, sbn, mNotificationData.getImportance(sbn.getKey())); + guts.bindImportance(pmUser, sbn, mNonBlockablePkgs, + mNotificationData.getImportance(sbn.getKey())); final TextView doneButton = (TextView) guts.findViewById(R.id.done); doneButton.setText(R.string.notification_done); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGuts.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGuts.java index c497cfdf88d8..62d730a42732 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGuts.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGuts.java @@ -50,6 +50,8 @@ import com.android.systemui.R; import com.android.systemui.statusbar.stack.StackStateAnimator; import com.android.systemui.tuner.TunerService; +import java.util.Set; + /** * The guts of a notification revealed when performing a long press. */ @@ -173,7 +175,7 @@ public class NotificationGuts extends LinearLayout implements TunerService.Tunab } void bindImportance(final PackageManager pm, final StatusBarNotification sbn, - final int importance) { + final Set<String> nonBlockablePkgs, final int importance) { mINotificationManager = INotificationManager.Stub.asInterface( ServiceManager.getService(Context.NOTIFICATION_SERVICE)); mStartingUserImportance = NotificationListenerService.Ranking.IMPORTANCE_UNSPECIFIED; @@ -182,24 +184,26 @@ public class NotificationGuts extends LinearLayout implements TunerService.Tunab mINotificationManager.getImportance(sbn.getPackageName(), sbn.getUid()); } catch (RemoteException e) {} mNotificationImportance = importance; - boolean systemApp = false; + boolean nonBlockable = false; try { final PackageInfo info = pm.getPackageInfo(sbn.getPackageName(), PackageManager.GET_SIGNATURES); - systemApp = Utils.isSystemPackage(getResources(), pm, info); + nonBlockable = Utils.isSystemPackage(getResources(), pm, info); } catch (PackageManager.NameNotFoundException e) { // unlikely. } + if (nonBlockablePkgs != null) { + nonBlockable |= nonBlockablePkgs.contains(sbn.getPackageName()); + } final View importanceSlider = findViewById(R.id.importance_slider); final View importanceButtons = findViewById(R.id.importance_buttons); if (mShowSlider) { - bindSlider(importanceSlider, systemApp); + bindSlider(importanceSlider, nonBlockable); importanceSlider.setVisibility(View.VISIBLE); importanceButtons.setVisibility(View.GONE); } else { - - bindToggles(importanceButtons, mStartingUserImportance, systemApp); + bindToggles(importanceButtons, mStartingUserImportance, nonBlockable); importanceButtons.setVisibility(View.VISIBLE); importanceSlider.setVisibility(View.GONE); } @@ -239,7 +243,7 @@ public class NotificationGuts extends LinearLayout implements TunerService.Tunab } private void bindToggles(final View importanceButtons, final int importance, - final boolean systemApp) { + final boolean nonBlockable) { ((RadioGroup) importanceButtons).setOnCheckedChangeListener( new RadioGroup.OnCheckedChangeListener() { @Override @@ -250,7 +254,7 @@ public class NotificationGuts extends LinearLayout implements TunerService.Tunab mBlock = (RadioButton) importanceButtons.findViewById(R.id.block_importance); mSilent = (RadioButton) importanceButtons.findViewById(R.id.silent_importance); mReset = (RadioButton) importanceButtons.findViewById(R.id.reset_importance); - if (systemApp) { + if (nonBlockable) { mBlock.setVisibility(View.GONE); mReset.setText(mContext.getString(R.string.do_not_silence)); } else { @@ -265,7 +269,7 @@ public class NotificationGuts extends LinearLayout implements TunerService.Tunab } } - private void bindSlider(final View importanceSlider, final boolean systemApp) { + private void bindSlider(final View importanceSlider, final boolean nonBlockable) { mActiveSliderTint = ColorStateList.valueOf(Utils.getColorAccent(mContext)); mInactiveSliderTint = loadColorStateList(R.color.notification_guts_disabled_slider_color); @@ -273,7 +277,7 @@ public class NotificationGuts extends LinearLayout implements TunerService.Tunab mImportanceTitle = ((TextView) importanceSlider.findViewById(R.id.title)); mSeekBar = (SeekBar) importanceSlider.findViewById(R.id.seekbar); - final int minProgress = systemApp ? + final int minProgress = nonBlockable ? NotificationListenerService.Ranking.IMPORTANCE_MIN : NotificationListenerService.Ranking.IMPORTANCE_NONE; mSeekBar.setMax(NotificationListenerService.Ranking.IMPORTANCE_MAX); |