Remove RemoteInput on lockscreen setting

Bug: 29370898
Change-Id: I6fef3deb55357e8569e023968967663582974f79
This commit is contained in:
Adrian Roos
2016-06-16 13:28:44 -07:00
parent b43b49c643
commit 38e4e5dca6
7 changed files with 31 additions and 69 deletions

View File

@@ -65,13 +65,4 @@
</RadioGroup> </RadioGroup>
<com.android.settings.RestrictedCheckBox
android:id="@+id/lockscreen_remote_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/RedactionItemAndLabel"
android:layout_marginStart="?android:attr/listPreferredItemPaddingStart"
android:layout_marginEnd="?android:attr/listPreferredItemPaddingEnd"
android:text="@string/lockscreen_remote_input" />
</LinearLayout> </LinearLayout>

View File

@@ -71,16 +71,6 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/lock_screen_notifications_summary_disable" /> android:text="@string/lock_screen_notifications_summary_disable" />
<!-- Place the checkbox inside RadioGroup and use SuwRadioButton style instead of
SuwCheckBox style so that the checkbox and text is aligned with radio buttons. -->
<com.android.settings.RestrictedCheckBox
android:id="@+id/lockscreen_remote_input"
style="@style/SuwRadioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/redaction_vertical_margins"
android:text="@string/lockscreen_remote_input" />
</RadioGroup> </RadioGroup>
</LinearLayout> </LinearLayout>

View File

@@ -25,7 +25,7 @@
android:title="@string/notification_pulse_title" /> android:title="@string/notification_pulse_title" />
<!-- When device is locked --> <!-- When device is locked -->
<com.android.settings.notification.NotificationLockscreenPreference <com.android.settings.notification.RestrictedDropDownPreference
android:key="lock_screen_notifications" android:key="lock_screen_notifications"
android:title="@string/lock_screen_notifications_title" android:title="@string/lock_screen_notifications_title"
android:summary="%s" /> android:summary="%s" />

View File

@@ -21,7 +21,7 @@
<PreferenceCategory <PreferenceCategory
android:title="@string/profile_section_header" > android:title="@string/profile_section_header" >
<com.android.settings.notification.NotificationLockscreenPreference <com.android.settings.notification.RestrictedDropDownPreference
android:key="lock_screen_notifications_profile" android:key="lock_screen_notifications_profile"
android:title="@string/lock_screen_notifications_title" android:title="@string/lock_screen_notifications_title"
android:summary="%s" /> android:summary="%s" />

View File

