| /* |
| * Copyright (C) 2013 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package android.hardware.location; |
| |
| import android.annotation.SystemApi; |
| |
| /** |
| * This class represents the characteristics of the geofence. |
| * |
| * <p> Use this in conjunction with {@link GeofenceHardware} APIs. |
| * |
| * @hide |
| */ |
| @SystemApi |
| public final class GeofenceHardwareRequest { |
| static final int GEOFENCE_TYPE_CIRCLE = 0; |
| private int mType; |
| private double mLatitude; |
| private double mLongitude; |
| private double mRadius; |
| private int mLastTransition = GeofenceHardware.GEOFENCE_UNCERTAIN; |
| private int mUnknownTimer = 30000; // 30 secs |
| private int mMonitorTransitions = GeofenceHardware.GEOFENCE_UNCERTAIN | |
| GeofenceHardware.GEOFENCE_ENTERED | GeofenceHardware.GEOFENCE_EXITED; |
| private int mNotificationResponsiveness = 5000; // 5 secs |
| private int mSourceTechnologies = GeofenceHardware.SOURCE_TECHNOLOGY_GNSS; |
| |
| private void setCircularGeofence(double latitude, double longitude, double radius) { |
| mLatitude = latitude; |
| mLongitude = longitude; |
| mRadius = radius; |
| mType = GEOFENCE_TYPE_CIRCLE; |
| } |
| |
| /** |
| * Create a circular geofence. |
| * |
| * @param latitude Latitude of the geofence |
| * @param longitude Longitude of the geofence |
| * @param radius Radius of the geofence (in meters) |
| */ |
| public static GeofenceHardwareRequest createCircularGeofence(double latitude, |
| double longitude, double radius) { |
| GeofenceHardwareRequest geofenceRequest = new GeofenceHardwareRequest(); |
| geofenceRequest.setCircularGeofence(latitude, longitude, radius); |
| return geofenceRequest; |
| } |
| |
| /** |
| * Set the last known transition of the geofence. |
| * |
| * @param lastTransition The current state of the geofence. Can be one of |
| * {@link GeofenceHardware#GEOFENCE_ENTERED}, {@link GeofenceHardware#GEOFENCE_EXITED}, |
| * {@link GeofenceHardware#GEOFENCE_UNCERTAIN}. |
| */ |
| public void setLastTransition(int lastTransition) { |
| mLastTransition = lastTransition; |
| } |
| |
| /** |
| * Set the unknown timer for this geofence. |
| * |
| * @param unknownTimer The time limit after which the |
| * {@link GeofenceHardware#GEOFENCE_UNCERTAIN} transition |
| * should be triggered. This paramter is defined in milliseconds. |
| */ |
| public void setUnknownTimer(int unknownTimer) { |
| mUnknownTimer = unknownTimer; |
| } |
| |
| /** |
| * Set the transitions to be monitored. |
| * |
| * @param monitorTransitions Bitwise OR of {@link GeofenceHardware#GEOFENCE_ENTERED}, |
| * {@link GeofenceHardware#GEOFENCE_EXITED}, {@link GeofenceHardware#GEOFENCE_UNCERTAIN} |
| */ |
| public void setMonitorTransitions(int monitorTransitions) { |
| mMonitorTransitions = monitorTransitions; |
| } |
| |
| /** |
| * Set the notification responsiveness of the geofence. |
| * |
| * @param notificationResponsiveness (milliseconds) Defines the best-effort description |
| * of how soon should the callback be called when the transition |
| * associated with the Geofence is triggered. For instance, if |
| * set to 1000 millseconds with {@link GeofenceHardware#GEOFENCE_ENTERED}, |
| * the callback will be called 1000 milliseconds within entering |
| * the geofence. |
| */ |
| public void setNotificationResponsiveness(int notificationResponsiveness) { |
| mNotificationResponsiveness = notificationResponsiveness; |
| } |
| |
| /** |
| * Set the source technologies to use while tracking the geofence. |
| * The value is the bit-wise of one or several source fields defined in |
| * {@link GeofenceHardware}. |
| * |
| * @param sourceTechnologies The set of source technologies to use. |
| */ |
| public void setSourceTechnologies(int sourceTechnologies) { |
| int sourceTechnologiesAll = GeofenceHardware.SOURCE_TECHNOLOGY_GNSS |
| | GeofenceHardware.SOURCE_TECHNOLOGY_WIFI |
| | GeofenceHardware.SOURCE_TECHNOLOGY_SENSORS |
| | GeofenceHardware.SOURCE_TECHNOLOGY_CELL |
| | GeofenceHardware.SOURCE_TECHNOLOGY_BLUETOOTH; |
| |
| int sanitizedSourceTechnologies = (sourceTechnologies & sourceTechnologiesAll); |
| if (sanitizedSourceTechnologies == 0) { |
| throw new IllegalArgumentException("At least one valid source technology must be set."); |
| } |
| |
| mSourceTechnologies = sanitizedSourceTechnologies; |
| } |
| |
| /** |
| * Returns the latitude of this geofence. |
| */ |
| public double getLatitude() { |
| return mLatitude; |
| } |
| |
| /** |
| * Returns the longitude of this geofence. |
| */ |
| public double getLongitude() { |
| return mLongitude; |
| } |
| |
| /** |
| * Returns the radius of this geofence. |
| */ |
| public double getRadius() { |
| return mRadius; |
| } |
| |
| /** |
| * Returns transitions monitored for this geofence. |
| */ |
| public int getMonitorTransitions() { |
| return mMonitorTransitions; |
| } |
| |
| /** |
| * Returns the unknownTimer of this geofence. |
| */ |
| public int getUnknownTimer() { |
| return mUnknownTimer; |
| } |
| |
| /** |
| * Returns the notification responsiveness of this geofence. |
| */ |
| public int getNotificationResponsiveness() { |
| return mNotificationResponsiveness; |
| } |
| |
| /** |
| * Returns the last transition of this geofence. |
| */ |
| public int getLastTransition() { |
| return mLastTransition; |
| } |
| |
| /** |
| * Returns the source technologies to track this geofence. |
| */ |
| public int getSourceTechnologies() { |
| return mSourceTechnologies; |
| } |
| |
| int getType() { |
| return mType; |
| } |
| } |