From eedc3a65092faf87d106c601096c815d499a378e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Menu?= Date: Fri, 3 May 2024 13:34:47 +0200 Subject: [PATCH] Change LCP device name strategy --- .idea/.gitignore | 2 ++ CHANGELOG.md | 4 +++ readium/lcp/src/main/AndroidManifest.xml | 8 +---- .../java/org/readium/r2/lcp/LcpService.kt | 8 ++++- .../readium/r2/lcp/service/DeviceService.kt | 35 ++++--------------- 5 files changed, 20 insertions(+), 37 deletions(-) diff --git a/.idea/.gitignore b/.idea/.gitignore index b260967446..7a3581d072 100644 --- a/.idea/.gitignore +++ b/.idea/.gitignore @@ -4,3 +4,5 @@ # GitHub Copilot persisted chat sessions /copilot/chatSessions appInsightsSettings.xml +deploymentTargetSelector.xml +studiobot.xml diff --git a/CHANGELOG.md b/CHANGELOG.md index ed7df82fc8..8367d843ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,10 @@ All notable changes to this project will be documented in this file. Take a look * All the APIs using or returning a `Date` objects are now using a custom `Instant` type. +#### LCP + +* [#493](https://github.com/readium/kotlin-toolkit/discussions/493) The LCP module does not require the Bluetooth permissions anymore to derive the device name. + ### Fixed #### Navigator diff --git a/readium/lcp/src/main/AndroidManifest.xml b/readium/lcp/src/main/AndroidManifest.xml index 05d00db7b9..eb475b4918 100644 --- a/readium/lcp/src/main/AndroidManifest.xml +++ b/readium/lcp/src/main/AndroidManifest.xml @@ -4,10 +4,4 @@ available in the top-level LICENSE file of the project. --> - - - - - - - + diff --git a/readium/lcp/src/main/java/org/readium/r2/lcp/LcpService.kt b/readium/lcp/src/main/java/org/readium/r2/lcp/LcpService.kt index edfc56d65e..51193da434 100644 --- a/readium/lcp/src/main/java/org/readium/r2/lcp/LcpService.kt +++ b/readium/lcp/src/main/java/org/readium/r2/lcp/LcpService.kt @@ -166,10 +166,15 @@ public interface LcpService { /** * LCP service factory. + * + * @param deviceName Device name used when registering a license to an LSD server. + * If not provided, the device name will be generated from the device's manufacturer and + * model. */ public operator fun invoke( context: Context, - assetRetriever: AssetRetriever + assetRetriever: AssetRetriever, + deviceName: String? = null ): LcpService? { if (!LcpClient.isAvailable()) { return null @@ -181,6 +186,7 @@ public interface LcpService { val licenseRepository = LicensesRepository(db) val network = NetworkService() val device = DeviceService( + deviceName = deviceName, repository = deviceRepository, network = network, context = context diff --git a/readium/lcp/src/main/java/org/readium/r2/lcp/service/DeviceService.kt b/readium/lcp/src/main/java/org/readium/r2/lcp/service/DeviceService.kt index 07182b2f29..ad322d3812 100644 --- a/readium/lcp/src/main/java/org/readium/r2/lcp/service/DeviceService.kt +++ b/readium/lcp/src/main/java/org/readium/r2/lcp/service/DeviceService.kt @@ -9,21 +9,16 @@ package org.readium.r2.lcp.service -import android.Manifest -import android.bluetooth.BluetoothManager import android.content.Context import android.content.SharedPreferences -import android.content.pm.PackageManager -import androidx.core.app.ActivityCompat +import android.os.Build import java.io.Serializable -import java.util.* -import kotlin.time.ExperimentalTime +import java.util.UUID import org.readium.r2.lcp.license.model.LicenseDocument import org.readium.r2.lcp.license.model.components.Link -import timber.log.Timber -@OptIn(ExperimentalTime::class) internal class DeviceService( + deviceName: String?, private val repository: DeviceRepository, private val network: NetworkService, val context: Context @@ -40,27 +35,9 @@ internal class DeviceService( preferences.edit().putString("lcp_device_id", deviceId).apply() return deviceId } - val name: String - get() { - val bluetoothManager = - context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager - val bluetoothName = - try { - if (ActivityCompat.checkSelfPermission( - context, - Manifest.permission.BLUETOOTH_CONNECT - ) != PackageManager.PERMISSION_GRANTED - ) { - null - } else { - bluetoothManager.adapter.name - } - } catch (e: Exception) { - Timber.e(e) - null - } - return bluetoothName ?: "Android" - } + + val name: String = + deviceName ?: "${Build.MANUFACTURER} ${Build.MODEL}" val asQueryParameters: URLParameters get() = mapOf("id" to id, "name" to name)