@@ -57,8 +57,8 @@ public class ConfigureNotificationSettings extends SettingsPreferenceFragment {
private Context mContext; private Context mContext;
private TwoStatePreference mNotificationPulse; private TwoStatePreference mNotificationPulse;
private NotificationLockscreenPreference mLockscreen; private RestrictedDropDownPreference mLockscreen;
private NotificationLockscreenPreference mLockscreenProfile; private RestrictedDropDownPreference mLockscreenProfile;
private boolean mSecure; private boolean mSecure;
private boolean mSecureProfile; private boolean mSecureProfile;
private int mLockscreenSelectedValue; private int mLockscreenSelectedValue;
@@ -148,7 +148,7 @@ public class ConfigureNotificationSettings extends SettingsPreferenceFragment {
} }
private void initLockscreenNotifications() { private void initLockscreenNotifications() {
mLockscreen = (NotificationLockscreenPreference) getPreferenceScreen().findPreference( mLockscreen = (RestrictedDropDownPreference) getPreferenceScreen().findPreference(
KEY_LOCK_SCREEN_NOTIFICATIONS); KEY_LOCK_SCREEN_NOTIFICATIONS);
if (mLockscreen == null) { if (mLockscreen == null) {
Log.i(TAG, "Preference not found: " + KEY_LOCK_SCREEN_NOTIFICATIONS); Log.i(TAG, "Preference not found: " + KEY_LOCK_SCREEN_NOTIFICATIONS);
@@ -178,9 +178,6 @@ public class ConfigureNotificationSettings extends SettingsPreferenceFragment {
KEYGUARD_DISABLE_SECURE_NOTIFICATIONS); KEYGUARD_DISABLE_SECURE_NOTIFICATIONS);
} }
mLockscreen.setRemoteInputRestricted(RestrictedLockUtils.checkIfKeyguardFeaturesDisabled(
mContext, DevicePolicyManager.KEYGUARD_DISABLE_REMOTE_INPUT, UserHandle.myUserId()));
mLockscreen.setEntries(entries.toArray(new CharSequence[entries.size()])); mLockscreen.setEntries(entries.toArray(new CharSequence[entries.size()]));
mLockscreen.setEntryValues(values.toArray(new CharSequence[values.size()])); mLockscreen.setEntryValues(values.toArray(new CharSequence[values.size()]));
updateLockscreenNotifications(); updateLockscreenNotifications();
@@ -211,13 +208,12 @@ public class ConfigureNotificationSettings extends SettingsPreferenceFragment {
// === Lockscreen (public / private) notifications === // === Lockscreen (public / private) notifications ===
private void initLockscreenNotificationsForProfile() { private void initLockscreenNotificationsForProfile() {
mLockscreenProfile = (NotificationLockscreenPreference) getPreferenceScreen() mLockscreenProfile = (RestrictedDropDownPreference) getPreferenceScreen()
.findPreference(KEY_LOCK_SCREEN_PROFILE_NOTIFICATIONS); .findPreference(KEY_LOCK_SCREEN_PROFILE_NOTIFICATIONS);
if (mLockscreenProfile == null) { if (mLockscreenProfile == null) {
Log.i(TAG, "Preference not found: " + KEY_LOCK_SCREEN_PROFILE_NOTIFICATIONS); Log.i(TAG, "Preference not found: " + KEY_LOCK_SCREEN_PROFILE_NOTIFICATIONS);
return; return;
} }
mLockscreenProfile.setUserId(mProfileChallengeUserId);
ArrayList<CharSequence> entries = new ArrayList<>(); ArrayList<CharSequence> entries = new ArrayList<>();
ArrayList<CharSequence> values = new ArrayList<>(); ArrayList<CharSequence> values = new ArrayList<>();
entries.add(getString(R.string.lock_screen_notifications_summary_disable_profile)); entries.add(getString(R.string.lock_screen_notifications_summary_disable_profile));
@@ -243,14 +239,14 @@ public class ConfigureNotificationSettings extends SettingsPreferenceFragment {
KEYGUARD_DISABLE_SECURE_NOTIFICATIONS); KEYGUARD_DISABLE_SECURE_NOTIFICATIONS);
} }
mLockscreen.setRemoteInputRestricted(RestrictedLockUtils.checkIfKeyguardFeaturesDisabled( mLockscreenProfile.setOnPreClickListener(
mContext, DevicePolicyManager.KEYGUARD_DISABLE_REMOTE_INPUT, (Preference p) -> Utils.startQuietModeDialogIfNecessary(mContext,
mProfileChallengeUserId)); UserManager.get(mContext),
mProfileChallengeUserId)
);
mLockscreenProfile.setEntries(entries.toArray(new CharSequence[entries.size()])); mLockscreenProfile.setEntries(entries.toArray(new CharSequence[entries.size()]));
mLockscreenProfile.setEntryValues(values.toArray(new CharSequence[values.size()])); mLockscreenProfile.setEntryValues(values.toArray(new CharSequence[values.size()]));
// Work profile does not support this settings as we do not have a policy to enforce it yet
mLockscreenProfile.setRemoteInputCheckBoxEnabled(false);
updateLockscreenNotificationsForProfile(); updateLockscreenNotificationsForProfile();
if (mLockscreenProfile.getEntries().length > 1) { if (mLockscreenProfile.getEntries().length > 1) {
mLockscreenProfile.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { mLockscreenProfile.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@@ -284,15 +280,18 @@ public class ConfigureNotificationSettings extends SettingsPreferenceFragment {
CharSequence entryValue, int keyguardNotificationFeatures) { CharSequence entryValue, int keyguardNotificationFeatures) {
EnforcedAdmin admin = RestrictedLockUtils.checkIfKeyguardFeaturesDisabled( EnforcedAdmin admin = RestrictedLockUtils.checkIfKeyguardFeaturesDisabled(
mContext, keyguardNotificationFeatures, UserHandle.myUserId()); mContext, keyguardNotificationFeatures, UserHandle.myUserId());
if (admin != null) { if (admin != null && mLockscreen != null) {
RestrictedItem item = new RestrictedItem(entry, entryValue, admin); RestrictedDropDownPreference.RestrictedItem item =
new RestrictedDropDownPreference.RestrictedItem(entry, entryValue, admin);
mLockscreen.addRestrictedItem(item); mLockscreen.addRestrictedItem(item);
} }
if (mProfileChallengeUserId != UserHandle.USER_NULL) { if (mProfileChallengeUserId != UserHandle.USER_NULL) {
EnforcedAdmin profileAdmin = RestrictedLockUtils.checkIfKeyguardFeaturesDisabled( EnforcedAdmin profileAdmin = RestrictedLockUtils.checkIfKeyguardFeaturesDisabled(
mContext, keyguardNotificationFeatures, mProfileChallengeUserId); mContext, keyguardNotificationFeatures, mProfileChallengeUserId);
if (profileAdmin != null) { if (profileAdmin != null && mLockscreenProfile != null) {
RestrictedItem item = new RestrictedItem(entry, entryValue, profileAdmin); RestrictedDropDownPreference.RestrictedItem item =
new RestrictedDropDownPreference.RestrictedItem(
entry, entryValue, profileAdmin);
mLockscreenProfile.addRestrictedItem(item); mLockscreenProfile.addRestrictedItem(item);
} }
} }

View File

@@ -78,12 +78,11 @@ public class RedactionInterstitial extends SettingsActivity {
} }
public static class RedactionInterstitialFragment extends SettingsPreferenceFragment public static class RedactionInterstitialFragment extends SettingsPreferenceFragment
implements RadioGroup.OnCheckedChangeListener, CompoundButton.OnCheckedChangeListener { implements RadioGroup.OnCheckedChangeListener {
private RadioGroup mRadioGroup; private RadioGroup mRadioGroup;
private RestrictedRadioButton mShowAllButton; private RestrictedRadioButton mShowAllButton;
private RestrictedRadioButton mRedactSensitiveButton; private RestrictedRadioButton mRedactSensitiveButton;
private RestrictedCheckBox mRemoteInputCheckbox;
private int mUserId; private int mUserId;
@Override @Override
@@ -104,9 +103,6 @@ public class RedactionInterstitial extends SettingsActivity {
mShowAllButton = (RestrictedRadioButton) view.findViewById(R.id.show_all); mShowAllButton = (RestrictedRadioButton) view.findViewById(R.id.show_all);
mRedactSensitiveButton = mRedactSensitiveButton =
(RestrictedRadioButton) view.findViewById(R.id.redact_sensitive); (RestrictedRadioButton) view.findViewById(R.id.redact_sensitive);
mRemoteInputCheckbox =
(RestrictedCheckBox) view.findViewById(R.id.lockscreen_remote_input);
mRemoteInputCheckbox.setOnCheckedChangeListener(this);
mRadioGroup.setOnCheckedChangeListener(this); mRadioGroup.setOnCheckedChangeListener(this);
mUserId = Utils.getUserIdFromBundle( mUserId = Utils.getUserIdFromBundle(
@@ -132,9 +128,6 @@ public class RedactionInterstitial extends SettingsActivity {
KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS); KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS);
checkNotificationFeaturesAndSetDisabled(mRedactSensitiveButton, checkNotificationFeaturesAndSetDisabled(mRedactSensitiveButton,
KEYGUARD_DISABLE_SECURE_NOTIFICATIONS); KEYGUARD_DISABLE_SECURE_NOTIFICATIONS);
mRemoteInputCheckbox.setDisabledByAdmin(
RestrictedLockUtils.checkIfKeyguardFeaturesDisabled(getActivity(),
DevicePolicyManager.KEYGUARD_DISABLE_REMOTE_INPUT, mUserId));
loadFromSettings(); loadFromSettings();
} }
@@ -161,12 +154,6 @@ public class RedactionInterstitial extends SettingsActivity {
} }
mRadioGroup.check(checkedButtonId); mRadioGroup.check(checkedButtonId);
boolean allowRemoteInput = Settings.Secure.getIntForUser(getContentResolver(),
Settings.Secure.LOCK_SCREEN_ALLOW_REMOTE_INPUT, 0, mUserId) != 0;
mRemoteInputCheckbox.setChecked(!allowRemoteInput);
updateRemoteInputCheckboxVisibility();
} }
@Override @Override
@@ -179,23 +166,6 @@ public class RedactionInterstitial extends SettingsActivity {
Settings.Secure.putIntForUser(getContentResolver(), Settings.Secure.putIntForUser(getContentResolver(),
Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, enabled ? 1 : 0, mUserId); Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, enabled ? 1 : 0, mUserId);
updateRemoteInputCheckboxVisibility();
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean checked) {
if (buttonView == mRemoteInputCheckbox) {
Settings.Secure.putIntForUser(getContentResolver(),
Settings.Secure.LOCK_SCREEN_ALLOW_REMOTE_INPUT, checked ? 0 : 1, mUserId);
}
}
private void updateRemoteInputCheckboxVisibility() {
boolean visible = mRadioGroup.getCheckedRadioButtonId() == R.id.show_all;
boolean isManagedProfile = Utils.isManagedProfile(UserManager.get(getPrefContext()),
mUserId);
mRemoteInputCheckbox
.setVisibility((visible && !isManagedProfile) ? View.VISIBLE : View.INVISIBLE);
} }
} }
} }

