导航菜单

页面标题

页面副标题

WeatherSense v1.8.9 - BleScanActivity.java 源代码

正在查看: WeatherSense v1.8.9 应用的 BleScanActivity.java JAVA 源代码文件

本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。


package com.emax.weather.ui.activity;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.le.ScanResult;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.OnItemClick;
import com.emax.weahter.R;
import com.emax.weather.adapter.DevicesAdapter;
import com.emax.weather.base.MvpBaseActivity;
import com.emax.weather.bean.CmdConstant;
import com.emax.weather.bean.DeviceInfo;
import com.emax.weather.event.BleScanEvent;
import com.emax.weather.presenter.BleScanPersenterImp;
import com.emax.weather.receiver.BleStateReceiver;
import com.emax.weather.receiver.ClosePageReceiver;
import com.emax.weather.util.AndroidScheduler;
import com.emax.weather.utils.CheckClickUtils;
import com.ezon.health.utils_lib.ToastUtil;
import com.tbruyelle.rxpermissions2.RxPermissions;
import com.tuyenmonkey.mkloader.MKLoader;
import io.reactivex.Flowable;
import io.reactivex.Observable;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import java.util.List;
import java.util.concurrent.TimeUnit;

public class BleScanActivity extends MvpBaseActivity<BleScanEvent.BleScanView, BleScanPersenterImp> implements BleScanEvent.BleScanView {
    private DevicesAdapter adapter;
    private Disposable disposable;
    private List<DeviceInfo> list;

    @BindView(R.id.lv_device)
    ListView lvDevice;

    @BindView(R.id.mkloader)
    MKLoader mkLoader;
    private Disposable timerDisposable;

    @BindView(R.id.title_sub)
    TextView titleSub;

    @BindView(R.id.tv_scan_nodevice)
    TextView tvScanNodevice;

    @BindView(R.id.setting)
    TextView tvSearch;
    private int scanCount = 6;
    private BleStateReceiver bleStateReceiver = new BleStateReceiver() {
        @Override
        public void bleScan() {
            ((BleScanPersenterImp) BleScanActivity.this.mPresenter).scan();
            BleScanActivity.this.initTimer();
        }
    };
    private ClosePageReceiver closePageReceiver = new ClosePageReceiver() {
        @Override
        public void onClosePage() {
            BleScanActivity.this.finish();
        }
    };

    @Override
    protected int getActivityRId() {
        return R.layout.activity_ble_scan;
    }

    @Override
    public Context getViewContext() {
        return this;
    }

    @Override
    public void refreshScanFail() {
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ButterKnife.bind(this);
        initView();
        checkBlue();
    }

