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