View File

@@ -42,6 +42,7 @@ public class RestrictedDropDownPreference extends DropDownPreference {
private ReselectionSpinner mSpinner; private ReselectionSpinner mSpinner;
private List<RestrictedItem> mRestrictedItems = new ArrayList<>(); private List<RestrictedItem> mRestrictedItems = new ArrayList<>();
private boolean mUserClicked = false; private boolean mUserClicked = false;
private OnPreferenceClickListener mPreClickListener;
public RestrictedDropDownPreference(Context context, AttributeSet attrs) { public RestrictedDropDownPreference(Context context, AttributeSet attrs) {
super(context, attrs); super(context, attrs);
@@ -118,6 +119,9 @@ public class RestrictedDropDownPreference extends DropDownPreference {
@Override @Override
public void performClick() { public void performClick() {
if (mPreClickListener != null && mPreClickListener.onPreferenceClick(this)) {
return;
}
if (!mHelper.performClick()) { if (!mHelper.performClick()) {
mUserClicked = true; mUserClicked = true;
super.performClick(); super.performClick();
@@ -139,6 +143,14 @@ public class RestrictedDropDownPreference extends DropDownPreference {
} }
} }
/**
* Similar to {@link #setOnPreferenceClickListener(OnPreferenceClickListener)}, but can
* preempt {@link #onClick()}.
*/
public void setOnPreClickListener(OnPreferenceClickListener l) {
mPreClickListener = l;
}
public boolean isDisabledByAdmin() { public boolean isDisabledByAdmin() {
return mHelper.isDisabledByAdmin(); return mHelper.isDisabledByAdmin();
} }