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 com.android.server.location;
18ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa
1930f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tangimport android.location.IGnssStatusListener;
206568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaaimport android.os.Handler;
21ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaaimport android.os.RemoteException;
22ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa
23ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa/**
2430f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang * Implementation of a handler for {@link IGnssStatusListener}.
25ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */
2630f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tangabstract class GnssStatusListenerHelper extends RemoteListenerHelper<IGnssStatusListener> {
2730f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    protected GnssStatusListenerHelper(Handler handler) {
2830f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang        super(handler, "GnssStatusListenerHelper");
2930f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang        setSupported(GnssLocationProvider.isSupported());
306568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa    }
316568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa
326568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa    @Override
336568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa    protected boolean registerWithService() {
346568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa        return true;
356568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa    }
366568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa
376568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa    @Override
386568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa    protected void unregisterFromService() {}
396568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa
406568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa    @Override
4130f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    protected ListenerOperation<IGnssStatusListener> getHandlerOperation(int result) {
426568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa        return null;
436568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa    }
44ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa
4513a60b0d41c740448ea39ca19842c7b193c61efddestradaa    public void onStatusChanged(boolean isNavigating) {
466568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa        Operation operation;
4713a60b0d41c740448ea39ca19842c7b193c61efddestradaa        if (isNavigating) {
486568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa            operation = new Operation() {
496568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa                @Override
5030f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang                public void execute(IGnssStatusListener listener) throws RemoteException {
5130f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang                    listener.onGnssStarted();
526568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa                }
536568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa            };
546568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa        } else {
556568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa            operation = new Operation() {
566568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa                @Override
5730f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang                public void execute(IGnssStatusListener listener) throws RemoteException {
5830f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang                    listener.onGnssStopped();
596568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa                }
606568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa            };
616568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa        }
62ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa        foreach(operation);
63ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa    }
64ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa
656568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa    public void onFirstFix(final int timeToFirstFix) {
66ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa        Operation operation = new Operation() {
67ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            @Override
6830f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang            public void execute(IGnssStatusListener listener) throws RemoteException {
696568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa                listener.onFirstFix(timeToFirstFix);
70ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            }
71ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa        };
72ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa        foreach(operation);
73ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa    }
74ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa
75ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa    public void onSvStatusChanged(
76ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            final int svCount,
7730f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang            final int[] prnWithFlags,
7876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang            final float[] cn0s,
79ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            final float[] elevations,
80120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang            final float[] azimuths) {
81ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa        Operation operation = new Operation() {
82ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            @Override
8330f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang            public void execute(IGnssStatusListener listener) throws RemoteException {
84ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa                listener.onSvStatusChanged(
85ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa                        svCount,
8630f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang                        prnWithFlags,
8776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang                        cn0s,
88ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa                        elevations,
89120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang                        azimuths);
90ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            }
91ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa        };
92ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa        foreach(operation);
93ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa    }
94ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa
95ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa    public void onNmeaReceived(final long timestamp, final String nmea) {
96ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa        Operation operation = new Operation() {
97ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            @Override
9830f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang            public void execute(IGnssStatusListener listener) throws RemoteException {
99ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa                listener.onNmeaReceived(timestamp, nmea);
100ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            }
101ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa        };
102ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa        foreach(operation);
103ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa    }
104ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa
10530f95a7d67870c28d2aaa88ee989c099f5670225Lifu Tang    private interface Operation extends ListenerOperation<IGnssStatusListener> {}
106ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa}
107