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
19ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaaimport android.location.IGpsStatusListener;
206568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaaimport android.os.Handler;
21ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaaimport android.os.RemoteException;
22ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa
23ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa/**
24ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa * Implementation of a handler for {@link IGpsStatusListener}.
25ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa */
26ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaaabstract class GpsStatusListenerHelper extends RemoteListenerHelper<IGpsStatusListener> {
276568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa    public GpsStatusListenerHelper(Handler handler) {
286568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa        super(handler, "GpsStatusListenerHelper");
294b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa
306568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa        Operation nullOperation = new Operation() {
31ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            @Override
326568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa            public void execute(IGpsStatusListener iGpsStatusListener) throws RemoteException {}
33ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa        };
346568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa        setSupported(GpsLocationProvider.isSupported(), nullOperation);
356568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa    }
366568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa
376568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa    @Override
386568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa    protected boolean registerWithService() {
396568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa        return true;
406568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa    }
416568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa
426568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa    @Override
436568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa    protected void unregisterFromService() {}
446568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa
456568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa    @Override
466568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa    protected ListenerOperation<IGpsStatusListener> getHandlerOperation(int result) {
476568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa        return null;
486568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa    }
49ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa
506568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa    @Override
516568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa    protected void handleGpsEnabledChanged(boolean enabled) {
526568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa        Operation operation;
536568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa        if (enabled) {
546568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa            operation = new Operation() {
556568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa                @Override
566568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa                public void execute(IGpsStatusListener listener) throws RemoteException {
576568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa                    listener.onGpsStarted();
586568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa                }
596568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa            };
606568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa        } else {
616568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa            operation = new Operation() {
626568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa                @Override
636568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa                public void execute(IGpsStatusListener listener) throws RemoteException {
646568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa                    listener.onGpsStopped();
656568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa                }
666568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa            };
676568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa        }
68ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa        foreach(operation);
69ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa    }
70ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa
716568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa    public void onFirstFix(final int timeToFirstFix) {
72ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa        Operation operation = new Operation() {
73ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            @Override
74ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            public void execute(IGpsStatusListener listener) throws RemoteException {
756568d709e78d6ccaf256b7d0e4a19cdfb26deafbdestradaa                listener.onFirstFix(timeToFirstFix);
76ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            }
77ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa        };
78ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa        foreach(operation);
79ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa    }
80ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa
81ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa    public void onSvStatusChanged(
82ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            final int svCount,
83ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            final int[] prns,
84ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            final float[] snrs,
85ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            final float[] elevations,
86ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            final float[] azimuths,
87ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            final int ephemerisMask,
88ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            final int almanacMask,
89ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            final int usedInFixMask) {
90ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa        Operation operation = new Operation() {
91ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            @Override
92ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            public void execute(IGpsStatusListener listener) throws RemoteException {
93ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa                listener.onSvStatusChanged(
94ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa                        svCount,
95ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa                        prns,
96ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa                        snrs,
97ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa                        elevations,
98ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa                        azimuths,
99ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa                        ephemerisMask,
100ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa                        almanacMask,
101ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa                        usedInFixMask);
102ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            }
103ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa        };
104ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa        foreach(operation);
105ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa    }
106ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa
107ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa    public void onNmeaReceived(final long timestamp, final String nmea) {
108ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa        Operation operation = new Operation() {
109ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            @Override
110ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            public void execute(IGpsStatusListener listener) throws RemoteException {
111ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa                listener.onNmeaReceived(timestamp, nmea);
112ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa            }
113ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa        };
114ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa        foreach(operation);
115ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa    }
116ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa
117ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa    private abstract class Operation implements ListenerOperation<IGpsStatusListener> { }
118ea8a8a6076f04360de2d25b3e5853cde8026cd5fdestradaa}
119