Clean up use of hidden APIs am: 4a2ff26de6
am: 11a4e13c0c
Change-Id: I5c88858b0dc6e30c9d90984388a9d0ab086bf891
diff --git a/src/com/android/cellbroadcastservice/CbGeoUtils.java b/src/com/android/cellbroadcastservice/CbGeoUtils.java
index 292f0f6..0a8fe48 100644
--- a/src/com/android/cellbroadcastservice/CbGeoUtils.java
+++ b/src/com/android/cellbroadcastservice/CbGeoUtils.java
@@ -17,11 +17,10 @@
package com.android.cellbroadcastservice;
import android.annotation.NonNull;
-import android.telephony.Rlog;
+import android.telephony.CbGeoUtils.Geometry;
+import android.telephony.CbGeoUtils.LatLng;
import android.text.TextUtils;
-
-import com.android.internal.telephony.CbGeoUtils.Geometry;
-import com.android.internal.telephony.CbGeoUtils.LatLng;
+import android.util.Log;
import java.util.ArrayList;
import java.util.List;
@@ -54,7 +53,7 @@
/**
* The class represents a simple polygon with at least 3 points.
*/
- public static class Polygon implements com.android.internal.telephony.CbGeoUtils.Geometry {
+ public static class Polygon implements Geometry {
/**
* In order to reduce the loss of precision in floating point calculations, all vertices
* of the polygon are scaled. Set the value of scale to 1000 can take into account the
@@ -232,7 +231,7 @@
geometries.add(new Polygon(vertices));
break;
default:
- Rlog.e(TAG, "Invalid geometry format " + geometryStr);
+ Log.e(TAG, "Invalid geometry format " + geometryStr);
}
}
return geometries;
@@ -285,7 +284,7 @@
sb.append("|");
sb.append(circle.getRadius());
} else {
- Rlog.e(TAG, "Unsupported geometry object " + geometry);
+ Log.e(TAG, "Unsupported geometry object " + geometry);
return null;
}
return sb.toString();
diff --git a/src/com/android/cellbroadcastservice/CellBroadcastHandler.java b/src/com/android/cellbroadcastservice/CellBroadcastHandler.java
index 5f8a37b..a5d1c8a 100644
--- a/src/com/android/cellbroadcastservice/CellBroadcastHandler.java
+++ b/src/com/android/cellbroadcastservice/CellBroadcastHandler.java
@@ -35,7 +35,6 @@
import android.location.LocationListener;
import android.location.LocationManager;
import android.net.Uri;
-import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
@@ -46,6 +45,8 @@
import android.provider.Settings;
import android.provider.Telephony;
import android.provider.Telephony.CellBroadcasts;
+import android.telephony.CbGeoUtils.Geometry;
+import android.telephony.CbGeoUtils.LatLng;
import android.telephony.SmsCbMessage;
import android.telephony.SubscriptionManager;
import android.telephony.cdma.CdmaSmsCbProgramData;
@@ -55,8 +56,6 @@
import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.telephony.CbGeoUtils.Geometry;
-import com.android.internal.telephony.CbGeoUtils.LatLng;
import com.android.internal.telephony.metrics.TelephonyMetrics;
import java.io.FileDescriptor;
@@ -187,7 +186,7 @@
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
- if (Build.IS_DEBUGGABLE) {
+ if (IS_DEBUGGABLE) {
intentFilter.addAction(ACTION_DUPLICATE_DETECTION);
}
mContext.registerReceiver(
@@ -275,7 +274,7 @@
} else {
performGeoFencing(message, uri, message.getGeometries(), location, slotIndex);
}
- }, message.getMaximumWaitingTime());
+ }, message.getMaximumWaitingDuration());
} else {
if (DBG) {
log("Broadcast the message directly because no geo-fencing required, "
@@ -439,6 +438,24 @@
}
/**
+ * Get the subscription ID for a phone ID, or INVALID_SUBSCRIPTION_ID if the phone does not
+ * have an active sub
+ * @param phoneId the phoneId to use
+ * @return the associated sub id
+ */
+ protected int getSubIdForPhone(int phoneId) {
+ SubscriptionManager subMan =
+ (SubscriptionManager) mContext.getSystemService(
+ Context.TELEPHONY_SUBSCRIPTION_SERVICE);
+ int[] subIds = subMan.getSubscriptionIds(phoneId);
+ if (subIds != null) {
+ return subIds[0];
+ } else {
+ return SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+ }
+ }
+
+ /**
* Broadcast the {@code message} to the applications.
* @param message a message need to broadcast
* @param messageUri message's uri
@@ -460,9 +477,15 @@
appOp = AppOpsManager.OP_RECEIVE_EMERGECY_SMS;
intent.putExtra(EXTRA_MESSAGE, message);
- SubscriptionManager.putPhoneIdAndSubIdExtra(intent, slotIndex);
+ int subId = getSubIdForPhone(slotIndex);
+ if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+ intent.putExtra("subscription", subId);
+ intent.putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, subId);
+ }
+ intent.putExtra("phone", slotIndex);
+ intent.putExtra(SubscriptionManager.EXTRA_SLOT_INDEX, slotIndex);
- if (Build.IS_DEBUGGABLE) {
+ if (IS_DEBUGGABLE) {
// Send additional broadcast intent to the specified package. This is only for sl4a
// automation tests.
final String additionalPackage = Settings.Secure.getString(
@@ -483,7 +506,7 @@
// Explicitly send the intent to all the configured cell broadcast receivers.
intent.setPackage(pkg);
mContext.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, receiverPermission,
- appOp, mReceiver, getHandler(), Activity.RESULT_OK, null, null);
+ appOp, null, mReceiver, getHandler(), Activity.RESULT_OK, null, null);
}
} else {
msg = "Dispatching SMS CB, SmsCbMessage is: " + message;
@@ -500,8 +523,8 @@
SubscriptionManager.putPhoneIdAndSubIdExtra(intent, slotIndex);
mReceiverCount.incrementAndGet();
- mContext.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, receiverPermission, appOp,
- mReceiver, getHandler(), Activity.RESULT_OK, null, null);
+ mContext.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, receiverPermission,
+ appOp, null, mReceiver, getHandler(), Activity.RESULT_OK, null, null);
}
if (messageUri != null) {
diff --git a/src/com/android/cellbroadcastservice/GsmCellBroadcastHandler.java b/src/com/android/cellbroadcastservice/GsmCellBroadcastHandler.java
index 1a5ed14..6838497 100644
--- a/src/com/android/cellbroadcastservice/GsmCellBroadcastHandler.java
+++ b/src/com/android/cellbroadcastservice/GsmCellBroadcastHandler.java
@@ -25,17 +25,18 @@
import android.net.Uri;
import android.os.Message;
import android.provider.Telephony.CellBroadcasts;
+import android.telephony.CbGeoUtils.Geometry;
+import android.telephony.CellIdentity;
+import android.telephony.CellIdentityGsm;
import android.telephony.CellInfo;
-import android.telephony.CellLocation;
import android.telephony.SmsCbLocation;
import android.telephony.SmsCbMessage;
import android.telephony.TelephonyManager;
-import android.telephony.gsm.GsmCellLocation;
import android.text.format.DateUtils;
+import android.util.Pair;
import com.android.cellbroadcastservice.GsmSmsCbMessage.GeoFencingTriggerMessage;
import com.android.cellbroadcastservice.GsmSmsCbMessage.GeoFencingTriggerMessage.CellBroadcastIdentity;
-import com.android.internal.telephony.CbGeoUtils.Geometry;
import dalvik.annotation.compat.UnsupportedAppUsage;
@@ -141,7 +142,7 @@
// cell broadcasts.
int maximumWaitTimeSec = 0;
for (SmsCbMessage msg : cbMessages) {
- maximumWaitTimeSec = Math.max(maximumWaitTimeSec, msg.getMaximumWaitingTime());
+ maximumWaitTimeSec = Math.max(maximumWaitTimeSec, msg.getMaximumWaitingDuration());
}
if (DBG) {
@@ -214,22 +215,21 @@
return super.handleSmsMessage(message);
}
- // return the cell location from the first returned cell info, prioritizing GSM
- private CellLocation getCellLocation() {
+ // return the GSM cell location from the first GSM cell info
+ private Pair<Integer, Integer> getGsmLacAndCid() {
TelephonyManager tm =
(TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
List<CellInfo> infos = tm.getAllCellInfo();
for (CellInfo info : infos) {
- CellLocation cl = info.getCellIdentity().asCellLocation();
- if (cl instanceof GsmCellLocation) {
- return cl;
+ CellIdentity ci = info.getCellIdentity();
+ if (ci instanceof CellIdentityGsm) {
+ CellIdentityGsm ciGsm = (CellIdentityGsm) ci;
+ int lac = ciGsm.getLac() != CellInfo.UNAVAILABLE ? ciGsm.getLac() : -1;
+ int cid = ciGsm.getCid() != CellInfo.UNAVAILABLE ? ciGsm.getCid() : -1;
+ return Pair.create(lac, cid);
}
}
- // If no GSM, return first in list
- if (infos != null && !infos.isEmpty() && infos.get(0) != null) {
- return infos.get(0).getCellIdentity().asCellLocation();
- }
- return CellLocation.getEmpty();
+ return null;
}
@@ -259,18 +259,18 @@
if (VDBG) log("header=" + header);
TelephonyManager tm =
(TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
+ tm.createForSubscriptionId(getSubIdForPhone(slotIndex));
// TODO make a systemAPI for getNetworkOperatorForSlotIndex
- String plmn = tm.getNetworkOperatorForPhone(slotIndex);
+ String plmn = tm.getSimOperator();
int lac = -1;
int cid = -1;
- CellLocation cl = getCellLocation();
- // Check if cell location is GsmCellLocation. This is required to support
+ Pair<Integer, Integer> lacAndCid = getGsmLacAndCid();
+ // Check if GSM lac and cid are available. This is required to support
// dual-mode devices such as CDMA/LTE devices that require support for
// both 3GPP and 3GPP2 format messages
- if (cl instanceof GsmCellLocation) {
- GsmCellLocation cellLocation = (GsmCellLocation) cl;
- lac = cellLocation.getLac();
- cid = cellLocation.getCid();
+ if (lacAndCid != null) {
+ lac = lacAndCid.first;
+ cid = lacAndCid.second;
}
SmsCbLocation location;
diff --git a/src/com/android/cellbroadcastservice/GsmSmsCbMessage.java b/src/com/android/cellbroadcastservice/GsmSmsCbMessage.java
index cd2d964..c0ded3b 100644
--- a/src/com/android/cellbroadcastservice/GsmSmsCbMessage.java
+++ b/src/com/android/cellbroadcastservice/GsmSmsCbMessage.java
@@ -25,6 +25,8 @@
import android.annotation.NonNull;
import android.content.Context;
import android.content.res.Resources;
+import android.telephony.CbGeoUtils.Geometry;
+import android.telephony.CbGeoUtils.LatLng;
import android.telephony.SmsCbLocation;
import android.telephony.SmsCbMessage;
import android.util.Pair;
@@ -35,8 +37,6 @@
import com.android.cellbroadcastservice.GsmSmsCbMessage.GeoFencingTriggerMessage.CellBroadcastIdentity;
import com.android.cellbroadcastservice.SmsCbHeader.DataCodingScheme;
import com.android.internal.R;
-import com.android.internal.telephony.CbGeoUtils.Geometry;
-import com.android.internal.telephony.CbGeoUtils.LatLng;
import com.android.internal.telephony.GsmAlphabet;
import com.android.internal.telephony.SmsConstants;
diff --git a/src/com/android/cellbroadcastservice/WakeLockStateMachine.java b/src/com/android/cellbroadcastservice/WakeLockStateMachine.java
index 7de49f0..789534d 100644
--- a/src/com/android/cellbroadcastservice/WakeLockStateMachine.java
+++ b/src/com/android/cellbroadcastservice/WakeLockStateMachine.java
@@ -20,9 +20,9 @@
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
-import android.os.Build;
import android.os.Message;
import android.os.PowerManager;
+import android.os.SystemProperties;
import android.util.Log;
import com.android.internal.util.State;
@@ -38,7 +38,7 @@
* {@link #quit}.
*/
public abstract class WakeLockStateMachine extends StateMachine {
- protected static final boolean DBG = Build.IS_DEBUGGABLE;
+ protected static final boolean DBG = SystemProperties.getInt("ro.debuggable", 0) == 1;
private final PowerManager.WakeLock mWakeLock;
@@ -126,7 +126,7 @@
switch (msg.what) {
default: {
String errorText = "processMessage: unhandled message type " + msg.what;
- if (Build.IS_DEBUGGABLE) {
+ if (DBG) {
throw new RuntimeException(errorText);
} else {
loge(errorText);