18ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh/*
28ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh * Copyright (C) 2013 The Android Open Source Project
38ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh *
48ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh * Licensed under the Apache License, Version 2.0 (the "License");
58ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh * you may not use this file except in compliance with the License.
68ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh * You may obtain a copy of the License at
78ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh *
88ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh *      http://www.apache.org/licenses/LICENSE-2.0
98ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh *
108ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh * Unless required by applicable law or agreed to in writing, software
118ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh * distributed under the License is distributed on an "AS IS" BASIS,
128ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh * See the License for the specific language governing permissions and
148ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh * limitations under the License.
158ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh */
168ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
178ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganeshpackage com.android.location.provider;
188ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
198ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganeshimport android.hardware.location.GeofenceHardware;
208ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganeshimport android.hardware.location.IGeofenceHardware;
218ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganeshimport android.os.IBinder;
228ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
238ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganeshimport android.location.IGeofenceProvider;
248ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
258ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh/**
268ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh * Base class for geofence providers implemented as unbundled services.
278ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh *
288ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh * <p>Geofence providers can be implemented as services and return the result of
298ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh * {@link com.android.location.provider.GeofenceProvider#getBinder()} in its getBinder() method.
308ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh *
318ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh * <p>IMPORTANT: This class is effectively a public API for unbundled
328ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh * applications, and must remain API stable. See README.txt in the root
338ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh * of this package for more information.
348ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh */
358ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganeshpublic abstract class GeofenceProvider {
368ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
378ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh    private GeofenceHardware mGeofenceHardware;
388ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
398ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh    private IGeofenceProvider.Stub mProvider = new IGeofenceProvider.Stub() {
408ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh        public void setGeofenceHardware(IGeofenceHardware hardwareProxy) {
418ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh            mGeofenceHardware = new GeofenceHardware(hardwareProxy);
428ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh            onGeofenceHardwareChange(mGeofenceHardware);
438ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh        }
448ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh    };
458ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
468ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh    /**
478ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh     * Returns the Binder interface for the geofence provider.
488ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh     * This is intended to be used for the onBind() method of
498ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh     * a service that implements a geofence service.
508ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh     *
518ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh     * @return the IBinder instance for the provider
528ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh     */
538ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh    public IBinder getBinder() {
548ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh        return mProvider;
558ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh    }
568ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
578ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh    /**
588ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh     * Called when GeofenceHardware object becomes available.
598ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh     *
608ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh     * @param geofenceHardware Geofence Hardware object. This can be null
618ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh     *        when for some reason the service connection gets disconnected.
628ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh     */
638ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh    public abstract void onGeofenceHardwareChange(GeofenceHardware geofenceHardware);
648ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh}
65