Merge "Use the same logic in isDataPossible as GSM." into jb-mr1-dev
diff --git a/src/java/com/android/internal/telephony/DataConnectionTracker.java b/src/java/com/android/internal/telephony/DataConnectionTracker.java
index 43058b6..a2980be 100644
--- a/src/java/com/android/internal/telephony/DataConnectionTracker.java
+++ b/src/java/com/android/internal/telephony/DataConnectionTracker.java
@@ -305,11 +305,11 @@
updateDataActivity();
if (mIsScreenOn) {
- mNetStatPollPeriod = Settings.Secure.getInt(mResolver,
- Settings.Secure.PDP_WATCHDOG_POLL_INTERVAL_MS, POLL_NETSTAT_MILLIS);
+ mNetStatPollPeriod = Settings.Global.getInt(mResolver,
+ Settings.Global.PDP_WATCHDOG_POLL_INTERVAL_MS, POLL_NETSTAT_MILLIS);
} else {
- mNetStatPollPeriod = Settings.Secure.getInt(mResolver,
- Settings.Secure.PDP_WATCHDOG_LONG_POLL_INTERVAL_MS,
+ mNetStatPollPeriod = Settings.Global.getInt(mResolver,
+ Settings.Global.PDP_WATCHDOG_LONG_POLL_INTERVAL_MS,
POLL_NETSTAT_SCREEN_OFF_MILLIS);
}
@@ -327,7 +327,7 @@
public void register(Context context) {
final ContentResolver resolver = context.getContentResolver();
resolver.registerContentObserver(
- Settings.Secure.getUriFor(Settings.Secure.DATA_ROAMING), false, this);
+ Settings.Global.getUriFor(Settings.Global.DATA_ROAMING), false, this);
}
public void unregister(Context context) {
@@ -439,8 +439,8 @@
filter.addAction(INTENT_SET_FAIL_DATA_SETUP_COUNTER);
filter.addAction(getActionIntentDataStallAlarm());
- mUserDataEnabled = Settings.Secure.getInt(
- mPhone.getContext().getContentResolver(), Settings.Secure.MOBILE_DATA, 1) == 1;
+ mUserDataEnabled = Settings.Global.getInt(
+ mPhone.getContext().getContentResolver(), Settings.Global.MOBILE_DATA, 1) == 1;
// TODO: Why is this registering the phone as the receiver of the intent
// and not its own handler?
@@ -458,7 +458,7 @@
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mPhone.getContext());
mAutoAttachOnCreation = sp.getBoolean(PhoneBase.DATA_DISABLED_ON_BOOT_KEY, false);
- // watch for changes to Settings.Secure.DATA_ROAMING
+ // watch for changes to Settings.Global.DATA_ROAMING
mDataRoamingSettingObserver = new DataRoamingSettingObserver(mPhone);
mDataRoamingSettingObserver.register(mPhone.getContext());
@@ -504,11 +504,11 @@
return null;
}
Context c = mPhone.getContext();
- String apnData = Settings.Secure.getString(c.getContentResolver(),
- Settings.Secure.TETHER_DUN_APN);
+ String apnData = Settings.Global.getString(c.getContentResolver(),
+ Settings.Global.TETHER_DUN_APN);
ApnSetting dunSetting = ApnSetting.fromString(apnData);
if (dunSetting != null) {
- if (VDBG) log("fetchDunApn: secure TETHER_DUN_APN dunSetting=" + dunSetting);
+ if (VDBG) log("fetchDunApn: global TETHER_DUN_APN dunSetting=" + dunSetting);
return dunSetting;
}
@@ -539,23 +539,23 @@
}
/**
- * Modify {@link Settings.Secure#DATA_ROAMING} value.
+ * Modify {@link Settings.Global#DATA_ROAMING} value.
*/
public void setDataOnRoamingEnabled(boolean enabled) {
if (getDataOnRoamingEnabled() != enabled) {
final ContentResolver resolver = mPhone.getContext().getContentResolver();
- Settings.Secure.putInt(resolver, Settings.Secure.DATA_ROAMING, enabled ? 1 : 0);
+ Settings.Global.putInt(resolver, Settings.Global.DATA_ROAMING, enabled ? 1 : 0);
// will trigger handleDataOnRoamingChange() through observer
}
}
/**
- * Return current {@link Settings.Secure#DATA_ROAMING} value.
+ * Return current {@link Settings.Global#DATA_ROAMING} value.
*/
public boolean getDataOnRoamingEnabled() {
try {
final ContentResolver resolver = mPhone.getContext().getContentResolver();
- return Settings.Secure.getInt(resolver, Settings.Secure.DATA_ROAMING) != 0;
+ return Settings.Global.getInt(resolver, Settings.Global.DATA_ROAMING) != 0;
} catch (SettingNotFoundException snfe) {
return false;
}
@@ -1073,8 +1073,8 @@
final boolean prevEnabled = getAnyDataEnabled();
if (mUserDataEnabled != enabled) {
mUserDataEnabled = enabled;
- Settings.Secure.putInt(mPhone.getContext().getContentResolver(),
- Settings.Secure.MOBILE_DATA, enabled ? 1 : 0);
+ Settings.Global.putInt(mPhone.getContext().getContentResolver(),
+ Settings.Global.MOBILE_DATA, enabled ? 1 : 0);
if (getDataOnRoamingEnabled() == false &&
mPhone.getServiceState().getRoaming() == true) {
if (enabled) {
@@ -1349,8 +1349,8 @@
}
updateDataStallInfo();
- int hangWatchdogTrigger = Settings.Secure.getInt(mResolver,
- Settings.Secure.PDP_WATCHDOG_TRIGGER_PACKET_COUNT,
+ int hangWatchdogTrigger = Settings.Global.getInt(mResolver,
+ Settings.Global.PDP_WATCHDOG_TRIGGER_PACKET_COUNT,
NUMBER_SENT_PACKETS_OF_HANG);
boolean suspectedStall = DATA_STALL_NOT_SUSPECTED;
@@ -1376,12 +1376,12 @@
// If screen is on or data stall is currently suspected, set the alarm
// with an aggresive timeout.
if (mIsScreenOn || suspectedStall || RecoveryAction.isAggressiveRecovery(nextAction)) {
- delayInMs = Settings.Secure.getInt(mResolver,
- Settings.Secure.DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS,
+ delayInMs = Settings.Global.getInt(mResolver,
+ Settings.Global.DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS,
DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS_DEFAULT);
} else {
- delayInMs = Settings.Secure.getInt(mResolver,
- Settings.Secure.DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS,
+ delayInMs = Settings.Global.getInt(mResolver,
+ Settings.Global.DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS,
DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS_DEFAULT);
}
diff --git a/src/java/com/android/internal/telephony/EventLogTags.logtags b/src/java/com/android/internal/telephony/EventLogTags.logtags
index 427e5da..91247b3 100644
--- a/src/java/com/android/internal/telephony/EventLogTags.logtags
+++ b/src/java/com/android/internal/telephony/EventLogTags.logtags
@@ -71,3 +71,7 @@
# Data Stall Recovery mode DATA_STALL_RECOVERY_RADIO_RESTART_WITH_PROP
50122 data_stall_recovery_radio_restart_with_prop (out_packet_count|1|1)
+
+# SMS denied by user
+50125 sms_denied_by_user (app_signature|3)
+50128 sms_sent_by_user (app_signature|3)
diff --git a/src/java/com/android/internal/telephony/SMSDispatcher.java b/src/java/com/android/internal/telephony/SMSDispatcher.java
index 76afbd0..c3b6878 100644
--- a/src/java/com/android/internal/telephony/SMSDispatcher.java
+++ b/src/java/com/android/internal/telephony/SMSDispatcher.java
@@ -27,6 +27,7 @@
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.database.Cursor;
@@ -47,10 +48,12 @@
import android.telephony.TelephonyManager;
import android.text.Html;
import android.text.Spanned;
+import android.util.EventLog;
import android.util.Log;
import android.view.WindowManager;
import com.android.internal.R;
+import com.android.internal.telephony.EventLogTags;
import com.android.internal.telephony.GsmAlphabet.TextEncodingDetails;
import com.android.internal.telephony.SmsConstants;
import com.android.internal.util.HexDump;
@@ -930,11 +933,26 @@
return;
}
- String appPackage = packageNames[0];
+ // Get package info via packagemanager
+ PackageInfo appInfo = null;
+ try {
+ // XXX this is lossy- apps can share a UID
+ appInfo = pm.getPackageInfo(packageNames[0], PackageManager.GET_SIGNATURES);
+ } catch (PackageManager.NameNotFoundException e) {
+ Log.e(TAG, "Can't get calling app package info: refusing to send SMS");
+ if (sentIntent != null) {
+ try {
+ sentIntent.send(RESULT_ERROR_GENERIC_FAILURE);
+ } catch (CanceledException ex) {
+ Log.e(TAG, "failed to send error result");
+ }
+ }
+ return;
+ }
// Strip non-digits from destination phone number before checking for short codes
// and before displaying the number to the user if confirmation is required.
- SmsTracker tracker = new SmsTracker(map, sentIntent, deliveryIntent, appPackage,
+ SmsTracker tracker = new SmsTracker(map, sentIntent, deliveryIntent, appInfo,
PhoneNumberUtils.extractNetworkPortion(destAddr));
// checkDestination() returns true if the destination is not a premium short code or the
@@ -942,7 +960,7 @@
// handler with the SmsTracker to request user confirmation before sending.
if (checkDestination(tracker)) {
// check for excessive outgoing SMS usage by this app
- if (!mUsageMonitor.check(appPackage, SINGLE_PART_SMS)) {
+ if (!mUsageMonitor.check(appInfo.packageName, SINGLE_PART_SMS)) {
sendMessage(obtainMessage(EVENT_SEND_LIMIT_REACHED_CONFIRMATION, tracker));
return;
}
@@ -1040,7 +1058,7 @@
return; // queue limit reached; error was returned to caller
}
- CharSequence appLabel = getAppLabel(tracker.mAppPackage);
+ CharSequence appLabel = getAppLabel(tracker.mAppInfo.packageName);
Resources r = Resources.getSystem();
Spanned messageText = Html.fromHtml(r.getString(R.string.sms_control_message, appLabel));
@@ -1079,7 +1097,7 @@
titleId = R.string.sms_short_code_confirm_title;
}
- CharSequence appLabel = getAppLabel(tracker.mAppPackage);
+ CharSequence appLabel = getAppLabel(tracker.mAppInfo.packageName);
Resources r = Resources.getSystem();
Spanned messageText = Html.fromHtml(r.getString(messageId, appLabel, tracker.mDestAddress));
@@ -1184,16 +1202,16 @@
public final PendingIntent mSentIntent;
public final PendingIntent mDeliveryIntent;
- public final String mAppPackage;
+ public final PackageInfo mAppInfo;
public final String mDestAddress;
public SmsTracker(HashMap<String, Object> data, PendingIntent sentIntent,
- PendingIntent deliveryIntent, String appPackage, String destAddr) {
+ PendingIntent deliveryIntent, PackageInfo appInfo, String destAddr) {
mData = data;
mSentIntent = sentIntent;
mDeliveryIntent = deliveryIntent;
mRetryCount = 0;
- mAppPackage = appPackage;
+ mAppInfo = appInfo;
mDestAddress = destAddr;
}
@@ -1223,9 +1241,15 @@
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_POSITIVE) {
Log.d(TAG, "CONFIRM sending SMS");
+ // XXX this is lossy- apps can have more than one signature
+ EventLog.writeEvent(EventLogTags.SMS_SENT_BY_USER,
+ mTracker.mAppInfo.signatures[0].toCharsString());
sendMessage(obtainMessage(EVENT_SEND_CONFIRMED_SMS, mTracker));
} else if (which == DialogInterface.BUTTON_NEGATIVE) {
Log.d(TAG, "DENY sending SMS");
+ // XXX this is lossy- apps can have more than one signature
+ EventLog.writeEvent(EventLogTags.SMS_DENIED_BY_USER,
+ mTracker.mAppInfo.signatures[0].toCharsString());
sendMessage(obtainMessage(EVENT_STOP_SENDING, mTracker));
}
}
diff --git a/src/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java b/src/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
index d34619b..767f358 100644
--- a/src/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
+++ b/src/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
@@ -502,8 +502,8 @@
|| !TextUtils.equals(plmn, curPlmn)) {
boolean showSpn = !mEmergencyOnly && !TextUtils.isEmpty(spn)
&& (rule & SIMRecords.SPN_RULE_SHOW_SPN) == SIMRecords.SPN_RULE_SHOW_SPN;
- boolean showPlmn = !TextUtils.isEmpty(plmn) &&
- (rule & SIMRecords.SPN_RULE_SHOW_PLMN) == SIMRecords.SPN_RULE_SHOW_PLMN;
+ boolean showPlmn = !TextUtils.isEmpty(plmn) && (mEmergencyOnly ||
+ ((rule & SIMRecords.SPN_RULE_SHOW_PLMN) == SIMRecords.SPN_RULE_SHOW_PLMN));
if (DBG) {
log(String.format("updateSpnDisplay: changed sending intent" + " rule=" + rule +
@@ -995,9 +995,9 @@
if (!mStartedGprsRegCheck && !mReportedGprsNoReg) {
mStartedGprsRegCheck = true;
- int check_period = Settings.Secure.getInt(
+ int check_period = Settings.Global.getInt(
phone.getContext().getContentResolver(),
- Settings.Secure.GPRS_REGISTER_CHECK_PERIOD_MS,
+ Settings.Global.GPRS_REGISTER_CHECK_PERIOD_MS,
DEFAULT_GPRS_CHECK_PERIOD_MILLIS);
sendMessageDelayed(obtainMessage(EVENT_CHECK_REPORT_GPRS),
check_period);
diff --git a/src/java/com/android/internal/telephony/uicc/UiccController.java b/src/java/com/android/internal/telephony/uicc/UiccController.java
index 43404be..8d0868e 100644
--- a/src/java/com/android/internal/telephony/uicc/UiccController.java
+++ b/src/java/com/android/internal/telephony/uicc/UiccController.java
@@ -196,7 +196,7 @@
mCi = ci;
mCi.registerForIccStatusChanged(this, EVENT_ICC_STATUS_CHANGED, null);
// TODO remove this once modem correctly notifies the unsols
- //mCi.registerForOn(this, EVENT_ICC_STATUS_CHANGED, null);
+ mCi.registerForOn(this, EVENT_ICC_STATUS_CHANGED, null);
}
private synchronized void onGetIccCardStatusDone(AsyncResult ar) {