SIM based carrier app privileges.
Adding support for SIM based carrier app privileges.
WIP - Missing bits:
- Notifications.
- Certificate check.
Change-Id: Ied3aa6c7d51cc0cde06f5bb58f30893d7a7b1c34
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 507cbcb..3fc65da 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -21,6 +21,9 @@
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.Signature;
import android.net.ConnectivityManager;
import android.net.Uri;
import android.os.AsyncResult;
@@ -58,6 +61,7 @@
import com.android.internal.telephony.dataconnection.DctController;
import com.android.internal.telephony.uicc.IccIoResult;
import com.android.internal.telephony.uicc.IccUtils;
+import com.android.internal.telephony.uicc.UiccCarrierPrivilegeRules;
import com.android.internal.telephony.uicc.UiccController;
import com.android.internal.util.HexDump;
@@ -1628,4 +1632,29 @@
}
return mPhone.getDataEnabled();
}
+
+ @Override
+ public int hasCarrierPrivileges() {
+ PackageManager packageManager = mPhone.getContext().getPackageManager();
+ String[] packages = packageManager.getPackagesForUid(Binder.getCallingUid());
+
+ for (String pkg : packages) {
+ try {
+ PackageInfo pInfo = packageManager.getPackageInfo(pkg,
+ PackageManager.GET_SIGNATURES);
+ Signature[] signatures = pInfo.signatures;
+ for (Signature sig : signatures) {
+ int hasAccess = UiccController.getInstance().getUiccCard().hasCarrierPrivileges(
+ sig, pInfo.packageName);
+ if (hasAccess != TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS) {
+ return hasAccess;
+ }
+ }
+ } catch (PackageManager.NameNotFoundException ex) {
+ loge("NameNotFoundException: " + ex);
+ continue;
+ }
+ }
+ return TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS;
+ }
}