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