Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e993fb8b authored by Jordan Liu's avatar Jordan Liu Committed by Gerrit Code Review
Browse files

Merge "Expose Geometry, LatLng, and maxWaitDuration"

parents 4a83b14a b3591333
Loading
Loading
Loading
Loading
+16 −0
Original line number Original line Diff line number Diff line
@@ -7314,6 +7314,21 @@ package android.telephony {
    method @NonNull public android.telephony.CarrierRestrictionRules.Builder setMultiSimPolicy(int);
    method @NonNull public android.telephony.CarrierRestrictionRules.Builder setMultiSimPolicy(int);
  }
  }
  public class CbGeoUtils {
  }
  public static interface CbGeoUtils.Geometry {
    method public boolean contains(@NonNull android.telephony.CbGeoUtils.LatLng);
  }
  public static class CbGeoUtils.LatLng {
    ctor public CbGeoUtils.LatLng(double, double);
    method public double distance(@NonNull android.telephony.CbGeoUtils.LatLng);
    method @NonNull public android.telephony.CbGeoUtils.LatLng subtract(@NonNull android.telephony.CbGeoUtils.LatLng);
    field public final double lat;
    field public final double lng;
  }
  public abstract class CellBroadcastService extends android.app.Service {
  public abstract class CellBroadcastService extends android.app.Service {
    ctor public CellBroadcastService();
    ctor public CellBroadcastService();
    method @CallSuper @NonNull public android.os.IBinder onBind(@Nullable android.content.Intent);
    method @CallSuper @NonNull public android.os.IBinder onBind(@Nullable android.content.Intent);
@@ -8126,6 +8141,7 @@ package android.telephony {
    method public int getGeographicalScope();
    method public int getGeographicalScope();
    method @Nullable public String getLanguageCode();
    method @Nullable public String getLanguageCode();
    method @NonNull public android.telephony.SmsCbLocation getLocation();
    method @NonNull public android.telephony.SmsCbLocation getLocation();
    method public int getMaximumWaitingDuration();
    method @Nullable public String getMessageBody();
    method @Nullable public String getMessageBody();
    method public int getMessageFormat();
    method public int getMessageFormat();
    method public int getMessagePriority();
    method public int getMessagePriority();
+37 −9
Original line number Original line Diff line number Diff line
@@ -14,10 +14,10 @@
 * limitations under the License.
 * limitations under the License.
 */
 */


package com.android.internal.telephony;
package android.telephony;


import android.annotation.NonNull;
import android.annotation.NonNull;
import android.telephony.Rlog;
import android.annotation.SystemApi;
import android.text.TextUtils;
import android.text.TextUtils;


import java.util.ArrayList;
import java.util.ArrayList;
@@ -30,8 +30,17 @@ import java.util.stream.Collectors;
 * The coordinates used by this utils class are latitude and longitude, but some algorithms in this
 * The coordinates used by this utils class are latitude and longitude, but some algorithms in this
 * class only use them as coordinates on plane, so the calculation will be inaccurate. So don't use
 * class only use them as coordinates on plane, so the calculation will be inaccurate. So don't use
 * this class for anything other then geo-targeting of cellbroadcast messages.
 * this class for anything other then geo-targeting of cellbroadcast messages.
 * @hide
 */
 */
@SystemApi
public class CbGeoUtils {
public class CbGeoUtils {

    /**
     * This class is never instantiated
     * @hide
     */
    private CbGeoUtils() {}

    /** Geometric interface. */
    /** Geometric interface. */
    public interface Geometry {
    public interface Geometry {
        /**
        /**
@@ -39,27 +48,36 @@ public class CbGeoUtils {
         * @param p point in latitude, longitude format.
         * @param p point in latitude, longitude format.
         * @return {@code True} if the given point is inside the geometry.
         * @return {@code True} if the given point is inside the geometry.
         */
         */
        boolean contains(LatLng p);
        boolean contains(@NonNull LatLng p);
    }
    }


    /**
    /**
     * Tolerance for determining if the value is 0. If the absolute value of a value is less than
     * Tolerance for determining if the value is 0. If the absolute value of a value is less than
     * this tolerance, it will be treated as 0.
     * this tolerance, it will be treated as 0.
     * @hide
     */
     */
    public static final double EPS = 1e-7;
    public static final double EPS = 1e-7;


    /** The radius of earth. */
    /**
     * The radius of earth.
     * @hide
     */
    public static final int EARTH_RADIUS_METER = 6371 * 1000;
    public static final int EARTH_RADIUS_METER = 6371 * 1000;


    private static final String TAG = "CbGeoUtils";
    private static final String TAG = "CbGeoUtils";


    /** The TLV tags of WAC, defined in ATIS-0700041 5.2.3 WAC tag coding. */
    // The TLV tags of WAC, defined in ATIS-0700041 5.2.3 WAC tag coding.
    /** @hide */
    public static final int GEO_FENCING_MAXIMUM_WAIT_TIME = 0x01;
    public static final int GEO_FENCING_MAXIMUM_WAIT_TIME = 0x01;
    /** @hide */
    public static final int GEOMETRY_TYPE_POLYGON = 0x02;
    public static final int GEOMETRY_TYPE_POLYGON = 0x02;
    /** @hide */
    public static final int GEOMETRY_TYPE_CIRCLE = 0x03;
    public static final int GEOMETRY_TYPE_CIRCLE = 0x03;


    /** The identifier of geometry in the encoded string. */
    // The identifier of geometry in the encoded string.
    /** @hide */
    private static final String CIRCLE_SYMBOL = "circle";
    private static final String CIRCLE_SYMBOL = "circle";
    /** @hide */
    private static final String POLYGON_SYMBOL = "polygon";
    private static final String POLYGON_SYMBOL = "polygon";


    /** Point represent by (latitude, longitude). */
    /** Point represent by (latitude, longitude). */
@@ -81,7 +99,8 @@ public class CbGeoUtils {
         * @param p the point use to calculate the subtraction result.
         * @param p the point use to calculate the subtraction result.
         * @return the result of this point subtract the given point {@code p}.
         * @return the result of this point subtract the given point {@code p}.
         */
         */
        public LatLng subtract(LatLng p) {
        @NonNull
        public LatLng subtract(@NonNull LatLng p) {
            return new LatLng(lat - p.lat, lng - p.lng);
            return new LatLng(lat - p.lat, lng - p.lng);
        }
        }


@@ -90,7 +109,7 @@ public class CbGeoUtils {
         * @param p the point use to calculate the distance.
         * @param p the point use to calculate the distance.
         * @return the distance in meter.
         * @return the distance in meter.
         */
         */
        public double distance(LatLng p) {
        public double distance(@NonNull LatLng p) {
            double dlat = Math.sin(0.5 * Math.toRadians(lat - p.lat));
            double dlat = Math.sin(0.5 * Math.toRadians(lat - p.lat));
            double dlng = Math.sin(0.5 * Math.toRadians(lng - p.lng));
            double dlng = Math.sin(0.5 * Math.toRadians(lng - p.lng));
            double x = dlat * dlat
            double x = dlat * dlat
@@ -106,6 +125,7 @@ public class CbGeoUtils {


    /**
    /**
     * The class represents a simple polygon with at least 3 points.
     * The class represents a simple polygon with at least 3 points.
     * @hide
     */
     */
    public static class Polygon implements Geometry {
    public static class Polygon implements Geometry {
        /**
        /**
@@ -239,7 +259,10 @@ public class CbGeoUtils {
        }
        }
    }
    }


    /** The class represents a circle. */
    /**
     * The class represents a circle.
     * @hide
     */
    public static class Circle implements Geometry {
    public static class Circle implements Geometry {
        private final LatLng mCenter;
        private final LatLng mCenter;
        private final double mRadiusMeter;
        private final double mRadiusMeter;
@@ -266,6 +289,7 @@ public class CbGeoUtils {
    /**
    /**
     * Parse the geometries from the encoded string {@code str}. The string must follow the
     * Parse the geometries from the encoded string {@code str}. The string must follow the
     * geometry encoding specified by {@link android.provider.Telephony.CellBroadcasts#GEOMETRIES}.
     * geometry encoding specified by {@link android.provider.Telephony.CellBroadcasts#GEOMETRIES}.
     * @hide
     */
     */
    @NonNull
    @NonNull
    public static List<Geometry> parseGeometriesFromString(@NonNull String str) {
    public static List<Geometry> parseGeometriesFromString(@NonNull String str) {
@@ -297,6 +321,7 @@ public class CbGeoUtils {
     *
     *
     * @param geometries the list of geometry objects need to be encoded.
     * @param geometries the list of geometry objects need to be encoded.
     * @return the encoded string.
     * @return the encoded string.
     * @hide
     */
     */
    @NonNull
    @NonNull
    public static String encodeGeometriesToString(List<Geometry> geometries) {
    public static String encodeGeometriesToString(List<Geometry> geometries) {
@@ -313,6 +338,7 @@ public class CbGeoUtils {
     * {@link android.provider.Telephony.CellBroadcasts#GEOMETRIES}.
     * {@link android.provider.Telephony.CellBroadcasts#GEOMETRIES}.
     * @param geometry the geometry object need to be encoded.
     * @param geometry the geometry object need to be encoded.
     * @return the encoded string.
     * @return the encoded string.
     * @hide
     */
     */
    @NonNull
    @NonNull
    private static String encodeGeometryToString(@NonNull Geometry geometry) {
    private static String encodeGeometryToString(@NonNull Geometry geometry) {
@@ -351,6 +377,7 @@ public class CbGeoUtils {
     *
     *
     * @param str encoded lat/lng string.
     * @param str encoded lat/lng string.
     * @Return {@link LatLng} object.
     * @Return {@link LatLng} object.
     * @hide
     */
     */
    @NonNull
    @NonNull
    public static LatLng parseLatLngFromString(@NonNull String str) {
    public static LatLng parseLatLngFromString(@NonNull String str) {
@@ -361,6 +388,7 @@ public class CbGeoUtils {
    /**
    /**
     * @Return the sign of the given value {@code value} with the specified tolerance. Return 1
     * @Return the sign of the given value {@code value} with the specified tolerance. Return 1
     * means the sign is positive, -1 means negative, 0 means the value will be treated as 0.
     * means the sign is positive, -1 means negative, 0 means the value will be treated as 0.
     * @hide
     */
     */
    public static int sign(double value) {
    public static int sign(double value) {
        if (value > EPS) return 1;
        if (value > EPS) return 1;
+2 −5
Original line number Original line Diff line number Diff line
@@ -25,9 +25,7 @@ import android.database.Cursor;
import android.os.Parcel;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.Parcelable;
import android.provider.Telephony.CellBroadcasts;
import android.provider.Telephony.CellBroadcasts;

import android.telephony.CbGeoUtils.Geometry;
import com.android.internal.telephony.CbGeoUtils;
import com.android.internal.telephony.CbGeoUtils.Geometry;


import java.lang.annotation.Retention;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.RetentionPolicy;
@@ -414,9 +412,8 @@ public final class SmsCbMessage implements Parcelable {
    /**
    /**
     * Get the Geo-Fencing Maximum Wait Time.
     * Get the Geo-Fencing Maximum Wait Time.
     * @return the time in second.
     * @return the time in second.
     * @hide
     */
     */
    public int getMaximumWaitingTime() {
    public int getMaximumWaitingDuration() {
        return mMaximumWaitTimeSec;
        return mMaximumWaitTimeSec;
    }
    }


+5 −5
Original line number Original line Diff line number Diff line
@@ -25,17 +25,17 @@ import static android.telephony.SmsCbEtwsInfo.ETWS_WARNING_TYPE_TSUNAMI;
import android.annotation.NonNull;
import android.annotation.NonNull;
import android.content.Context;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.Resources;
import android.telephony.CbGeoUtils;
import android.telephony.CbGeoUtils.Circle;
import android.telephony.CbGeoUtils.Geometry;
import android.telephony.CbGeoUtils.LatLng;
import android.telephony.CbGeoUtils.Polygon;
import android.telephony.SmsCbLocation;
import android.telephony.SmsCbLocation;
import android.telephony.SmsCbMessage;
import android.telephony.SmsCbMessage;
import android.util.Pair;
import android.util.Pair;
import android.util.Slog;
import android.util.Slog;


import com.android.internal.R;
import com.android.internal.R;
import com.android.internal.telephony.CbGeoUtils;
import com.android.internal.telephony.CbGeoUtils.Circle;
import com.android.internal.telephony.CbGeoUtils.Geometry;
import com.android.internal.telephony.CbGeoUtils.LatLng;
import com.android.internal.telephony.CbGeoUtils.Polygon;
import com.android.internal.telephony.GsmAlphabet;
import com.android.internal.telephony.GsmAlphabet;
import com.android.internal.telephony.SmsConstants;
import com.android.internal.telephony.SmsConstants;
import com.android.internal.telephony.gsm.GsmSmsCbMessage.GeoFencingTriggerMessage.CellBroadcastIdentity;
import com.android.internal.telephony.gsm.GsmSmsCbMessage.GeoFencingTriggerMessage.CellBroadcastIdentity;