10682809ad08db284d7110aab44108d5e9c310e6bdestradaa/* 20682809ad08db284d7110aab44108d5e9c310e6bdestradaa * Copyright (C) 2013 The Android Open Source Project 30682809ad08db284d7110aab44108d5e9c310e6bdestradaa * 40682809ad08db284d7110aab44108d5e9c310e6bdestradaa * Licensed under the Apache License, Version 2.0 (the "License"); 50682809ad08db284d7110aab44108d5e9c310e6bdestradaa * you may not use this file except in compliance with the License. 60682809ad08db284d7110aab44108d5e9c310e6bdestradaa * You may obtain a copy of the License at 70682809ad08db284d7110aab44108d5e9c310e6bdestradaa * 80682809ad08db284d7110aab44108d5e9c310e6bdestradaa * http://www.apache.org/licenses/LICENSE-2.0 90682809ad08db284d7110aab44108d5e9c310e6bdestradaa * 100682809ad08db284d7110aab44108d5e9c310e6bdestradaa * Unless required by applicable law or agreed to in writing, software 110682809ad08db284d7110aab44108d5e9c310e6bdestradaa * distributed under the License is distributed on an "AS IS" BASIS, 120682809ad08db284d7110aab44108d5e9c310e6bdestradaa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130682809ad08db284d7110aab44108d5e9c310e6bdestradaa * See the License for the specific language governing permissions and 140682809ad08db284d7110aab44108d5e9c310e6bdestradaa * limitations under the License. 150682809ad08db284d7110aab44108d5e9c310e6bdestradaa */ 160682809ad08db284d7110aab44108d5e9c310e6bdestradaa 170682809ad08db284d7110aab44108d5e9c310e6bdestradaapackage android.hardware.location; 180682809ad08db284d7110aab44108d5e9c310e6bdestradaa 190682809ad08db284d7110aab44108d5e9c310e6bdestradaaimport android.os.Parcel; 200682809ad08db284d7110aab44108d5e9c310e6bdestradaaimport android.os.Parcelable; 210682809ad08db284d7110aab44108d5e9c310e6bdestradaaimport android.util.Log; 220682809ad08db284d7110aab44108d5e9c310e6bdestradaa 230682809ad08db284d7110aab44108d5e9c310e6bdestradaa/** 240682809ad08db284d7110aab44108d5e9c310e6bdestradaa * Geofence Hardware Request used for internal location services communication. 250682809ad08db284d7110aab44108d5e9c310e6bdestradaa * 260682809ad08db284d7110aab44108d5e9c310e6bdestradaa * @hide 270682809ad08db284d7110aab44108d5e9c310e6bdestradaa */ 280682809ad08db284d7110aab44108d5e9c310e6bdestradaapublic final class GeofenceHardwareRequestParcelable implements Parcelable { 290682809ad08db284d7110aab44108d5e9c310e6bdestradaa private GeofenceHardwareRequest mRequest; 300682809ad08db284d7110aab44108d5e9c310e6bdestradaa private int mId; 310682809ad08db284d7110aab44108d5e9c310e6bdestradaa 320682809ad08db284d7110aab44108d5e9c310e6bdestradaa public GeofenceHardwareRequestParcelable(int id, GeofenceHardwareRequest request) { 330682809ad08db284d7110aab44108d5e9c310e6bdestradaa mId = id; 340682809ad08db284d7110aab44108d5e9c310e6bdestradaa mRequest = request; 350682809ad08db284d7110aab44108d5e9c310e6bdestradaa } 360682809ad08db284d7110aab44108d5e9c310e6bdestradaa 370682809ad08db284d7110aab44108d5e9c310e6bdestradaa /** 380682809ad08db284d7110aab44108d5e9c310e6bdestradaa * Returns the id of this request. 390682809ad08db284d7110aab44108d5e9c310e6bdestradaa */ 400682809ad08db284d7110aab44108d5e9c310e6bdestradaa public int getId() { 410682809ad08db284d7110aab44108d5e9c310e6bdestradaa return mId; 420682809ad08db284d7110aab44108d5e9c310e6bdestradaa } 430682809ad08db284d7110aab44108d5e9c310e6bdestradaa 440682809ad08db284d7110aab44108d5e9c310e6bdestradaa /** 450682809ad08db284d7110aab44108d5e9c310e6bdestradaa * Returns the latitude of this geofence. 460682809ad08db284d7110aab44108d5e9c310e6bdestradaa */ 470682809ad08db284d7110aab44108d5e9c310e6bdestradaa public double getLatitude() { 480682809ad08db284d7110aab44108d5e9c310e6bdestradaa return mRequest.getLatitude(); 490682809ad08db284d7110aab44108d5e9c310e6bdestradaa } 500682809ad08db284d7110aab44108d5e9c310e6bdestradaa 510682809ad08db284d7110aab44108d5e9c310e6bdestradaa /** 520682809ad08db284d7110aab44108d5e9c310e6bdestradaa * Returns the longitude of this geofence. 530682809ad08db284d7110aab44108d5e9c310e6bdestradaa */ 540682809ad08db284d7110aab44108d5e9c310e6bdestradaa public double getLongitude() { 550682809ad08db284d7110aab44108d5e9c310e6bdestradaa return mRequest.getLongitude(); 560682809ad08db284d7110aab44108d5e9c310e6bdestradaa } 570682809ad08db284d7110aab44108d5e9c310e6bdestradaa 580682809ad08db284d7110aab44108d5e9c310e6bdestradaa /** 590682809ad08db284d7110aab44108d5e9c310e6bdestradaa * Returns the radius of this geofence. 600682809ad08db284d7110aab44108d5e9c310e6bdestradaa */ 610682809ad08db284d7110aab44108d5e9c310e6bdestradaa public double getRadius() { 620682809ad08db284d7110aab44108d5e9c310e6bdestradaa return mRequest.getRadius(); 630682809ad08db284d7110aab44108d5e9c310e6bdestradaa } 640682809ad08db284d7110aab44108d5e9c310e6bdestradaa 650682809ad08db284d7110aab44108d5e9c310e6bdestradaa /** 660682809ad08db284d7110aab44108d5e9c310e6bdestradaa * Returns transitions monitored for this geofence. 670682809ad08db284d7110aab44108d5e9c310e6bdestradaa */ 680682809ad08db284d7110aab44108d5e9c310e6bdestradaa public int getMonitorTransitions() { 690682809ad08db284d7110aab44108d5e9c310e6bdestradaa return mRequest.getMonitorTransitions(); 700682809ad08db284d7110aab44108d5e9c310e6bdestradaa } 710682809ad08db284d7110aab44108d5e9c310e6bdestradaa 720682809ad08db284d7110aab44108d5e9c310e6bdestradaa /** 730682809ad08db284d7110aab44108d5e9c310e6bdestradaa * Returns the unknownTimer of this geofence. 740682809ad08db284d7110aab44108d5e9c310e6bdestradaa */ 750682809ad08db284d7110aab44108d5e9c310e6bdestradaa public int getUnknownTimer() { 760682809ad08db284d7110aab44108d5e9c310e6bdestradaa return mRequest.getUnknownTimer(); 770682809ad08db284d7110aab44108d5e9c310e6bdestradaa } 780682809ad08db284d7110aab44108d5e9c310e6bdestradaa 790682809ad08db284d7110aab44108d5e9c310e6bdestradaa /** 800682809ad08db284d7110aab44108d5e9c310e6bdestradaa * Returns the notification responsiveness of this geofence. 810682809ad08db284d7110aab44108d5e9c310e6bdestradaa */ 820682809ad08db284d7110aab44108d5e9c310e6bdestradaa public int getNotificationResponsiveness() { 830682809ad08db284d7110aab44108d5e9c310e6bdestradaa return mRequest.getNotificationResponsiveness(); 840682809ad08db284d7110aab44108d5e9c310e6bdestradaa } 850682809ad08db284d7110aab44108d5e9c310e6bdestradaa 860682809ad08db284d7110aab44108d5e9c310e6bdestradaa /** 870682809ad08db284d7110aab44108d5e9c310e6bdestradaa * Returns the last transition of this geofence. 880682809ad08db284d7110aab44108d5e9c310e6bdestradaa */ 890682809ad08db284d7110aab44108d5e9c310e6bdestradaa public int getLastTransition() { 900682809ad08db284d7110aab44108d5e9c310e6bdestradaa return mRequest.getLastTransition(); 910682809ad08db284d7110aab44108d5e9c310e6bdestradaa } 920682809ad08db284d7110aab44108d5e9c310e6bdestradaa 930682809ad08db284d7110aab44108d5e9c310e6bdestradaa /** 940682809ad08db284d7110aab44108d5e9c310e6bdestradaa * Returns the type of the geofence for the current request. 950682809ad08db284d7110aab44108d5e9c310e6bdestradaa */ 960682809ad08db284d7110aab44108d5e9c310e6bdestradaa int getType() { 970682809ad08db284d7110aab44108d5e9c310e6bdestradaa return mRequest.getType(); 980682809ad08db284d7110aab44108d5e9c310e6bdestradaa } 990682809ad08db284d7110aab44108d5e9c310e6bdestradaa 1000682809ad08db284d7110aab44108d5e9c310e6bdestradaa /** 1010682809ad08db284d7110aab44108d5e9c310e6bdestradaa * Method definitions to support Parcelable operations. 1020682809ad08db284d7110aab44108d5e9c310e6bdestradaa */ 1030682809ad08db284d7110aab44108d5e9c310e6bdestradaa public static final Parcelable.Creator<GeofenceHardwareRequestParcelable> CREATOR = 1040682809ad08db284d7110aab44108d5e9c310e6bdestradaa new Parcelable.Creator<GeofenceHardwareRequestParcelable>() { 1050682809ad08db284d7110aab44108d5e9c310e6bdestradaa @Override 1060682809ad08db284d7110aab44108d5e9c310e6bdestradaa public GeofenceHardwareRequestParcelable createFromParcel(Parcel parcel) { 1070682809ad08db284d7110aab44108d5e9c310e6bdestradaa int geofenceType = parcel.readInt(); 1080682809ad08db284d7110aab44108d5e9c310e6bdestradaa if(geofenceType != GeofenceHardwareRequest.GEOFENCE_TYPE_CIRCLE) { 1090682809ad08db284d7110aab44108d5e9c310e6bdestradaa Log.e( 1100682809ad08db284d7110aab44108d5e9c310e6bdestradaa "GeofenceHardwareRequest", 1110682809ad08db284d7110aab44108d5e9c310e6bdestradaa String.format("Invalid Geofence type: %d", geofenceType)); 1120682809ad08db284d7110aab44108d5e9c310e6bdestradaa return null; 1130682809ad08db284d7110aab44108d5e9c310e6bdestradaa } 1140682809ad08db284d7110aab44108d5e9c310e6bdestradaa 1150682809ad08db284d7110aab44108d5e9c310e6bdestradaa GeofenceHardwareRequest request = GeofenceHardwareRequest.createCircularGeofence( 1160682809ad08db284d7110aab44108d5e9c310e6bdestradaa parcel.readDouble(), 1170682809ad08db284d7110aab44108d5e9c310e6bdestradaa parcel.readDouble(), 1180682809ad08db284d7110aab44108d5e9c310e6bdestradaa parcel.readDouble()); 1190682809ad08db284d7110aab44108d5e9c310e6bdestradaa request.setLastTransition(parcel.readInt()); 1200682809ad08db284d7110aab44108d5e9c310e6bdestradaa request.setMonitorTransitions(parcel.readInt()); 1210682809ad08db284d7110aab44108d5e9c310e6bdestradaa request.setUnknownTimer(parcel.readInt()); 1220682809ad08db284d7110aab44108d5e9c310e6bdestradaa request.setNotificationResponsiveness(parcel.readInt()); 1230682809ad08db284d7110aab44108d5e9c310e6bdestradaa 1240682809ad08db284d7110aab44108d5e9c310e6bdestradaa int id = parcel.readInt(); 1250682809ad08db284d7110aab44108d5e9c310e6bdestradaa return new GeofenceHardwareRequestParcelable(id, request); 1260682809ad08db284d7110aab44108d5e9c310e6bdestradaa } 1270682809ad08db284d7110aab44108d5e9c310e6bdestradaa 1280682809ad08db284d7110aab44108d5e9c310e6bdestradaa @Override 1290682809ad08db284d7110aab44108d5e9c310e6bdestradaa public GeofenceHardwareRequestParcelable[] newArray(int size) { 1300682809ad08db284d7110aab44108d5e9c310e6bdestradaa return new GeofenceHardwareRequestParcelable[size]; 1310682809ad08db284d7110aab44108d5e9c310e6bdestradaa } 1320682809ad08db284d7110aab44108d5e9c310e6bdestradaa }; 1330682809ad08db284d7110aab44108d5e9c310e6bdestradaa 1340682809ad08db284d7110aab44108d5e9c310e6bdestradaa @Override 1350682809ad08db284d7110aab44108d5e9c310e6bdestradaa public int describeContents() { 1360682809ad08db284d7110aab44108d5e9c310e6bdestradaa return 0; 1370682809ad08db284d7110aab44108d5e9c310e6bdestradaa } 1380682809ad08db284d7110aab44108d5e9c310e6bdestradaa 1390682809ad08db284d7110aab44108d5e9c310e6bdestradaa @Override 1400682809ad08db284d7110aab44108d5e9c310e6bdestradaa public void writeToParcel(Parcel parcel, int flags) { 1410682809ad08db284d7110aab44108d5e9c310e6bdestradaa parcel.writeInt(getType()); 1420682809ad08db284d7110aab44108d5e9c310e6bdestradaa parcel.writeDouble(getLatitude()); 1430682809ad08db284d7110aab44108d5e9c310e6bdestradaa parcel.writeDouble(getLongitude()); 1440682809ad08db284d7110aab44108d5e9c310e6bdestradaa parcel.writeDouble(getRadius()); 1450682809ad08db284d7110aab44108d5e9c310e6bdestradaa parcel.writeInt(getLastTransition()); 1460682809ad08db284d7110aab44108d5e9c310e6bdestradaa parcel.writeInt(getMonitorTransitions()); 1470682809ad08db284d7110aab44108d5e9c310e6bdestradaa parcel.writeInt(getUnknownTimer()); 1480682809ad08db284d7110aab44108d5e9c310e6bdestradaa parcel.writeInt(getNotificationResponsiveness()); 1490682809ad08db284d7110aab44108d5e9c310e6bdestradaa parcel.writeInt(getId()); 1500682809ad08db284d7110aab44108d5e9c310e6bdestradaa } 1510682809ad08db284d7110aab44108d5e9c310e6bdestradaa} 152