zhuguifei
2026-01-14 b7ee99a71e88a08a09fe9daada6675a175d09be1
部分优化
已修改6个文件
已添加1个文件
256 ■■■■■ 文件已修改
app/src/main/java/com/shlb/comb/activity/HomeActivity.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/shlb/comb/activity/SystemSettingsActivity.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/shlb/comb/adapter/HomeDeviceListAdapter.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/shlb/comb/fragment/DeviceListFragment.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/bg_circle.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_device_list.xml 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/home_list_bluetooth_item.xml 159 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/shlb/comb/activity/HomeActivity.java
@@ -36,6 +36,7 @@
    private DrawerLayout drawerLayout;
    protected TextView tv_scan;
    private long lastScanClickTime = 0; // ç”¨äºŽèŠ‚æµ
    private boolean isSessionAdmin = false; // å½“前会话是否已验证管理员密码
    // Bluetooth Variables
    private BluetoothScanManager scanManager;
@@ -177,7 +178,6 @@
        // é«˜çº§è®¾ç½®
        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));
@@ -185,11 +185,12 @@
        // ç³»ç»Ÿè®¾ç½®
        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));
        });
        updateMenuVisibility();
        // é¡¶éƒ¨comb点击事件
        findViewById(R.id.tv_menu_title).setOnClickListener(new View.OnClickListener() {
@@ -384,8 +385,8 @@
                .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);
                        isSessionAdmin = true;
                        updateMenuVisibility();
                        Toast("已显示隐藏设置");
                        dialog.dismiss();
                    } else {
@@ -394,4 +395,21 @@
                })
                .create(com.qmuiteam.qmui.R.style.QMUI_Dialog).show();
    }
    @Override
    protected void onResume() {
        super.onResume();
        updateMenuVisibility();
    }
    private void updateMenuVisibility() {
        boolean keepAdmin = com.blankj.utilcode.util.SPUtils.getInstance().getBoolean("keep_admin_mode", false);
        int visibility = (keepAdmin || isSessionAdmin) ? View.VISIBLE : View.GONE;
        View menuAdvanced = findViewById(R.id.menu_advanced_settings);
        View menuSystem = findViewById(R.id.menu_system_settings);
        if (menuAdvanced != null) menuAdvanced.setVisibility(visibility);
        if (menuSystem != null) menuSystem.setVisibility(visibility);
    }
}
app/src/main/java/com/shlb/comb/activity/SystemSettingsActivity.java
@@ -72,10 +72,19 @@
//            Toast("测试页面: " + (isChecked ? "开启" : "关闭"));
//        });
        QMUICommonListItemView itemKeepAdmin = mGroupListView.createItemView("保持管理员模式");
        itemKeepAdmin.setAccessoryType(QMUICommonListItemView.ACCESSORY_TYPE_SWITCH);
        boolean isKeepAdmin = com.blankj.utilcode.util.SPUtils.getInstance().getBoolean("keep_admin_mode", false);
        itemKeepAdmin.getSwitch().setChecked(isKeepAdmin);
        itemKeepAdmin.getSwitch().setOnCheckedChangeListener((buttonView, isChecked) -> {
            com.blankj.utilcode.util.SPUtils.getInstance().put("keep_admin_mode", isChecked);
            Toast("管理员模式持久化: " + (isChecked ? "开启" : "关闭"));
        });
        QMUIGroupListView.newSection(this)
                .setTitle("设置")
                .addItemView(itemCmdLog, null)
//                .addItemView(itemTestPage, null)
                .addItemView(itemKeepAdmin, null)
                .addTo(mGroupListView);
    }
app/src/main/java/com/shlb/comb/adapter/HomeDeviceListAdapter.java
@@ -40,7 +40,7 @@
        final ViewHolder viewHolder;
        // General ListView optimization code.
        if (view == null) {
            view = mInflater.inflate(R.layout.home_list_bluetooth_item, null);
            view = mInflater.inflate(R.layout.home_list_bluetooth_item, parent, false);
            viewHolder = new ViewHolder();
            viewHolder.deviceAddress = (TextView) view.findViewById(R.id.device_address);
            viewHolder.deviceName = (TextView) view.findViewById(R.id.device_name);
app/src/main/java/com/shlb/comb/fragment/DeviceListFragment.java
@@ -57,6 +57,7 @@
    private QMUIEmptyView mEmptyView;
    private ListView homeList;
    private android.widget.ProgressBar pbScanning;
    private BluetoothScanManager scanManager;
    private BluetoothLeDeviceStore mDeviceStore;
    private BluetoothUtils mBluetoothUtils;
@@ -87,6 +88,7 @@
        View view = inflater.inflate(R.layout.fragment_device_list, container, false);
        mEmptyView = view.findViewById(R.id.emptyView);
        homeList = view.findViewById(R.id.homeList);
        pbScanning = view.findViewById(R.id.pb_scanning);
        return view;
    }
