Show confirmation when turning on "Phone calls/sms"

Added confirmation dialog, when turning on "Phone calls and sms" setting for
secondary users and guests.

Bug:15761405
Change-Id: I39b2181f0b5460db9a964c6883f053a6c6336622
This commit is contained in:
Fyodor Kupolov
2014-12-29 13:40:27 -08:00
parent c2fb78627f
commit dbbd4fca44
7 changed files with 139 additions and 66 deletions

View File

@@ -5315,19 +5315,19 @@
<string name="user_exit_guest_dialog_remove">Remove</string> <string name="user_exit_guest_dialog_remove">Remove</string>
<!-- Title of preference to enable calling[CHAR LIMIT=40] --> <!-- Title of preference to enable calling[CHAR LIMIT=40] -->
<string name="user_enable_calling">Allow phone calls</string> <string name="user_enable_calling">Turn on phone calls</string>
<!-- Title of preference to enable calling and SMS [CHAR LIMIT=45] --> <!-- Title of preference to enable calling and SMS [CHAR LIMIT=45] -->
<string name="user_enable_calling_sms">Allow phone calls and SMS</string> <string name="user_enable_calling_sms">Turn on phone calls &amp; SMS</string>
<!-- Title of preference to remove the user [CHAR LIMIT=35] --> <!-- Title of preference to remove the user [CHAR LIMIT=35] -->
<string name="user_remove_user">Remove user</string> <string name="user_remove_user">Remove user</string>
<!-- Title for confirmation of turning on calls [CHAR LIMIT=40] --> <!-- Title for confirmation of turning on calls [CHAR LIMIT=40] -->
<string name="user_enable_calling_confirm_title">Allow phone calls?</string> <string name="user_enable_calling_confirm_title">Turn on phone calls?</string>
<!-- Message for confirmation of turning on calls [CHAR LIMIT=none] --> <!-- Message for confirmation of turning on calls [CHAR LIMIT=none] -->
<string name="user_enable_calling_confirm_message">Call history will be shared with this user.</string> <string name="user_enable_calling_confirm_message">Call history will be shared with this user.</string>
<!-- Title for confirmation of turning on calls and SMS [CHAR LIMIT=45] --> <!-- Title for confirmation of turning on calls and SMS [CHAR LIMIT=45] -->
<string name="user_enable_calling_sms_confirm_title">Allow phone calls and SMS?</string> <string name="user_enable_calling_and_sms_confirm_title">Turn on phone calls &amp; SMS?</string>
<!-- Message for confirmation of turning on calls and SMS [CHAR LIMIT=none] --> <!-- Message for confirmation of turning on calls and SMS [CHAR LIMIT=none] -->
<string name="user_enable_calling_sms_confirm_message">Call and SMS history will be shared with this user.</string> <string name="user_enable_calling_and_sms_confirm_message">Call and SMS history will be shared with this user.</string>
<!-- Application Restrictions screen title [CHAR LIMIT=45] --> <!-- Application Restrictions screen title [CHAR LIMIT=45] -->
<string name="application_restrictions">Allow apps and content</string> <string name="application_restrictions">Allow apps and content</string>

View File

