[RK3568][Android11.0]Vold-DiskInfo:区分u盘和硬盘

测试平台

Platform: RK3568
OS: Android 11.0

需求描述

目前系统内部设备没有对硬盘(sata/usb移动硬盘)和u盘做区分,统一显示的为usb存储设备.目前有需求要在显示上有所区分。

解决方案

如何区分移动硬盘和U盘,见Android usb设备的检测及区分(sata硬盘、优盘及移动硬盘).主要就是检测removeable值,为0:硬盘,为1:u盘

解决补丁如下

From 572cf35c07f68c5cb5defe40c536dd9ad1b4648e Mon Sep 17 00:00:00 2001
From: sjf <sjf@t-chip.com.cn>
Date: Sat, 20 Mar 2021 11:31:51 +0800
Subject: [PATCH] =?UTF-8?q?Android->Vold-DiskInfo:=E6=B7=BB=E5=8A=A0?=
 =?UTF-8?q?=E7=A1=AC=E7=9B=98=E7=B1=BB=E5=9E=8B,=E5=B0=86usb=E5=AD=98?=
 =?UTF-8?q?=E5=82=A8=E8=AE=BE=E5=A4=87=E5=8C=BA=E5=88=86u=E7=9B=98?=
 =?UTF-8?q?=E5=92=8C=E7=A1=AC=E7=9B=98(U=E7=9B=98=E6=98=BE=E7=A4=BAusb=20d?=
 =?UTF-8?q?river,usb/sata=E7=A1=AC=E7=9B=98=E6=98=BE=E7=A4=BAHardDisk)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../base/core/java/android/os/storage/DiskInfo.java | 10 ++++++++++
 .../base/core/res/res/values-zh-rCN/strings.xml     |  3 ++-
 .../base/core/res/res/values-zh-rHK/strings.xml     |  3 ++-
 .../base/core/res/res/values-zh-rTW/strings.xml     |  3 ++-
 frameworks/base/core/res/res/values/strings.xml     |  4 +++-
 frameworks/base/core/res/res/values/symbols.xml     |  1 +
 system/vold/VolumeManager.cpp                       | 21 ++++++++++++++++++++-
 system/vold/model/Disk.h                            |  1 +
 8 files changed, 41 insertions(+), 5 deletions(-)

diff --git a/frameworks/base/core/java/android/os/storage/DiskInfo.java b/frameworks/base/core/java/android/os/storage/DiskInfo.java
index b05474e..fb80849 100644
--- a/frameworks/base/core/java/android/os/storage/DiskInfo.java
+++ b/frameworks/base/core/java/android/os/storage/DiskInfo.java
@@ -51,6 +51,7 @@ public class DiskInfo implements Parcelable {
     public static final int FLAG_SD = 1 << 2;
     public static final int FLAG_USB = 1 << 3;
     public static final int FLAG_PCIE = 1 << 6;
+    public static final int FLAG_HARDDISK = 1 << 7;
 
     public final String id;
     @UnsupportedAppUsage
@@ -119,6 +120,8 @@ public class DiskInfo implements Parcelable {
             }
         }else if ((flags & FLAG_PCIE) != 0) {
             return res.getString(com.android.internal.R.string.storage_pcie_drive);
+        } else if ((flags & FLAG_HARDDISK) != 0) {
+            return res.getString(com.android.internal.R.string.storage_harddisk_drive);
         } else {
             return null;
         }
@@ -132,6 +135,8 @@ public class DiskInfo implements Parcelable {
             return res.getString(com.android.internal.R.string.storage_usb_drive);
         } else if (isPcie()) {
             return res.getString(com.android.internal.R.string.storage_pcie_drive);
+        } else if (isHardDisk()) {
+            return res.getString(com.android.internal.R.string.storage_harddisk_drive);
         } else {
             return null;
         }
@@ -162,6 +167,11 @@ public class DiskInfo implements Parcelable {
         return (flags & FLAG_PCIE) != 0;
     }
 
