summaryrefslogtreecommitdiffstats
path: root/services/java/com/android/server/location/GeofenceProxy.java
diff options
context:
space:
mode:
Diffstat (limited to 'services/java/com/android/server/location/GeofenceProxy.java')
-rw-r--r--services/java/com/android/server/location/GeofenceProxy.java186
1 files changed, 0 insertions, 186 deletions
diff --git a/services/java/com/android/server/location/GeofenceProxy.java b/services/java/com/android/server/location/GeofenceProxy.java
deleted file mode 100644
index bbc1f47..0000000
--- a/services/java/com/android/server/location/GeofenceProxy.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * 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 com.android.server.location;
-
-import android.content.ComponentName;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.hardware.location.GeofenceHardwareService;
-import android.hardware.location.IGeofenceHardware;
-import android.location.IGeofenceProvider;
-import android.location.IGpsGeofenceHardware;
-import android.location.IFusedGeofenceHardware;
-import android.content.Context;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Message;
-import android.os.RemoteException;
-import android.os.UserHandle;
-import android.util.Log;
-import com.android.server.ServiceWatcher;
-
-import java.util.List;
-
-/**
- * @hide
- */
-public final class GeofenceProxy {
- private static final String TAG = "GeofenceProxy";
- private static final String SERVICE_ACTION =
- "com.android.location.service.GeofenceProvider";
- private final ServiceWatcher mServiceWatcher;
- private final Context mContext;
- private final IGpsGeofenceHardware mGpsGeofenceHardware;
- private final IFusedGeofenceHardware mFusedGeofenceHardware;
-
- private final Object mLock = new Object();
-
- // Access to mGeofenceHardware needs to be synchronized by mLock.
- private IGeofenceHardware mGeofenceHardware;
-
- private static final int GEOFENCE_PROVIDER_CONNECTED = 1;
- private static final int GEOFENCE_HARDWARE_CONNECTED = 2;
- private static final int GEOFENCE_HARDWARE_DISCONNECTED = 3;
- private static final int GEOFENCE_GPS_HARDWARE_CONNECTED = 4;
- private static final int GEOFENCE_GPS_HARDWARE_DISCONNECTED = 5;
-
- private Runnable mRunnable = new Runnable() {
- @Override
- public void run() {
- mHandler.sendEmptyMessage(GEOFENCE_PROVIDER_CONNECTED);
- }
- };
-
- public static GeofenceProxy createAndBind(Context context,
- int overlaySwitchResId, int defaultServicePackageNameResId,
- int initialPackageNamesResId, Handler handler, IGpsGeofenceHardware gpsGeofence,
- IFusedGeofenceHardware fusedGeofenceHardware) {
- GeofenceProxy proxy = new GeofenceProxy(context, overlaySwitchResId,
- defaultServicePackageNameResId, initialPackageNamesResId, handler, gpsGeofence,
- fusedGeofenceHardware);
- if (proxy.bindGeofenceProvider()) {
- return proxy;
- } else {
- return null;
- }
- }
-
- private GeofenceProxy(Context context,
- int overlaySwitchResId, int defaultServicePackageNameResId,
- int initialPackageNamesResId, Handler handler, IGpsGeofenceHardware gpsGeofence,
- IFusedGeofenceHardware fusedGeofenceHardware) {
- mContext = context;
- mServiceWatcher = new ServiceWatcher(context, TAG, SERVICE_ACTION, overlaySwitchResId,
- defaultServicePackageNameResId, initialPackageNamesResId, mRunnable, handler);
- mGpsGeofenceHardware = gpsGeofence;
- mFusedGeofenceHardware = fusedGeofenceHardware;
- bindHardwareGeofence();
- }
-
- private boolean bindGeofenceProvider() {
- return mServiceWatcher.start();
- }
-
- private void bindHardwareGeofence() {
- mContext.bindServiceAsUser(new Intent(mContext, GeofenceHardwareService.class),
- mServiceConnection, Context.BIND_AUTO_CREATE, UserHandle.OWNER);
- }
-
- private ServiceConnection mServiceConnection = new ServiceConnection() {
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- synchronized (mLock) {
- mGeofenceHardware = IGeofenceHardware.Stub.asInterface(service);
- mHandler.sendEmptyMessage(GEOFENCE_HARDWARE_CONNECTED);
- }
- }
-
- @Override
- public void onServiceDisconnected(ComponentName name) {
- synchronized (mLock) {
- mGeofenceHardware = null;
- mHandler.sendEmptyMessage(GEOFENCE_HARDWARE_DISCONNECTED);
- }
- }
- };
-
- private void setGeofenceHardwareInProviderLocked() {
- try {
- IGeofenceProvider provider = IGeofenceProvider.Stub.asInterface(
- mServiceWatcher.getBinder());
- if (provider != null) {
- provider.setGeofenceHardware(mGeofenceHardware);
- }
- } catch (RemoteException e) {
- Log.e(TAG, "Remote Exception: setGeofenceHardwareInProviderLocked: " + e);
- }
- }
-
- private void setGpsGeofenceLocked() {
- try {
- mGeofenceHardware.setGpsGeofenceHardware(mGpsGeofenceHardware);
- } catch (RemoteException e) {
- Log.e(TAG, "Error while connecting to GeofenceHardwareService");
- }
- }
-
- private void setFusedGeofenceLocked() {
- try {
- mGeofenceHardware.setFusedGeofenceHardware(mFusedGeofenceHardware);
- } catch(RemoteException e) {
- Log.e(TAG, "Error while connecting to GeofenceHardwareService");
- }
- }
-
- // This needs to be reworked, when more services get added,
- // Might need a state machine or add a framework utility class,
- private Handler mHandler = new Handler() {
-
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case GEOFENCE_PROVIDER_CONNECTED:
- synchronized (mLock) {
- if (mGeofenceHardware != null) {
- setGeofenceHardwareInProviderLocked();
- }
- // else: the geofence provider will be notified when the connection to
- // GeofenceHardwareService is established.
- }
- break;
- case GEOFENCE_HARDWARE_CONNECTED:
- synchronized (mLock) {
- // Theoretically this won't happen because once the GeofenceHardwareService
- // is connected to, we won't lose connection to it because it's a system
- // service. But this check does make the code more robust.
- if (mGeofenceHardware != null) {
- setGpsGeofenceLocked();
- setFusedGeofenceLocked();
- setGeofenceHardwareInProviderLocked();
- }
- }
- break;
- case GEOFENCE_HARDWARE_DISCONNECTED:
- synchronized (mLock) {
- if (mGeofenceHardware == null) {
- setGeofenceHardwareInProviderLocked();
- }
- }
- break;
- }
- }
- };
-}