@@ -846,43 +846,6 @@ public final class Utils {
|| um.getUserProfiles().contains(otherUser); || um.getUserProfiles().contains(otherUser);
} }
/**
* Creates a dialog to confirm with the user if it's ok to remove the user
* and delete all the data.
*
* @param context a Context object
* @param removingUserId The userId of the user to remove
* @param onConfirmListener Callback object for positive action
* @return the created Dialog
*/
public static Dialog createRemoveConfirmationDialog(Context context, int removingUserId,
DialogInterface.OnClickListener onConfirmListener) {
UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);
UserInfo userInfo = um.getUserInfo(removingUserId);
int titleResId;
int messageResId;
if (UserHandle.myUserId() == removingUserId) {
titleResId = R.string.user_confirm_remove_self_title;
messageResId = R.string.user_confirm_remove_self_message;
} else if (userInfo.isRestricted()) {
titleResId = R.string.user_profile_confirm_remove_title;
messageResId = R.string.user_profile_confirm_remove_message;
} else if (userInfo.isManagedProfile()) {
titleResId = R.string.work_profile_confirm_remove_title;
messageResId = R.string.work_profile_confirm_remove_message;
} else {
titleResId = R.string.user_confirm_remove_title;
messageResId = R.string.user_confirm_remove_message;
}
Dialog dlg = new AlertDialog.Builder(context)
.setTitle(titleResId)
.setMessage(messageResId)
.setPositiveButton(R.string.user_delete_button,
onConfirmListener)
.setNegativeButton(android.R.string.cancel, null)
.create();
return dlg;
}
/** /**
* Returns whether or not this device is able to be OEM unlocked. * Returns whether or not this device is able to be OEM unlocked.

View File

@@ -49,6 +49,7 @@ import android.preference.PreferenceScreen;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment; import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.users.UserDialogs;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@@ -203,7 +204,7 @@ public class AccountSettings extends SettingsPreferenceFragment
} }
if (preference == profileData.removeWorkProfilePreference) { if (preference == profileData.removeWorkProfilePreference) {
final int userId = profileData.userInfo.id; final int userId = profileData.userInfo.id;
Utils.createRemoveConfirmationDialog(getActivity(), userId, UserDialogs.createRemoveDialog(getActivity(), userId,
new DialogInterface.OnClickListener() { new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {

View File

@@ -22,7 +22,6 @@ import android.content.Intent;
import android.content.pm.UserInfo; import android.content.pm.UserInfo;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.os.UserHandle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
@@ -31,8 +30,6 @@ import android.widget.TextView;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Utils; import com.android.settings.Utils;
import java.util.List;
public class RestrictedProfileSettings extends AppRestrictionsFragment public class RestrictedProfileSettings extends AppRestrictionsFragment
implements EditUserInfoController.OnContentChangedCallback { implements EditUserInfoController.OnContentChangedCallback {
@@ -129,7 +126,7 @@ public class RestrictedProfileSettings extends AppRestrictionsFragment
this, mUser); this, mUser);
} else if (dialogId == DIALOG_CONFIRM_REMOVE) { } else if (dialogId == DIALOG_CONFIRM_REMOVE) {
Dialog dlg = Dialog dlg =
Utils.createRemoveConfirmationDialog(getActivity(), mUser.getIdentifier(), UserDialogs.createRemoveDialog(getActivity(), mUser.getIdentifier(),
new DialogInterface.OnClickListener() { new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
removeUser(); removeUser();

View File

@@ -28,7 +28,6 @@ import android.preference.SwitchPreference;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment; import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;
import java.util.List; import java.util.List;
@@ -55,7 +54,7 @@ public class UserDetailsSettings extends SettingsPreferenceFragment
private static final int DIALOG_CONFIRM_REMOVE = 1; private static final int DIALOG_CONFIRM_REMOVE = 1;
private static final int DIALOG_CONFIRM_ENABLE_CALLING = 2; private static final int DIALOG_CONFIRM_ENABLE_CALLING = 2;
private static final int DIALOG_CONFIRM_ENABLE_CALLING_SMS = 3; private static final int DIALOG_CONFIRM_ENABLE_CALLING_AND_SMS = 3;
private UserManager mUserManager; private UserManager mUserManager;
private SwitchPreference mPhonePref; private SwitchPreference mPhonePref;
@@ -117,10 +116,18 @@ public class UserDetailsSettings extends SettingsPreferenceFragment
@Override @Override
public boolean onPreferenceChange(Preference preference, Object newValue) { public boolean onPreferenceChange(Preference preference, Object newValue) {
if (Boolean.TRUE.equals(newValue)) {
showDialog(mGuestUser? DIALOG_CONFIRM_ENABLE_CALLING : DIALOG_CONFIRM_ENABLE_CALLING_AND_SMS);
return false;
}
enableCallsAndSms(false);
return true;
}
void enableCallsAndSms(boolean enabled) {
mPhonePref.setChecked(enabled);
if (mGuestUser) { if (mGuestUser) {
// TODO: Show confirmation dialog: b/15761405 mDefaultGuestRestrictions.putBoolean(UserManager.DISALLOW_OUTGOING_CALLS, !enabled);
mDefaultGuestRestrictions.putBoolean(UserManager.DISALLOW_OUTGOING_CALLS,
!((Boolean) newValue));
// SMS is always disabled for guest // SMS is always disabled for guest
mDefaultGuestRestrictions.putBoolean(UserManager.DISALLOW_SMS, true); mDefaultGuestRestrictions.putBoolean(UserManager.DISALLOW_SMS, true);
mUserManager.setDefaultGuestRestrictions(mDefaultGuestRestrictions); mUserManager.setDefaultGuestRestrictions(mDefaultGuestRestrictions);
@@ -135,14 +142,11 @@ public class UserDetailsSettings extends SettingsPreferenceFragment
} }
} }
} else { } else {
// TODO: Show confirmation dialog: b/15761405
UserHandle userHandle = new UserHandle(mUserInfo.id); UserHandle userHandle = new UserHandle(mUserInfo.id);
mUserManager.setUserRestriction(UserManager.DISALLOW_OUTGOING_CALLS, mUserManager.setUserRestriction(UserManager.DISALLOW_OUTGOING_CALLS, !enabled,
!((Boolean) newValue), userHandle); userHandle);
mUserManager.setUserRestriction(UserManager.DISALLOW_SMS, mUserManager.setUserRestriction(UserManager.DISALLOW_SMS, !enabled, userHandle);
!((Boolean) newValue), userHandle);
} }
return true;
} }
@Override @Override
@@ -150,20 +154,29 @@ public class UserDetailsSettings extends SettingsPreferenceFragment
Context context = getActivity(); Context context = getActivity();
if (context == null) return null; if (context == null) return null;
switch (dialogId) { switch (dialogId) {
case DIALOG_CONFIRM_REMOVE: { case DIALOG_CONFIRM_REMOVE:
Dialog dlg = Utils.createRemoveConfirmationDialog(getActivity(), mUserInfo.id, return UserDialogs.createRemoveDialog(getActivity(), mUserInfo.id,
new DialogInterface.OnClickListener() { new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
removeUser(); removeUser();
} }
}); });
return dlg;
}
case DIALOG_CONFIRM_ENABLE_CALLING: case DIALOG_CONFIRM_ENABLE_CALLING:
case DIALOG_CONFIRM_ENABLE_CALLING_SMS: return UserDialogs.createEnablePhoneCallsDialog(getActivity(),
// TODO: b/15761405 new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
enableCallsAndSms(true);
}
});
case DIALOG_CONFIRM_ENABLE_CALLING_AND_SMS:
return UserDialogs.createEnablePhoneCallsAndSmsDialog(getActivity(),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
enableCallsAndSms(true);
}
});
} }
return null; throw new IllegalArgumentException("Unsupported dialogId " + dialogId);
} }
void removeUser() { void removeUser() {

View File

@@ -0,0 +1,99 @@
/*
* Copyright (C) 2014 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.users;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.UserInfo;
import android.os.UserHandle;
import android.os.UserManager;
import com.android.settings.R;
/**
* Helper class for displaying dialogs related to user settings.
*/
public final class UserDialogs {
/**
* Creates a dialog to confirm with the user if it's ok to remove the user
* and delete all the data.
*
* @param context a Context object
* @param removingUserId The userId of the user to remove
* @param onConfirmListener Callback object for positive action
* @return the created Dialog
*/
public static Dialog createRemoveDialog(Context context, int removingUserId,
DialogInterface.OnClickListener onConfirmListener) {
UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);
UserInfo userInfo = um.getUserInfo(removingUserId);
int titleResId;
int messageResId;
if (UserHandle.myUserId() == removingUserId) {
titleResId = R.string.user_confirm_remove_self_title;
messageResId = R.string.user_confirm_remove_self_message;
} else if (userInfo.isRestricted()) {
titleResId = R.string.user_profile_confirm_remove_title;
messageResId = R.string.user_profile_confirm_remove_message;
} else if (userInfo.isManagedProfile()) {
titleResId = R.string.work_profile_confirm_remove_title;
messageResId = R.string.work_profile_confirm_remove_message;
} else {
titleResId = R.string.user_confirm_remove_title;
messageResId = R.string.user_confirm_remove_message;
}
return new AlertDialog.Builder(context)
.setTitle(titleResId)
.setMessage(messageResId)
.setPositiveButton(R.string.user_delete_button, onConfirmListener)
.setNegativeButton(android.R.string.cancel, null)
.create();
}
/**
* Creates a dialog to confirm that the user is ok to enable phone calls and SMS.
*
* @param onConfirmListener Callback object for positive action
*/
public static Dialog createEnablePhoneCallsAndSmsDialog(Context context,
DialogInterface.OnClickListener onConfirmListener) {
return new AlertDialog.Builder(context)
.setTitle(R.string.user_enable_calling_and_sms_confirm_title)
.setMessage(R.string.user_enable_calling_and_sms_confirm_message)
.setPositiveButton(R.string.okay, onConfirmListener)
.setNegativeButton(android.R.string.cancel, null)
.create();
}
/**
* Creates a dialog to confirm that the user is ok to enable phone calls (no SMS).
*
* @param onConfirmListener Callback object for positive action
*/
public static Dialog createEnablePhoneCallsDialog(Context context,
DialogInterface.OnClickListener onConfirmListener) {
return new AlertDialog.Builder(context)
.setTitle(R.string.user_enable_calling_confirm_title)
.setMessage(R.string.user_enable_calling_confirm_message)
.setPositiveButton(R.string.okay, onConfirmListener)
.setNegativeButton(android.R.string.cancel, null)
.create();
}
}

View File

@@ -502,7 +502,7 @@ public class UserSettings extends SettingsPreferenceFragment
switch (dialogId) { switch (dialogId) {
case DIALOG_CONFIRM_REMOVE: { case DIALOG_CONFIRM_REMOVE: {
Dialog dlg = Dialog dlg =
Utils.createRemoveConfirmationDialog(getActivity(), mRemovingUserId, UserDialogs.createRemoveDialog(getActivity(), mRemovingUserId,
new DialogInterface.OnClickListener() { new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
removeUserNow(); removeUserNow();