/* HVCC2WPairingFragment Copyright (c) 2016 NTT DOCOMO,INC. Released under the MIT license http://opensource.org/licenses/mit-license.php */ package org.deviceconnect.android.deviceplugin.hvcc2w.setting.fragment; import android.Manifest; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; import android.net.wifi.ScanResult; import android.net.wifi.WifiManager; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.ResultReceiver; import android.support.v4.app.Fragment; import android.support.v4.content.PermissionChecker; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import org.deviceconnect.android.activity.PermissionRequestActivity; import org.deviceconnect.android.deviceplugin.hvcc2w.R; import org.deviceconnect.android.deviceplugin.hvcc2w.manager.HVCManager; import java.util.List; /** * HVC-C2W Settings Fragment Page 4. * * @author NTT DOCOMO, INC. */ public class HVCC2WPairingFragment extends Fragment { /** WiFi AP Scan. */ private BroadcastReceiver mReceiver; /** SSID Edit Text. */ private EditText mSSID; @Override public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { View root = inflater.inflate(R.layout.setting_pairing, null); mSSID = (EditText) root.findViewById(R.id.input_ssid); final EditText passwordText = (EditText) root.findViewById(R.id.input_password); root.findViewById(R.id.connect_wifi).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String ssid = mSSID.getText().toString(); String password = passwordText.getText().toString(); if (!ssid.isEmpty() && !password.isEmpty()) { HVCManager.INSTANCE.playConnectSound(getContext(), ssid, password); } else { HVCC2WDialogFragment.showAlert(getActivity(), getString(R.string.hw_name), getString(R.string.c2w_setting_error_5_1), null); } } }); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP + 1) { searchWifi(); } else { checkPermission(); } return root; } @Override public void onDestroy() { if (mReceiver != null) { getActivity().unregisterReceiver(mReceiver); } super.onDestroy(); } /** Check Permission. */ private void checkPermission() { // WiFi scan requires location permissions. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP + 1) { if (PermissionChecker.checkSelfPermission(getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED && PermissionChecker.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { searchWifi(); } else { PermissionRequestActivity.requestPermissions(getContext(), new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, new ResultReceiver(new Handler(Looper.getMainLooper())) { @Override protected void onReceiveResult(final int resultCode, final Bundle resultData) { String[] retPermissions = resultData.getStringArray("EXTRA_PERMISSIONS"); int[] retGrantResults = resultData.getIntArray("EXTRA_GRANT_RESULTS"); if (retPermissions == null || retGrantResults == null) { HVCC2WDialogFragment.showAlert(getActivity(), getString(R.string.hw_name), "WiFi scan aborted.", null); return; } for (int i = 0; i < retPermissions.length; ++i) { if (retGrantResults[i] == PackageManager.PERMISSION_DENIED) { HVCC2WDialogFragment.showAlert(getActivity(), getString(R.string.hw_name), "WiFi scan aborted.", null); return; } } searchWifi(); } }); } } } /** * Check Wifi. */ private void searchWifi() { final WifiManager wifiManager = getWifiManager(); if (wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLED) { mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { List<ScanResult> results = wifiManager.getScanResults(); if (results.size() == 0) { return; } mSSID.setText(results.get(0).SSID); } }; getActivity().registerReceiver(mReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); } wifiManager.startScan(); } private WifiManager getWifiManager() { return (WifiManager) getActivity().getApplicationContext().getSystemService(Activity.WIFI_SERVICE); } }