From b4b9ca7580c75f07330e5222cbd9ccc93b12935e Mon Sep 17 00:00:00 2001 From: Zach Johnson Date: Tue, 19 May 2015 00:02:27 -0700 Subject: Ignore carrier apps when checking for idleness Also introduce a way to check if a package has carrier privileges for any active phone. Change-Id: If5c5fe07f05ffc90fc21431eb27cf48030c0175b --- api/system-current.txt | 1 + .../com/android/server/usage/UsageStatsService.java | 11 +++++++++++ .../java/android/telephony/TelephonyManager.java | 19 +++++++++++++++++-- .../com/android/internal/telephony/ITelephony.aidl | 9 +++++++-- 4 files changed, 36 insertions(+), 4 deletions(-) diff --git a/api/system-current.txt b/api/system-current.txt index 1c524c1..dad539b 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -33422,6 +33422,7 @@ package android.telephony { method public void call(java.lang.String, java.lang.String); method public boolean canChangeDtmfToneLength(); method public int checkCarrierPrivilegesForPackage(java.lang.String); + method public int checkCarrierPrivilegesForPackageAnyPhone(java.lang.String); method public void dial(java.lang.String); method public boolean disableDataConnectivity(); method public boolean enableDataConnectivity(); diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java index 23057c4..633aee8 100644 --- a/services/usage/java/com/android/server/usage/UsageStatsService.java +++ b/services/usage/java/com/android/server/usage/UsageStatsService.java @@ -57,6 +57,7 @@ import android.os.SystemClock; import android.os.UserHandle; import android.os.UserManager; import android.provider.Settings; +import android.telephony.TelephonyManager; import android.util.ArraySet; import android.util.AtomicFile; import android.util.Log; @@ -725,6 +726,10 @@ public class UsageStatsService extends SystemService implements return false; } + if (isCarrierApp(packageName)) { + return false; + } + if (mAppWidgetManager != null && mAppWidgetManager.isBoundWidgetPackage(packageName, userId)) { return false; @@ -754,6 +759,12 @@ public class UsageStatsService extends SystemService implements return false; } + private boolean isCarrierApp(String packageName) { + TelephonyManager telephonyManager = getContext().getSystemService(TelephonyManager.class); + return telephonyManager.checkCarrierPrivilegesForPackageAnyPhone(packageName) + == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS; + } + void informListeners(String packageName, int userId, boolean isIdle) { for (AppIdleStateChangeListener listener : mPackageAccessListeners) { listener.onAppIdleStateChanged(packageName, userId, isIdle); diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 86f7ec3..5d792d3 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -3658,11 +3658,11 @@ public class TelephonyManager { /** @hide */ @SystemApi - public int checkCarrierPrivilegesForPackage(String pkgname) { + public int checkCarrierPrivilegesForPackage(String pkgName) { try { ITelephony telephony = getITelephony(); if (telephony != null) - return telephony.checkCarrierPrivilegesForPackage(pkgname); + return telephony.checkCarrierPrivilegesForPackage(pkgName); } catch (RemoteException ex) { Rlog.e(TAG, "checkCarrierPrivilegesForPackage RemoteException", ex); } catch (NullPointerException ex) { @@ -3673,6 +3673,21 @@ public class TelephonyManager { /** @hide */ @SystemApi + public int checkCarrierPrivilegesForPackageAnyPhone(String pkgName) { + try { + ITelephony telephony = getITelephony(); + if (telephony != null) + return telephony.checkCarrierPrivilegesForPackageAnyPhone(pkgName); + } catch (RemoteException ex) { + Rlog.e(TAG, "checkCarrierPrivilegesForPackageAnyPhone RemoteException", ex); + } catch (NullPointerException ex) { + Rlog.e(TAG, "checkCarrierPrivilegesForPackageAnyPhone NPE", ex); + } + return CARRIER_PRIVILEGE_STATUS_NO_ACCESS; + } + + /** @hide */ + @SystemApi public List getCarrierPackageNamesForIntent(Intent intent) { return getCarrierPackageNamesForIntentAndPhone(intent, getDefaultPhone()); } diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index 11d0ea6..6a9a2c1 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -739,9 +739,14 @@ interface ITelephony { int getCarrierPrivilegeStatus(); /** - * Similar to above, but check for pkg whose name is pkgname. + * Similar to above, but check for the package whose name is pkgName. */ - int checkCarrierPrivilegesForPackage(String pkgname); + int checkCarrierPrivilegesForPackage(String pkgName); + + /** + * Similar to above, but check across all phones. + */ + int checkCarrierPrivilegesForPackageAnyPhone(String pkgName); /** * Returns list of the package names of the carrier apps that should handle the input intent -- cgit v1.1