    private void checkBlue() {
        try {
            BluetoothAdapter defaultAdapter = BluetoothAdapter.getDefaultAdapter();
            if (defaultAdapter != null) {
                if (defaultAdapter.isEnabled()) {
                    requestPermission();
                } else {
                    Toast.makeText(this, getResources().getString(R.string.ble_connect), 0).show();
                    startActivity(new Intent("android.bluetooth.adapter.action.REQUEST_ENABLE"));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void requestPermission() {
        RxPermissions rxPermissions = new RxPermissions(this);
        if (Build.VERSION.SDK_INT >= 31) {
            if (!rxPermissions.isGranted("android.permission.ACCESS_FINE_LOCATION") || !rxPermissions.isGranted("android.permission.ACCESS_COARSE_LOCATION")) {
                rxPermissions.request(new String[]{"android.permission.ACCESS_FINE_LOCATION", "android.permission.ACCESS_COARSE_LOCATION"}).subscribe(new Consumer() {
                    public final void accept(Object obj) {
                        BleScanActivity.this.lambda$requestPermission$0$BleScanActivity((Boolean) obj);
                    }
                });
            }
            if (!rxPermissions.isGranted("android.permission.BLUETOOTH_SCAN")) {
                rxPermissions.request(new String[]{"android.permission.BLUETOOTH_SCAN"}).subscribe(new Consumer() {
                    public final void accept(Object obj) {
                        BleScanActivity.this.lambda$requestPermission$1$BleScanActivity((Boolean) obj);
                    }
                });
            }
            if (rxPermissions.isGranted("android.permission.BLUETOOTH_CONNECT")) {
                return;
            }
            rxPermissions.request(new String[]{"android.permission.BLUETOOTH_CONNECT"}).subscribe(new Consumer() {
                public final void accept(Object obj) {
                    BleScanActivity.this.lambda$requestPermission$2$BleScanActivity((Boolean) obj);
                }
            });
            return;
        }
        if (rxPermissions.isGranted("android.permission.ACCESS_FINE_LOCATION") && rxPermissions.isGranted("android.permission.ACCESS_COARSE_LOCATION") && rxPermissions.isGranted("android.permission.ACCESS_LOCATION_EXTRA_COMMANDS")) {
            return;
        }
        rxPermissions.request(new String[]{"android.permission.ACCESS_FINE_LOCATION", "android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"}).subscribe(new Consumer() {
            public final void accept(Object obj) {
                BleScanActivity.this.lambda$requestPermission$3$BleScanActivity((Boolean) obj);
            }
        });
    }

    public void lambda$requestPermission$0$BleScanActivity(Boolean bool) throws Exception {
        if (bool.booleanValue()) {
            return;
        }
        Toast.makeText(this, getString(R.string.open_device_location), 0).show();
    }

    public void lambda$requestPermission$1$BleScanActivity(Boolean bool) throws Exception {
        if (bool.booleanValue()) {
            return;
        }
        Toast.makeText(this, getString(R.string.open_device_scan), 0).show();
    }

    public void lambda$requestPermission$2$BleScanActivity(Boolean bool) throws Exception {
        if (bool.booleanValue()) {
            return;
        }
        Toast.makeText(this, getString(R.string.open_device_connect_ble), 0).show();
    }

    public void lambda$requestPermission$3$BleScanActivity(Boolean bool) throws Exception {
        if (bool.booleanValue()) {
            return;
        }
        Toast.makeText(this, getString(R.string.open_device_scan), 0).show();
    }

    private void initView() {
        this.titleSub.setText(getString(R.string.select_device));
        this.tvSearch.setText(getString(R.string.search));
        this.list = getIntent().getParcelableArrayListExtra("results");
        DevicesAdapter devicesAdapter = new DevicesAdapter(this, this.list);
        this.adapter = devicesAdapter;
        this.lvDevice.setAdapter((ListAdapter) devicesAdapter);
        IntentFilter intentFilter = new IntentFilter("android.bluetooth.adapter.action.STATE_CHANGED");
        if (Build.VERSION.SDK_INT >= 33) {
            registerReceiver(this.bleStateReceiver, intentFilter, 2);
        } else {
            registerReceiver(this.bleStateReceiver, intentFilter);
        }
        IntentFilter intentFilter2 = new IntentFilter(ClosePageReceiver.CLOSE_BLE_SCAN_PAGE_ACTION);
        if (Build.VERSION.SDK_INT >= 33) {
            registerReceiver(this.closePageReceiver, intentFilter2, 2);
        } else {
            registerReceiver(this.closePageReceiver, intentFilter2);
        }
        RxPermissions rxPermissions = new RxPermissions(this);
        if (rxPermissions.isGranted("android.permission.ACCESS_COARSE_LOCATION") && rxPermissions.isGranted("android.permission.ACCESS_FINE_LOCATION")) {
            this.mkLoader.setVisibility(0);
            this.tvSearch.setVisibility(8);
            if (this.list.isEmpty()) {
                this.lvDevice.setVisibility(8);
                this.tvScanNodevice.setVisibility(0);
                this.tvScanNodevice.setText(getString(R.string.device_searching));
            }
            Observable.timer(2L, TimeUnit.SECONDS).subscribe(new Consumer() {
                public final void accept(Object obj) {
                    BleScanActivity.this.lambda$initView$4$BleScanActivity((Long) obj);
                }
            });
            return;
        }
        rxPermissions.request(new String[]{"android.permission.ACCESS_FINE_LOCATION", "android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS", "android.permission.BLUETOOTH_ADMIN", "android.permission.BLUETOOTH"}).subscribe(new Consumer() {
            public final void accept(Object obj) {
                BleScanActivity.this.lambda$initView$6$BleScanActivity((Boolean) obj);
            }
        });
    }

    public void lambda$initView$4$BleScanActivity(Long l) throws Exception {
        if (((BleScanPersenterImp) this.mPresenter).openBle().booleanValue()) {
            ((BleScanPersenterImp) this.mPresenter).scan();
            initTimer();
        }
    }

    public void lambda$initView$6$BleScanActivity(Boolean bool) throws Exception {
        if (!bool.booleanValue()) {
            ToastUtil.show(getString(R.string.Please_check_your_permissions), this);
            return;
        }
        this.mkLoader.setVisibility(0);
        this.tvSearch.setVisibility(8);
        if (this.list.isEmpty()) {
            this.lvDevice.setVisibility(8);
            this.tvScanNodevice.setVisibility(0);
            this.tvScanNodevice.setText(getString(R.string.device_searching));
        }
        Observable.timer(2L, TimeUnit.SECONDS).subscribe(new Consumer() {
            public final void accept(Object obj) {
                BleScanActivity.this.lambda$initView$5$BleScanActivity((Long) obj);
            }
        });
    }

    public void lambda$initView$5$BleScanActivity(Long l) throws Exception {
        if (((BleScanPersenterImp) this.mPresenter).openBle().booleanValue()) {
            ((BleScanPersenterImp) this.mPresenter).scan();
            initTimer();
        }
    }

    @Override
    public BleScanPersenterImp createPresenter() {
        return new BleScanPersenterImp(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        BleStateReceiver bleStateReceiver = this.bleStateReceiver;
        if (bleStateReceiver != null) {
            unregisterReceiver(bleStateReceiver);
        }
        ClosePageReceiver closePageReceiver = this.closePageReceiver;
        if (closePageReceiver != null) {
            unregisterReceiver(closePageReceiver);
        }
        Disposable disposable = this.disposable;
        if (disposable != null && !disposable.isDisposed()) {
            this.disposable.dispose();
            this.disposable = null;
        }
        Disposable disposable2 = this.timerDisposable;
        if (disposable2 != null && !disposable2.isDisposed()) {
            this.timerDisposable.dispose();
            this.timerDisposable = null;
        }
        ((BleScanPersenterImp) this.mPresenter).stopScan();
    }

    public void initTimer() {
        this.timerDisposable = Flowable.timer(20L, TimeUnit.SECONDS).observeOn(AndroidScheduler.mainThread()).subscribe(new Consumer() {
            public final void accept(Object obj) {
                BleScanActivity.this.lambda$initTimer$7$BleScanActivity((Long) obj);
            }
        });
    }

    public void lambda$initTimer$7$BleScanActivity(Long l) throws Exception {
        ((BleScanPersenterImp) this.mPresenter).stopScan();
        this.mkLoader.setVisibility(8);
        this.tvSearch.setVisibility(0);
        if (this.list.isEmpty()) {
            this.lvDevice.setVisibility(8);
            this.tvScanNodevice.setVisibility(0);
            this.tvScanNodevice.setText(getString(R.string.scan_no_device));
        }
    }

    @Override
    public void refreshScanStart() {
        runOnUiThread(new Runnable() {
            @Override
            public final void run() {
                BleScanActivity.this.lambda$refreshScanStart$8$BleScanActivity();
            }
        });
    }

    public void lambda$refreshScanStart$8$BleScanActivity() {
        this.mkLoader.setVisibility(0);
        this.tvSearch.setVisibility(8);
        if (this.list.isEmpty()) {
            this.lvDevice.setVisibility(8);
            this.tvScanNodevice.setVisibility(0);
            this.tvScanNodevice.setText(getString(R.string.device_searching));
        } else {
            this.lvDevice.setVisibility(0);
            this.tvScanNodevice.setVisibility(8);
        }
    }

    @Override
    public void refreshScanResult(List<ScanResult> results) {
        for (int i = 0; i < results.size(); i++) {
            int i2 = 0;
            while (true) {
                if (i2 < this.list.size()) {
                    if (this.list.get(i2).getMac().equals(results.get(i).getDevice().getAddress())) {
                        break;
                    } else {
                        i2++;
                    }
                } else {
                    this.list.add(new DeviceInfo(results.get(i).getDevice().getName(), results.get(i).getDevice().getAddress(), results.get(i).getRssi()));
                    this.adapter.notifyDataSetChanged();
                    this.lvDevice.setVisibility(0);
                    this.tvScanNodevice.setVisibility(8);
                    break;
                }
            }
        }
    }

    @Override
    public void refreshScanStop() {
        int i = this.scanCount - 1;
        this.scanCount = i;
        if (i <= 0) {
            this.mkLoader.setVisibility(8);
            this.tvSearch.setVisibility(0);
            if (this.list.isEmpty()) {
                this.lvDevice.setVisibility(8);
                this.tvScanNodevice.setVisibility(0);
                this.tvScanNodevice.setText(getString(R.string.scan_no_device));
                return;
            } else {
                this.lvDevice.setVisibility(0);
                this.tvScanNodevice.setVisibility(8);
                return;
            }
        }
        System.out.println("扫描重试");
        ((BleScanPersenterImp) this.mPresenter).scan();
    }

    @OnClick({R.id.setting})
    public void onViewClicked(View view) {
        if (CheckClickUtils.isFastClick()) {
            return;
        }
        this.scanCount = 6;
        if (((BleScanPersenterImp) this.mPresenter).openBle().booleanValue()) {
            ((BleScanPersenterImp) this.mPresenter).scan();
            initTimer();
        }
    }

    @OnItemClick({R.id.lv_device})
    public void onItemClicked(AdapterView<?> parent, View view, int position, long id) {
        Intent intent = new Intent(this, (Class<?>) NewApConnectActivity.class);
        intent.putExtra("MODEL_TYPE", CmdConstant.W_2);
        intent.putExtra(NewApConnectActivity.MODEL_MAC, this.list.get(position).getMac());
        startActivity(intent);
    }
}