diff options
author | Ricardo Cerqueira <cyanogenmod@cerqueira.org> | 2014-12-01 16:11:32 -0800 |
---|---|---|
committer | Adnan <adnan@cyngn.com> | 2014-12-01 17:42:16 -0800 |
commit | 023e93eec9f7f6c91fc2fa8b54a1b66c91567b20 (patch) | |
tree | c77f89eeeed77cc533647a54e3866a3d92213795 | |
parent | 1554a1714e55ecab70a69384a5578502b6c45cab (diff) | |
download | android_frameworks_opt_telephony-023e93eec9f7f6c91fc2fa8b54a1b66c91567b20.tar.gz android_frameworks_opt_telephony-023e93eec9f7f6c91fc2fa8b54a1b66c91567b20.tar.bz2 android_frameworks_opt_telephony-023e93eec9f7f6c91fc2fa8b54a1b66c91567b20.zip |
Telephony: Find creator package if sms is sent from systemuid.
Change-Id: I72a8e479eab903a8354b5a3eb5aaf11a41570294
-rw-r--r-- | src/java/com/android/internal/telephony/SMSDispatcher.java | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/java/com/android/internal/telephony/SMSDispatcher.java b/src/java/com/android/internal/telephony/SMSDispatcher.java index 9dee86342..3ae3de5e2 100644 --- a/src/java/com/android/internal/telephony/SMSDispatcher.java +++ b/src/java/com/android/internal/telephony/SMSDispatcher.java @@ -38,6 +38,7 @@ import android.os.AsyncResult; import android.os.Binder; import android.os.Handler; import android.os.Message; +import android.os.Process; import android.os.SystemProperties; import android.provider.Settings; import android.provider.Telephony; @@ -331,6 +332,16 @@ public abstract class SMSDispatcher extends Handler { } } + private static boolean isSystemUid(Context context, String pkgName) { + final PackageManager packageManager = context.getPackageManager(); + try { + return packageManager.getPackageInfo(pkgName, 0) + .applicationInfo.uid == Process.SYSTEM_UID; + } catch (PackageManager.NameNotFoundException e) { + return false; + } + } + /** * Called when SMS send completes. Broadcasts a sentIntent on success. * On failure, either sets up retries or broadcasts a sentIntent with @@ -353,8 +364,16 @@ public abstract class SMSDispatcher extends Handler { if (ar.exception == null) { if (DBG) Rlog.d(TAG, "SMS send complete. Broadcasting intent: " + sentIntent); + String packageName = tracker.mAppInfo.applicationInfo.packageName; + // System UID maps to multiple packages. Try to narrow it + // down to an actual sender if possible + if (isSystemUid(mContext, packageName) && sentIntent != null && + sentIntent.getCreatorPackage() != null) { + packageName = sentIntent.getCreatorPackage(); + } + if (SmsApplication.shouldWriteMessageForPackage( - tracker.mAppInfo.applicationInfo.packageName, mContext)) { + packageName, mContext)) { // Persist it into the SMS database as a sent message // so the user can see it in their default app. tracker.writeSentMessage(mContext); |