package com.shlb.comb.activity;
|
|
import android.content.Intent;
|
import android.content.pm.PackageManager;
|
import android.graphics.Color;
|
import android.os.Build;
|
import android.view.View;
|
import android.view.Window;
|
import android.view.WindowManager;
|
import android.widget.AdapterView;
|
import android.widget.TextView;
|
import android.widget.Toast;
|
|
import androidx.annotation.NonNull;
|
import androidx.core.view.GravityCompat;
|
import androidx.drawerlayout.widget.DrawerLayout;
|
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.FragmentTransaction;
|
|
import com.blakequ.bluetooth_manager_lib.scan.BluetoothScanManager;
|
import com.blakequ.bluetooth_manager_lib.util.BluetoothUtils;
|
import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
|
import com.shlb.comb.R;
|
import com.shlb.comb.base.BaseActivity;
|
import com.shlb.comb.event.UpdateEvent;
|
import com.shlb.comb.fragment.DeviceListFragment;
|
import com.shlb.comb.fragment.SettingsFragment;
|
import com.shlb.comb.manager.BleGlobalManager;
|
import com.shlb.comb.model.BluetoothLeDeviceStore;
|
|
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.ThreadMode;
|
|
public class HomeActivity extends BaseActivity implements AdapterView.OnItemClickListener {
|
|
private DrawerLayout drawerLayout;
|
protected TextView tv_scan;
|
private long lastScanClickTime = 0; // 用于节流
|
|
// Bluetooth Variables
|
private BluetoothScanManager scanManager;
|
private BluetoothLeDeviceStore mDeviceStore;
|
private BluetoothUtils mBluetoothUtils;
|
|
private SettingsFragment settingsFragment;
|
private DeviceListFragment deviceListFragment;
|
|
@Override
|
protected void contentView() {
|
setContentView(R.layout.activity_home);
|
drawerLayout = findViewById(R.id.drawer_layout);
|
|
// 设置全屏,使抽屉可以覆盖状态栏和导航栏
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
Window window = getWindow();
|
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
|
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
|
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
|
window.setStatusBarColor(Color.TRANSPARENT);
|
window.setNavigationBarColor(Color.TRANSPARENT);
|
}
|
}
|
|
@Override
|
protected void initView() {
|
super.initHead();
|
tv_scan = findViewById(R.id.tv_scan);
|
|
try {
|
TextView tvVersion = findViewById(R.id.tv_version);
|
if (tvVersion != null) {
|
String versionName = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
|
tvVersion.setText("Version " + versionName);
|
}
|
} catch (PackageManager.NameNotFoundException e) {
|
e.printStackTrace();
|
}
|
|
initTitlebar();
|
|
getSupportFragmentManager().addOnBackStackChangedListener(() -> {
|
Fragment current = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
|
if (current instanceof SettingsFragment) {
|
tv_center.setText("实时监控");
|
if (iv_left != null) {
|
iv_left.setImageResource(R.mipmap.icon_menu);
|
iv_left.setOnClickListener(v -> {
|
if (drawerLayout != null) {
|
drawerLayout.openDrawer(GravityCompat.START);
|
}
|
});
|
}
|
if (tv_scan != null) {
|
tv_scan.setVisibility(View.VISIBLE);
|
if (BleGlobalManager.getInstance().isConnected()) {
|
updateConnectedUI();
|
} else {
|
tv_scan.setText("连接蓝牙");
|
tv_scan.setOnClickListener(v -> showDeviceListFragment());
|
}
|
}
|
if (iv_right != null) iv_right.setVisibility(View.GONE);
|
} else if (current instanceof DeviceListFragment) {
|
tv_center.setText("蓝牙设备");
|
if (iv_left != null) {
|
iv_left.setImageResource(R.mipmap.icon_back);
|
iv_left.setOnClickListener(v -> onBackPressed());
|
}
|
if (tv_scan != null) {
|
tv_scan.setVisibility(View.VISIBLE);
|
tv_scan.setText("SCAN");
|
tv_scan.setOnClickListener(v -> {
|
long currentTime = System.currentTimeMillis();
|
if (currentTime - lastScanClickTime < 2000) {
|
Toast("点击过快,请稍后重试!");
|
return;
|
}
|
lastScanClickTime = currentTime;
|
if (deviceListFragment != null && deviceListFragment.isVisible()) {
|
deviceListFragment.startScan();
|
}
|
});
|
}
|
if (iv_right != null) iv_right.setVisibility(View.GONE);
|
}
|
});
|
|
// Default show SettingsFragment
|
showSettingsFragment();
|
}
|
|
@Override
|
protected void initData() {
|
mBluetoothUtils = BluetoothUtils.getInstance(this);
|
mDeviceStore = new BluetoothLeDeviceStore();
|
scanManager = BluetoothScanManager.getInstance(this);
|
}
|
|
@Override
|
protected void initEvent() {
|
iv_left.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View view) {
|
if (drawerLayout != null) {
|
drawerLayout.openDrawer(GravityCompat.START);
|
}
|
}
|
});
|
|
// 抽屉菜单点击事件
|
// 实时监控
|
findViewById(R.id.menu_monitor).setOnClickListener(v -> {
|
updateDrawerSelection(R.id.menu_monitor);
|
Toast.makeText(this, "实时监控", Toast.LENGTH_SHORT).show();
|
showSettingsFragment();
|
drawerLayout.closeDrawer(GravityCompat.START);
|
});
|
|
// 蓝牙设备
|
findViewById(R.id.menu_devices).setOnClickListener(v -> {
|
updateDrawerSelection(R.id.menu_devices);
|
showDeviceListFragment();
|
drawerLayout.closeDrawer(GravityCompat.START);
|
});
|
|
// 当前设备
|
findViewById(R.id.menu_current_device).setOnClickListener(v -> {
|
drawerLayout.closeDrawer(GravityCompat.START);
|
startActivity(new Intent(this, CurrentDeviceActivity.class));
|
});
|
|
// 参数设定
|
findViewById(R.id.menu_settings).setOnClickListener(v -> {
|
drawerLayout.closeDrawer(GravityCompat.START);
|
startActivity(new Intent(this, ParameterSettingActivity.class));
|
});
|
|
// 高级设置
|
View menuAdvancedSettings = findViewById(R.id.menu_advanced_settings);
|
menuAdvancedSettings.setVisibility(View.GONE);
|
menuAdvancedSettings.setOnClickListener(v -> {
|
drawerLayout.closeDrawer(GravityCompat.START);
|
startActivity(new Intent(this, AdvancedSettingActivity.class));
|
});
|
|
// 系统设置
|
View menuSystemSettings = findViewById(R.id.menu_system_settings);
|
menuSystemSettings.setVisibility(View.GONE);
|
menuSystemSettings.setOnClickListener(v -> {
|
drawerLayout.closeDrawer(GravityCompat.START);
|
startActivity(new Intent(this, SystemSettingsActivity.class));
|
});
|
|
// 顶部comb点击事件
|
findViewById(R.id.tv_menu_title).setOnClickListener(new View.OnClickListener() {
|
long lastClickTime = 0;
|
@Override
|
public void onClick(View v) {
|
long currentTime = System.currentTimeMillis();
|
if (currentTime - lastClickTime < 500) {
|
showPasswordDialog();
|
}
|
lastClickTime = currentTime;
|
}
|
});
|
}
|
|
private void updateDrawerSelection(int selectedId) {
|
int[] menuIds = {R.id.menu_monitor, R.id.menu_devices, R.id.menu_current_device, R.id.menu_settings, R.id.menu_advanced_settings, R.id.menu_system_settings};
|
for (int id : menuIds) {
|
View view = findViewById(id);
|
if (view != null) {
|
boolean isSelected = (id == selectedId);
|
view.setSelected(isSelected);
|
|
// Manually set selected state for children because duplicateParentState="true" might be missing
|
if (view instanceof android.view.ViewGroup) {
|
android.view.ViewGroup group = (android.view.ViewGroup) view;
|
for (int i = 0; i < group.getChildCount(); i++) {
|
group.getChildAt(i).setSelected(isSelected);
|
}
|
}
|
}
|
}
|
}
|
|
public void showSettingsFragment() {
|
tv_center.setText("实时监控");
|
if (tv_scan != null) {
|
tv_scan.setVisibility(View.VISIBLE);
|
tv_scan.setText("连接蓝牙");
|
tv_scan.setOnClickListener(v -> showDeviceListFragment());
|
}
|
if (iv_right != null) iv_right.setVisibility(View.GONE);
|
|
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
|
if (settingsFragment == null) {
|
settingsFragment = new SettingsFragment();
|
}
|
ft.replace(R.id.fragment_container, settingsFragment);
|
ft.commit();
|
}
|
|
public void showDeviceListFragment() {
|
updateDrawerSelection(R.id.menu_devices);
|
tv_center.setText("蓝牙设备");
|
if (tv_scan != null) {
|
tv_scan.setVisibility(View.VISIBLE);
|
tv_scan.setText("SCAN");
|
tv_scan.setOnClickListener(v -> {
|
// 节流逻辑:两秒内只能点一次
|
long currentTime = System.currentTimeMillis();
|
if (currentTime - lastScanClickTime < 2000) {
|
Toast("点击过快,请稍后重试!");
|
return;
|
}
|
lastScanClickTime = currentTime;
|
if (deviceListFragment != null && deviceListFragment.isVisible()&&scanManager!=null&&!scanManager.isScanning()) {
|
deviceListFragment.startScan();
|
}
|
});
|
}
|
if (iv_right != null) iv_right.setVisibility(View.GONE);
|
|
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
|
if (deviceListFragment == null) {
|
deviceListFragment = new DeviceListFragment();
|
}
|
ft.replace(R.id.fragment_container, deviceListFragment);
|
ft.addToBackStack(null);
|
ft.commit();
|
}
|
|
|
public BluetoothScanManager getScanManager() {
|
return scanManager;
|
}
|
|
public BluetoothLeDeviceStore getDeviceStore() {
|
return mDeviceStore;
|
}
|
|
public BluetoothUtils getBluetoothUtils() {
|
return mBluetoothUtils;
|
}
|
|
@Override
|
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
|
}
|
|
@Subscribe(threadMode = ThreadMode.MAIN)
|
public void onEventRefresh(UpdateEvent event) {
|
if (event.getType() == UpdateEvent.Type.CONN_STATU) {
|
int status = 0;
|
if (event.getObj() instanceof Integer) {
|
status = (int) event.getObj();
|
}
|
if (status == android.bluetooth.BluetoothProfile.STATE_CONNECTED) {
|
updateConnectedUI();
|
} else if (status == android.bluetooth.BluetoothProfile.STATE_DISCONNECTED) {
|
if (tv_scan != null) {
|
tv_scan.setText("连接蓝牙");
|
tv_scan.setOnClickListener(v -> showDeviceListFragment());
|
}
|
}
|
}
|
}
|
|
private void updateConnectedUI() {
|
if (tv_scan == null) return;
|
com.blakequ.bluetooth_manager_lib.device.BluetoothLeDevice device = BleGlobalManager.getInstance().getBluetoothLeDevice();
|
String name = (device != null) ? device.getName() : "Unknown";
|
if (name == null) name = "Unknown";
|
if (name.length() > 8) {
|
name = name.substring(0, 8) + "...";
|
}
|
tv_scan.setText(name);
|
tv_scan.setOnClickListener(v -> {
|
new QMUIDialog.MessageDialogBuilder(this)
|
.setTitle("提示")
|
.setMessage("是否断开蓝牙连接?")
|
.addAction("取消", (dialog, index) -> dialog.dismiss())
|
.addAction("确定", (dialog, index) -> {
|
dialog.dismiss();
|
BleGlobalManager.getInstance().disconnect();
|
})
|
.create(com.qmuiteam.qmui.R.style.QMUI_Dialog).show();
|
});
|
}
|
|
public void initTitlebar() {
|
if (iv_right != null) {
|
iv_right.setVisibility(View.VISIBLE);
|
iv_right.setOnClickListener(v -> {
|
androidx.appcompat.widget.PopupMenu popup = new androidx.appcompat.widget.PopupMenu(this, v);
|
popup.getMenu().add(0, 0, 0, "监控页");
|
popup.getMenu().add(0, 1, 1, "测试页");
|
popup.setOnMenuItemClickListener(item -> {
|
if (item.getItemId() == 0) {
|
DeviceListFragment.setNavigationMode(DeviceListFragment.MODE_RETURN_SETTINGS);
|
Toast.makeText(HomeActivity.this, "已切换:连接后返回监控页", Toast.LENGTH_SHORT).show();
|
} else if (item.getItemId() == 1) {
|
DeviceListFragment.setNavigationMode(DeviceListFragment.MODE_GO_TO_TEST);
|
Toast.makeText(HomeActivity.this, "已切换:连接后跳转到测试页", Toast.LENGTH_SHORT).show();
|
}
|
return true;
|
});
|
popup.show();
|
});
|
}
|
}
|
|
@Override
|
public void onBackPressed() {
|
if (drawerLayout != null && drawerLayout.isDrawerOpen(GravityCompat.START)) {
|
drawerLayout.closeDrawer(GravityCompat.START);
|
} else {
|
// Check if we are in DeviceListFragment and can go back
|
Fragment current = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
|
if (current instanceof DeviceListFragment) {
|
super.onBackPressed();
|
} else {
|
ExitApp();
|
}
|
}
|
}
|
|
private long exitTime = 0;
|
|
public void ExitApp() {
|
if ((System.currentTimeMillis() - exitTime) > 2000) {
|
Toast.makeText(this, "再按一次退出程序!", Toast.LENGTH_SHORT).show();
|
exitTime = System.currentTimeMillis();
|
} else {
|
finish();
|
}
|
}
|
private void showPasswordDialog() {
|
final QMUIDialog.EditTextDialogBuilder builder = new QMUIDialog.EditTextDialogBuilder(this);
|
builder.setTitle("请输入密码")
|
.setPlaceholder("请输入密码")
|
.setInputType(android.text.InputType.TYPE_CLASS_NUMBER | android.text.InputType.TYPE_NUMBER_VARIATION_PASSWORD)
|
.addAction("取消", (dialog, index) -> dialog.dismiss())
|
.addAction("确定", (dialog, index) -> {
|
String text = builder.getEditText().getText().toString();
|
if ("0880".equals(text)) {
|
findViewById(R.id.menu_advanced_settings).setVisibility(View.VISIBLE);
|
findViewById(R.id.menu_system_settings).setVisibility(View.VISIBLE);
|
Toast("已显示隐藏设置");
|
dialog.dismiss();
|
} else {
|
Toast("密码错误");
|
}
|
})
|
.create(com.qmuiteam.qmui.R.style.QMUI_Dialog).show();
|
}
|
}
|