FusedLocationHardwareSecure.java revision 9158825f9c41869689d6b1786d7c7aa8bdd524ce
1/*
2 * Copyright (C) 2013 The Android Open Source Project
3 *
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
14 * limitations under the License.
15 */
16
17package com.android.server.location;
18
19import android.content.Context;
20import android.hardware.location.IFusedLocationHardware;
21import android.hardware.location.IFusedLocationHardwareSink;
22import android.location.FusedBatchOptions;
23import android.os.RemoteException;
24
25/**
26 * FusedLocationHardware decorator that adds permission checking.
27 * @hide
28 */
29public class FusedLocationHardwareSecure extends IFusedLocationHardware.Stub {
30    private final IFusedLocationHardware mLocationHardware;
31    private final Context mContext;
32    private final String mPermissionId;
33
34    public FusedLocationHardwareSecure(
35            IFusedLocationHardware locationHardware,
36            Context context,
37            String permissionId) {
38        mLocationHardware = locationHardware;
39        mContext = context;
40        mPermissionId = permissionId;
41    }
42
43    private void checkPermissions() {
44        mContext.enforceCallingPermission(
45                mPermissionId,
46                String.format(
47                        "Permission '%s' not granted to access FusedLocationHardware",
48                        mPermissionId));
49    }
50
51    @Override
52    public void registerSink(IFusedLocationHardwareSink eventSink) throws RemoteException {
53        checkPermissions();
54        mLocationHardware.registerSink(eventSink);
55    }
56
57    @Override
58    public void unregisterSink(IFusedLocationHardwareSink eventSink) throws RemoteException {
59        checkPermissions();
60        mLocationHardware.unregisterSink(eventSink);
61    }
62
63    @Override
64    public int getSupportedBatchSize() throws RemoteException {
65        checkPermissions();
66        return mLocationHardware.getSupportedBatchSize();
67    }
68
69    @Override
70    public void startBatching(int id, FusedBatchOptions batchOptions) throws RemoteException {
71        checkPermissions();
72        mLocationHardware.startBatching(id, batchOptions);
73    }
74
75    @Override
76    public void stopBatching(int id) throws RemoteException {
77        checkPermissions();
78        mLocationHardware.stopBatching(id);
79    }
80
81    @Override
82    public void updateBatchingOptions(
83            int id,
84            FusedBatchOptions batchoOptions
85            ) throws RemoteException {
86        checkPermissions();
87        mLocationHardware.updateBatchingOptions(id, batchoOptions);
88    }
89
90    @Override
91    public void requestBatchOfLocations(int batchSizeRequested) throws RemoteException {
92        checkPermissions();
93        mLocationHardware.requestBatchOfLocations(batchSizeRequested);
94    }
95
96    @Override
97    public boolean supportsDiagnosticDataInjection() throws RemoteException {
98        checkPermissions();
99        return mLocationHardware.supportsDiagnosticDataInjection();
100    }
101
102    @Override
103    public void injectDiagnosticData(String data) throws RemoteException {
104        checkPermissions();
105        mLocationHardware.injectDiagnosticData(data);
106    }
107
108    @Override
109    public boolean supportsDeviceContextInjection() throws RemoteException {
110        checkPermissions();
111        return mLocationHardware.supportsDeviceContextInjection();
112    }
113
114    @Override
115    public void injectDeviceContext(int deviceEnabledContext) throws RemoteException {
116        checkPermissions();
117        mLocationHardware.injectDeviceContext(deviceEnabledContext);
118    }
119}
120