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 17package android.hardware.location; 18 19import android.os.Parcel; 20import android.os.Parcelable; 21import android.util.Log; 22 23/** 24 * Geofence Hardware Request used for internal location services communication. 25 * 26 * @hide 27 */ 28public final class GeofenceHardwareRequestParcelable implements Parcelable { 29 private GeofenceHardwareRequest mRequest; 30 private int mId; 31 32 public GeofenceHardwareRequestParcelable(int id, GeofenceHardwareRequest request) { 33 mId = id; 34 mRequest = request; 35 } 36 37 /** 38 * Returns the id of this request. 39 */ 40 public int getId() { 41 return mId; 42 } 43 44 /** 45 * Returns the latitude of this geofence. 46 */ 47 public double getLatitude() { 48 return mRequest.getLatitude(); 49 } 50 51 /** 52 * Returns the longitude of this geofence. 53 */ 54 public double getLongitude() { 55 return mRequest.getLongitude(); 56 } 57 58 /** 59 * Returns the radius of this geofence. 60 */ 61 public double getRadius() { 62 return mRequest.getRadius(); 63 } 64 65 /** 66 * Returns transitions monitored for this geofence. 67 */ 68 public int getMonitorTransitions() { 69 return mRequest.getMonitorTransitions(); 70 } 71 72 /** 73 * Returns the unknownTimer of this geofence. 74 */ 75 public int getUnknownTimer() { 76 return mRequest.getUnknownTimer(); 77 } 78 79 /** 80 * Returns the notification responsiveness of this geofence. 81 */ 82 public int getNotificationResponsiveness() { 83 return mRequest.getNotificationResponsiveness(); 84 } 85 86 /** 87 * Returns the last transition of this geofence. 88 */ 89 public int getLastTransition() { 90 return mRequest.getLastTransition(); 91 } 92 93 /** 94 * Returns the type of the geofence for the current request. 95 */ 96 int getType() { 97 return mRequest.getType(); 98 } 99 100 /** 101 * Returns the source technologies to track this geofence. 102 */ 103 int getSourceTechnologies() { 104 return mRequest.getSourceTechnologies(); 105 } 106 107 108 @Override 109 public String toString() { 110 StringBuilder builder = new StringBuilder(); 111 builder.append("id="); 112 builder.append(mId); 113 builder.append(", type="); 114 builder.append(mRequest.getType()); 115 builder.append(", latitude="); 116 builder.append(mRequest.getLatitude()); 117 builder.append(", longitude="); 118 builder.append(mRequest.getLongitude()); 119 builder.append(", radius="); 120 builder.append(mRequest.getRadius()); 121 builder.append(", lastTransition="); 122 builder.append(mRequest.getLastTransition()); 123 builder.append(", unknownTimer="); 124 builder.append(mRequest.getUnknownTimer()); 125 builder.append(", monitorTransitions="); 126 builder.append(mRequest.getMonitorTransitions()); 127 builder.append(", notificationResponsiveness="); 128 builder.append(mRequest.getNotificationResponsiveness()); 129 builder.append(", sourceTechnologies="); 130 builder.append(mRequest.getSourceTechnologies()); 131 return builder.toString(); 132 } 133 134 /** 135 * Method definitions to support Parcelable operations. 136 */ 137 public static final Parcelable.Creator<GeofenceHardwareRequestParcelable> CREATOR = 138 new Parcelable.Creator<GeofenceHardwareRequestParcelable>() { 139 @Override 140 public GeofenceHardwareRequestParcelable createFromParcel(Parcel parcel) { 141 int geofenceType = parcel.readInt(); 142 if(geofenceType != GeofenceHardwareRequest.GEOFENCE_TYPE_CIRCLE) { 143 Log.e( 144 "GeofenceHardwareRequest", 145 String.format("Invalid Geofence type: %d", geofenceType)); 146 return null; 147 } 148 149 GeofenceHardwareRequest request = GeofenceHardwareRequest.createCircularGeofence( 150 parcel.readDouble(), 151 parcel.readDouble(), 152 parcel.readDouble()); 153 request.setLastTransition(parcel.readInt()); 154 request.setMonitorTransitions(parcel.readInt()); 155 request.setUnknownTimer(parcel.readInt()); 156 request.setNotificationResponsiveness(parcel.readInt()); 157 request.setSourceTechnologies(parcel.readInt()); 158 159 int id = parcel.readInt(); 160 return new GeofenceHardwareRequestParcelable(id, request); 161 } 162 163 @Override 164 public GeofenceHardwareRequestParcelable[] newArray(int size) { 165 return new GeofenceHardwareRequestParcelable[size]; 166 } 167 }; 168 169 @Override 170 public int describeContents() { 171 return 0; 172 } 173 174 @Override 175 public void writeToParcel(Parcel parcel, int flags) { 176 parcel.writeInt(getType()); 177 parcel.writeDouble(getLatitude()); 178 parcel.writeDouble(getLongitude()); 179 parcel.writeDouble(getRadius()); 180 parcel.writeInt(getLastTransition()); 181 parcel.writeInt(getMonitorTransitions()); 182 parcel.writeInt(getUnknownTimer()); 183 parcel.writeInt(getNotificationResponsiveness()); 184 parcel.writeInt(getSourceTechnologies()); 185 parcel.writeInt(getId()); 186 } 187} 188