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