@@ -155,6 +157,7 @@
        scanManager.setScanOverListener(new ScanOverListener() {
            @Override
            public void onScanOver() {
                if (pbScanning != null) pbScanning.setVisibility(View.GONE);
            }
        });
@@ -162,6 +165,7 @@
            @Override
            public void onScanFailed(final int errorCode) {
                super.onScanFailed(errorCode);
                if (pbScanning != null) pbScanning.setVisibility(View.GONE);
                Toast.makeText(getContext(), "扫描失败:" + errorCode, Toast.LENGTH_SHORT).show();
            }
@@ -207,6 +211,7 @@
                mDeviceStore.clear();
                EventBus.getDefault().post(new UpdateEvent(UpdateEvent.Type.SCAN_UPDATE));
               ((BaseActivity) getActivity()).Toast("开始扫描...");
                if (pbScanning != null) pbScanning.setVisibility(View.VISIBLE);
                scanManager.startScanNow();
            }
        }
app/src/main/res/drawable/bg_circle.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="#FFFFFF" />
</shape>
app/src/main/res/layout/fragment_device_list.xml
@@ -1,8 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#F5F6FA"
    android:orientation="vertical">
    <!-- Title Header -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/white"
        android:orientation="horizontal"
        android:gravity="center_vertical"
        android:padding="16dp">
        <View
            android:layout_width="4dp"
            android:layout_height="16dp"
            android:background="@color/base_color"
            android:layout_marginEnd="8dp"/>
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="附近设备"
            android:textSize="14sp"
            android:textStyle="bold"
            android:textColor="#999999" />
        <ProgressBar
            android:id="@+id/pb_scanning"
            android:layout_width="16dp"
            android:layout_height="16dp"
            android:layout_marginEnd="8dp"
            android:visibility="gone"
            android:indeterminateTint="@color/base_color"
            style="?android:attr/progressBarStyleSmall" />
    </LinearLayout>
    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#F0F2F5"/>
    <com.qmuiteam.qmui.widget.QMUIEmptyView
        android:id="@+id/emptyView"
@@ -13,8 +53,10 @@
        android:id="@+id/homeList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:divider="@color/gray_line"
        android:dividerHeight="1dp"
        android:divider="@null"
        android:dividerHeight="0dp"
        android:clipToPadding="false"
        android:scrollbars="none"
        android:visibility="gone" />
