Просмотр исходного кода

feat: 恢复扫码导入书源入口 (#2078)

* feat: 恢复扫码导入书源入口

书源管理页从 View 重构为 Compose 时,扫码导入入口未迁移,
导致 QrCodeActivity/QrCodeResult 成为无调用点的死代码。

本次在导入菜单恢复「二维码导入」入口:
- 用 QrCodeResult 拉起扫码,结果走 BookSourceIntent.Import,
  与在线导入共用同一处理链;
- AndroidManifest 补齐 CAMERA 权限声明。

复用 import_by_qr_code 等既有字符串资源,无新增文案。

* fix: CAMERA 权限补充 uses-feature 声明以通过 lint

lint 规则 PermissionImpliesUnsupportedChromeOsHardware 要求声明
CAMERA 权限时必须配套声明 camera 硬件特性(required=false,
因部分 ChromeOS 设备无相机)。
kungunier 2 месяцев назад
Родитель
Сommit
cdb19c6989

+ 2 - 0
app/src/main/AndroidManifest.xml

@@ -22,6 +22,8 @@
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
+    <uses-permission android:name="android.permission.CAMERA" />
+    <uses-feature android:name="android.hardware.camera" android:required="false" />
 
     <application
         android:name=".App"

+ 8 - 0
app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceScreen.kt

@@ -49,6 +49,7 @@ import androidx.compose.ui.unit.dp
 import androidx.lifecycle.compose.collectAsStateWithLifecycle
 import io.legado.app.R
 import io.legado.app.service.BookSourceCheckService
+import io.legado.app.ui.qrcode.QrCodeResult
 import io.legado.app.ui.theme.LegadoTheme
 import io.legado.app.ui.theme.adaptiveContentPadding
 import io.legado.app.ui.widget.components.ActionItem
@@ -219,6 +220,10 @@ fun BookSourceScreen(
                 }
             }
         }
+    val qrCodeImport =
+        rememberLauncherForActivityResult(QrCodeResult()) { result ->
+            result?.let { onIntent(BookSourceIntent.Import(it)) }
+        }
     val exportDocument =
         rememberLauncherForActivityResult(ActivityResultContracts.CreateDocument("application/json")) { uri ->
             uri?.let { onIntent(BookSourceIntent.Export(it, pendingExportIds)) }
@@ -524,6 +529,9 @@ fun BookSourceScreen(
                     )
                 )
                 })
+            RoundDropdownMenuItem(
+                text = stringResource(R.string.import_by_qr_code),
+                onClick = { dismiss(); qrCodeImport.launch(null) })
             RoundDropdownMenuItem(
                 text = stringResource(R.string.import_on_line),
                 onClick = { dismiss(); showOnlineImport = true })