package com.ckkj.water.device; import android.Manifest; 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.text.TextUtils; import android.view.View; import androidx.core.app.ActivityCompat; import androidx.recyclerview.widget.DividerItemDecoration; import com.ckkj.water.ConstantUtil; import com.ckkj.water.R; import com.ckkj.water.base.BaseActivity; import com.ckkj.water.databinding.DeviceResetWifiBinding; import com.ckkj.water.device.mvp.DeviceContract; import com.ckkj.water.device.mvp.DeviceImpl; import com.ckkj.water.device.mvp.DevicePresenter; import com.ckkj.water.index.entity.IndexDeviceEntity; import com.ckkj.water.network.BaseBean; import com.ckkj.water.permission.PermissionActivity; import com.ckkj.water.utils.manager.ActivityManager; import com.ckkj.water.utils.manager.ThemeManager; import com.ckkj.water.utils.show.ToastUtil; import com.ckkj.water.utils.text.TextUtil; import com.gyf.immersionbar.ImmersionBar; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class SelectWifiActivity extends BaseActivity implements DeviceContract.DeviceView { private WifiManager wifiManager; private WifiListAdapter wifiListAdapter; private WifiScanReceiver wifiScanReceiver; //100 来自设备添加, 200 来自设备信息 private int WITCH_FROM_CODE = 100; private String mWifiName = ""; @Override public DevicePresenter createPresenter() { return new DevicePresenter(new DeviceImpl()); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); wifiScanReceiver = new WifiScanReceiver(); ActivityManager.addActivity(this,getClass().getSimpleName() + "_" + ConstantUtil.ADD_DEVICE_FLAG); } @Override protected void onResume() { super.onResume(); registerReceiver(wifiScanReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); } @Override protected void onPause() { super.onPause(); unregisterReceiver(wifiScanReceiver); } @Override public void initData(Bundle savedInstanceState) { super.initData(savedInstanceState); Bundle bundle = getIntent().getExtras(); if(bundle != null){ WITCH_FROM_CODE = bundle.getInt(ConstantUtil.ACTIVITY_NAVIGATE_FLAG); } ImmersionBar.with(this) .statusBarColor(R.color.mainBackgroundColor) .statusBarDarkFont(ThemeManager.isAppThemeLight(mContext)) .titleBar(viewBinding.rlTitle) .init(); if(WITCH_FROM_CODE == 200){ viewBinding.tvNext.setText(getString(R.string.confirm_text)); } viewBinding.includedTitle.tvTitle.setText(R.string.select_wifi_tip); initListener(); initWifiList(); } private void initWifiList() { wifiListAdapter = new WifiListAdapter(); viewBinding.rvWifiList.setAdapter(wifiListAdapter); wifiListAdapter.setOnWifiItemClickListener(wifiName -> { mWifiName = wifiName; viewBinding.etWifiName.setText(wifiName); viewBinding.rvWifiList.setVisibility(View.GONE); viewBinding.linearWifiInfo.setVisibility(View.VISIBLE); viewBinding.tvNext.setVisibility(View.VISIBLE); }); } private void initListener() { setClick(viewBinding.includedTitle.imgBack); setClick(viewBinding.tvSelectWifi); setClick(viewBinding.tvNext); } private void setClick(View view) { view.setOnClickListener(this::onClick); } public void onClick(View view){ switch (view.getId()){ case R.id.img_back: finish(); break; case R.id.tv_select_wifi: String[] permission = { Manifest.permission.ACCESS_FINE_LOCATION }; boolean hasPermission = hasRecordPermission(permission); if(!hasPermission){ goTo(mContext, PermissionActivity.class,null); }else{ } scanWifi(); break; case R.id.tv_next: if(TextUtils.isEmpty(mWifiName)){ ToastUtil.showShort(mContext,getString(R.string.toast_select_wifi_tip)); return; } if(TextUtils.isEmpty(viewBinding.etInputPsd.getText().toString())){ ToastUtil.showShort(mContext,getString(R.string.toast_select_wifi_psd_tip)); return; } if(WITCH_FROM_CODE == 100){ goTo(mContext,DeviceConnectActivity.class,null); }else{ Intent intent = new Intent(); intent.putExtra("wifi_name",mWifiName); intent.putExtra("wifi_psd",viewBinding.etInputPsd.getText().toString()); setResult(RESULT_OK,intent); finish(); } break; } } private void scanWifi() { showLoadingDialog(); viewBinding.tvNext.setVisibility(View.GONE); if (wifiManager != null && wifiManager.isWifiEnabled()) { wifiManager.startScan(); } else { ToastUtil.showShort(mContext, getString(R.string.wifi_not_enabled)); hideDialogLoading(); } } private void displayWifiList(List scanResults) { Set wifiSet = new HashSet<>(); List wifiNameList = new ArrayList<>(); for (ScanResult result : scanResults) { String wifiName = result.SSID; if (wifiName != null && !wifiName.isEmpty() && !wifiSet.contains(wifiName)) { wifiSet.add(wifiName); wifiNameList.add(wifiName); } } hideDialogLoading(); if (wifiNameList.isEmpty()) { ToastUtil.showShort(mContext, getString(R.string.no_wifi_found)); viewBinding.linearWifiInfo.setVisibility(View.VISIBLE); viewBinding.rvWifiList.setVisibility(View.GONE); } else { wifiListAdapter.setData(wifiNameList); viewBinding.linearWifiInfo.setVisibility(View.GONE); viewBinding.rvWifiList.setVisibility(View.VISIBLE); } } @Override public void addDeviceSuccess(BaseBean bean) { } @Override public void getDeviceDetailInfo(IndexDeviceEntity bean) { } @Override public void editDeviceInfoSuccess(BaseBean bean) { } @Override public void deleteDeviceSuccess(BaseBean bean) { } @Override public void turnOnOffDeviceSuccess(BaseBean bean) { } private class WifiScanReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(intent.getAction())) { boolean success = intent.getBooleanExtra(WifiManager.EXTRA_RESULTS_UPDATED, false); if (success) { if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return; } List results = wifiManager.getScanResults(); displayWifiList(results); } else { ToastUtil.showShort(mContext, getString(R.string.wifi_scan_failed)); } } } } @Override public int getLayoutResId(Bundle savedInstanceState) { return 0; } @Override public void showError(String message) { ToastUtil.showShort(mContext,message); } @Override public void logOut(BaseBean bean) { } }