</LinearLayout>
app/src/main/res/layout/home_list_bluetooth_item.xml
@@ -1,118 +1,125 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/white"
    android:orientation="vertical">
    <!-- Main Content Area -->
    <LinearLayout
        android:id="@+id/ll_main_content"
        android:layout_width="match_parent"
        android:layout_height="@dimen/dimension_70"
        android:orientation="horizontal">
        <RelativeLayout
            android:layout_width="@dimen/dimension_80"
            android:layout_height="@dimen/dimension_70">
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:orientation="vertical">
        android:background="?attr/selectableItemBackground"
        android:gravity="center_vertical"
        android:minHeight="80dp"
        android:orientation="horizontal"
        android:paddingLeft="16dp"
        android:paddingRight="16dp"
        android:paddingTop="12dp"
        android:paddingBottom="12dp">
        <!-- Device Status Icon (RSSSI or Icon) -->
        <RelativeLayout
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:background="@drawable/bg_circle"
            android:backgroundTint="#F0F2F5"
            android:layout_marginEnd="16dp">
                <ImageView
                    android:id="@+id/device_icon"
                    android:layout_width="30dp"
                    android:layout_height="30dp"
                    android:src="@mipmap/ic_sanjiao" />
                <TextView
                    android:id="@+id/rssi"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_marginTop="@dimen/dimension_5"
                    android:text="-dBm"
                    android:textColor="@color/qmui_config_color_gray_6"
                    android:textSize="@dimen/dimension_10" />
            </LinearLayout>
                android:layout_width="24dp"
                android:layout_height="24dp"
                android:layout_centerInParent="true"
                android:src="@mipmap/ic_sanjiao"
                app:tint="@color/base_color" />
        </RelativeLayout>
        <RelativeLayout
            android:layout_width="0dp"
            android:layout_height="@dimen/dimension_70"
            android:layout_weight="1">
        <!-- Device Info -->
            <LinearLayout
                android:layout_width="wrap_content"
            android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
            android:layout_weight="1"
                android:orientation="vertical">
                <TextView
                    android:id="@+id/device_name"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:maxLines="1" />
                android:text="Unknown Device"
                android:textColor="#333333"
                android:textSize="15sp"
                android:textStyle="bold"
                android:maxLines="1"
                android:ellipsize="end" />
                <TextView
                    android:id="@+id/device_address"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="@dimen/dimension_5"
                    android:maxLines="1"
                    android:textColor="@color/qmui_config_color_gray_6"
                    android:textSize="@dimen/dimension_10" />
                android:layout_marginTop="4dp"
                android:text="00:00:00:00:00:00"
                android:textColor="#999999"
                android:textSize="12sp"
                android:fontFamily="monospace" />
            <TextView
                android:id="@+id/rssi"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="4dp"
                android:text="-65dBm"
                android:textColor="@color/base_color"
                android:textSize="11sp"
                android:textStyle="italic" />
            </LinearLayout>
        </RelativeLayout>
        <!-- Actions -->
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:orientation="horizontal">
        <RelativeLayout
            android:layout_width="130dp"
            android:layout_height="@dimen/dimension_70">
            <Button
            <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
                android:id="@+id/conn_btn"
                android:layout_width="@dimen/dimension_80"
                android:layout_height="40dp"
                android:layout_centerVertical="true"
                android:layout_marginRight="@dimen/dimension_5"
                android:layout_toLeftOf="@id/iv_down"
                android:focusable="false"
                android:text="CONNECT"
                android:textSize="@dimen/dimension_10" />
                android:layout_width="80dp"
                android:layout_height="32dp"
                android:text="连接"
                android:textColor="@color/white"
                android:textSize="12sp"
                app:qmui_backgroundColor="@color/base_color"
                app:qmui_radius="16dp" />
            <ImageView
                android:id="@+id/iv_down"
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:layout_marginRight="20dp"
                android:src="@mipmap/ic_down" />
        </RelativeLayout>
                android:layout_marginLeft="12dp"
                android:src="@mipmap/ic_down"
                app:tint="#CCCCCC" />
        </LinearLayout>
    </LinearLayout>
    <!-- More Info Area (Expandable) -->
    <LinearLayout
        android:id="@+id/ll_more_info"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:paddingBottom="10dp"
        android:paddingLeft="16dp"
        android:paddingRight="16dp"
        android:paddingBottom="16dp"
        android:visibility="gone">
        <TextView
            android:id="@+id/tv_device_type"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/qmui_config_color_gray_6"
            android:textColor="#666666"
            android:textSize="12sp"
            android:layout_marginTop="2dp"/>
@@ -120,7 +127,7 @@
            android:id="@+id/tv_adv_type"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/qmui_config_color_gray_6"
            android:textColor="#666666"
            android:textSize="12sp"
            android:layout_marginTop="2dp"/>
@@ -128,7 +135,7 @@
            android:id="@+id/tv_flags"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/qmui_config_color_gray_6"
            android:textColor="#666666"
            android:textSize="12sp"
            android:layout_marginTop="2dp"/>
@@ -136,7 +143,7 @@
            android:id="@+id/tv_local_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/qmui_config_color_gray_6"
            android:textColor="#666666"
            android:textSize="12sp"
            android:layout_marginTop="2dp"/>
@@ -144,33 +151,41 @@
            android:id="@+id/tv_tx_power"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/qmui_config_color_gray_6"
            android:textColor="#666666"
            android:textSize="12sp"
            android:layout_marginTop="2dp"/>
        <TextView
            android:id="@+id/tv_service_uuids"
            android:layout_width="wrap_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="@color/qmui_config_color_gray_6"
            android:textColor="#666666"
            android:textSize="12sp"
            android:layout_marginTop="2dp"/>
        <TextView
            android:id="@+id/tv_service_data"
            android:layout_width="wrap_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="@color/qmui_config_color_gray_6"
            android:textColor="#666666"
            android:textSize="12sp"
            android:layout_marginTop="2dp"/>
        <TextView
            android:id="@+id/tv_manufacturer_data"
            android:layout_width="wrap_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="@color/qmui_config_color_gray_6"
            android:textColor="#666666"
            android:textSize="12sp"
            android:layout_marginTop="2dp"/>
    </LinearLayout>
    <!-- Bottom Divider -->
    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:background="#F0F2F5" />
</LinearLayout>