Merge "Adds security challenge when changing notification settings from lock screen" into nyc-dev

This commit is contained in:
Mady Mellor
2016-04-06 20:54:43 +00:00
committed by Android (Google) Code Review
3 changed files with 61 additions and 28 deletions

View File

@@ -1047,24 +1047,42 @@ public abstract class BaseStatusBar extends SystemUI implements
row.findViewById(R.id.done).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
guts.saveImportance(sbn);
int[] rowLocation = new int[2];
int[] doneLocation = new int[2];
row.getLocationOnScreen(rowLocation);
v.getLocationOnScreen(doneLocation);
final int centerX = v.getWidth() / 2;
final int centerY = v.getHeight() / 2;
final int x = doneLocation[0] - rowLocation[0] + centerX;
final int y = doneLocation[1] - rowLocation[1] + centerY;
dismissPopups(x, y);
// If the user has security enabled, show challenge if the setting is changed.
if (guts.hasImportanceChanged() && isLockscreenPublicMode() &&
(mState == StatusBarState.KEYGUARD
|| mState == StatusBarState.SHADE_LOCKED)) {
OnDismissAction dismissAction = new OnDismissAction() {
@Override
public boolean onDismiss() {
saveImportanceCloseControls(sbn, row, guts, v);
return true;
}
};
onLockedNotificationImportanceChange(dismissAction);
} else {
saveImportanceCloseControls(sbn, row, guts, v);
}
}
});
guts.bindImportance(pmUser, sbn, row, mNotificationData.getImportance(sbn.getKey()));
}
private void saveImportanceCloseControls(StatusBarNotification sbn,
ExpandableNotificationRow row, NotificationGuts guts, View done) {
guts.saveImportance(sbn);
int[] rowLocation = new int[2];
int[] doneLocation = new int[2];
row.getLocationOnScreen(rowLocation);
done.getLocationOnScreen(doneLocation);
final int centerX = done.getWidth() / 2;
final int centerY = done.getHeight() / 2;
final int x = doneLocation[0] - rowLocation[0] + centerX;
final int y = doneLocation[1] - rowLocation[1] + centerY;
dismissPopups(x, y);
}
protected SwipeHelper.LongPressListener getNotificationLongClicker() {
return new SwipeHelper.LongPressListener() {
@Override
@@ -1450,6 +1468,8 @@ public abstract class BaseStatusBar extends SystemUI implements
}
}
protected void onLockedNotificationImportanceChange(OnDismissAction dismissAction) {}
protected void onLockedRemoteInput(ExpandableNotificationRow row, View clickedView) {}
@Override

View File

@@ -130,30 +130,23 @@ public class NotificationGuts extends LinearLayout implements TunerService.Tunab
importanceSlider.setVisibility(View.VISIBLE);
importanceButtons.setVisibility(View.GONE);
} else {
int userImportance = NotificationListenerService.Ranking.IMPORTANCE_UNSPECIFIED;
mStartingImportance = NotificationListenerService.Ranking.IMPORTANCE_UNSPECIFIED;
try {
userImportance =
mStartingImportance =
mINotificationManager.getImportance(sbn.getPackageName(), sbn.getUid());
} catch (RemoteException e) {}
bindToggles(importanceButtons, userImportance, systemApp);
bindToggles(importanceButtons, mStartingImportance, systemApp);
importanceButtons.setVisibility(View.VISIBLE);
importanceSlider.setVisibility(View.GONE);
}
}
public boolean hasImportanceChanged() {
return mStartingImportance != getSelectedImportance();
}
void saveImportance(final StatusBarNotification sbn) {
int progress;
if (mSeekBar!= null && mSeekBar.isShown()) {
progress = mSeekBar.getProgress();
} else {
if (mBlock.isChecked()) {
progress = NotificationListenerService.Ranking.IMPORTANCE_NONE;
} else if (mSilent.isChecked()) {
progress = NotificationListenerService.Ranking.IMPORTANCE_LOW;
} else {
progress = NotificationListenerService.Ranking.IMPORTANCE_UNSPECIFIED;
}
}
int progress = getSelectedImportance();
MetricsLogger.action(mContext, MetricsEvent.ACTION_SAVE_IMPORTANCE,
progress - mStartingImportance);
try {
@@ -163,6 +156,20 @@ public class NotificationGuts extends LinearLayout implements TunerService.Tunab
}
}
private int getSelectedImportance() {
if (mSeekBar!= null && mSeekBar.isShown()) {
return mSeekBar.getProgress();
} else {
if (mBlock.isChecked()) {
return NotificationListenerService.Ranking.IMPORTANCE_NONE;
} else if (mSilent.isChecked()) {
return NotificationListenerService.Ranking.IMPORTANCE_LOW;
} else {
return NotificationListenerService.Ranking.IMPORTANCE_UNSPECIFIED;
}
}
}
private void bindToggles(final View importanceButtons, final int importance,
final boolean systemApp) {
mBlock = (RadioButton) importanceButtons.findViewById(R.id.block_importance);

View File

@@ -4196,6 +4196,12 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
}
}
@Override
public void onLockedNotificationImportanceChange(OnDismissAction dismissAction) {
mLeaveOpenOnKeyguardHide = true;
dismissKeyguardThenExecute(dismissAction, true /* afterKeyguardGone */);
}
@Override
protected void onLockedRemoteInput(ExpandableNotificationRow row, View clicked) {
mLeaveOpenOnKeyguardHide = true;