Home | History | Annotate | Download | only in location
      1 /*
      2  * Copyright (C) 2013 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package android.hardware.location;
     18 
     19 import android.location.Location;
     20 
     21 /**
     22  * This class represents the characteristics of the geofence.
     23  *
     24  * <p> Use this in conjunction with {@link GeofenceHardware} APIs.
     25  */
     26 
     27 public final class GeofenceHardwareRequest {
     28     static final int GEOFENCE_TYPE_CIRCLE = 0;
     29     private int mType;
     30     private double mLatitude;
     31     private double mLongitude;
     32     private double mRadius;
     33     private int mLastTransition = GeofenceHardware.GEOFENCE_UNCERTAIN;
     34     private int mUnknownTimer = 30000; // 30 secs
     35     private int mMonitorTransitions = GeofenceHardware.GEOFENCE_UNCERTAIN |
     36         GeofenceHardware.GEOFENCE_ENTERED | GeofenceHardware.GEOFENCE_EXITED;
     37     private int mNotificationResponsiveness = 5000; // 5 secs
     38 
     39     private void setCircularGeofence(double latitude, double longitude, double radius) {
     40         mLatitude = latitude;
     41         mLongitude = longitude;
     42         mRadius = radius;
     43         mType  = GEOFENCE_TYPE_CIRCLE;
     44     }
     45 
     46     /**
     47      * Create a circular geofence.
     48      *
     49      * @param latitude Latitude of the geofence
     50      * @param longitude Longitude of the geofence
     51      * @param radius Radius of the geofence (in meters)
     52      */
     53     public static GeofenceHardwareRequest createCircularGeofence(double latitude,
     54             double longitude, double radius) {
     55         GeofenceHardwareRequest geofenceRequest = new GeofenceHardwareRequest();
     56         geofenceRequest.setCircularGeofence(latitude, longitude, radius);
     57         return geofenceRequest;
     58     }
     59 
     60     /**
     61      * Set the last known transition of the geofence.
     62      *
     63      * @param lastTransition The current state of the geofence. Can be one of
     64      *        {@link GeofenceHardware#GEOFENCE_ENTERED}, {@link GeofenceHardware#GEOFENCE_EXITED},
     65      *        {@link GeofenceHardware#GEOFENCE_UNCERTAIN}.
     66      */
     67     public void setLastTransition(int lastTransition) {
     68         mLastTransition = lastTransition;
     69     }
     70 
     71     /**
     72      * Set the unknown timer for this geofence.
     73      *
     74      * @param unknownTimer  The time limit after which the
     75      *        {@link GeofenceHardware#GEOFENCE_UNCERTAIN} transition
     76      *        should be triggered. This paramter is defined in milliseconds.
     77      */
     78     public void setUnknownTimer(int unknownTimer) {
     79         mUnknownTimer = unknownTimer;
     80     }
     81 
     82     /**
     83      * Set the transitions to be monitored.
     84      *
     85      * @param monitorTransitions Bitwise OR of {@link GeofenceHardware#GEOFENCE_ENTERED},
     86      *        {@link GeofenceHardware#GEOFENCE_EXITED}, {@link GeofenceHardware#GEOFENCE_UNCERTAIN}
     87      */
     88     public void setMonitorTransitions(int monitorTransitions) {
     89         mMonitorTransitions = monitorTransitions;
     90     }
     91 
     92     /**
     93      * Set the notification responsiveness of the geofence.
     94      *
     95      * @param notificationResponsiveness (milliseconds) Defines the best-effort description
     96      *        of how soon should the callback be called when the transition
     97      *        associated with the Geofence is triggered. For instance, if
     98      *        set to 1000 millseconds with {@link GeofenceHardware#GEOFENCE_ENTERED},
     99      *        the callback will be called 1000 milliseconds within entering
    100      *        the geofence.
    101      */
    102     public void setNotificationResponsiveness(int notificationResponsiveness) {
    103        mNotificationResponsiveness = notificationResponsiveness;
    104     }
    105 
    106     /**
    107      * Returns the latitude of this geofence.
    108      */
    109     public double getLatitude() {
    110         return mLatitude;
    111     }
    112 
    113     /**
    114      * Returns the longitude of this geofence.
    115      */
    116     public double getLongitude() {
    117         return mLongitude;
    118     }
    119 
    120     /**
    121      * Returns the radius of this geofence.
    122      */
    123     public double getRadius() {
    124         return mRadius;
    125     }
    126 
    127     /**
    128      * Returns transitions monitored for this geofence.
    129      */
    130     public int getMonitorTransitions() {
    131         return mMonitorTransitions;
    132     }
    133 
    134     /**
    135      * Returns the unknownTimer of this geofence.
    136      */
    137     public int getUnknownTimer() {
    138         return mUnknownTimer;
    139     }
    140 
    141     /**
    142      * Returns the notification responsiveness of this geofence.
    143      */
    144     public int getNotificationResponsiveness() {
    145         return mNotificationResponsiveness;
    146     }
    147 
    148     /**
    149      * Returns the last transition of this geofence.
    150      */
    151     public int getLastTransition() {
    152         return mLastTransition;
    153     }
    154 
    155     int getType() {
    156         return mType;
    157     }
    158 }
    159