1956f54b391677d78379729dd14518edddf3c7660Etan Cohen/*
2956f54b391677d78379729dd14518edddf3c7660Etan Cohen * Copyright (C) 2016 The Android Open Source Project
3956f54b391677d78379729dd14518edddf3c7660Etan Cohen *
4956f54b391677d78379729dd14518edddf3c7660Etan Cohen * Licensed under the Apache License, Version 2.0 (the "License");
5956f54b391677d78379729dd14518edddf3c7660Etan Cohen * you may not use this file except in compliance with the License.
6956f54b391677d78379729dd14518edddf3c7660Etan Cohen * You may obtain a copy of the License at
7956f54b391677d78379729dd14518edddf3c7660Etan Cohen *
8956f54b391677d78379729dd14518edddf3c7660Etan Cohen *      http://www.apache.org/licenses/LICENSE-2.0
9956f54b391677d78379729dd14518edddf3c7660Etan Cohen *
10956f54b391677d78379729dd14518edddf3c7660Etan Cohen * Unless required by applicable law or agreed to in writing, software
11956f54b391677d78379729dd14518edddf3c7660Etan Cohen * distributed under the License is distributed on an "AS IS" BASIS,
12956f54b391677d78379729dd14518edddf3c7660Etan Cohen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13956f54b391677d78379729dd14518edddf3c7660Etan Cohen * See the License for the specific language governing permissions and
14956f54b391677d78379729dd14518edddf3c7660Etan Cohen * limitations under the License.
15956f54b391677d78379729dd14518edddf3c7660Etan Cohen */
16956f54b391677d78379729dd14518edddf3c7660Etan Cohen
17c29acea6ceda3aa4ee537c05ce7d05dac2655cf9Etan Cohenpackage com.android.server.wifi.aware;
18956f54b391677d78379729dd14518edddf3c7660Etan Cohen
19956f54b391677d78379729dd14518edddf3c7660Etan Cohenimport android.content.Context;
20d45abba86c33bd93863fc9d8f7c84ca28deb17b2Etan Cohenimport android.os.HandlerThread;
21956f54b391677d78379729dd14518edddf3c7660Etan Cohenimport android.util.Log;
22956f54b391677d78379729dd14518edddf3c7660Etan Cohen
23956f54b391677d78379729dd14518edddf3c7660Etan Cohenimport com.android.server.SystemService;
24db3c9d35a7f08de03beec81e801d917a5375f63eEtan Cohenimport com.android.server.wifi.HalDeviceManager;
25d45abba86c33bd93863fc9d8f7c84ca28deb17b2Etan Cohenimport com.android.server.wifi.WifiInjector;
26956f54b391677d78379729dd14518edddf3c7660Etan Cohen
27c9783c72ce84ea8cc42f2c407824113019e59b11Etan Cohen/**
28c29acea6ceda3aa4ee537c05ce7d05dac2655cf9Etan Cohen * Service implementing Wi-Fi Aware functionality. Delegates actual interface
29c29acea6ceda3aa4ee537c05ce7d05dac2655cf9Etan Cohen * implementation to WifiAwareServiceImpl.
30c9783c72ce84ea8cc42f2c407824113019e59b11Etan Cohen */
31c29acea6ceda3aa4ee537c05ce7d05dac2655cf9Etan Cohenpublic final class WifiAwareService extends SystemService {
32c29acea6ceda3aa4ee537c05ce7d05dac2655cf9Etan Cohen    private static final String TAG = "WifiAwareService";
33c29acea6ceda3aa4ee537c05ce7d05dac2655cf9Etan Cohen    final WifiAwareServiceImpl mImpl;
34956f54b391677d78379729dd14518edddf3c7660Etan Cohen
35c29acea6ceda3aa4ee537c05ce7d05dac2655cf9Etan Cohen    public WifiAwareService(Context context) {
36956f54b391677d78379729dd14518edddf3c7660Etan Cohen        super(context);
37c29acea6ceda3aa4ee537c05ce7d05dac2655cf9Etan Cohen        mImpl = new WifiAwareServiceImpl(context);
38956f54b391677d78379729dd14518edddf3c7660Etan Cohen    }
39956f54b391677d78379729dd14518edddf3c7660Etan Cohen
40956f54b391677d78379729dd14518edddf3c7660Etan Cohen    @Override
41956f54b391677d78379729dd14518edddf3c7660Etan Cohen    public void onStart() {
42c29acea6ceda3aa4ee537c05ce7d05dac2655cf9Etan Cohen        Log.i(TAG, "Registering " + Context.WIFI_AWARE_SERVICE);
43c29acea6ceda3aa4ee537c05ce7d05dac2655cf9Etan Cohen        publishBinderService(Context.WIFI_AWARE_SERVICE, mImpl);
44956f54b391677d78379729dd14518edddf3c7660Etan Cohen    }
45956f54b391677d78379729dd14518edddf3c7660Etan Cohen
46956f54b391677d78379729dd14518edddf3c7660Etan Cohen    @Override
47956f54b391677d78379729dd14518edddf3c7660Etan Cohen    public void onBootPhase(int phase) {
48956f54b391677d78379729dd14518edddf3c7660Etan Cohen        if (phase == SystemService.PHASE_SYSTEM_SERVICES_READY) {
49d45abba86c33bd93863fc9d8f7c84ca28deb17b2Etan Cohen            WifiInjector wifiInjector = WifiInjector.getInstance();
50d45abba86c33bd93863fc9d8f7c84ca28deb17b2Etan Cohen            if (wifiInjector == null) {
51d45abba86c33bd93863fc9d8f7c84ca28deb17b2Etan Cohen                Log.e(TAG, "onBootPhase(PHASE_SYSTEM_SERVICES_READY): NULL injector!");
52d45abba86c33bd93863fc9d8f7c84ca28deb17b2Etan Cohen                return;
53d45abba86c33bd93863fc9d8f7c84ca28deb17b2Etan Cohen            }
54d45abba86c33bd93863fc9d8f7c84ca28deb17b2Etan Cohen
55db3c9d35a7f08de03beec81e801d917a5375f63eEtan Cohen            HalDeviceManager halDeviceManager = wifiInjector.getHalDeviceManager();
56db3c9d35a7f08de03beec81e801d917a5375f63eEtan Cohen            halDeviceManager.initialize();
57d45abba86c33bd93863fc9d8f7c84ca28deb17b2Etan Cohen
58db3c9d35a7f08de03beec81e801d917a5375f63eEtan Cohen            WifiAwareStateManager wifiAwareStateManager = new WifiAwareStateManager();
59db3c9d35a7f08de03beec81e801d917a5375f63eEtan Cohen            WifiAwareNativeCallback wifiAwareNativeCallback = new WifiAwareNativeCallback(
60db3c9d35a7f08de03beec81e801d917a5375f63eEtan Cohen                    wifiAwareStateManager);
61db3c9d35a7f08de03beec81e801d917a5375f63eEtan Cohen            WifiAwareNativeManager wifiAwareNativeManager = new WifiAwareNativeManager(
62db3c9d35a7f08de03beec81e801d917a5375f63eEtan Cohen                    wifiAwareStateManager, halDeviceManager, wifiAwareNativeCallback);
63db3c9d35a7f08de03beec81e801d917a5375f63eEtan Cohen            WifiAwareNativeApi wifiAwareNativeApi = new WifiAwareNativeApi(wifiAwareNativeManager);
64db3c9d35a7f08de03beec81e801d917a5375f63eEtan Cohen            wifiAwareStateManager.setNative(wifiAwareNativeApi);
65db3c9d35a7f08de03beec81e801d917a5375f63eEtan Cohen
66db3c9d35a7f08de03beec81e801d917a5375f63eEtan Cohen            HandlerThread awareHandlerThread = wifiInjector.getWifiAwareHandlerThread();
67db3c9d35a7f08de03beec81e801d917a5375f63eEtan Cohen            mImpl.start(awareHandlerThread, wifiAwareStateManager);
687335b7c3db2656c8379296593c7880ae56ccf9eaEtan Cohen        } else if (phase == SystemService.PHASE_BOOT_COMPLETED) {
697335b7c3db2656c8379296593c7880ae56ccf9eaEtan Cohen            mImpl.startLate();
70956f54b391677d78379729dd14518edddf3c7660Etan Cohen        }
71956f54b391677d78379729dd14518edddf3c7660Etan Cohen    }
72956f54b391677d78379729dd14518edddf3c7660Etan Cohen}
73956f54b391677d78379729dd14518edddf3c7660Etan Cohen
74