blob: 3417e6e7805d44d70715a60acdbb96933576d05b [file] [log] [blame]
destradaaea8a8a62014-06-23 18:19:03 -07001/*
Sasha Kuznetsov94bb0092020-03-26 12:08:17 -07002 * Copyright (C) 2020 The Android Open Source Project
destradaaea8a8a62014-06-23 18:19:03 -07003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
Sasha Kuznetsov94bb0092020-03-26 12:08:17 -070014 * limitations under the License.
destradaaea8a8a62014-06-23 18:19:03 -070015 */
16
Sasha Kuznetsov94bb0092020-03-26 12:08:17 -070017package com.android.server.location.gnss;
destradaaea8a8a62014-06-23 18:19:03 -070018
Anil Admal75b9fd62018-11-28 11:22:50 -080019import android.content.Context;
Lifu Tang30f95a72016-01-07 23:20:38 -080020import android.location.IGnssStatusListener;
destradaa6568d702014-10-27 12:47:41 -070021import android.os.Handler;
Anil Admal75b9fd62018-11-28 11:22:50 -080022import android.util.Log;
destradaaea8a8a62014-06-23 18:19:03 -070023
Sasha Kuznetsov94bb0092020-03-26 12:08:17 -070024import com.android.server.location.CallerIdentity;
25import com.android.server.location.RemoteListenerHelper;
26
destradaaea8a8a62014-06-23 18:19:03 -070027/**
Lifu Tang30f95a72016-01-07 23:20:38 -080028 * Implementation of a handler for {@link IGnssStatusListener}.
destradaaea8a8a62014-06-23 18:19:03 -070029 */
Yu-Han Yang519694b2020-01-14 10:51:41 -080030public abstract class GnssStatusListenerHelper extends
31 RemoteListenerHelper<Void, IGnssStatusListener> {
Anil Admal75b9fd62018-11-28 11:22:50 -080032 private static final String TAG = "GnssStatusListenerHelper";
33 private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
34
35 protected GnssStatusListenerHelper(Context context, Handler handler) {
36 super(context, handler, TAG);
Lifu Tang30f95a72016-01-07 23:20:38 -080037 setSupported(GnssLocationProvider.isSupported());
destradaa6568d702014-10-27 12:47:41 -070038 }
39
40 @Override
gomo48f1a642017-11-10 20:35:46 -080041 protected int registerWithService() {
42 return RemoteListenerHelper.RESULT_SUCCESS;
destradaa6568d702014-10-27 12:47:41 -070043 }
44
45 @Override
46 protected void unregisterFromService() {}
47
48 @Override
Lifu Tang30f95a72016-01-07 23:20:38 -080049 protected ListenerOperation<IGnssStatusListener> getHandlerOperation(int result) {
destradaa6568d702014-10-27 12:47:41 -070050 return null;
51 }
52
destradaa13a60b02015-01-15 18:36:01 -080053 public void onStatusChanged(boolean isNavigating) {
destradaa13a60b02015-01-15 18:36:01 -080054 if (isNavigating) {
Anil Admal08b96122019-01-30 16:55:05 -080055 foreach((IGnssStatusListener listener, CallerIdentity callerIdentity) -> {
Anil Admal75b9fd62018-11-28 11:22:50 -080056 listener.onGnssStarted();
57 });
destradaa6568d702014-10-27 12:47:41 -070058 } else {
Anil Admal08b96122019-01-30 16:55:05 -080059 foreach((IGnssStatusListener listener, CallerIdentity callerIdentity) -> {
Anil Admal75b9fd62018-11-28 11:22:50 -080060 listener.onGnssStopped();
61 });
destradaa6568d702014-10-27 12:47:41 -070062 }
destradaa4b3e3932014-07-21 18:01:47 -070063 }
64
destradaaea8a8a62014-06-23 18:19:03 -070065 public void onFirstFix(final int timeToFirstFix) {
Anil Admal08b96122019-01-30 16:55:05 -080066 foreach((IGnssStatusListener listener, CallerIdentity callerIdentity) -> {
Anil Admal75b9fd62018-11-28 11:22:50 -080067 listener.onFirstFix(timeToFirstFix);
68 }
69 );
destradaaea8a8a62014-06-23 18:19:03 -070070 }
71
72 public void onSvStatusChanged(
73 final int svCount,
Lifu Tang30f95a72016-01-07 23:20:38 -080074 final int[] prnWithFlags,
Lifu Tang76a620f2016-02-26 19:53:01 -080075 final float[] cn0s,
destradaaea8a8a62014-06-23 18:19:03 -070076 final float[] elevations,
gomo4402af62017-01-11 13:20:13 -080077 final float[] azimuths,
Yu-Han Yang15e43032019-11-22 13:50:41 -080078 final float[] carrierFreqs,
79 final float[] basebandCn0s) {
Anil Admal08b96122019-01-30 16:55:05 -080080 foreach((IGnssStatusListener listener, CallerIdentity callerIdentity) -> {
81 if (!hasPermission(mContext, callerIdentity)) {
Soonil Nagarkar39766392020-03-28 13:59:26 -070082 logPermissionDisabledEventNotReported(TAG, callerIdentity.packageName,
Anil Admal08b96122019-01-30 16:55:05 -080083 "GNSS status");
Anil Admal75b9fd62018-11-28 11:22:50 -080084 return;
destradaaea8a8a62014-06-23 18:19:03 -070085 }
Anil Admal75b9fd62018-11-28 11:22:50 -080086 listener.onSvStatusChanged(svCount, prnWithFlags, cn0s, elevations, azimuths,
Yu-Han Yang15e43032019-11-22 13:50:41 -080087 carrierFreqs, basebandCn0s);
Anil Admal75b9fd62018-11-28 11:22:50 -080088 });
destradaaea8a8a62014-06-23 18:19:03 -070089 }
90
91 public void onNmeaReceived(final long timestamp, final String nmea) {
Anil Admal08b96122019-01-30 16:55:05 -080092 foreach((IGnssStatusListener listener, CallerIdentity callerIdentity) -> {
93 if (!hasPermission(mContext, callerIdentity)) {
Soonil Nagarkar39766392020-03-28 13:59:26 -070094 logPermissionDisabledEventNotReported(TAG, callerIdentity.packageName, "NMEA");
Anil Admal75b9fd62018-11-28 11:22:50 -080095 return;
destradaaea8a8a62014-06-23 18:19:03 -070096 }
Anil Admal75b9fd62018-11-28 11:22:50 -080097 listener.onNmeaReceived(timestamp, nmea);
98 });
destradaaea8a8a62014-06-23 18:19:03 -070099 }
destradaaea8a8a62014-06-23 18:19:03 -0700100}