Loading src/java/com/android/internal/telephony/IccSmsInterfaceManager.java +2 −0 Original line number Diff line number Diff line Loading @@ -1503,6 +1503,8 @@ public class IccSmsInterfaceManager { } public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println("Enabled GSM channels: " + mCellBroadcastRangeManager); pw.println("Enabled CDMA channels: " + mCdmaBroadcastRangeManager); pw.println("CellBroadcast log:"); mCellBroadcastLocalLog.dump(fd, pw, args); pw.println("SMS dispatcher controller log:"); Loading src/java/com/android/internal/telephony/IntRangeManager.java +11 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.compat.annotation.UnsupportedAppUsage; import java.util.ArrayList; import java.util.Iterator; import java.util.stream.Collectors; /** * Clients can enable reception of SMS-CB messages for specific ranges of Loading Loading @@ -141,8 +142,12 @@ public abstract class IntRangeManager { } mClients.add(range); // append to end of list } } @Override public String toString() { return "[" + mStartId + "-" + mEndId + "]"; } } /** * The message id range for a single client. */ Loading Loading @@ -669,4 +674,9 @@ public abstract class IntRangeManager { * @return true if successful, false otherwise */ protected abstract boolean finishUpdate(); @Override public String toString() { return mRanges.stream().map(IntRange::toString).collect(Collectors.joining(",")); } } src/java/com/android/internal/telephony/ServiceStateTracker.java +6 −8 Original line number Diff line number Diff line Loading @@ -2046,18 +2046,16 @@ public class ServiceStateTracker extends Handler { } } int newNrState = regInfo.getNrState(); int oldNrState = regInfo.getNrState(); int newNrState = oldNrState; if (hasNrSecondaryServingCell) { if (regInfo.getNrState() == NetworkRegistrationInfo.NR_STATE_NOT_RESTRICTED) { newNrState = NetworkRegistrationInfo.NR_STATE_CONNECTED; } } else { if (regInfo.getNrState() == NetworkRegistrationInfo.NR_STATE_CONNECTED) { newNrState = NetworkRegistrationInfo.NR_STATE_NOT_RESTRICTED; } regInfo.updateNrState(); newNrState = regInfo.getNrState(); } boolean hasChanged = newNrState != regInfo.getNrState(); boolean hasChanged = newNrState != oldNrState; regInfo.setNrState(newNrState); ss.addNetworkRegistrationInfo(regInfo); return hasChanged; Loading src/java/com/android/internal/telephony/SmsPermissions.java +36 −26 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.os.Binder; import android.service.carrier.CarrierMessagingService; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.telephony.Rlog; /** Loading Loading @@ -138,21 +139,11 @@ public class SmsPermissions { */ public boolean checkCallingOrSelfCanGetSmscAddress(String callingPackage, String message) { // Allow it to the default SMS app always. if (!isDefaultSmsPackage(callingPackage)) { try { // Allow it with READ_PRIVILEGED_PHONE_STATE or Carrier Privileges if (!isCallerDefaultSmsPackage(callingPackage)) { TelephonyPermissions .enforeceCallingOrSelfReadPrivilegedPhoneStatePermissionOrCarrierPrivilege( mContext, mPhone.getSubId(), message); } catch (SecurityException e) { // To avoid crashing applications loge(message + ": Neither " + callingPackage + " is the default SMS app" + " nor the caller has " + android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE + ", or carrier privileges", e); return false; } } return true; } Loading @@ -167,26 +158,45 @@ public class SmsPermissions { */ public boolean checkCallingOrSelfCanSetSmscAddress(String callingPackage, String message) { // Allow it to the default SMS app always. if (!isDefaultSmsPackage(callingPackage)) { try { if (!isCallerDefaultSmsPackage(callingPackage)) { // Allow it with MODIFY_PHONE_STATE or Carrier Privileges TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege( mContext, mPhone.getSubId(), message); } catch (SecurityException e) { // To avoid crashing applications loge(message + ": Neither " + callingPackage + " is the default SMS app" + " nor the caller has " + android.Manifest.permission.MODIFY_PHONE_STATE + ", or carrier privileges", e); return false; } } return true; } /** Check if a package is default SMS app. */ public boolean isDefaultSmsPackage(String packageName) { @VisibleForTesting public boolean isCallerDefaultSmsPackage(String packageName) { if (packageNameMatchesCallingUid(packageName)) { return SmsApplication.isDefaultSmsApplication(mContext, packageName); } return false; } /** * Check if the passed in packageName belongs to the calling uid. * @param packageName name of the package to check * @return true if package belongs to calling uid, false otherwise */ @VisibleForTesting public boolean packageNameMatchesCallingUid(String packageName) { try { if (Binder.getCallingUid() != mContext.getPackageManager().getPackageUid(packageName, 0)) { Log.e(LOG_TAG, "packageNameMatchesCallingUid: " + packageName + " uid " + mContext.getPackageManager().getPackageUid(packageName, 0) + " does not match calling uid " + Binder.getCallingUid()); return false; } } catch (PackageManager.NameNotFoundException ex) { Log.e(LOG_TAG, "packageNameMatchesCallingUid: packageName " + packageName + " not found"); return false; } return true; } @UnsupportedAppUsage protected void log(String msg) { Loading src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java +13 −14 Original line number Diff line number Diff line Loading @@ -34,8 +34,7 @@ import android.net.NetworkCapabilities; import android.net.NetworkInfo; import android.net.NetworkRequest; import android.net.NetworkStats; import android.net.netstats.provider.AbstractNetworkStatsProvider; import android.net.netstats.provider.NetworkStatsProviderCallback; import android.net.netstats.provider.NetworkStatsProvider; import android.os.AsyncResult; import android.os.Bundle; import android.os.Handler; Loading Loading @@ -282,16 +281,16 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { } /** * A class implementing {@link AbstractNetworkStatsProvider} to report VT data usage to system. * A class implementing {@link NetworkStatsProvider} to report VT data usage to system. */ // TODO: Directly reports diff in updateVtDataUsage. @VisibleForTesting(visibility = PRIVATE) public class VtDataUsageProvider extends AbstractNetworkStatsProvider { public class VtDataUsageProvider extends NetworkStatsProvider { private int mToken = 0; private NetworkStats mIfaceSnapshot = new NetworkStats(0L, 0); private NetworkStats mUidSnapshot = new NetworkStats(0L, 0); @Override public void requestStatsUpdate(int token) { public void onRequestStatsUpdate(int token) { // If there is an ongoing VT call, request the latest VT usage from the modem. The // latest usage will return asynchronously so it won't be counted in this round, but it // will be eventually counted when next requestStatsUpdate is called. Loading @@ -306,19 +305,19 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { final NetworkStats ifaceDiff = mVtDataUsageSnapshot.subtract(mIfaceSnapshot); final NetworkStats uidDiff = mVtDataUsageUidSnapshot.subtract(mUidSnapshot); mVtDataUsageProviderCb.onStatsUpdated(mToken, ifaceDiff, uidDiff); mVtDataUsageProvider.notifyStatsUpdated(mToken, ifaceDiff, uidDiff); mIfaceSnapshot = mIfaceSnapshot.add(ifaceDiff); mUidSnapshot = mUidSnapshot.add(uidDiff); mToken = token; } @Override public void setLimit(String iface, long quotaBytes) { public void onSetLimit(String iface, long quotaBytes) { // No-op } @Override public void setAlert(long quotaBytes) { public void onSetAlert(long quotaBytes) { // No-op } } Loading Loading @@ -458,7 +457,7 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { private volatile NetworkStats mVtDataUsageSnapshot = null; private volatile NetworkStats mVtDataUsageUidSnapshot = null; private final NetworkStatsProviderCallback mVtDataUsageProviderCb; private final VtDataUsageProvider mVtDataUsageProvider = new VtDataUsageProvider(); private final AtomicInteger mDefaultDialerUid = new AtomicInteger(NetworkStats.UID_ALL); Loading Loading @@ -896,8 +895,7 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { final NetworkStatsManager statsManager = (NetworkStatsManager) mPhone.getContext().getSystemService( Context.NETWORK_STATS_SERVICE); mVtDataUsageProviderCb = statsManager.registerNetworkStatsProvider(LOG_TAG, new VtDataUsageProvider()); statsManager.registerNetworkStatsProvider(LOG_TAG, mVtDataUsageProvider); // Allow the executor to be specified for testing. mImsManagerConnector = new FeatureConnector<>( Loading Loading @@ -1048,9 +1046,10 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { mPhone.getDefaultPhone().getDataEnabledSettings().unregisterForDataEnabledChanged(this); mImsManagerConnector.disconnect(); if (mVtDataUsageProviderCb != null) { mVtDataUsageProviderCb.unregister(); } final NetworkStatsManager statsManager = (NetworkStatsManager) mPhone.getContext().getSystemService( Context.NETWORK_STATS_SERVICE); statsManager.unregisterNetworkStatsProvider(mVtDataUsageProvider); } @Override Loading Loading
src/java/com/android/internal/telephony/IccSmsInterfaceManager.java +2 −0 Original line number Diff line number Diff line Loading @@ -1503,6 +1503,8 @@ public class IccSmsInterfaceManager { } public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println("Enabled GSM channels: " + mCellBroadcastRangeManager); pw.println("Enabled CDMA channels: " + mCdmaBroadcastRangeManager); pw.println("CellBroadcast log:"); mCellBroadcastLocalLog.dump(fd, pw, args); pw.println("SMS dispatcher controller log:"); Loading
src/java/com/android/internal/telephony/IntRangeManager.java +11 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.compat.annotation.UnsupportedAppUsage; import java.util.ArrayList; import java.util.Iterator; import java.util.stream.Collectors; /** * Clients can enable reception of SMS-CB messages for specific ranges of Loading Loading @@ -141,8 +142,12 @@ public abstract class IntRangeManager { } mClients.add(range); // append to end of list } } @Override public String toString() { return "[" + mStartId + "-" + mEndId + "]"; } } /** * The message id range for a single client. */ Loading Loading @@ -669,4 +674,9 @@ public abstract class IntRangeManager { * @return true if successful, false otherwise */ protected abstract boolean finishUpdate(); @Override public String toString() { return mRanges.stream().map(IntRange::toString).collect(Collectors.joining(",")); } }
src/java/com/android/internal/telephony/ServiceStateTracker.java +6 −8 Original line number Diff line number Diff line Loading @@ -2046,18 +2046,16 @@ public class ServiceStateTracker extends Handler { } } int newNrState = regInfo.getNrState(); int oldNrState = regInfo.getNrState(); int newNrState = oldNrState; if (hasNrSecondaryServingCell) { if (regInfo.getNrState() == NetworkRegistrationInfo.NR_STATE_NOT_RESTRICTED) { newNrState = NetworkRegistrationInfo.NR_STATE_CONNECTED; } } else { if (regInfo.getNrState() == NetworkRegistrationInfo.NR_STATE_CONNECTED) { newNrState = NetworkRegistrationInfo.NR_STATE_NOT_RESTRICTED; } regInfo.updateNrState(); newNrState = regInfo.getNrState(); } boolean hasChanged = newNrState != regInfo.getNrState(); boolean hasChanged = newNrState != oldNrState; regInfo.setNrState(newNrState); ss.addNetworkRegistrationInfo(regInfo); return hasChanged; Loading
src/java/com/android/internal/telephony/SmsPermissions.java +36 −26 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.os.Binder; import android.service.carrier.CarrierMessagingService; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.telephony.Rlog; /** Loading Loading @@ -138,21 +139,11 @@ public class SmsPermissions { */ public boolean checkCallingOrSelfCanGetSmscAddress(String callingPackage, String message) { // Allow it to the default SMS app always. if (!isDefaultSmsPackage(callingPackage)) { try { // Allow it with READ_PRIVILEGED_PHONE_STATE or Carrier Privileges if (!isCallerDefaultSmsPackage(callingPackage)) { TelephonyPermissions .enforeceCallingOrSelfReadPrivilegedPhoneStatePermissionOrCarrierPrivilege( mContext, mPhone.getSubId(), message); } catch (SecurityException e) { // To avoid crashing applications loge(message + ": Neither " + callingPackage + " is the default SMS app" + " nor the caller has " + android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE + ", or carrier privileges", e); return false; } } return true; } Loading @@ -167,26 +158,45 @@ public class SmsPermissions { */ public boolean checkCallingOrSelfCanSetSmscAddress(String callingPackage, String message) { // Allow it to the default SMS app always. if (!isDefaultSmsPackage(callingPackage)) { try { if (!isCallerDefaultSmsPackage(callingPackage)) { // Allow it with MODIFY_PHONE_STATE or Carrier Privileges TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege( mContext, mPhone.getSubId(), message); } catch (SecurityException e) { // To avoid crashing applications loge(message + ": Neither " + callingPackage + " is the default SMS app" + " nor the caller has " + android.Manifest.permission.MODIFY_PHONE_STATE + ", or carrier privileges", e); return false; } } return true; } /** Check if a package is default SMS app. */ public boolean isDefaultSmsPackage(String packageName) { @VisibleForTesting public boolean isCallerDefaultSmsPackage(String packageName) { if (packageNameMatchesCallingUid(packageName)) { return SmsApplication.isDefaultSmsApplication(mContext, packageName); } return false; } /** * Check if the passed in packageName belongs to the calling uid. * @param packageName name of the package to check * @return true if package belongs to calling uid, false otherwise */ @VisibleForTesting public boolean packageNameMatchesCallingUid(String packageName) { try { if (Binder.getCallingUid() != mContext.getPackageManager().getPackageUid(packageName, 0)) { Log.e(LOG_TAG, "packageNameMatchesCallingUid: " + packageName + " uid " + mContext.getPackageManager().getPackageUid(packageName, 0) + " does not match calling uid " + Binder.getCallingUid()); return false; } } catch (PackageManager.NameNotFoundException ex) { Log.e(LOG_TAG, "packageNameMatchesCallingUid: packageName " + packageName + " not found"); return false; } return true; } @UnsupportedAppUsage protected void log(String msg) { Loading
src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java +13 −14 Original line number Diff line number Diff line Loading @@ -34,8 +34,7 @@ import android.net.NetworkCapabilities; import android.net.NetworkInfo; import android.net.NetworkRequest; import android.net.NetworkStats; import android.net.netstats.provider.AbstractNetworkStatsProvider; import android.net.netstats.provider.NetworkStatsProviderCallback; import android.net.netstats.provider.NetworkStatsProvider; import android.os.AsyncResult; import android.os.Bundle; import android.os.Handler; Loading Loading @@ -282,16 +281,16 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { } /** * A class implementing {@link AbstractNetworkStatsProvider} to report VT data usage to system. * A class implementing {@link NetworkStatsProvider} to report VT data usage to system. */ // TODO: Directly reports diff in updateVtDataUsage. @VisibleForTesting(visibility = PRIVATE) public class VtDataUsageProvider extends AbstractNetworkStatsProvider { public class VtDataUsageProvider extends NetworkStatsProvider { private int mToken = 0; private NetworkStats mIfaceSnapshot = new NetworkStats(0L, 0); private NetworkStats mUidSnapshot = new NetworkStats(0L, 0); @Override public void requestStatsUpdate(int token) { public void onRequestStatsUpdate(int token) { // If there is an ongoing VT call, request the latest VT usage from the modem. The // latest usage will return asynchronously so it won't be counted in this round, but it // will be eventually counted when next requestStatsUpdate is called. Loading @@ -306,19 +305,19 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { final NetworkStats ifaceDiff = mVtDataUsageSnapshot.subtract(mIfaceSnapshot); final NetworkStats uidDiff = mVtDataUsageUidSnapshot.subtract(mUidSnapshot); mVtDataUsageProviderCb.onStatsUpdated(mToken, ifaceDiff, uidDiff); mVtDataUsageProvider.notifyStatsUpdated(mToken, ifaceDiff, uidDiff); mIfaceSnapshot = mIfaceSnapshot.add(ifaceDiff); mUidSnapshot = mUidSnapshot.add(uidDiff); mToken = token; } @Override public void setLimit(String iface, long quotaBytes) { public void onSetLimit(String iface, long quotaBytes) { // No-op } @Override public void setAlert(long quotaBytes) { public void onSetAlert(long quotaBytes) { // No-op } } Loading Loading @@ -458,7 +457,7 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { private volatile NetworkStats mVtDataUsageSnapshot = null; private volatile NetworkStats mVtDataUsageUidSnapshot = null; private final NetworkStatsProviderCallback mVtDataUsageProviderCb; private final VtDataUsageProvider mVtDataUsageProvider = new VtDataUsageProvider(); private final AtomicInteger mDefaultDialerUid = new AtomicInteger(NetworkStats.UID_ALL); Loading Loading @@ -896,8 +895,7 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { final NetworkStatsManager statsManager = (NetworkStatsManager) mPhone.getContext().getSystemService( Context.NETWORK_STATS_SERVICE); mVtDataUsageProviderCb = statsManager.registerNetworkStatsProvider(LOG_TAG, new VtDataUsageProvider()); statsManager.registerNetworkStatsProvider(LOG_TAG, mVtDataUsageProvider); // Allow the executor to be specified for testing. mImsManagerConnector = new FeatureConnector<>( Loading Loading @@ -1048,9 +1046,10 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { mPhone.getDefaultPhone().getDataEnabledSettings().unregisterForDataEnabledChanged(this); mImsManagerConnector.disconnect(); if (mVtDataUsageProviderCb != null) { mVtDataUsageProviderCb.unregister(); } final NetworkStatsManager statsManager = (NetworkStatsManager) mPhone.getContext().getSystemService( Context.NETWORK_STATS_SERVICE); statsManager.unregisterNetworkStatsProvider(mVtDataUsageProvider); } @Override Loading