summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api/current.txt39
-rw-r--r--api/system-current.txt39
-rw-r--r--core/java/android/app/Activity.java25
-rw-r--r--core/java/android/app/ApplicationPackageManager.java10
-rw-r--r--core/java/android/content/pm/IPackageManager.aidl3
-rw-r--r--core/java/android/content/pm/PackageManager.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java45
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java40
-rw-r--r--telephony/java/android/telephony/CarrierConfigManager.java69
-rw-r--r--telephony/java/android/telephony/PhoneNumberUtils.java18
-rw-r--r--test-runner/src/android/test/mock/MockPackageManager.java6
11 files changed, 143 insertions, 164 deletions
diff --git a/api/current.txt b/api/current.txt
index cb72a2efe6c8..f110d0b6305c 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -3513,6 +3513,7 @@ package android.app {
method public deprecated void setTitleColor(int);
method public void setVisible(boolean);
method public final void setVolumeControlStream(int);
+ method public boolean shouldShowRequestPermissionRationale(java.lang.String);
method public boolean shouldUpRecreateTask(android.content.Intent);
method public final deprecated void showDialog(int);
method public final deprecated boolean showDialog(int, android.os.Bundle);
@@ -30635,20 +30636,6 @@ package android.telephony {
field public static final java.lang.String BOOL_HAS_IN_CALL_NOISE_SUPPRESSION = "bool_has_in_call_noise_suppression";
field public static final java.lang.String BOOL_HIDE_CARRIER_NETWORK_SETTINGS = "bool_hide_carrier_network_settings";
field public static final java.lang.String BOOL_IGNORE_SIM_NETWORK_LOCKED_EVENTS = "bool_ignore_sim_network_locked_events";
- field public static final java.lang.String BOOL_MMS_ALIAS_ENABLED = "aliasEnabled";
- field public static final java.lang.String BOOL_MMS_ALLOW_ATTACH_AUDIO = "allowAttachAudio";
- field public static final java.lang.String BOOL_MMS_APPEND_TRANSACTION_ID = "enabledTransID";
- field public static final java.lang.String BOOL_MMS_GROUP_MMS_ENABLED = "enableGroupMms";
- field public static final java.lang.String BOOL_MMS_MMS_DELIVERY_REPORT_ENABLED = "enableMMSDeliveryReports";
- field public static final java.lang.String BOOL_MMS_MMS_ENABLED = "enabledMMS";
- field public static final java.lang.String BOOL_MMS_MMS_READ_REPORT_ENABLED = "enableMMSReadReports";
- field public static final java.lang.String BOOL_MMS_MULTIPART_SMS_ENABLED = "enableMultipartSMS";
- field public static final java.lang.String BOOL_MMS_NOTIFY_WAP_MMSC_ENABLED = "enabledNotifyWapMMSC";
- field public static final java.lang.String BOOL_MMS_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES = "sendMultipartSmsAsSeparateMessages";
- field public static final java.lang.String BOOL_MMS_SHOW_CELL_BROADCAST_APP_LINKS = "config_cellBroadcastAppLinks";
- field public static final java.lang.String BOOL_MMS_SMS_DELIVERY_REPORT_ENABLED = "enableSMSDeliveryReports";
- field public static final java.lang.String BOOL_MMS_SUPPORT_HTTP_CHARSET_HEADER = "supportHttpCharsetHeader";
- field public static final java.lang.String BOOL_MMS_SUPPORT_MMS_CONTENT_DISPOSITION = "supportMmsContentDisposition";
field public static final java.lang.String BOOL_OPERATOR_SELECTION_EXPAND = "bool_operator_selection_expand";
field public static final java.lang.String BOOL_PREFER_2G = "bool_prefer_2g";
field public static final java.lang.String BOOL_SHOW_APN_SETTING_CDMA = "bool_show_apn_setting_cdma";
@@ -30662,24 +30649,7 @@ package android.telephony {
field public static final java.lang.String BOOL_VOICEMAIL_NOTIFICATION_PERSISTENT = "bool_voicemail_notification_persistent";
field public static final java.lang.String BOOL_VOICE_PRIVACY_DISABLE = "bool_voice_privacy_disable";
field public static final java.lang.String BOOL_WORLD_PHONE = "bool_world_phone";
- field public static final java.lang.String INT_MMS_ALIAS_MAX_CHARS = "aliasMaxChars";
- field public static final java.lang.String INT_MMS_ALIAS_MIN_CHARS = "aliasMinChars";
- field public static final java.lang.String INT_MMS_HTTP_SOCKET_TIMEOUT = "httpSocketTimeout";
- field public static final java.lang.String INT_MMS_MAX_IMAGE_HEIGHT = "maxImageHeight";
- field public static final java.lang.String INT_MMS_MAX_IMAGE_WIDTH = "maxImageWidth";
- field public static final java.lang.String INT_MMS_MAX_MESSAGE_SIZE = "maxMessageSize";
- field public static final java.lang.String INT_MMS_MESSAGE_TEXT_MAX_SIZE = "maxMessageTextSize";
- field public static final java.lang.String INT_MMS_RECIPIENT_LIMIT = "recipientLimit";
- field public static final java.lang.String INT_MMS_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD = "smsToMmsTextLengthThreshold";
- field public static final java.lang.String INT_MMS_SMS_TO_MMS_TEXT_THRESHOLD = "smsToMmsTextThreshold";
- field public static final java.lang.String INT_MMS_SUBJECT_MAX_LENGTH = "maxSubjectLength";
field public static final java.lang.String INT_VOLTE_REPLACEMENT_RAT = "int_volte_replacement_rat";
- field public static final java.lang.String STRING_MMS_EMAIL_GATEWAY_NUMBER = "emailGatewayNumber";
- field public static final java.lang.String STRING_MMS_HTTP_PARAMS = "httpParams";
- field public static final java.lang.String STRING_MMS_NAI_SUFFIX = "naiSuffix";
- field public static final java.lang.String STRING_MMS_UA_PROF_TAG_NAME = "uaProfTagName";
- field public static final java.lang.String STRING_MMS_UA_PROF_URL = "uaProfUrl";
- field public static final java.lang.String STRING_MMS_USER_AGENT = "userAgent";
}
public final class CellIdentityCdma implements android.os.Parcelable {
@@ -30871,12 +30841,14 @@ package android.telephony {
public class PhoneNumberUtils {
ctor public PhoneNumberUtils();
- method public static void addPhoneTtsSpan(android.text.Spannable, int, int);
+ method public static void addTtsSpan(android.text.Spannable, int, int);
method public static java.lang.String calledPartyBCDFragmentToString(byte[], int, int);
method public static java.lang.String calledPartyBCDToString(byte[], int, int);
method public static boolean compare(java.lang.String, java.lang.String);
method public static boolean compare(android.content.Context, java.lang.String, java.lang.String);
method public static java.lang.String convertKeypadLettersToDigits(java.lang.String);
+ method public static android.text.style.TtsSpan createTtsSpan(java.lang.String);
+ method public static java.lang.CharSequence createTtsSpannable(java.lang.CharSequence);
method public static java.lang.String extractNetworkPortion(java.lang.String);
method public static java.lang.String extractPostDialPortion(java.lang.String);
method public static deprecated void formatJapaneseNumber(android.text.Editable);
@@ -30889,8 +30861,6 @@ package android.telephony {
method public static java.lang.String formatNumberToRFC3966(java.lang.String, java.lang.String);
method public static deprecated int getFormatTypeForLocale(java.util.Locale);
method public static java.lang.String getNumberFromIntent(android.content.Intent, android.content.Context);
- method public static android.text.style.TtsSpan getPhoneTtsSpan(java.lang.String);
- method public static java.lang.CharSequence getPhoneTtsSpannable(java.lang.CharSequence);
method public static java.lang.String getStrippedReversed(java.lang.String);
method public static final boolean is12Key(char);
method public static final boolean isDialable(char);
@@ -31029,7 +30999,6 @@ package android.telephony {
field public static final java.lang.String MMS_CONFIG_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD = "smsToMmsTextLengthThreshold";
field public static final java.lang.String MMS_CONFIG_SMS_TO_MMS_TEXT_THRESHOLD = "smsToMmsTextThreshold";
field public static final java.lang.String MMS_CONFIG_SUBJECT_MAX_LENGTH = "maxSubjectLength";
- field public static final java.lang.String MMS_CONFIG_SUPPORT_HTTP_CHARSET_HEADER = "supportHttpCharsetHeader";
field public static final java.lang.String MMS_CONFIG_SUPPORT_MMS_CONTENT_DISPOSITION = "supportMmsContentDisposition";
field public static final java.lang.String MMS_CONFIG_UA_PROF_TAG_NAME = "uaProfTagName";
field public static final java.lang.String MMS_CONFIG_UA_PROF_URL = "uaProfUrl";
diff --git a/api/system-current.txt b/api/system-current.txt
index 488c92e65c8a..84c0f83431a5 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -3599,6 +3599,7 @@ package android.app {
method public deprecated void setTitleColor(int);
method public void setVisible(boolean);
method public final void setVolumeControlStream(int);
+ method public boolean shouldShowRequestPermissionRationale(java.lang.String);
method public boolean shouldUpRecreateTask(android.content.Intent);
method public final deprecated void showDialog(int);
method public final deprecated boolean showDialog(int, android.os.Bundle);
@@ -32850,20 +32851,6 @@ package android.telephony {
field public static final java.lang.String BOOL_HAS_IN_CALL_NOISE_SUPPRESSION = "bool_has_in_call_noise_suppression";
field public static final java.lang.String BOOL_HIDE_CARRIER_NETWORK_SETTINGS = "bool_hide_carrier_network_settings";
field public static final java.lang.String BOOL_IGNORE_SIM_NETWORK_LOCKED_EVENTS = "bool_ignore_sim_network_locked_events";
- field public static final java.lang.String BOOL_MMS_ALIAS_ENABLED = "aliasEnabled";
- field public static final java.lang.String BOOL_MMS_ALLOW_ATTACH_AUDIO = "allowAttachAudio";
- field public static final java.lang.String BOOL_MMS_APPEND_TRANSACTION_ID = "enabledTransID";
- field public static final java.lang.String BOOL_MMS_GROUP_MMS_ENABLED = "enableGroupMms";
- field public static final java.lang.String BOOL_MMS_MMS_DELIVERY_REPORT_ENABLED = "enableMMSDeliveryReports";
- field public static final java.lang.String BOOL_MMS_MMS_ENABLED = "enabledMMS";
- field public static final java.lang.String BOOL_MMS_MMS_READ_REPORT_ENABLED = "enableMMSReadReports";
- field public static final java.lang.String BOOL_MMS_MULTIPART_SMS_ENABLED = "enableMultipartSMS";
- field public static final java.lang.String BOOL_MMS_NOTIFY_WAP_MMSC_ENABLED = "enabledNotifyWapMMSC";
- field public static final java.lang.String BOOL_MMS_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES = "sendMultipartSmsAsSeparateMessages";
- field public static final java.lang.String BOOL_MMS_SHOW_CELL_BROADCAST_APP_LINKS = "config_cellBroadcastAppLinks";
- field public static final java.lang.String BOOL_MMS_SMS_DELIVERY_REPORT_ENABLED = "enableSMSDeliveryReports";
- field public static final java.lang.String BOOL_MMS_SUPPORT_HTTP_CHARSET_HEADER = "supportHttpCharsetHeader";
- field public static final java.lang.String BOOL_MMS_SUPPORT_MMS_CONTENT_DISPOSITION = "supportMmsContentDisposition";
field public static final java.lang.String BOOL_OPERATOR_SELECTION_EXPAND = "bool_operator_selection_expand";
field public static final java.lang.String BOOL_PREFER_2G = "bool_prefer_2g";
field public static final java.lang.String BOOL_SHOW_APN_SETTING_CDMA = "bool_show_apn_setting_cdma";
@@ -32877,24 +32864,7 @@ package android.telephony {
field public static final java.lang.String BOOL_VOICEMAIL_NOTIFICATION_PERSISTENT = "bool_voicemail_notification_persistent";
field public static final java.lang.String BOOL_VOICE_PRIVACY_DISABLE = "bool_voice_privacy_disable";
field public static final java.lang.String BOOL_WORLD_PHONE = "bool_world_phone";
- field public static final java.lang.String INT_MMS_ALIAS_MAX_CHARS = "aliasMaxChars";
- field public static final java.lang.String INT_MMS_ALIAS_MIN_CHARS = "aliasMinChars";
- field public static final java.lang.String INT_MMS_HTTP_SOCKET_TIMEOUT = "httpSocketTimeout";
- field public static final java.lang.String INT_MMS_MAX_IMAGE_HEIGHT = "maxImageHeight";
- field public static final java.lang.String INT_MMS_MAX_IMAGE_WIDTH = "maxImageWidth";
- field public static final java.lang.String INT_MMS_MAX_MESSAGE_SIZE = "maxMessageSize";
- field public static final java.lang.String INT_MMS_MESSAGE_TEXT_MAX_SIZE = "maxMessageTextSize";
- field public static final java.lang.String INT_MMS_RECIPIENT_LIMIT = "recipientLimit";
- field public static final java.lang.String INT_MMS_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD = "smsToMmsTextLengthThreshold";
- field public static final java.lang.String INT_MMS_SMS_TO_MMS_TEXT_THRESHOLD = "smsToMmsTextThreshold";
- field public static final java.lang.String INT_MMS_SUBJECT_MAX_LENGTH = "maxSubjectLength";
field public static final java.lang.String INT_VOLTE_REPLACEMENT_RAT = "int_volte_replacement_rat";
- field public static final java.lang.String STRING_MMS_EMAIL_GATEWAY_NUMBER = "emailGatewayNumber";
- field public static final java.lang.String STRING_MMS_HTTP_PARAMS = "httpParams";
- field public static final java.lang.String STRING_MMS_NAI_SUFFIX = "naiSuffix";
- field public static final java.lang.String STRING_MMS_UA_PROF_TAG_NAME = "uaProfTagName";
- field public static final java.lang.String STRING_MMS_UA_PROF_URL = "uaProfUrl";
- field public static final java.lang.String STRING_MMS_USER_AGENT = "userAgent";
}
public final class CellIdentityCdma implements android.os.Parcelable {
@@ -33086,12 +33056,14 @@ package android.telephony {
public class PhoneNumberUtils {
ctor public PhoneNumberUtils();
- method public static void addPhoneTtsSpan(android.text.Spannable, int, int);
+ method public static void addTtsSpan(android.text.Spannable, int, int);
method public static java.lang.String calledPartyBCDFragmentToString(byte[], int, int);
method public static java.lang.String calledPartyBCDToString(byte[], int, int);
method public static boolean compare(java.lang.String, java.lang.String);
method public static boolean compare(android.content.Context, java.lang.String, java.lang.String);
method public static java.lang.String convertKeypadLettersToDigits(java.lang.String);
+ method public static android.text.style.TtsSpan createTtsSpan(java.lang.String);
+ method public static java.lang.CharSequence createTtsSpannable(java.lang.CharSequence);
method public static java.lang.String extractNetworkPortion(java.lang.String);
method public static java.lang.String extractPostDialPortion(java.lang.String);
method public static deprecated void formatJapaneseNumber(android.text.Editable);
@@ -33104,8 +33076,6 @@ package android.telephony {
method public static java.lang.String formatNumberToRFC3966(java.lang.String, java.lang.String);
method public static deprecated int getFormatTypeForLocale(java.util.Locale);
method public static java.lang.String getNumberFromIntent(android.content.Intent, android.content.Context);
- method public static android.text.style.TtsSpan getPhoneTtsSpan(java.lang.String);
- method public static java.lang.CharSequence getPhoneTtsSpannable(java.lang.CharSequence);
method public static java.lang.String getStrippedReversed(java.lang.String);
method public static final boolean is12Key(char);
method public static final boolean isDialable(char);
@@ -33244,7 +33214,6 @@ package android.telephony {
field public static final java.lang.String MMS_CONFIG_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD = "smsToMmsTextLengthThreshold";
field public static final java.lang.String MMS_CONFIG_SMS_TO_MMS_TEXT_THRESHOLD = "smsToMmsTextThreshold";
field public static final java.lang.String MMS_CONFIG_SUBJECT_MAX_LENGTH = "maxSubjectLength";
- field public static final java.lang.String MMS_CONFIG_SUPPORT_HTTP_CHARSET_HEADER = "supportHttpCharsetHeader";
field public static final java.lang.String MMS_CONFIG_SUPPORT_MMS_CONTENT_DISPOSITION = "supportMmsContentDisposition";
field public static final java.lang.String MMS_CONFIG_UA_PROF_TAG_NAME = "uaProfTagName";
field public static final java.lang.String MMS_CONFIG_UA_PROF_URL = "uaProfUrl";
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 49f509974fcd..966482d53d61 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -3746,6 +3746,7 @@ public class Activity extends ContextThemeWrapper
*
* @see #onRequestPermissionsResult(int, String[], int[])
* @see #checkSelfPermission(String)
+ * @see #shouldShowRequestPermissionRationale(String)
*/
public final void requestPermissions(@NonNull String[] permissions, int requestCode) {
Intent intent = getPackageManager().buildRequestPermissionsIntent(permissions);
@@ -3770,6 +3771,30 @@ public class Activity extends ContextThemeWrapper
}
/**
+ * Gets whether you should show UI with rationale for requesting a permission.
+ * You should do this only if you do not have the permission and the context in
+ * which the permission is requested does not clearly communicate to the user
+ * what would be the benefit from granting this permission.
+ * <p>
+ * For example, if you write a camera app, requesting the camera permission
+ * would be expected by the user and no rationale for why it is requested is
+ * needed. If however, the app needs location for tagging photos then a non-tech
+ * savvy user may wonder how location is related to taking photos. In this case
+ * you may choose to show UI with rationale of requesting this permission.
+ * </p>
+ *
+ * @param permission A permission your app wants to request.
+ * @return Whether you can show permission rationale UI.
+ *
+ * @see #checkSelfPermission(String)
+ * @see #requestPermissions(String[], int)
+ * @see #onRequestPermissionsResult(int, String[], int[])
+ */
+ public boolean shouldShowRequestPermissionRationale(String permission) {
+ return getPackageManager().shouldShowRequestPermissionRationale(permission);
+ }
+
+ /**
* Same as calling {@link #startActivityForResult(Intent, int, Bundle)}
* with no options.
*
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index 04f643074592..41e3db834f48 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -486,6 +486,16 @@ final class ApplicationPackageManager extends PackageManager {
}
@Override
+ public boolean shouldShowRequestPermissionRationale(String permission) {
+ try {
+ return mPM.shouldShowRequestPermissionRationale(permission,
+ mContext.getPackageName(), mContext.getUserId());
+ } catch (RemoteException e) {
+ throw new RuntimeException("Package manager has died", e);
+ }
+ }
+
+ @Override
public int checkSignatures(String pkg1, String pkg2) {
try {
return mPM.checkSignatures(pkg1, pkg2);
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl
index ddff7821cdcb..00b8c71fde32 100644
--- a/core/java/android/content/pm/IPackageManager.aidl
+++ b/core/java/android/content/pm/IPackageManager.aidl
@@ -105,6 +105,9 @@ interface IPackageManager {
void updatePermissionFlags(String permissionName, String packageName, int flagMask,
int flagValues, int userId);
+ boolean shouldShowRequestPermissionRationale(String permissionName,
+ String packageName, int userId);
+
boolean isProtectedBroadcast(String actionName);
int checkSignatures(String pkg1, String pkg2);
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 2ca030635ef5..45245e4af95d 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -2539,6 +2539,19 @@ public abstract class PackageManager {
@NonNull UserHandle user);
/**
+ * Gets whether you should show UI with rationale for requesting a permission.
+ * You should do this only if you do not have the permission and the context in
+ * which the permission is requested does not clearly communicate to the user
+ * what would be the benefit from grating this permission.
+ *
+ * @param permission A permission your app wants to request.
+ * @return Whether you can show permission rationale UI.
+ *
+ * @hide
+ */
+ public abstract boolean shouldShowRequestPermissionRationale(String permission);
+
+ /**
* Returns an {@link android.content.Intent} suitable for passing to
* {@link android.app.Activity#startActivityForResult(android.content.Intent, int)}
* which prompts the user to grant permissions to this application.
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index bc4210598bc8..0dcc0b9944eb 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -33,6 +33,7 @@ import android.content.pm.UserInfo;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
+import android.os.DeadObjectException;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
@@ -381,14 +382,17 @@ public class KeyguardViewMediator extends SystemUI {
+ ",state=" + simState + ")");
}
- try {
- int size = mKeyguardStateCallbacks.size();
- boolean simPinSecure = mUpdateMonitor.isSimPinSecure();
- for (int i = 0; i < size; i++) {
+ int size = mKeyguardStateCallbacks.size();
+ boolean simPinSecure = mUpdateMonitor.isSimPinSecure();
+ for (int i = size - 1; i >= 0; i--) {
+ try {
mKeyguardStateCallbacks.get(i).onSimSecureStateChanged(simPinSecure);
+ } catch (RemoteException e) {
+ Slog.w(TAG, "Failed to call onSimSecureStateChanged", e);
+ if (e instanceof DeadObjectException) {
+ mKeyguardStateCallbacks.remove(i);
+ }
}
- } catch (RemoteException e) {
- Slog.w(TAG, "Failed to call onSimSecureStateChanged", e);
}
switch (simState) {
@@ -551,6 +555,7 @@ public class KeyguardViewMediator extends SystemUI {
// Assume keyguard is showing (unless it's disabled) until we know for sure...
setShowingLocked(!shouldWaitForProvisioning() && !mLockPatternUtils.isLockScreenDisabled(
KeyguardUpdateMonitor.getCurrentUser()));
+ updateInputRestrictedLocked();
mTrustManager.reportKeyguardShowingChanged();
mStatusBarKeyguardViewManager = new StatusBarKeyguardViewManager(mContext,
@@ -954,13 +959,16 @@ public class KeyguardViewMediator extends SystemUI {
boolean inputRestricted = isInputRestricted();
if (mInputRestricted != inputRestricted) {
mInputRestricted = inputRestricted;
- try {
- int size = mKeyguardStateCallbacks.size();
- for (int i = 0; i < size; i++) {
+ int size = mKeyguardStateCallbacks.size();
+ for (int i = size - 1; i >= 0; i--) {
+ try {
mKeyguardStateCallbacks.get(i).onInputRestrictedStateChanged(inputRestricted);
+ } catch (RemoteException e) {
+ Slog.w(TAG, "Failed to call onDeviceProvisioned", e);
+ if (e instanceof DeadObjectException) {
+ mKeyguardStateCallbacks.remove(i);
+ }
}
- } catch (RemoteException e) {
- Slog.w(TAG, "Failed to call onDeviceProvisioned", e);
}
}
}
@@ -1544,13 +1552,16 @@ public class KeyguardViewMediator extends SystemUI {
private void setShowingLocked(boolean showing) {
if (showing != mShowing) {
mShowing = showing;
- try {
- int size = mKeyguardStateCallbacks.size();
- for (int i = 0; i < size; i++) {
+ int size = mKeyguardStateCallbacks.size();
+ for (int i = size - 1; i >= 0; i--) {
+ try {
mKeyguardStateCallbacks.get(i).onShowingStateChanged(showing);
+ } catch (RemoteException e) {
+ Slog.w(TAG, "Failed to call onShowingStateChanged", e);
+ if (e instanceof DeadObjectException) {
+ mKeyguardStateCallbacks.remove(i);
+ }
}
- } catch (RemoteException e) {
- Slog.w(TAG, "Failed to call onShowingStateChanged", e);
}
updateInputRestrictedLocked();
mTrustManager.reportKeyguardShowingChanged();
@@ -1565,7 +1576,7 @@ public class KeyguardViewMediator extends SystemUI {
callback.onShowingStateChanged(mShowing);
callback.onInputRestrictedStateChanged(mInputRestricted);
} catch (RemoteException e) {
- Slog.w(TAG, "Failed to call onShowingStateChanged or onSimSecureStateChanged", e);
+ Slog.w(TAG, "Failed to call onShowingStateChanged or onSimSecureStateChanged or onInputRestrictedStateChanged", e);
}
}
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 9b619c79749d..47e39631cfca 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -3360,6 +3360,46 @@ public class PackageManagerService extends IPackageManager.Stub {
}
@Override
+ public boolean shouldShowRequestPermissionRationale(String permissionName,
+ String packageName, int userId) {
+ if (UserHandle.getCallingUserId() != userId) {
+ mContext.enforceCallingPermission(
+ android.Manifest.permission.INTERACT_ACROSS_USERS_FULL,
+ "canShowRequestPermissionRationale for user " + userId);
+ }
+
+ final int uid = getPackageUid(packageName, userId);
+ if (UserHandle.getAppId(getCallingUid()) != UserHandle.getAppId(uid)) {
+ return false;
+ }
+
+ if (checkPermission(permissionName, packageName, userId)
+ == PackageManager.PERMISSION_GRANTED) {
+ return false;
+ }
+
+ final int flags;
+
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ flags = getPermissionFlags(permissionName,
+ packageName, userId);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+
+ final int fixedFlags = PackageManager.FLAG_PERMISSION_SYSTEM_FIXED
+ | PackageManager.FLAG_PERMISSION_POLICY_FIXED
+ | PackageManager.FLAG_PERMISSION_USER_FIXED;
+
+ if ((flags & fixedFlags) != 0) {
+ return false;
+ }
+
+ return (flags & PackageManager.FLAG_PERMISSION_USER_SET) != 0;
+ }
+
+ @Override
public boolean isProtectedBroadcast(String actionName) {
synchronized (mPackages) {
return mProtectedBroadcasts.contains(actionName);
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index 1d751d545cbe..76da13f78119 100644
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -37,8 +37,6 @@ import android.os.ServiceManager;
* @see Context#CARRIER_CONFIG_SERVICE
*/
public class CarrierConfigManager {
- private final static String TAG = "CarrierConfigManager";
-
/**
* @hide
*/
@@ -225,39 +223,7 @@ public class CarrierConfigManager {
*/
public static final String STRING_VVM_TYPE = "string_vvm_type";
- // These variables are used by the MMS service and exposed through another API, {@link
- // SmsManager}. The variable names and string values are copied from there.
- public static final String BOOL_MMS_ALIAS_ENABLED = "aliasEnabled";
- public static final String BOOL_MMS_ALLOW_ATTACH_AUDIO = "allowAttachAudio";
- public static final String BOOL_MMS_APPEND_TRANSACTION_ID = "enabledTransID";
- public static final String BOOL_MMS_GROUP_MMS_ENABLED = "enableGroupMms";
- public static final String BOOL_MMS_MMS_DELIVERY_REPORT_ENABLED = "enableMMSDeliveryReports";
- public static final String BOOL_MMS_MMS_ENABLED = "enabledMMS";
- public static final String BOOL_MMS_MMS_READ_REPORT_ENABLED = "enableMMSReadReports";
- public static final String BOOL_MMS_MULTIPART_SMS_ENABLED = "enableMultipartSMS";
- public static final String BOOL_MMS_NOTIFY_WAP_MMSC_ENABLED = "enabledNotifyWapMMSC";
- public static final String BOOL_MMS_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES = "sendMultipartSmsAsSeparateMessages";
- public static final String BOOL_MMS_SHOW_CELL_BROADCAST_APP_LINKS = "config_cellBroadcastAppLinks";
- public static final String BOOL_MMS_SMS_DELIVERY_REPORT_ENABLED = "enableSMSDeliveryReports";
- public static final String BOOL_MMS_SUPPORT_HTTP_CHARSET_HEADER = "supportHttpCharsetHeader";
- public static final String BOOL_MMS_SUPPORT_MMS_CONTENT_DISPOSITION = "supportMmsContentDisposition";
- public static final String INT_MMS_ALIAS_MAX_CHARS = "aliasMaxChars";
- public static final String INT_MMS_ALIAS_MIN_CHARS = "aliasMinChars";
- public static final String INT_MMS_HTTP_SOCKET_TIMEOUT = "httpSocketTimeout";
- public static final String INT_MMS_MAX_IMAGE_HEIGHT = "maxImageHeight";
- public static final String INT_MMS_MAX_IMAGE_WIDTH = "maxImageWidth";
- public static final String INT_MMS_MAX_MESSAGE_SIZE = "maxMessageSize";
- public static final String INT_MMS_MESSAGE_TEXT_MAX_SIZE = "maxMessageTextSize";
- public static final String INT_MMS_RECIPIENT_LIMIT = "recipientLimit";
- public static final String INT_MMS_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD = "smsToMmsTextLengthThreshold";
- public static final String INT_MMS_SMS_TO_MMS_TEXT_THRESHOLD = "smsToMmsTextThreshold";
- public static final String INT_MMS_SUBJECT_MAX_LENGTH = "maxSubjectLength";
- public static final String STRING_MMS_EMAIL_GATEWAY_NUMBER = "emailGatewayNumber";
- public static final String STRING_MMS_HTTP_PARAMS = "httpParams";
- public static final String STRING_MMS_NAI_SUFFIX = "naiSuffix";
- public static final String STRING_MMS_UA_PROF_TAG_NAME = "uaProfTagName";
- public static final String STRING_MMS_UA_PROF_URL = "uaProfUrl";
- public static final String STRING_MMS_USER_AGENT = "userAgent";
+ private final static String TAG = "CarrierConfigManager";
/** The default value for every variable. */
private final static PersistableBundle sDefaults;
@@ -296,39 +262,6 @@ public class CarrierConfigManager {
sDefaults.putInt(INT_VVM_PORT_NUMBER, 0);
sDefaults.putString(STRING_VVM_DESTINATION_NUMBER, "");
sDefaults.putString(STRING_VVM_TYPE, "");
-
- // MMS defaults
- sDefaults.putBoolean(BOOL_MMS_ALIAS_ENABLED, false);
- sDefaults.putBoolean(BOOL_MMS_ALLOW_ATTACH_AUDIO, true);
- sDefaults.putBoolean(BOOL_MMS_APPEND_TRANSACTION_ID, false);
- sDefaults.putBoolean(BOOL_MMS_GROUP_MMS_ENABLED, true);
- sDefaults.putBoolean(BOOL_MMS_MMS_DELIVERY_REPORT_ENABLED, false);
- sDefaults.putBoolean(BOOL_MMS_MMS_ENABLED, true);
- sDefaults.putBoolean(BOOL_MMS_MMS_READ_REPORT_ENABLED, false);
- sDefaults.putBoolean(BOOL_MMS_MULTIPART_SMS_ENABLED, true);
- sDefaults.putBoolean(BOOL_MMS_NOTIFY_WAP_MMSC_ENABLED, false);
- sDefaults.putBoolean(BOOL_MMS_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES, false);
- sDefaults.putBoolean(BOOL_MMS_SHOW_CELL_BROADCAST_APP_LINKS, true);
- sDefaults.putBoolean(BOOL_MMS_SMS_DELIVERY_REPORT_ENABLED, true);
- sDefaults.putBoolean(BOOL_MMS_SUPPORT_HTTP_CHARSET_HEADER, false);
- sDefaults.putBoolean(BOOL_MMS_SUPPORT_MMS_CONTENT_DISPOSITION, true);
- sDefaults.putInt(INT_MMS_ALIAS_MAX_CHARS, 48);
- sDefaults.putInt(INT_MMS_ALIAS_MIN_CHARS, 2);
- sDefaults.putInt(INT_MMS_HTTP_SOCKET_TIMEOUT, 60 * 1000);
- sDefaults.putInt(INT_MMS_MAX_IMAGE_HEIGHT, 480);
- sDefaults.putInt(INT_MMS_MAX_IMAGE_WIDTH, 640);
- sDefaults.putInt(INT_MMS_MAX_MESSAGE_SIZE, 300 * 1024);
- sDefaults.putInt(INT_MMS_MESSAGE_TEXT_MAX_SIZE, -1);
- sDefaults.putInt(INT_MMS_RECIPIENT_LIMIT, Integer.MAX_VALUE);
- sDefaults.putInt(INT_MMS_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD, -1);
- sDefaults.putInt(INT_MMS_SMS_TO_MMS_TEXT_THRESHOLD, -1);
- sDefaults.putInt(INT_MMS_SUBJECT_MAX_LENGTH, 40);
- sDefaults.putString(STRING_MMS_EMAIL_GATEWAY_NUMBER, "");
- sDefaults.putString(STRING_MMS_HTTP_PARAMS, "");
- sDefaults.putString(STRING_MMS_NAI_SUFFIX, "");
- sDefaults.putString(STRING_MMS_UA_PROF_TAG_NAME, "x-wap-profile");
- sDefaults.putString(STRING_MMS_UA_PROF_URL, "");
- sDefaults.putString(STRING_MMS_USER_AGENT, "");
}
/**
diff --git a/telephony/java/android/telephony/PhoneNumberUtils.java b/telephony/java/android/telephony/PhoneNumberUtils.java
index a41875f705e7..3fcd7d9257a7 100644
--- a/telephony/java/android/telephony/PhoneNumberUtils.java
+++ b/telephony/java/android/telephony/PhoneNumberUtils.java
@@ -2336,12 +2336,12 @@ public class PhoneNumberUtils
* @param phoneNumber A {@code CharSequence} the entirety of which represents a phone number.
* @return A {@code CharSequence} with appropriate annotations.
*/
- public static CharSequence getPhoneTtsSpannable(CharSequence phoneNumber) {
+ public static CharSequence createTtsSpannable(CharSequence phoneNumber) {
if (phoneNumber == null) {
return null;
}
Spannable spannable = Spannable.Factory.getInstance().newSpannable(phoneNumber);
- PhoneNumberUtils.addPhoneTtsSpan(spannable, 0, spannable.length());
+ PhoneNumberUtils.addTtsSpan(spannable, 0, spannable.length());
return spannable;
}
@@ -2353,8 +2353,8 @@ public class PhoneNumberUtils
* @param start The starting character position of the phone number in {@code s}.
* @param endExclusive The position after the ending character in the phone number {@code s}.
*/
- public static void addPhoneTtsSpan(Spannable s, int start, int endExclusive) {
- s.setSpan(getPhoneTtsSpan(s.subSequence(start, endExclusive).toString()),
+ public static void addTtsSpan(Spannable s, int start, int endExclusive) {
+ s.setSpan(createTtsSpan(s.subSequence(start, endExclusive).toString()),
start,
endExclusive,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
@@ -2366,13 +2366,13 @@ public class PhoneNumberUtils
*
* @param phoneNumber A {@code CharSequence} the entirety of which represents a phone number.
* @return A {@code CharSequence} with appropriate annotations.
- * @deprecated Renamed {@link #getPhoneTtsSpannable}.
+ * @deprecated Renamed {@link #createTtsSpannable}.
*
* @hide
*/
@Deprecated
public static CharSequence ttsSpanAsPhoneNumber(CharSequence phoneNumber) {
- return getPhoneTtsSpannable(phoneNumber);
+ return createTtsSpannable(phoneNumber);
}
/**
@@ -2383,13 +2383,13 @@ public class PhoneNumberUtils
* @param start The starting character position of the phone number in {@code s}.
* @param end The ending character position of the phone number in {@code s}.
*
- * @deprecated Renamed {@link #addPhoneTtsSpan}.
+ * @deprecated Renamed {@link #addTtsSpan}.
*
* @hide
*/
@Deprecated
public static void ttsSpanAsPhoneNumber(Spannable s, int start, int end) {
- addPhoneTtsSpan(s, start, end);
+ addTtsSpan(s, start, end);
}
/**
@@ -2398,7 +2398,7 @@ public class PhoneNumberUtils
* @param phoneNumberString A {@code String} the entirety of which represents a phone number.
* @return A {@code TtsSpan} for {@param phoneNumberString}.
*/
- public static TtsSpan getPhoneTtsSpan(String phoneNumberString) {
+ public static TtsSpan createTtsSpan(String phoneNumberString) {
if (phoneNumberString == null) {
return null;
}
diff --git a/test-runner/src/android/test/mock/MockPackageManager.java b/test-runner/src/android/test/mock/MockPackageManager.java
index bf1ea4d0d4e9..3b7aa9f3fecb 100644
--- a/test-runner/src/android/test/mock/MockPackageManager.java
+++ b/test-runner/src/android/test/mock/MockPackageManager.java
@@ -218,6 +218,12 @@ public class MockPackageManager extends PackageManager {
throw new UnsupportedOperationException();
}
+ /** @hide */
+ @Override
+ public boolean shouldShowRequestPermissionRationale(String permission) {
+ throw new UnsupportedOperationException();
+ }
+
@Override
public int checkSignatures(String pkg1, String pkg2) {
throw new UnsupportedOperationException();