+    @UnsupportedAppUsage
+    public boolean isHardDisk() {
+        return (flags & FLAG_HARDDISK) != 0;
+    }
+
     @Override
     public String toString() {
         final CharArrayWriter writer = new CharArrayWriter();
diff --git a/frameworks/base/core/res/res/values-zh-rCN/strings.xml b/frameworks/base/core/res/res/values-zh-rCN/strings.xml
index d686fc4..aeeda2b 100644
--- a/frameworks/base/core/res/res/values-zh-rCN/strings.xml
+++ b/frameworks/base/core/res/res/values-zh-rCN/strings.xml
@@ -1513,7 +1513,8 @@
     <string name="storage_usb_drive" msgid="448030813201444573">"U 盘"</string>
     <string name="storage_usb_drive_label" msgid="6631740655876540521">"<xliff:g id="MANUFACTURER">%s</xliff:g> U 盘"</string>
     <string name="storage_usb" msgid="2391213347883616886">"USB存储器"</string>
-    <string name="storage_pcie_drive">固态硬盘</string>
+    <string name="storage_pcie_drive">PCIE 固态硬盘</string>
+    <string name="storage_harddisk_drive">硬盘</string>
     <string name="extract_edit_menu_button" msgid="63954536535863040">"修改"</string>
     <string name="data_usage_warning_title" msgid="9034893717078325845">"数据流量警告"</string>
     <string name="data_usage_warning_body" msgid="1669325367188029454">"您已使用 <xliff:g id="APP">%s</xliff:g> 的数据流量"</string>
diff --git a/frameworks/base/core/res/res/values-zh-rHK/strings.xml b/frameworks/base/core/res/res/values-zh-rHK/strings.xml
index 06afaeb..f8369ce 100644
--- a/frameworks/base/core/res/res/values-zh-rHK/strings.xml
+++ b/frameworks/base/core/res/res/values-zh-rHK/strings.xml
@@ -1513,7 +1513,8 @@
     <string name="storage_usb_drive" msgid="448030813201444573">"USB 驅動器"</string>
     <string name="storage_usb_drive_label" msgid="6631740655876540521">"<xliff:g id="MANUFACTURER">%s</xliff:g> USB 驅動器"</string>
     <string name="storage_usb" msgid="2391213347883616886">"USB 儲存裝置"</string>
-    <string name="storage_pcie_drive">固態硬碟</string>
+    <string name="storage_pcie_drive">PCIE固態硬碟</string>
+    <string name="storage_harddisk_drive">硬碟</string>
     <string name="extract_edit_menu_button" msgid="63954536535863040">"編輯"</string>
     <string name="data_usage_warning_title" msgid="9034893717078325845">"數據用量警告"</string>
     <string name="data_usage_warning_body" msgid="1669325367188029454">"您已使用 <xliff:g id="APP">%s</xliff:g> 流動數據"</string>
diff --git a/frameworks/base/core/res/res/values-zh-rTW/strings.xml b/frameworks/base/core/res/res/values-zh-rTW/strings.xml
index 96ffb33..e4fb2bf 100644
--- a/frameworks/base/core/res/res/values-zh-rTW/strings.xml
+++ b/frameworks/base/core/res/res/values-zh-rTW/strings.xml
@@ -1513,7 +1513,8 @@
     <string name="storage_usb_drive" msgid="448030813201444573">"USB 隨身碟"</string>
     <string name="storage_usb_drive_label" msgid="6631740655876540521">"<xliff:g id="MANUFACTURER">%s</xliff:g> USB 隨身碟"</string>
     <string name="storage_usb" msgid="2391213347883616886">"USB 儲存裝置"</string>
-    <string name="storage_pcie_drive">固態硬碟</string>
+    <string name="storage_pcie_drive">PCIE 固態硬碟</string>
+    <string name="storage_harddisk_drive">硬碟</string>
     <string name="extract_edit_menu_button" msgid="63954536535863040">"編輯"</string>
     <string name="data_usage_warning_title" msgid="9034893717078325845">"數據用量警告"</string>
     <string name="data_usage_warning_body" msgid="1669325367188029454">"你的數據用量已達 <xliff:g id="APP">%s</xliff:g>"</string>
diff --git a/frameworks/base/core/res/res/values/strings.xml b/frameworks/base/core/res/res/values/strings.xml
index c67a905..cc60ae3 100644
--- a/frameworks/base/core/res/res/values/strings.xml
+++ b/frameworks/base/core/res/res/values/strings.xml
@@ -4052,7 +4052,9 @@
     <!-- Storage description for USB storage. [CHAR LIMIT=NONE] -->
     <string name="storage_usb">USB storage</string>
 
-    <string name="storage_pcie_drive">PCIE driver</string>
+    <string name="storage_pcie_drive">PCIE storage</string>
+
+    <string name="storage_harddisk_drive">HardDisk storage</string>
 
     <!-- Button text for the edit menu in input method extract mode. [CHAR LIMIT=16] -->
     <string name="extract_edit_menu_button">Edit</string>
diff --git a/frameworks/base/core/res/res/values/symbols.xml b/frameworks/base/core/res/res/values/symbols.xml
index 24d5228..7c85c80 100644
--- a/frameworks/base/core/res/res/values/symbols.xml
+++ b/frameworks/base/core/res/res/values/symbols.xml
@@ -2663,6 +2663,7 @@
   <java-symbol type="string" name="storage_usb_drive_label" />
   <java-symbol type="string" name="storage_usb" />
   <java-symbol type="string" name="storage_pcie_drive" />
+  <java-symbol type="string" name="storage_harddisk_drive" />
 
   <java-symbol type="drawable" name="ic_eject_24dp" />
   <java-symbol type="drawable" name="ic_folder_24dp" />
diff --git a/system/vold/VolumeManager.cpp b/system/vold/VolumeManager.cpp
index d1809b4..fdf728d 100644
--- a/system/vold/VolumeManager.cpp
+++ b/system/vold/VolumeManager.cpp
@@ -36,6 +36,7 @@
 #include <linux/kdev_t.h>
 
 #include <ApexProperties.sysprop.h>
+#include <android-base/file.h>
 #include <android-base/logging.h>
 #include <android-base/parseint.h>
 #include <android-base/properties.h>
@@ -72,6 +73,7 @@
 #include "model/StubVolume.h"
 
 using android::OK;
+using android::base::ReadFileToString;
 using android::base::GetBoolProperty;
 using android::base::StartsWith;
 using android::base::StringAppendF;
@@ -236,12 +238,29 @@ void VolumeManager::handleBlockEvent(NetlinkEvent* evt) {
                     // devices are SD, and that everything else is USB
                     int flags = source->getFlags();
                     LOG(VERBOSE) << "handleBlockEvent with action  kAdd flags" << flags;
+
                     if (major == kMajorBlockMmc || IsVirtioBlkDevice(major)) {
                         flags |= android::vold::Disk::Flags::kSd;
                     }else if (major == kMajorBlockPcie) {
                         flags |= android::vold::Disk::Flags::kPcie;
                     } else {
-                        flags |= android::vold::Disk::Flags::kUsb;
+                        std::string removable_path(StringPrintf("/sys/%s", eventPath.c_str()) + "/removable");
+                        //PLOG(WARNING) << "removable_path:" << removable_path;
+                        std::string removable = "1";//default is usb
+                        if (ReadFileToString(removable_path, &removable)) {
+                            removable = android::base::Trim(removable);
+                            //PLOG(WARNING) << "removable:" << removable;
+                            if(strcmp(removable.c_str(), "0") == 0){
+                                PLOG(WARNING) << "set Flags kHardDisk";
+                                flags |= android::vold::Disk::Flags::kHardDisk;
+                            }else{
+                                PLOG(WARNING) << "set Flags kUsb";
+                                flags |= android::vold::Disk::Flags::kUsb;
+                            }
+                        }else{
+                            PLOG(WARNING) << "Failed to read removable,set Flags KUsb";
+                            flags |= android::vold::Disk::Flags::kUsb;
+                        }
                     }
 
                     auto disk =
diff --git a/system/vold/model/Disk.h b/system/vold/model/Disk.h
index dda4a5d..3e3e29d 100644
--- a/system/vold/model/Disk.h
+++ b/system/vold/model/Disk.h
@@ -57,6 +57,7 @@ class Disk {
          * Android (e.g., ARC++). */
         kStub = 1 << 5,
         kPcie = 1 << 6,
+        kHardDisk = 1 << 7,
     };
 
     const std::string& getId() const { return mId; }
-- 
2.7.4

实现效果如图所示:

在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值