1ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa/*
2ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Copyright (C) 2014 The Android Open Source Project
3ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa *
4ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Licensed under the Apache License, Version 2.0 (the "License");
5ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * you may not use this file except in compliance with the License.
6ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * You may obtain a copy of the License at
7ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa *
8ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa *      http://www.apache.org/licenses/LICENSE-2.0
9ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa *
10ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Unless required by applicable law or agreed to in writing, software
11ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * distributed under the License is distributed on an "AS IS" BASIS,
12ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * See the License for the specific language governing permissions and
14ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * limitations under the License
15ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */
16ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa
17ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaapackage android.location;
18ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa
19ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaaimport android.content.Context;
20ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaaimport android.os.RemoteException;
21ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa
22ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa/**
234b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * A handler class to manage transport listeners for {@link GpsMeasurementsEvent.Listener}.
24ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa *
25ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * @hide
26ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */
274b3e3931270f8e406fc806bc7fa1c2788256687ddestradaaclass GpsMeasurementListenerTransport
284b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa        extends LocalListenerHelper<GpsMeasurementsEvent.Listener> {
29ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa    private final ILocationManager mLocationManager;
30ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa
31ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa    private final IGpsMeasurementsListener mListenerTransport = new ListenerTransport();
32ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa
33ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa    public GpsMeasurementListenerTransport(Context context, ILocationManager locationManager) {
346568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa        super(context, "GpsMeasurementListenerTransport");
35ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa        mLocationManager = locationManager;
36ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa    }
37ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa
384b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa    @Override
394b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa    protected boolean registerWithServer() throws RemoteException {
404b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa        return mLocationManager.addGpsMeasurementsListener(
414b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa                mListenerTransport,
426568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa                getContext().getPackageName());
43ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa    }
44ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa
454b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa    @Override
464b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa    protected void unregisterFromServer() throws RemoteException {
474b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa        mLocationManager.removeGpsMeasurementsListener(mListenerTransport);
48ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa    }
49ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa
50ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa    private class ListenerTransport extends IGpsMeasurementsListener.Stub {
51ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa        @Override
524b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa        public void onGpsMeasurementsReceived(final GpsMeasurementsEvent event) {
534b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa            ListenerOperation<GpsMeasurementsEvent.Listener> operation =
544b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa                    new ListenerOperation<GpsMeasurementsEvent.Listener>() {
554b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa                @Override
564b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa                public void execute(GpsMeasurementsEvent.Listener listener) throws RemoteException {
574b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa                    listener.onGpsMeasurementsReceived(event);
584b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa                }
594b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa            };
606568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa            foreach(operation);
616568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa        }
62ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa
636568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa        @Override
646568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa        public void onStatusChanged(final int status) {
656568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa            ListenerOperation<GpsMeasurementsEvent.Listener> operation =
666568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa                    new ListenerOperation<GpsMeasurementsEvent.Listener>() {
676568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa                @Override
686568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa                public void execute(GpsMeasurementsEvent.Listener listener) throws RemoteException {
696568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa                    listener.onStatusChanged(status);
706568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa                }
716568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa            };
724b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa            foreach(operation);
73ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa        }
74ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa    }
75ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa}
76