From b96d6ef4db6335fdf14c280617498cb488b6e650 Mon Sep 17 00:00:00 2001 From: darken Date: Fri, 5 Sep 2025 12:20:03 +0200 Subject: [PATCH] Improve device profile creation UI and fix navigation bar overlaps - Fix navigation bar overlap issues in profile creation and list screens - Add proper edge-to-edge handling with dynamic padding for navigation bars - Improve paired device selection with "None" option and clear functionality - Add localized error messages for key validation with proper placeholders - Centralize default signal quality value in DeviceProfile companion object - Add unsaved changes detection and confirmation dialogs - Enhance drag handle touch target size with FrameLayout wrapper - Restore device address in profile editing and improve change tracking - Localize all user-facing strings following project guidelines --- CLAUDE.md | 17 +- .../eu/darken/capod/common/BuildConfigWrap.kt | 5 +- .../common/navigation/NavArgsExtensions.kt | 20 --- .../ui/overview/cards/pods/DualPodsCardVH.kt | 5 +- .../overview/cards/pods/SinglePodsCardVH.kt | 13 +- .../settings/general/AirPodKeyInputDialog.kt | 71 -------- .../general/DeviceSelectionDialogFactory.kt | 33 ---- .../settings/general/GeneralSettingsEvents.kt | 5 - .../general/GeneralSettingsFragment.kt | 62 ------- .../general/GeneralSettingsFragmentVM.kt | 37 ---- .../general/ModelSelectionDialogFactory.kt | 36 ---- .../capod/pods/core/apple/AppleFactory.kt | 36 ++-- .../capod/pods/core/apple/ApplePodsFactory.kt | 2 + .../pods/core/apple/airpods/AirPodsGen1.kt | 2 + .../pods/core/apple/airpods/AirPodsGen2.kt | 2 + .../pods/core/apple/airpods/AirPodsGen3.kt | 2 + .../pods/core/apple/airpods/AirPodsGen4.kt | 2 + .../pods/core/apple/airpods/AirPodsGen4Anc.kt | 2 +- .../pods/core/apple/airpods/AirPodsMax.kt | 2 +- .../pods/core/apple/airpods/AirPodsMaxUsbc.kt | 2 +- .../pods/core/apple/airpods/AirPodsPro.kt | 2 +- .../pods/core/apple/airpods/AirPodsPro2.kt | 2 +- .../core/apple/airpods/AirPodsPro2Usbc.kt | 2 +- .../pods/core/apple/beats/BeatsFitPro.kt | 2 +- .../capod/pods/core/apple/beats/BeatsFlex.kt | 2 +- .../capod/pods/core/apple/beats/BeatsSolo3.kt | 2 +- .../pods/core/apple/beats/BeatsStudio3.kt | 2 +- .../capod/pods/core/apple/beats/BeatsX.kt | 2 +- .../pods/core/apple/beats/PowerBeats3.kt | 2 +- .../pods/core/apple/beats/PowerBeats4.kt | 2 +- .../pods/core/apple/beats/PowerBeatsPro.kt | 2 +- .../pods/core/apple/beats/PowerBeatsPro2.kt | 2 +- .../pods/core/apple/misc/FakeAirPodsGen1.kt | 2 +- .../pods/core/apple/misc/FakeAirPodsGen2.kt | 2 +- .../pods/core/apple/misc/FakeAirPodsGen3.kt | 2 +- .../pods/core/apple/misc/FakeAirPodsPro.kt | 2 +- .../pods/core/apple/misc/FakeAirPodsPro2.kt | 2 +- .../core/apple/misc/UnknownAppleDevice.kt | 1 + .../capod/profiles/core/AppleDeviceProfile.kt | 2 +- .../capod/profiles/core/DeviceProfile.kt | 9 +- .../profiles/core/DeviceProfilesContainer.kt | 9 + .../capod/profiles/core/DeviceProfilesRepo.kt | 23 +-- .../profiles/core/DeviceProfilesSettings.kt | 6 +- .../core/{DeviceProfileId.kt => ProfileId.kt} | 0 .../profiles/ui/DeviceManagerFragment.kt | 40 ++--- .../capod/profiles/ui/DeviceProfileVH.kt | 8 +- .../DeviceProfileCreationFragment.kt | 142 ++++++++++++--- .../DeviceProfileCreationFragmentVM.kt | 128 +++++++++++++- .../reaction/ui/ReactionSettingsFragment.kt | 12 -- .../main/res/layout/device_manager_item.xml | 27 ++- .../layout/device_manager_noprofiles_item.xml | 6 +- .../device_profile_creation_fragment.xml | 161 +++++++++++------- .../res/layout/overview_pods_dual_item.xml | 20 ++- .../res/layout/overview_pods_single_item.xml | 36 +++- .../res/menu/device_profile_creation_menu.xml | 4 +- app/src/main/res/navigation/nav_graph.xml | 2 +- app/src/main/res/values-af-rZA/strings.xml | 12 +- app/src/main/res/values-am/strings.xml | 12 +- app/src/main/res/values-ar/strings.xml | 12 +- app/src/main/res/values-az/strings.xml | 12 +- app/src/main/res/values-be/strings.xml | 12 +- app/src/main/res/values-bg/strings.xml | 12 +- app/src/main/res/values-bn-rBD/strings.xml | 12 +- app/src/main/res/values-ca/strings.xml | 12 +- app/src/main/res/values-cs/strings.xml | 12 +- app/src/main/res/values-da/strings.xml | 12 +- app/src/main/res/values-de/strings.xml | 12 +- app/src/main/res/values-el/strings.xml | 12 +- app/src/main/res/values-es-rAR/strings.xml | 12 +- app/src/main/res/values-es-rMX/strings.xml | 12 +- app/src/main/res/values-es/strings.xml | 12 +- app/src/main/res/values-et-rEE/strings.xml | 12 +- app/src/main/res/values-eu-rES/strings.xml | 12 +- app/src/main/res/values-fa/strings.xml | 12 +- app/src/main/res/values-fi/strings.xml | 12 +- app/src/main/res/values-fil/strings.xml | 12 +- app/src/main/res/values-fr/strings.xml | 12 +- app/src/main/res/values-gl-rES/strings.xml | 12 +- app/src/main/res/values-hi-rIN/strings.xml | 12 +- app/src/main/res/values-hr/strings.xml | 12 +- app/src/main/res/values-hu/strings.xml | 12 +- app/src/main/res/values-hy-rAM/strings.xml | 12 +- app/src/main/res/values-in/strings.xml | 12 +- app/src/main/res/values-is/strings.xml | 12 +- app/src/main/res/values-it/strings.xml | 12 +- app/src/main/res/values-iw/strings.xml | 12 +- app/src/main/res/values-ja/strings.xml | 12 +- app/src/main/res/values-ka-rGE/strings.xml | 12 +- app/src/main/res/values-km-rKH/strings.xml | 12 +- app/src/main/res/values-kmr-rTR/strings.xml | 12 +- app/src/main/res/values-kn-rIN/strings.xml | 12 +- app/src/main/res/values-ko/strings.xml | 12 +- app/src/main/res/values-ky-rKG/strings.xml | 12 +- app/src/main/res/values-lo-rLA/strings.xml | 12 +- app/src/main/res/values-lt/strings.xml | 12 +- app/src/main/res/values-lv/strings.xml | 12 +- app/src/main/res/values-mk-rMK/strings.xml | 12 +- app/src/main/res/values-ml-rIN/strings.xml | 12 +- app/src/main/res/values-mn-rMN/strings.xml | 12 +- app/src/main/res/values-mr-rIN/strings.xml | 12 +- app/src/main/res/values-ms/strings.xml | 12 +- app/src/main/res/values-my-rMM/strings.xml | 12 +- app/src/main/res/values-nb/strings.xml | 12 +- app/src/main/res/values-ne-rNP/strings.xml | 12 +- app/src/main/res/values-nl/strings.xml | 12 +- app/src/main/res/values-pl/strings.xml | 12 +- app/src/main/res/values-pt-rBR/strings.xml | 12 +- app/src/main/res/values-pt/strings.xml | 12 +- app/src/main/res/values-rm/strings.xml | 12 +- app/src/main/res/values-ro/strings.xml | 12 +- app/src/main/res/values-ru/strings.xml | 12 +- app/src/main/res/values-sc-rIT/strings.xml | 12 +- app/src/main/res/values-si-rLK/strings.xml | 12 +- app/src/main/res/values-sk/strings.xml | 12 +- app/src/main/res/values-sl/strings.xml | 12 +- app/src/main/res/values-sq-rAL/strings.xml | 12 +- app/src/main/res/values-sr/strings.xml | 12 +- app/src/main/res/values-sv/strings.xml | 12 +- app/src/main/res/values-sw/strings.xml | 12 +- app/src/main/res/values-ta-rIN/strings.xml | 12 +- app/src/main/res/values-te-rIN/strings.xml | 12 +- app/src/main/res/values-th/strings.xml | 12 +- app/src/main/res/values-tr/strings.xml | 12 +- app/src/main/res/values-uk/strings.xml | 12 +- app/src/main/res/values-ur-rIN/strings.xml | 12 +- app/src/main/res/values-uz/strings.xml | 12 +- app/src/main/res/values-vi/strings.xml | 12 +- app/src/main/res/values-zh-rCN/strings.xml | 12 +- app/src/main/res/values-zh-rHK/strings.xml | 12 +- app/src/main/res/values-zh-rTW/strings.xml | 12 +- app/src/main/res/values-zu/strings.xml | 12 +- app/src/main/res/values/strings.xml | 82 ++++----- app/src/main/res/xml/preferences_general.xml | 36 ---- 133 files changed, 1037 insertions(+), 1007 deletions(-) delete mode 100644 app/src/main/java/eu/darken/capod/common/navigation/NavArgsExtensions.kt delete mode 100644 app/src/main/java/eu/darken/capod/main/ui/settings/general/AirPodKeyInputDialog.kt delete mode 100644 app/src/main/java/eu/darken/capod/main/ui/settings/general/DeviceSelectionDialogFactory.kt delete mode 100644 app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsEvents.kt delete mode 100644 app/src/main/java/eu/darken/capod/main/ui/settings/general/ModelSelectionDialogFactory.kt create mode 100644 app/src/main/java/eu/darken/capod/profiles/core/DeviceProfilesContainer.kt rename app/src/main/java/eu/darken/capod/profiles/core/{DeviceProfileId.kt => ProfileId.kt} (100%) rename app/src/main/java/eu/darken/capod/profiles/ui/{ => creation}/DeviceProfileCreationFragment.kt (58%) rename app/src/main/java/eu/darken/capod/profiles/ui/{ => creation}/DeviceProfileCreationFragmentVM.kt (53%) diff --git a/CLAUDE.md b/CLAUDE.md index fa8453c0..49711898 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -140,4 +140,19 @@ The app uses Android's Bluetooth LE APIs to scan for Apple device advertisements ### Multi-Platform Considerations Code shared between phone and Wear OS apps is placed in `app-common`. When modifying shared functionality, ensure -compatibility across both platforms. \ No newline at end of file +compatibility across both platforms. + +### Localization Guidelines + +When adding new user-facing strings: + +- **Always use string resources**: Never hardcode user-facing text in layouts or code +- **Follow naming conventions**: Use descriptive, hierarchical naming (e.g., `profiles_name_default`, `settings_bluetooth_enabled`) +- **Provide context**: String names should indicate usage and location +- **Consider pluralization**: Use Android plural resources (``) when quantities vary + +Examples of correct string naming: +- `profiles_create_title` (screen title) +- `profiles_name_label` (form field label) +- `profiles_delete_confirmation` (dialog message) +- `error_network_unavailable` (error message) \ No newline at end of file diff --git a/app/src/main/java/eu/darken/capod/common/BuildConfigWrap.kt b/app/src/main/java/eu/darken/capod/common/BuildConfigWrap.kt index 3966bbed..a550917e 100644 --- a/app/src/main/java/eu/darken/capod/common/BuildConfigWrap.kt +++ b/app/src/main/java/eu/darken/capod/common/BuildConfigWrap.kt @@ -38,9 +38,8 @@ object BuildConfigWrap { val VERSION_CODE: Long = BuildConfig.VERSION_CODE.toLong() val VERSION_NAME: String = BuildConfig.VERSION_NAME - val GIT_SHA: String = "unknown" // TODO: Re-add GITSHA to build configuration - val VERSION_DESCRIPTION_LONG: String = "v$VERSION_NAME ($VERSION_CODE) [$GIT_SHA] ${FLAVOR}_$BUILD_TYPE" - val VERSION_DESCRIPTION_SHORT: String = "v$VERSION_NAME [$GIT_SHA] $FLAVOR" + val VERSION_DESCRIPTION_LONG: String = "v$VERSION_NAME ($VERSION_CODE) ${FLAVOR}_$BUILD_TYPE" + val VERSION_DESCRIPTION_SHORT: String = "v$VERSION_NAME $FLAVOR" val VERSION_DESCRIPTION_TINY: String = "v$VERSION_NAME" } diff --git a/app/src/main/java/eu/darken/capod/common/navigation/NavArgsExtensions.kt b/app/src/main/java/eu/darken/capod/common/navigation/NavArgsExtensions.kt deleted file mode 100644 index 694548e6..00000000 --- a/app/src/main/java/eu/darken/capod/common/navigation/NavArgsExtensions.kt +++ /dev/null @@ -1,20 +0,0 @@ -package eu.darken.capod.common.navigation - -import android.os.Bundle -import android.os.Parcelable -import androidx.lifecycle.SavedStateHandle -import androidx.navigation.NavArgs -import androidx.navigation.NavArgsLazy -import java.io.Serializable - -// TODO Remove with "androidx.navigation:navigation-safe-args-gradle-plugin:2.4.0-alpha/stable" -inline fun SavedStateHandle.navArgs() = NavArgsLazy(Args::class) { - Bundle().apply { - keys().forEach { - when (val value = get(it)) { - is Serializable -> putSerializable(it, value) - is Parcelable -> putParcelable(it, value) - } - } - } -} \ No newline at end of file diff --git a/app/src/main/java/eu/darken/capod/main/ui/overview/cards/pods/DualPodsCardVH.kt b/app/src/main/java/eu/darken/capod/main/ui/overview/cards/pods/DualPodsCardVH.kt index 394dc4ba..7fa75d16 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/overview/cards/pods/DualPodsCardVH.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/overview/cards/pods/DualPodsCardVH.kt @@ -36,7 +36,10 @@ class DualPodsCardVH(parent: ViewGroup) : override val onBindData = binding(payload = true) { item: Item -> val device = item.device - name.apply { + + name.text = device.meta.profile?.label ?: "?" + + deviceType.apply { val sb = StringBuilder(device.getLabel(context)) if (device is HasPodStyle && item.showDebug) { val style = device.podStyle diff --git a/app/src/main/java/eu/darken/capod/main/ui/overview/cards/pods/SinglePodsCardVH.kt b/app/src/main/java/eu/darken/capod/main/ui/overview/cards/pods/SinglePodsCardVH.kt index 99ea3b97..dacf180f 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/overview/cards/pods/SinglePodsCardVH.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/overview/cards/pods/SinglePodsCardVH.kt @@ -11,9 +11,11 @@ import eu.darken.capod.pods.core.HasChargeDetection import eu.darken.capod.pods.core.HasEarDetection import eu.darken.capod.pods.core.SinglePodDevice import eu.darken.capod.pods.core.apple.ApplePods +import eu.darken.capod.pods.core.firstSeenFormatted import eu.darken.capod.pods.core.getBatteryDrawable import eu.darken.capod.pods.core.getBatteryLevelHeadset import eu.darken.capod.pods.core.lastSeenFormatted +import java.time.Duration import java.time.Instant class SinglePodsCardVH(parent: ViewGroup) : @@ -27,13 +29,16 @@ class SinglePodsCardVH(parent: ViewGroup) : override val onBindData = binding(payload = true) { item: Item -> val device = item.device - name.apply { - text = device.getLabel(context) - } + name.text = device.meta.profile?.label ?: "?" + deviceType.text = device.getLabel(context) deviceIcon.setImageResource(device.iconRes) - lastSeen.text = device.lastSeenFormatted(item.now) + lastSeen.text = + context.getString(R.string.last_seen_x, device.lastSeenFormatted(item.now)) + firstSeen.text = + context.getString(R.string.first_seen_x, device.firstSeenFormatted(item.now)) + firstSeen.isGone = Duration.between(device.seenFirstAt, device.seenLastAt).toMinutes() < 1 reception.text = item.getReceptionText() diff --git a/app/src/main/java/eu/darken/capod/main/ui/settings/general/AirPodKeyInputDialog.kt b/app/src/main/java/eu/darken/capod/main/ui/settings/general/AirPodKeyInputDialog.kt deleted file mode 100644 index 3dc036d5..00000000 --- a/app/src/main/java/eu/darken/capod/main/ui/settings/general/AirPodKeyInputDialog.kt +++ /dev/null @@ -1,71 +0,0 @@ -package eu.darken.capod.main.ui.settings.general - -import android.content.Context -import androidx.appcompat.app.AlertDialog -import androidx.core.widget.doOnTextChanged -import com.google.android.material.dialog.MaterialAlertDialogBuilder -import com.google.android.material.textfield.TextInputEditText -import com.google.android.material.textfield.TextInputLayout -import eu.darken.capod.R -import eu.darken.capod.common.UIConverter - -class AirPodKeyInputDialog(private val context: Context) { - fun create( - mode: Mode, - current: String, - onKey: (String) -> Unit, - onGuide: () -> Unit, - ): AlertDialog { - val inputEditText = TextInputEditText(context).apply { - setText(current) - } - val inputLayout = - TextInputLayout(context, null, com.google.android.material.R.attr.textInputOutlinedStyle).apply { - hint = context.getString( - R.string.general_example_label, - "FE-D0-1C-54-11-81-BC-BC-87-D2-C4-3F-31-64-5F-EE" - ) - addView(inputEditText) - val padding = UIConverter.convertDpToPixels(context, 24f) - setPadding(padding, padding / 2, padding, 0) - } - - val dialog = MaterialAlertDialogBuilder(context).apply { - setView(inputLayout) - when (mode) { - Mode.IRK -> { - setTitle(R.string.settings_maindevice_identitykey_label) - setMessage(R.string.settings_maindevice_identitykey_explanation) - } - - Mode.ENC -> { - setTitle(R.string.settings_maindevice_encryptionkey_label) - setMessage(R.string.settings_maindevice_encryptionkey_explanation) - } - } - - setPositiveButton(R.string.general_save_action) { _, _ -> onKey(inputEditText.text.toString()) } - setNegativeButton(R.string.general_cancel_action) { _, _ -> } - setNeutralButton(R.string.general_guide_action) { _, _ -> onGuide() } - }.create() - - dialog.setOnShowListener { - val saveButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE) - - val keyRegex = Regex("^([0-9A-F]{2}-){15}[0-9A-F]{2}$") - fun validateInput() { - val isValid = inputEditText.text.toString().matches(keyRegex) - saveButton.isEnabled = isValid || inputEditText.length() == 0 - } - inputEditText.doOnTextChanged { _, _, _, _ -> validateInput() } - validateInput() - } - return dialog - } - - enum class Mode { - IRK, - ENC, - ; - } -} \ No newline at end of file diff --git a/app/src/main/java/eu/darken/capod/main/ui/settings/general/DeviceSelectionDialogFactory.kt b/app/src/main/java/eu/darken/capod/main/ui/settings/general/DeviceSelectionDialogFactory.kt deleted file mode 100644 index bff142c5..00000000 --- a/app/src/main/java/eu/darken/capod/main/ui/settings/general/DeviceSelectionDialogFactory.kt +++ /dev/null @@ -1,33 +0,0 @@ -package eu.darken.capod.main.ui.settings.general - -import android.content.Context -import androidx.appcompat.app.AlertDialog -import com.google.android.material.dialog.MaterialAlertDialogBuilder -import eu.darken.capod.R -import eu.darken.capod.common.bluetooth.BluetoothDevice2 - - -class DeviceSelectionDialogFactory(private val context: Context) { - - fun create( - devices: List, - current: BluetoothDevice2?, - callback: (BluetoothDevice2?) -> Unit - ): AlertDialog = MaterialAlertDialogBuilder(context).apply { - setTitle(R.string.settings_maindevice_address_label) - - val pairing = devices - .map { (it.name ?: "?") to it.address } - .plus(context.getString(R.string.settings_maindevice_address_none) to "") - - setSingleChoiceItems( - pairing.map { it.first }.toTypedArray(), - pairing.indexOfFirst { it.second == current?.address } - ) { dialog, which -> - val selected = devices.firstOrNull { it.address == pairing[which].second } - callback(selected) - dialog.dismiss() - } - - }.create() -} \ No newline at end of file diff --git a/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsEvents.kt b/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsEvents.kt deleted file mode 100644 index a98ac589..00000000 --- a/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsEvents.kt +++ /dev/null @@ -1,5 +0,0 @@ -package eu.darken.capod.main.ui.settings.general - -sealed class GeneralSettingsEvents { - object SelectDeviceAddressEvent : GeneralSettingsEvents() -} diff --git a/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsFragment.kt b/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsFragment.kt index 40c9b383..b28deb01 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsFragment.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsFragment.kt @@ -37,10 +37,6 @@ class GeneralSettingsFragment : PreferenceFragment3() { private val monitorModePref by lazy { findPreference(generalSettings.monitorMode.key)!! } private val scanModePref by lazy { findPreference(generalSettings.scannerMode.key)!! } - private val mainDeviceAddressPref by lazy { findPreference(generalSettings.mainDeviceAddress.key)!! } - private val mainDeviceModelPref by lazy { findPreference(generalSettings.mainDeviceModel.key)!! } - private val mainDeviceIdentityKeyPref by lazy { findPreference(generalSettings.mainDeviceIdentityKey.key)!! } - private val mainDeviceEncryptionKeyPref by lazy { findPreference(generalSettings.mainDeviceEncryptionKey.key)!! } override fun onPreferencesCreated() { monitorModePref.apply { @@ -51,67 +47,9 @@ class GeneralSettingsFragment : PreferenceFragment3() { entries = ScannerMode.entries.map { getString(it.labelRes) }.toTypedArray() entryValues = ScannerMode.entries.map { settings.scannerMode.rawWriter(it) as String }.toTypedArray() } - mainDeviceIdentityKeyPref.setOnPreferenceClickListener { - AirPodKeyInputDialog(requireContext()).create( - mode = AirPodKeyInputDialog.Mode.IRK, - current = generalSettings.mainDeviceIdentityKey.value?.toHex() ?: "", - onKey = { raw -> - generalSettings.mainDeviceIdentityKey.value = raw.fromHex().takeIf { it.isNotEmpty() } - }, - onGuide = { webpageTool.open("https://github.com/d4rken-org/capod/wiki/airpod-Keys") } - ).show() - true - } - mainDeviceEncryptionKeyPref.setOnPreferenceClickListener { - AirPodKeyInputDialog(requireContext()).create( - mode = AirPodKeyInputDialog.Mode.ENC, - current = generalSettings.mainDeviceEncryptionKey.value?.toHex() ?: "", - onKey = { raw -> - generalSettings.mainDeviceEncryptionKey.value = raw.fromHex().takeIf { it.isNotEmpty() } - }, - onGuide = { webpageTool.open("https://github.com/d4rken-org/capod/wiki/airpod-Keys") } - ).show() - true - } - super.onPreferencesCreated() } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - vm.state.observe2 { state -> - mainDeviceAddressPref.setOnPreferenceClickListener { - val dialog = DeviceSelectionDialogFactory(requireContext()).create( - state.devices, - state.devices.firstOrNull { it.address == generalSettings.mainDeviceAddress.value } - ) { selected -> - generalSettings.mainDeviceAddress.value = selected?.address - } - dialog.show() - true - } - mainDeviceEncryptionKeyPref.isEnabled = state.hasIdentityKey - } - - vm.events.observe2 { - when (it) { - GeneralSettingsEvents.SelectDeviceAddressEvent -> mainDeviceAddressPref.performClick() - } - } - - mainDeviceModelPref.setOnPreferenceClickListener { - val dialog = ModelSelectionDialogFactory(requireContext()).create( - PodDevice.Model.entries, - generalSettings.mainDeviceModel.value - ) { selected -> - generalSettings.mainDeviceModel.value = selected - } - dialog.show() - true - } - - super.onViewCreated(view, savedInstanceState) - } - override fun onDisplayPreferenceDialog(preference: Preference) { if (PercentSliderPreference.onDisplayPreferenceDialog(this, preference)) return diff --git a/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsFragmentVM.kt b/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsFragmentVM.kt index 16da29c7..4a6d0f25 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsFragmentVM.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsFragmentVM.kt @@ -2,56 +2,19 @@ package eu.darken.capod.main.ui.settings.general import androidx.lifecycle.SavedStateHandle import dagger.hilt.android.lifecycle.HiltViewModel -import eu.darken.capod.common.bluetooth.BluetoothDevice2 -import eu.darken.capod.common.bluetooth.BluetoothManager2 import eu.darken.capod.common.coroutine.DispatcherProvider import eu.darken.capod.common.debug.logging.logTag -import eu.darken.capod.common.flow.withPrevious -import eu.darken.capod.common.livedata.SingleLiveEvent import eu.darken.capod.common.uix.ViewModel3 import eu.darken.capod.main.core.GeneralSettings -import eu.darken.capod.main.core.MonitorMode -import kotlinx.coroutines.flow.combine -import kotlinx.coroutines.flow.filter -import kotlinx.coroutines.flow.onEach -import kotlinx.coroutines.flow.onStart import javax.inject.Inject @HiltViewModel class GeneralSettingsFragmentVM @Inject constructor( @Suppress("unused") private val handle: SavedStateHandle, dispatcherProvider: DispatcherProvider, - bluetoothManager: BluetoothManager2, private val generalSettings: GeneralSettings, ) : ViewModel3(dispatcherProvider) { - val events = SingleLiveEvent() - - init { - generalSettings.monitorMode.flow - .withPrevious() - .filter { (old, new) -> - old != new && new == MonitorMode.AUTOMATIC && generalSettings.mainDeviceAddress.value == null - } - .onEach { events.postValue(GeneralSettingsEvents.SelectDeviceAddressEvent) } - .launchInViewModel() - } - - val state = combine( - bluetoothManager.bondedDevices().onStart { emit(emptySet()) }, - generalSettings.mainDeviceIdentityKey.flow - ) { bondedDevices, identityKey -> - State( - devices = bondedDevices.toList(), - hasIdentityKey = identityKey != null - ) - }.asLiveData2() - - data class State( - val devices: List, - val hasIdentityKey: Boolean - ) - companion object { private val TAG = logTag("Settings", "General", "VM") } diff --git a/app/src/main/java/eu/darken/capod/main/ui/settings/general/ModelSelectionDialogFactory.kt b/app/src/main/java/eu/darken/capod/main/ui/settings/general/ModelSelectionDialogFactory.kt deleted file mode 100644 index 3ec55628..00000000 --- a/app/src/main/java/eu/darken/capod/main/ui/settings/general/ModelSelectionDialogFactory.kt +++ /dev/null @@ -1,36 +0,0 @@ -package eu.darken.capod.main.ui.settings.general - -import android.content.Context -import android.content.DialogInterface -import androidx.appcompat.app.AlertDialog -import com.google.android.material.dialog.MaterialAlertDialogBuilder -import eu.darken.capod.R -import eu.darken.capod.pods.core.PodDevice - - -class ModelSelectionDialogFactory constructor(private val context: Context) { - - fun create( - models: List, - current: PodDevice.Model, - callback: (PodDevice.Model) -> Unit - ): AlertDialog { - return MaterialAlertDialogBuilder(context).apply { - setTitle(R.string.settings_maindevice_model_label) - - val pairing = models - .map { it.label to it } - - setSingleChoiceItems( - pairing.map { it.first }.toTypedArray(), - pairing.indexOfFirst { it.second == current }, - DialogInterface.OnClickListener { dialog, which -> - val selected = pairing[which].second - callback(selected) - dialog.dismiss() - } - ) - - }.create() - } -} \ No newline at end of file diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/AppleFactory.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/AppleFactory.kt index b699bb64..cfaa29a4 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/AppleFactory.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/AppleFactory.kt @@ -1,12 +1,11 @@ package eu.darken.capod.pods.core.apple import eu.darken.capod.common.bluetooth.BleScanResult +import eu.darken.capod.common.debug.logging.Logging.Priority.VERBOSE import eu.darken.capod.common.debug.logging.Logging.Priority.WARN import eu.darken.capod.common.debug.logging.asLog import eu.darken.capod.common.debug.logging.log import eu.darken.capod.common.debug.logging.logTag -import eu.darken.capod.profiles.core.AppleDeviceProfile -import eu.darken.capod.profiles.core.DeviceProfilesRepo import eu.darken.capod.pods.core.PodDevice import eu.darken.capod.pods.core.apple.misc.UnknownAppleDevice import eu.darken.capod.pods.core.apple.protocol.ContinuityProtocol @@ -14,6 +13,8 @@ import eu.darken.capod.pods.core.apple.protocol.ProximityMessage import eu.darken.capod.pods.core.apple.protocol.ProximityPairing import eu.darken.capod.pods.core.apple.protocol.ProximityPayload import eu.darken.capod.pods.core.apple.protocol.RPAChecker +import eu.darken.capod.profiles.core.AppleDeviceProfile +import eu.darken.capod.profiles.core.DeviceProfilesRepo import kotlinx.coroutines.flow.first import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock @@ -62,23 +63,29 @@ class AppleFactory @Inject constructor( val proximityMessage = getMessage(scanResult) ?: return@withLock null var isIRKMatch = false - val profile = profilesRepo.profiles.first() - .filterIsInstance() - .firstOrNull { - if (it.identityKey != null && rpaChecker.verify(scanResult.address, it.identityKey)) { - isIRKMatch = true - return@firstOrNull true - } - // TODO more checks heuristicbased - return@firstOrNull false - } + val candidates = profilesRepo.profiles.first().filterIsInstance() + var profile = candidates.firstOrNull { + it.identityKey != null && rpaChecker.verify(scanResult.address, it.identityKey) + } + if (profile != null) { + isIRKMatch = true + log(TAG, VERBOSE) { "Got IRK match for from $profile for $scanResult" } + } + + val factory = podFactories.firstOrNull { it.isResponsible(proximityMessage) } ?: unknownAppleFactory + + // TODO more checks heuristicbased + if (profile == null) { + profile = candidates.firstOrNull { it.model == factory.deviceModel } + log(TAG, VERBOSE) { "Got no IRK match for from $profile for $scanResult" } + } val payload = ProximityPayload( public = ProximityPayload.Public( proximityMessage.data.take(9).toUByteArray() ), private = run { - if (profile == null) return@run null + if (!isIRKMatch || profile == null) return@run null if (proximityMessage.data.size != ProximityPairing.PAIRING_MESSAGE_LENGTH) return@run null val encKey = profile.encryptionKey?.takeIf { it.isNotEmpty() } @@ -91,9 +98,8 @@ class AppleFactory @Inject constructor( }, ) - val factory = podFactories.firstOrNull { it.isResponsible(proximityMessage) } - return@withLock (factory ?: unknownAppleFactory).create( + factory.create( scanResult = scanResult, payload = payload, meta = ApplePods.AppleMeta( diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/ApplePodsFactory.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/ApplePodsFactory.kt index 9a9c8cef..0281a8d4 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/ApplePodsFactory.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/ApplePodsFactory.kt @@ -1,11 +1,13 @@ package eu.darken.capod.pods.core.apple import eu.darken.capod.common.bluetooth.BleScanResult +import eu.darken.capod.pods.core.PodDevice import eu.darken.capod.pods.core.apple.history.KnownDevice import eu.darken.capod.pods.core.apple.protocol.ProximityMessage import eu.darken.capod.pods.core.apple.protocol.ProximityPayload interface ApplePodsFactory { + val deviceModel: PodDevice.Model fun isResponsible(message: ProximityMessage): Boolean fun create(scanResult: BleScanResult, payload: ProximityPayload, meta: ApplePods.AppleMeta): ApplePods diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen1.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen1.kt index 9c228524..8018c7a5 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen1.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen1.kt @@ -42,6 +42,8 @@ data class AirPodsGen1( private val repo: PodHistoryRepo, ) : ApplePodsFactory { + override val deviceModel: PodDevice.Model = PodDevice.Model.AIRPODS_GEN1 + override fun isResponsible(message: ProximityMessage): Boolean = message.run { getModelInfo().full == DEVICE_CODE && length == ProximityPairing.PAIRING_MESSAGE_LENGTH } diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen2.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen2.kt index f771a8fc..46c96fc0 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen2.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen2.kt @@ -42,6 +42,8 @@ data class AirPodsGen2( private val repo: PodHistoryRepo ) : ApplePodsFactory { + override val deviceModel: PodDevice.Model = PodDevice.Model.AIRPODS_GEN2 + override fun isResponsible(message: ProximityMessage): Boolean = message.run { getModelInfo().full == DEVICE_CODE && length == ProximityPairing.PAIRING_MESSAGE_LENGTH } diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen3.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen3.kt index 3404e2b8..746ecaf9 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen3.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen3.kt @@ -42,6 +42,8 @@ data class AirPodsGen3( private val repo: PodHistoryRepo, ) : ApplePodsFactory { + override val deviceModel: PodDevice.Model = PodDevice.Model.AIRPODS_GEN3 + override fun isResponsible(message: ProximityMessage): Boolean = message.run { getModelInfo().full == DEVICE_CODE && length == ProximityPairing.PAIRING_MESSAGE_LENGTH } diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen4.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen4.kt index 74fef769..6244659a 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen4.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen4.kt @@ -42,6 +42,8 @@ data class AirPodsGen4( private val repo: PodHistoryRepo, ) : ApplePodsFactory { + override val deviceModel: PodDevice.Model = PodDevice.Model.AIRPODS_GEN4 + override fun isResponsible(message: ProximityMessage): Boolean = message.run { getModelInfo().full == DEVICE_CODE && length == ProximityPairing.PAIRING_MESSAGE_LENGTH } diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen4Anc.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen4Anc.kt index 1480cdeb..7c8cfe7d 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen4Anc.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen4Anc.kt @@ -41,7 +41,7 @@ data class AirPodsGen4Anc( class Factory @Inject constructor( private val repo: PodHistoryRepo, ) : ApplePodsFactory { - + override val deviceModel: PodDevice.Model = PodDevice.Model.AIRPODS_GEN4_ANC override fun isResponsible(message: ProximityMessage): Boolean = message.run { getModelInfo().full == DEVICE_CODE && length == ProximityPairing.PAIRING_MESSAGE_LENGTH } diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsMax.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsMax.kt index b4c79266..7358dcde 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsMax.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsMax.kt @@ -48,7 +48,7 @@ data class AirPodsMax( class Factory @Inject constructor( private val repo: PodHistoryRepo, ) : ApplePodsFactory { - + override val deviceModel: PodDevice.Model = PodDevice.Model.AIRPODS_MAX override fun isResponsible(message: ProximityMessage): Boolean = message.run { getModelInfo().full == DEVICE_CODE && length == ProximityPairing.PAIRING_MESSAGE_LENGTH } diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsMaxUsbc.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsMaxUsbc.kt index 3515d6de..710492fe 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsMaxUsbc.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsMaxUsbc.kt @@ -48,7 +48,7 @@ data class AirPodsMaxUsbc( class Factory @Inject constructor( private val repo: PodHistoryRepo, ) : ApplePodsFactory { - + override val deviceModel: PodDevice.Model = PodDevice.Model.AIRPODS_MAX_USBC override fun isResponsible(message: ProximityMessage): Boolean = message.run { getModelInfo().full == DEVICE_CODE && length == ProximityPairing.PAIRING_MESSAGE_LENGTH } diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro.kt index 881f43a2..90761e9d 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro.kt @@ -60,7 +60,7 @@ data class AirPodsPro( class Factory @Inject constructor( private val repo: PodHistoryRepo, ) : ApplePodsFactory { - + override val deviceModel: PodDevice.Model = PodDevice.Model.AIRPODS_PRO override fun isResponsible(message: ProximityMessage): Boolean = message.run { getModelInfo().full == DEVICE_CODE && length == ProximityPairing.PAIRING_MESSAGE_LENGTH } diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro2.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro2.kt index c9416baf..d93470ad 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro2.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro2.kt @@ -60,7 +60,7 @@ data class AirPodsPro2( class Factory @Inject constructor( private val repo: PodHistoryRepo, ) : ApplePodsFactory { - + override val deviceModel: PodDevice.Model = PodDevice.Model.AIRPODS_PRO2 override fun isResponsible(message: ProximityMessage): Boolean = message.run { getModelInfo().full == DEVICE_CODE && length == ProximityPairing.PAIRING_MESSAGE_LENGTH } diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro2Usbc.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro2Usbc.kt index 203f181d..0c0edb00 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro2Usbc.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro2Usbc.kt @@ -60,7 +60,7 @@ data class AirPodsPro2Usbc( class Factory @Inject constructor( private val repo: PodHistoryRepo, ) : ApplePodsFactory { - + override val deviceModel: PodDevice.Model = PodDevice.Model.AIRPODS_PRO2_USBC override fun isResponsible(message: ProximityMessage): Boolean = message.run { getModelInfo().full == DEVICE_CODE && length == ProximityPairing.PAIRING_MESSAGE_LENGTH } diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsFitPro.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsFitPro.kt index a8e3213d..a7a3bdb2 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsFitPro.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsFitPro.kt @@ -41,7 +41,7 @@ data class BeatsFitPro( class Factory @Inject constructor( private val repo: PodHistoryRepo, ) : ApplePodsFactory { - + override val deviceModel: PodDevice.Model = PodDevice.Model.BEATS_FIT_PRO override fun isResponsible(message: ProximityMessage): Boolean = message.run { getModelInfo().full == DEVICE_CODE && length == ProximityPairing.PAIRING_MESSAGE_LENGTH } diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsFlex.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsFlex.kt index 7d339c50..ec6dc455 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsFlex.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsFlex.kt @@ -33,7 +33,7 @@ data class BeatsFlex( class Factory @Inject constructor( private val repo: PodHistoryRepo, ) : ApplePodsFactory { - + override val deviceModel: PodDevice.Model = PodDevice.Model.BEATS_FLEX override fun isResponsible(message: ProximityMessage): Boolean = message.run { getModelInfo().full == DEVICE_CODE && length == ProximityPairing.PAIRING_MESSAGE_LENGTH } diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsSolo3.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsSolo3.kt index 90128e13..62440ec5 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsSolo3.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsSolo3.kt @@ -32,7 +32,7 @@ data class BeatsSolo3( class Factory @Inject constructor( private val repo: PodHistoryRepo, ) : ApplePodsFactory { - + override val deviceModel: PodDevice.Model = PodDevice.Model.BEATS_SOLO_3 override fun isResponsible(message: ProximityMessage): Boolean = message.run { getModelInfo().full == DEVICE_CODE && length == ProximityPairing.PAIRING_MESSAGE_LENGTH } diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsStudio3.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsStudio3.kt index 5eb9047f..5c39790a 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsStudio3.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsStudio3.kt @@ -30,7 +30,7 @@ data class BeatsStudio3( class Factory @Inject constructor( private val repo: PodHistoryRepo, ) : ApplePodsFactory { - + override val deviceModel: PodDevice.Model = PodDevice.Model.BEATS_STUDIO_3 override fun isResponsible(message: ProximityMessage): Boolean = message.run { getModelInfo().dirty == DEVICE_CODE_DIRTY && length == ProximityPairing.PAIRING_MESSAGE_LENGTH } diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsX.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsX.kt index 2548957d..33ba823b 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsX.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsX.kt @@ -33,7 +33,7 @@ data class BeatsX( class Factory @Inject constructor( private val repo: PodHistoryRepo, ) : ApplePodsFactory { - + override val deviceModel: PodDevice.Model = PodDevice.Model.BEATS_X override fun isResponsible(message: ProximityMessage): Boolean = message.run { getModelInfo().full == DEVICE_CODE && length == ProximityPairing.PAIRING_MESSAGE_LENGTH } diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeats3.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeats3.kt index d221e92b..e9b1fd21 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeats3.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeats3.kt @@ -33,7 +33,7 @@ data class PowerBeats3( class Factory @Inject constructor( private val repo: PodHistoryRepo, ) : ApplePodsFactory { - + override val deviceModel: PodDevice.Model = PodDevice.Model.POWERBEATS_3 override fun isResponsible(message: ProximityMessage): Boolean = message.run { getModelInfo().full == DEVICE_CODE && length == ProximityPairing.PAIRING_MESSAGE_LENGTH } diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeats4.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeats4.kt index c92f8d39..6363caca 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeats4.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeats4.kt @@ -34,7 +34,7 @@ data class PowerBeats4( class Factory @Inject constructor( private val repo: PodHistoryRepo, ) : ApplePodsFactory { - + override val deviceModel: PodDevice.Model = PodDevice.Model.POWERBEATS_4 override fun isResponsible(message: ProximityMessage): Boolean = message.run { getModelInfo().full == DEVICE_CODE && length == ProximityPairing.PAIRING_MESSAGE_LENGTH } diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeatsPro.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeatsPro.kt index e664fa7d..d54bbe0b 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeatsPro.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeatsPro.kt @@ -41,7 +41,7 @@ data class PowerBeatsPro( class Factory @Inject constructor( private val repo: PodHistoryRepo, ) : ApplePodsFactory { - + override val deviceModel: PodDevice.Model = PodDevice.Model.POWERBEATS_PRO override fun isResponsible(message: ProximityMessage): Boolean = message.run { getModelInfo().full == DEVICE_CODE && length == ProximityPairing.PAIRING_MESSAGE_LENGTH } diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeatsPro2.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeatsPro2.kt index db579bce..158e8a1c 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeatsPro2.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeatsPro2.kt @@ -41,7 +41,7 @@ data class PowerBeatsPro2( class Factory @Inject constructor( private val repo: PodHistoryRepo, ) : ApplePodsFactory { - + override val deviceModel: PodDevice.Model = PodDevice.Model.POWERBEATS_PRO2 override fun isResponsible(message: ProximityMessage): Boolean = message.run { getModelInfo().full == DEVICE_CODE && length == ProximityPairing.PAIRING_MESSAGE_LENGTH } diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen1.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen1.kt index 494b1309..1d3e658f 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen1.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen1.kt @@ -44,7 +44,7 @@ data class FakeAirPodsGen1( class Factory @Inject constructor( private val repo: PodHistoryRepo, ) : ApplePodsFactory { - + override val deviceModel: PodDevice.Model = PodDevice.Model.FAKE_AIRPODS_GEN1 override fun isResponsible(message: ProximityMessage): Boolean = message.run { // Official message length is 19HEX, i.e. binary 25, did they copy this wrong? getModelInfo().full == DEVICE_CODE && length == 19 diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen2.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen2.kt index 8260202d..89f95479 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen2.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen2.kt @@ -42,7 +42,7 @@ data class FakeAirPodsGen2( class Factory @Inject constructor( private val repo: PodHistoryRepo, ) : ApplePodsFactory { - + override val deviceModel: PodDevice.Model = PodDevice.Model.FAKE_AIRPODS_GEN2 override fun isResponsible(message: ProximityMessage): Boolean = message.run { // Official message length is 19HEX, i.e. binary 25, did they copy this wrong? getModelInfo().full == DEVICE_CODE && length == 19 diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen3.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen3.kt index 9762a6a6..4fcbcfa6 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen3.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen3.kt @@ -44,7 +44,7 @@ data class FakeAirPodsGen3( class Factory @Inject constructor( private val repo: PodHistoryRepo, ) : ApplePodsFactory { - + override val deviceModel: PodDevice.Model = PodDevice.Model.FAKE_AIRPODS_GEN3 override fun isResponsible(message: ProximityMessage): Boolean = message.run { // Official message length is 19HEX, i.e. binary 25, did they copy this wrong? getModelInfo().full == DEVICE_CODE && length == 19 diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsPro.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsPro.kt index c11e89cf..1fa1c640 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsPro.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsPro.kt @@ -62,7 +62,7 @@ data class FakeAirPodsPro( class Factory @Inject constructor( private val repo: PodHistoryRepo, ) : ApplePodsFactory { - + override val deviceModel: PodDevice.Model = PodDevice.Model.FAKE_AIRPODS_PRO override fun isResponsible(message: ProximityMessage): Boolean = message.run { // Official message length is 19HEX, i.e. binary 25, did they copy this wrong? getModelInfo().full == DEVICE_CODE && length == 19 diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsPro2.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsPro2.kt index 254c8b5d..90682ba7 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsPro2.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsPro2.kt @@ -66,7 +66,7 @@ data class FakeAirPodsPro2( class Factory @Inject constructor( private val repo: PodHistoryRepo, ) : ApplePodsFactory { - + override val deviceModel: PodDevice.Model = PodDevice.Model.FAKE_AIRPODS_PRO2 override fun isResponsible(message: ProximityMessage): Boolean = message.run { // Official message length is 19HEX, i.e. binary 25, did they copy this wrong? getModelInfo().full == DEVICE_CODE && length == 19 diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/misc/UnknownAppleDevice.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/misc/UnknownAppleDevice.kt index 956d87c6..d1864504 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/misc/UnknownAppleDevice.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/misc/UnknownAppleDevice.kt @@ -35,6 +35,7 @@ data class UnknownAppleDevice( class Factory @Inject constructor( private val repo: PodHistoryRepo, ) : ApplePodsFactory { + override val deviceModel: PodDevice.Model = PodDevice.Model.UNKNOWN override fun isResponsible(message: ProximityMessage): Boolean = true override fun create( diff --git a/app/src/main/java/eu/darken/capod/profiles/core/AppleDeviceProfile.kt b/app/src/main/java/eu/darken/capod/profiles/core/AppleDeviceProfile.kt index 1df062f4..ac62652e 100644 --- a/app/src/main/java/eu/darken/capod/profiles/core/AppleDeviceProfile.kt +++ b/app/src/main/java/eu/darken/capod/profiles/core/AppleDeviceProfile.kt @@ -15,7 +15,7 @@ data class AppleDeviceProfile( @Json(name = "label") override val label: String, @Json(name = "priority") override val priority: Int = 0, @Json(name = "model") override val model: PodDevice.Model = PodDevice.Model.UNKNOWN, - @Json(name = "minimumSignalQuality") override val minimumSignalQuality: Float? = 0.20f, + @Json(name = "minimumSignalQuality") override val minimumSignalQuality: Float? = DeviceProfile.DEFAULT_MINIMUM_SIGNAL_QUALITY, @Json(name = "identityKey") val identityKey: IdentityResolvingKey? = null, @Json(name = "encryptionKey") val encryptionKey: ProximityEncryptionKey? = null, @Json(name = "address") override val address: String? = null, diff --git a/app/src/main/java/eu/darken/capod/profiles/core/DeviceProfile.kt b/app/src/main/java/eu/darken/capod/profiles/core/DeviceProfile.kt index e52557d8..f2d8807a 100644 --- a/app/src/main/java/eu/darken/capod/profiles/core/DeviceProfile.kt +++ b/app/src/main/java/eu/darken/capod/profiles/core/DeviceProfile.kt @@ -1,8 +1,10 @@ package eu.darken.capod.profiles.core import android.os.Parcelable +import com.squareup.moshi.adapters.PolymorphicJsonAdapterFactory import eu.darken.capod.common.serialization.NameBasedPolyJsonAdapterFactory import eu.darken.capod.pods.core.PodDevice +import kotlin.jvm.java sealed interface DeviceProfile : Parcelable { val id: ProfileId @@ -13,8 +15,9 @@ sealed interface DeviceProfile : Parcelable { val address: String? companion object { - val MOSHI_FACTORY: NameBasedPolyJsonAdapterFactory = - NameBasedPolyJsonAdapterFactory.of(DeviceProfile::class.java) - .withSubtype(AppleDeviceProfile::class.java, "identityKey") + const val DEFAULT_MINIMUM_SIGNAL_QUALITY = 0.20f + + val MOSHI_FACTORY = PolymorphicJsonAdapterFactory.of(DeviceProfile::class.java, "type") + .withSubtype(AppleDeviceProfile::class.java, "apple") } } \ No newline at end of file diff --git a/app/src/main/java/eu/darken/capod/profiles/core/DeviceProfilesContainer.kt b/app/src/main/java/eu/darken/capod/profiles/core/DeviceProfilesContainer.kt new file mode 100644 index 00000000..c35b9e48 --- /dev/null +++ b/app/src/main/java/eu/darken/capod/profiles/core/DeviceProfilesContainer.kt @@ -0,0 +1,9 @@ +package eu.darken.capod.profiles.core + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) +data class DeviceProfilesContainer( + @Json(name = "profiles") val profiles: List = emptyList() +) \ No newline at end of file diff --git a/app/src/main/java/eu/darken/capod/profiles/core/DeviceProfilesRepo.kt b/app/src/main/java/eu/darken/capod/profiles/core/DeviceProfilesRepo.kt index b0d5dff4..818cd634 100644 --- a/app/src/main/java/eu/darken/capod/profiles/core/DeviceProfilesRepo.kt +++ b/app/src/main/java/eu/darken/capod/profiles/core/DeviceProfilesRepo.kt @@ -3,6 +3,7 @@ package eu.darken.capod.profiles.core import eu.darken.capod.common.debug.logging.Logging.Priority.VERBOSE import eu.darken.capod.common.debug.logging.log import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map import javax.inject.Inject import javax.inject.Singleton @@ -11,33 +12,33 @@ class DeviceProfilesRepo @Inject constructor( private val settings: DeviceProfilesSettings, ) { - val profiles: Flow> = settings.profiles.flow + val profiles: Flow> = settings.profiles.flow.map { it.profiles } fun addProfile(profile: DeviceProfile) { - val currentProfiles = settings.profiles.value - val updatedProfiles = currentProfiles + profile - settings.profiles.value = updatedProfiles + val currentContainer = settings.profiles.value + val updatedProfiles = currentContainer.profiles + profile + settings.profiles.value = DeviceProfilesContainer(updatedProfiles) log(VERBOSE) { "Added device profile: ${profile.label}" } } fun updateProfile(profile: DeviceProfile) { - val currentProfiles = settings.profiles.value - val updatedProfiles = currentProfiles.map { + val currentContainer = settings.profiles.value + val updatedProfiles = currentContainer.profiles.map { if (it.id == profile.id) profile else it } - settings.profiles.value = updatedProfiles + settings.profiles.value = DeviceProfilesContainer(updatedProfiles) log(VERBOSE) { "Updated device profile: ${profile.label}" } } fun removeProfile(profileId: String) { - val currentProfiles = settings.profiles.value - val updatedProfiles = currentProfiles.filter { it.id != profileId } - settings.profiles.value = updatedProfiles + val currentContainer = settings.profiles.value + val updatedProfiles = currentContainer.profiles.filter { it.id != profileId } + settings.profiles.value = DeviceProfilesContainer(updatedProfiles) log(VERBOSE) { "Removed device profile with ID: $profileId" } } fun reorderProfiles(profiles: List) { - settings.profiles.value = profiles.toList() + settings.profiles.value = DeviceProfilesContainer(profiles.toList()) log(VERBOSE) { "Reordered ${profiles.size} device profiles" } } } \ No newline at end of file diff --git a/app/src/main/java/eu/darken/capod/profiles/core/DeviceProfilesSettings.kt b/app/src/main/java/eu/darken/capod/profiles/core/DeviceProfilesSettings.kt index c2bf4555..290655bb 100644 --- a/app/src/main/java/eu/darken/capod/profiles/core/DeviceProfilesSettings.kt +++ b/app/src/main/java/eu/darken/capod/profiles/core/DeviceProfilesSettings.kt @@ -20,11 +20,9 @@ class DeviceProfilesSettings @Inject constructor( override val preferences: SharedPreferences = context.getSharedPreferences("device_profiles", Context.MODE_PRIVATE) - private val listType = Types.newParameterizedType(List::class.java, DeviceProfile::class.java) - - val profiles = preferences.createFlowPreference>( + val profiles = preferences.createFlowPreference( "profiles", - emptyList(), + DeviceProfilesContainer(), moshi ) diff --git a/app/src/main/java/eu/darken/capod/profiles/core/DeviceProfileId.kt b/app/src/main/java/eu/darken/capod/profiles/core/ProfileId.kt similarity index 100% rename from app/src/main/java/eu/darken/capod/profiles/core/DeviceProfileId.kt rename to app/src/main/java/eu/darken/capod/profiles/core/ProfileId.kt diff --git a/app/src/main/java/eu/darken/capod/profiles/ui/DeviceManagerFragment.kt b/app/src/main/java/eu/darken/capod/profiles/ui/DeviceManagerFragment.kt index 49b4cfbd..4a815d5b 100644 --- a/app/src/main/java/eu/darken/capod/profiles/ui/DeviceManagerFragment.kt +++ b/app/src/main/java/eu/darken/capod/profiles/ui/DeviceManagerFragment.kt @@ -27,7 +27,7 @@ class DeviceManagerFragment : Fragment3(R.layout.device_manager_fragment) { @Inject lateinit var adapter: DeviceManagerAdapter - + private var isDragging = false override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -52,16 +52,11 @@ class DeviceManagerFragment : Fragment3(R.layout.device_manager_fragment) { ui.apply { list.setupDefaults(adapter, dividers = false) - - toolbar.setNavigationOnClickListener { - vm.onBackPressed() - } - fab.setOnClickListener { - vm.onAddDevice() - } - - // Setup drag-to-reorder for profiles + toolbar.setNavigationOnClickListener { vm.onBackPressed() } + + fab.setOnClickListener { vm.onAddDevice() } + val itemTouchHelper = ItemTouchHelper(object : ItemTouchHelper.SimpleCallback( ItemTouchHelper.UP or ItemTouchHelper.DOWN, 0 ) { @@ -72,35 +67,33 @@ class DeviceManagerFragment : Fragment3(R.layout.device_manager_fragment) { ): Boolean { val fromPosition = viewHolder.adapterPosition val toPosition = target.adapterPosition - + // Only allow reordering of profile items, not empty state cards - if (adapter.data[fromPosition] is DeviceProfileVH.Item && - adapter.data[toPosition] is DeviceProfileVH.Item) { + if (adapter.data[fromPosition] is DeviceProfileVH.Item && + adapter.data[toPosition] is DeviceProfileVH.Item + ) { return adapter.moveItem(fromPosition, toPosition) } return false } - + override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) { // No swipe to dismiss } - + override fun onSelectedChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) { super.onSelectedChanged(viewHolder, actionState) when (actionState) { ItemTouchHelper.ACTION_STATE_DRAG -> { isDragging = true } + ItemTouchHelper.ACTION_STATE_IDLE -> { - if (isDragging) { - // Drag finished, save new order - vm.onProfilesReordered(adapter.getItems()) - isDragging = false - } + if (isDragging) vm.onProfilesReordered(adapter.getItems()) } } } - + override fun isLongPressDragEnabled(): Boolean = true override fun isItemViewSwipeEnabled(): Boolean = false }) @@ -108,9 +101,8 @@ class DeviceManagerFragment : Fragment3(R.layout.device_manager_fragment) { } vm.listItems.observe2(ui) { items -> - if (!isDragging) { - adapter.update(items) - } + adapter.update(items) + isDragging = false } super.onViewCreated(view, savedInstanceState) diff --git a/app/src/main/java/eu/darken/capod/profiles/ui/DeviceProfileVH.kt b/app/src/main/java/eu/darken/capod/profiles/ui/DeviceProfileVH.kt index 8cde65b3..d6fdc2ab 100644 --- a/app/src/main/java/eu/darken/capod/profiles/ui/DeviceProfileVH.kt +++ b/app/src/main/java/eu/darken/capod/profiles/ui/DeviceProfileVH.kt @@ -22,11 +22,11 @@ class DeviceProfileVH(parent: ViewGroup) : deviceIcon.setImageResource(profile.model.iconRes) deviceName.text = profile.label deviceDetails.text = buildString { - profile.address?.let { - append(it.toString()) - append(" • ") - } append(profile.model.name) + profile.address?.let { + append(" • ") + append(it) + } } itemView.setOnClickListener { item.onItemClick(profile) } diff --git a/app/src/main/java/eu/darken/capod/profiles/ui/DeviceProfileCreationFragment.kt b/app/src/main/java/eu/darken/capod/profiles/ui/creation/DeviceProfileCreationFragment.kt similarity index 58% rename from app/src/main/java/eu/darken/capod/profiles/ui/DeviceProfileCreationFragment.kt rename to app/src/main/java/eu/darken/capod/profiles/ui/creation/DeviceProfileCreationFragment.kt index 71b5fe9f..3f73c546 100644 --- a/app/src/main/java/eu/darken/capod/profiles/ui/DeviceProfileCreationFragment.kt +++ b/app/src/main/java/eu/darken/capod/profiles/ui/creation/DeviceProfileCreationFragment.kt @@ -1,13 +1,16 @@ -package eu.darken.capod.profiles.ui +package eu.darken.capod.profiles.ui.creation import android.content.Context import android.os.Bundle +import android.util.TypedValue import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ArrayAdapter import android.widget.ImageView import android.widget.TextView +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat import androidx.core.widget.doOnTextChanged import androidx.fragment.app.viewModels import com.google.android.material.dialog.MaterialAlertDialogBuilder @@ -39,8 +42,30 @@ class DeviceProfileCreationFragment : Fragment3(R.layout.device_profile_creation insetsPadding(ui.toolbar, top = true) } + // Handle bottom padding for NestedScrollView to avoid navigation bar overlap + ViewCompat.setOnApplyWindowInsetsListener(ui.scrollView) { view, insets -> + val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + val basePadding = TypedValue.applyDimension( + TypedValue.COMPLEX_UNIT_DIP, 16f, + resources.displayMetrics + ).toInt() + view.setPadding( + view.paddingLeft, + view.paddingTop, + view.paddingRight, + basePadding + systemBars.bottom + ) + insets + } + ui.apply { - toolbar.setNavigationOnClickListener { vm.onBackPressed() } + toolbar.setNavigationOnClickListener { + if (vm.hasUnsavedChanges()) { + showUnsavedChangesConfirmation() + } else { + vm.onBackPressed() + } + } toolbar.setOnMenuItemClickListener { item -> when (item.itemId) { R.id.action_save -> { @@ -66,14 +91,54 @@ class DeviceProfileCreationFragment : Fragment3(R.layout.device_profile_creation vm.updateMinimumSignalQuality(value / 100f) } + // Key validation regex - matches dialog format: "FE-D0-1C-54-11-81-BC-BC-87-D2-C4-3F-31-64-5F-EE" + val keyRegex = Regex("^([0-9A-F]{2}-){15}[0-9A-F]{2}$") + val exampleKey = "FE-D0-1C-54-11-81-BC-BC-87-D2-C4-3F-31-64-5F-EE" + identityKeyInput.doOnTextChanged { text, _, _, _ -> val keyText = text?.toString() ?: "" - vm.updateIdentityKey(keyText.fromHex().takeIf { it.isNotEmpty() }) + when { + keyText.isEmpty() -> { + identityKeyInputLayout.error = null + vm.updateIdentityKey(null) + } + keyText.matches(keyRegex) -> { + identityKeyInputLayout.error = null + try { + vm.updateIdentityKey(keyText.fromHex()) + } catch (e: Exception) { + // Fallback - should not happen with regex validation + identityKeyInputLayout.error = getString(R.string.profiles_key_invalid_format) + } + } + else -> { + identityKeyInputLayout.error = getString(R.string.profiles_key_expected_format, exampleKey) + // Don't update ViewModel with invalid input + } + } } encryptionKeyInput.doOnTextChanged { text, _, _, _ -> val keyText = text?.toString() ?: "" - vm.updateEncryptionKey(keyText.fromHex().takeIf { it.isNotEmpty() }) + when { + keyText.isEmpty() -> { + encryptionKeyInputLayout.error = null + vm.updateEncryptionKey(null) + } + keyText.matches(keyRegex) -> { + encryptionKeyInputLayout.error = null + try { + vm.updateEncryptionKey(keyText.fromHex()) + } catch (e: Exception) { + // Fallback - should not happen with regex validation + encryptionKeyInputLayout.error = getString(R.string.profiles_key_invalid_format) + } + } + else -> { + encryptionKeyInputLayout.error = getString(R.string.profiles_key_expected_format, exampleKey) + // Don't update ViewModel with invalid input + } + } } identityKeyGuideButton.setOnClickListener { @@ -85,7 +150,6 @@ class DeviceProfileCreationFragment : Fragment3(R.layout.device_profile_creation } // Set hints using same format as AirPodKeyInputDialog - val exampleKey = "FE-D0-1C-54-11-81-BC-BC-87-D2-C4-3F-31-64-5F-EE" identityKeyInputLayout.hint = getString(R.string.general_example_label, exampleKey) encryptionKeyInputLayout.hint = getString(R.string.general_example_label, exampleKey) @@ -97,14 +161,21 @@ class DeviceProfileCreationFragment : Fragment3(R.layout.device_profile_creation val selectedModel = vm.availableModels[position] vm.updateModel(selectedModel) } + } vm.bondedDevices.observe2(ui) { devices -> val deviceAdapter = DeviceArrayAdapter(requireContext(), devices) deviceInput.setAdapter(deviceAdapter) deviceInput.setOnItemClickListener { _, _, position, _ -> - val selectedDevice = devices[position] - vm.updateSelectedDevice(selectedDevice) + if (position == 0) { + // "None" option selected + vm.updateSelectedDevice(null) + } else { + // Regular device selected (position - 1 to account for "None" option) + val selectedDevice = devices[position - 1] + vm.updateSelectedDevice(selectedDevice) + } } } @@ -153,11 +224,13 @@ class DeviceProfileCreationFragment : Fragment3(R.layout.device_profile_creation } vm.selectedDevice.observe2(ui) { device -> - device?.let { - val deviceText = "${it.name ?: "Unknown Device"} (${it.address})" - if (deviceInput.text?.toString() != deviceText) { - deviceInput.setText(deviceText, false) - } + val deviceText = if (device != null) { + "${device.name ?: getString(R.string.pods_unknown_label)} (${device.address})" + } else { + getString(R.string.profiles_paired_device_none) + } + if (deviceInput.text?.toString() != deviceText) { + deviceInput.setText(deviceText, false) } } @@ -174,15 +247,29 @@ class DeviceProfileCreationFragment : Fragment3(R.layout.device_profile_creation private fun showDeleteConfirmation() { MaterialAlertDialogBuilder(requireContext()) - .setTitle(R.string.device_profiles_delete_title) - .setMessage(R.string.device_profiles_delete_message) - .setPositiveButton(R.string.device_profiles_delete_action) { _, _ -> + .setTitle(R.string.profiles_delete_title) + .setMessage(R.string.profiles_delete_message) + .setPositiveButton(R.string.profiles_delete_action) { _, _ -> vm.deleteProfile() } .setNegativeButton(R.string.general_cancel_action, null) .show() } + private fun showUnsavedChangesConfirmation() { + MaterialAlertDialogBuilder(requireContext()) + .setTitle(R.string.general_unsaved_changes_title) + .setMessage(R.string.general_unsaved_changes_message) + .setPositiveButton(R.string.general_save_and_exit_action) { _, _ -> + vm.saveProfile() + } + .setNegativeButton(R.string.general_discard_action) { _, _ -> + vm.discardChanges() + } + .setNeutralButton(R.string.general_keep_editing_action, null) + .show() + } + private class ModelArrayAdapter( context: Context, models: List @@ -212,8 +299,16 @@ class DeviceProfileCreationFragment : Fragment3(R.layout.device_profile_creation private class DeviceArrayAdapter( context: Context, - devices: List - ) : ArrayAdapter(context, R.layout.paired_device_dropdown_item, devices) { + private val devices: List + ) : ArrayAdapter(context, R.layout.paired_device_dropdown_item) { + + init { + // Add "None" as first item, then all device names + add(context.getString(R.string.profiles_paired_device_none)) + devices.forEach { device -> + add("${device.name ?: context.getString(R.string.pods_unknown_label)} (${device.address})") + } + } override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { return createView(position, convertView, parent) @@ -224,14 +319,21 @@ class DeviceProfileCreationFragment : Fragment3(R.layout.device_profile_creation } private fun createView(position: Int, convertView: View?, parent: ViewGroup): View { - val device = getItem(position)!! val view = convertView ?: LayoutInflater.from(context).inflate(R.layout.paired_device_dropdown_item, parent, false) val nameView = view.findViewById(R.id.device_name) val addressView = view.findViewById(R.id.device_address) - nameView.text = device.name ?: "Unknown Device" - addressView.text = device.address + if (position == 0) { + // "None" option + nameView.text = context.getString(R.string.profiles_paired_device_none) + addressView.text = context.getString(R.string.profiles_paired_device_none_description) + } else { + // Regular device (position - 1 to account for "None" option) + val device = devices[position - 1] + nameView.text = device.name ?: context.getString(R.string.pods_unknown_label) + addressView.text = device.address + } return view } diff --git a/app/src/main/java/eu/darken/capod/profiles/ui/DeviceProfileCreationFragmentVM.kt b/app/src/main/java/eu/darken/capod/profiles/ui/creation/DeviceProfileCreationFragmentVM.kt similarity index 53% rename from app/src/main/java/eu/darken/capod/profiles/ui/DeviceProfileCreationFragmentVM.kt rename to app/src/main/java/eu/darken/capod/profiles/ui/creation/DeviceProfileCreationFragmentVM.kt index bb3c70af..3be1cf93 100644 --- a/app/src/main/java/eu/darken/capod/profiles/ui/DeviceProfileCreationFragmentVM.kt +++ b/app/src/main/java/eu/darken/capod/profiles/ui/creation/DeviceProfileCreationFragmentVM.kt @@ -1,20 +1,25 @@ -package eu.darken.capod.profiles.ui +package eu.darken.capod.profiles.ui.creation +import android.content.Context import androidx.lifecycle.LiveData import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.asLiveData import dagger.hilt.android.lifecycle.HiltViewModel +import dagger.hilt.android.qualifiers.ApplicationContext import eu.darken.capod.common.bluetooth.BluetoothDevice2 import eu.darken.capod.common.bluetooth.BluetoothManager2 import eu.darken.capod.common.coroutine.DispatcherProvider import eu.darken.capod.common.debug.logging.log import eu.darken.capod.common.debug.logging.logTag +import eu.darken.capod.R import eu.darken.capod.common.uix.ViewModel3 import eu.darken.capod.profiles.core.AppleDeviceProfile import eu.darken.capod.profiles.core.DeviceProfilesRepo import eu.darken.capod.pods.core.PodDevice import eu.darken.capod.pods.core.apple.protocol.IdentityResolvingKey import eu.darken.capod.pods.core.apple.protocol.ProximityEncryptionKey +import eu.darken.capod.profiles.core.DeviceProfile +import eu.darken.capod.profiles.core.ProfileId import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.combine @@ -25,13 +30,14 @@ import javax.inject.Inject @HiltViewModel class DeviceProfileCreationFragmentVM @Inject constructor( + @ApplicationContext private val context: Context, handle: SavedStateHandle, dispatcherProvider: DispatcherProvider, private val deviceProfilesRepo: DeviceProfilesRepo, private val bluetoothManager: BluetoothManager2, ) : ViewModel3(dispatcherProvider = dispatcherProvider) { - private val profileId: String? = handle.get("profileId") + private val profileId: String? = handle.get("profileId") val isEditMode: Boolean = profileId != null private val _name = MutableStateFlow("") @@ -39,13 +45,24 @@ class DeviceProfileCreationFragmentVM @Inject constructor( private val _identityKey = MutableStateFlow(null) private val _encryptionKey = MutableStateFlow(null) private val _selectedDevice = MutableStateFlow(null) - private val _minimumSignalQuality = MutableStateFlow(0.20f) + private val _minimumSignalQuality = MutableStateFlow(DeviceProfile.DEFAULT_MINIMUM_SIGNAL_QUALITY) + + // Track initial values for unsaved changes detection + private val initialName = MutableStateFlow("") + private val initialSelectedModel = MutableStateFlow(null) + private val initialIdentityKey = MutableStateFlow(null) + private val initialEncryptionKey = MutableStateFlow(null) + private val initialSelectedDevice = MutableStateFlow(null) + private val initialMinimumSignalQuality = MutableStateFlow(DeviceProfile.DEFAULT_MINIMUM_SIGNAL_QUALITY) private val _nameError = MutableStateFlow(null) init { if (isEditMode && profileId != null) { loadProfile(profileId) + } else { + // Prefill with localizable default for new profiles + _name.value = context.getString(R.string.profiles_name_default) } } @@ -64,6 +81,43 @@ class DeviceProfileCreationFragmentVM @Inject constructor( .map { it.toList() } .asLiveData() + private val hasUnsavedChangesFlow = combine( + _name, _selectedModel, _identityKey, _encryptionKey, _selectedDevice, _minimumSignalQuality, + initialName, initialSelectedModel, initialIdentityKey, initialEncryptionKey, initialSelectedDevice, initialMinimumSignalQuality + ) { flows -> + val currentName = flows[0] as String + val currentModel = flows[1] as PodDevice.Model? + val currentIdentityKey = flows[2] as IdentityResolvingKey? + val currentEncryptionKey = flows[3] as ProximityEncryptionKey? + val currentDevice = flows[4] as BluetoothDevice2? + val currentSignalQuality = flows[5] as Float + + val initName = flows[6] as String + val initModel = flows[7] as PodDevice.Model? + val initIdentityKey = flows[8] as IdentityResolvingKey? + val initEncryptionKey = flows[9] as ProximityEncryptionKey? + val initDevice = flows[10] as BluetoothDevice2? + val initSignalQuality = flows[11] as Float + + if (isEditMode) { + // For edit mode, check if any current values differ from initial + currentName != initName || + currentModel != initModel || + currentIdentityKey != initIdentityKey || + currentEncryptionKey != initEncryptionKey || + currentDevice?.address != initDevice?.address || + currentSignalQuality != initSignalQuality + } else { + // For create mode, check if any values have been entered + currentName.isNotBlank() || + currentModel != null || + currentIdentityKey != null || + currentEncryptionKey != null || + currentDevice != null || + currentSignalQuality != DeviceProfile.DEFAULT_MINIMUM_SIGNAL_QUALITY + } + } + private val isFormValid = combine( _name, _selectedModel, @@ -74,7 +128,32 @@ class DeviceProfileCreationFragmentVM @Inject constructor( nameError == null } - val canSave: LiveData = isFormValid.asLiveData() + val canSave: LiveData = combine( + isFormValid, + hasUnsavedChangesFlow + ) { valid, hasChanges -> + valid && hasChanges + }.asLiveData() + + fun hasUnsavedChanges(): Boolean { + return if (isEditMode) { + // For edit mode, check if any current values differ from initial + _name.value != initialName.value || + _selectedModel.value != initialSelectedModel.value || + _identityKey.value != initialIdentityKey.value || + _encryptionKey.value != initialEncryptionKey.value || + _selectedDevice.value?.address != initialSelectedDevice.value?.address || + _minimumSignalQuality.value != initialMinimumSignalQuality.value + } else { + // For create mode, check if any values have been entered + _name.value.isNotBlank() || + _selectedModel.value != null || + _identityKey.value != null || + _encryptionKey.value != null || + _selectedDevice.value != null || + _minimumSignalQuality.value != DeviceProfile.DEFAULT_MINIMUM_SIGNAL_QUALITY + } + } fun updateName(name: String) { _name.value = name @@ -112,13 +191,39 @@ class DeviceProfileCreationFragmentVM @Inject constructor( val profiles = deviceProfilesRepo.profiles.first() val profile = profiles.find { it.id == profileId } if (profile != null) { + // Set current values _name.value = profile.label _selectedModel.value = profile.model - _minimumSignalQuality.value = profile.minimumSignalQuality ?: 0.20f + _minimumSignalQuality.value = profile.minimumSignalQuality ?: DeviceProfile.DEFAULT_MINIMUM_SIGNAL_QUALITY if (profile is AppleDeviceProfile) { _identityKey.value = profile.identityKey _encryptionKey.value = profile.encryptionKey + + // Restore selected device if address is available + profile.address?.let { address -> + launch { + try { + val bondedDevices = bluetoothManager.bondedDevices().first() + val matchingDevice = bondedDevices.find { it.address == address } + _selectedDevice.value = matchingDevice + initialSelectedDevice.value = matchingDevice + log(TAG) { "Restored selected device: ${matchingDevice?.name} ($address)" } + } catch (e: Exception) { + log(TAG) { "Failed to restore selected device: $e" } + } + } + } + } + + // Set initial values for change tracking + initialName.value = profile.label + initialSelectedModel.value = profile.model + initialMinimumSignalQuality.value = profile.minimumSignalQuality ?: DeviceProfile.DEFAULT_MINIMUM_SIGNAL_QUALITY + + if (profile is AppleDeviceProfile) { + initialIdentityKey.value = profile.identityKey + initialEncryptionKey.value = profile.encryptionKey } log(TAG) { "Profile loaded: ${profile.label}" } @@ -159,7 +264,8 @@ class DeviceProfileCreationFragmentVM @Inject constructor( model = model, minimumSignalQuality = _minimumSignalQuality.value, identityKey = _identityKey.value, - encryptionKey = _encryptionKey.value + encryptionKey = _encryptionKey.value, + address = _selectedDevice.value?.address ) if (isEditMode) { @@ -194,6 +300,16 @@ class DeviceProfileCreationFragmentVM @Inject constructor( fun onBackPressed() { log(TAG) { "onBackPressed()" } + if (hasUnsavedChanges()) { + // Let the fragment handle the confirmation dialog + // The fragment will call either discardChanges() or saveProfile() + } else { + popBackStack() + } + } + + fun discardChanges() { + log(TAG) { "discardChanges()" } popBackStack() } diff --git a/app/src/main/java/eu/darken/capod/reaction/ui/ReactionSettingsFragment.kt b/app/src/main/java/eu/darken/capod/reaction/ui/ReactionSettingsFragment.kt index 2184388b..530bdb59 100644 --- a/app/src/main/java/eu/darken/capod/reaction/ui/ReactionSettingsFragment.kt +++ b/app/src/main/java/eu/darken/capod/reaction/ui/ReactionSettingsFragment.kt @@ -15,7 +15,6 @@ import eu.darken.capod.common.uix.PreferenceFragment3 import eu.darken.capod.common.upgrade.UpgradeRepo import eu.darken.capod.main.core.GeneralSettings import eu.darken.capod.main.core.MonitorMode -import eu.darken.capod.main.ui.settings.general.DeviceSelectionDialogFactory import eu.darken.capod.reaction.core.ReactionSettings import eu.darken.capod.reaction.core.autoconnect.AutoConnectCondition import javax.inject.Inject @@ -62,21 +61,10 @@ class ReactionSettingsFragment : PreferenceFragment3() { return true } else if (preference.key == reactionSettings.autoConnect.key) { preference as TwoStatePreference - if (!isPro) { upgradeRepo.launchBillingFlow(requireActivity()) preference.isChecked = false return true - } else if (generalSettings.mainDeviceAddress.value == null) { - DeviceSelectionDialogFactory(requireContext()).create( - devices = bondedDevices, - current = bondedDevices.firstOrNull { it.address == generalSettings.mainDeviceAddress.value } - ) { selected -> - generalSettings.mainDeviceAddress.value = selected?.address - if (selected != null) preference.isChecked = true - }.show() - preference.isChecked = false - return true } } else if (preference.key == reactionSettings.showPopUpOnCaseOpen.key && !isPro) { preference as TwoStatePreference diff --git a/app/src/main/res/layout/device_manager_item.xml b/app/src/main/res/layout/device_manager_item.xml index 87c5fd03..7a8dfa65 100644 --- a/app/src/main/res/layout/device_manager_item.xml +++ b/app/src/main/res/layout/device_manager_item.xml @@ -37,6 +37,8 @@ - + + + + + diff --git a/app/src/main/res/layout/device_manager_noprofiles_item.xml b/app/src/main/res/layout/device_manager_noprofiles_item.xml index f2748091..24bac016 100644 --- a/app/src/main/res/layout/device_manager_noprofiles_item.xml +++ b/app/src/main/res/layout/device_manager_noprofiles_item.xml @@ -20,7 +20,7 @@ android:layout_height="wrap_content" android:layout_marginHorizontal="16dp" android:layout_marginTop="16dp" - android:text="@string/device_profiles_empty_title" + android:text="@string/profiles_empty_title" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -32,7 +32,7 @@ android:layout_height="wrap_content" android:layout_marginHorizontal="16dp" android:layout_marginTop="4dp" - android:text="@string/device_profiles_empty_description" + android:text="@string/profiles_empty_description" app:layout_constraintBottom_toTopOf="@id/add_profile_action" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -44,7 +44,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="16dp" - android:text="@string/device_profiles_add_action" + android:text="@string/profiles_add_action" app:icon="@drawable/ic_baseline_add_24" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/device_profile_creation_fragment.xml b/app/src/main/res/layout/device_profile_creation_fragment.xml index ee6e37f4..76c664e4 100644 --- a/app/src/main/res/layout/device_profile_creation_fragment.xml +++ b/app/src/main/res/layout/device_profile_creation_fragment.xml @@ -15,10 +15,11 @@ app:layout_constraintTop_toTopOf="parent" app:menu="@menu/device_profile_creation_menu" app:navigationIcon="@drawable/ic_baseline_arrow_back_24" - app:title="@string/device_profiles_create_title" + app:title="@string/profiles_create_title" app:titleMarginStart="16dp" /> - + android:orientation="horizontal" + android:gravity="center_vertical"> + + + + + + + android:text="@string/profiles_basic_info_description" + style="@style/TextAppearance.Material3.BodySmall" /> + android:hint="@string/profiles_name_label"> + android:hint="@string/profiles_model_label"> + android:hint="@string/profiles_paired_device_label"> + + + + + + + + + android:layout_marginTop="4dp" + android:layout_marginBottom="8dp" + android:text="@string/profiles_signal_quality_description" + style="@style/TextAppearance.Material3.BodySmall" /> - - + android:layout_marginBottom="8dp" + style="@style/TextAppearance.Material3.BodyMedium" + android:textStyle="bold" + android:gravity="center" /> + + - - + android:text="@string/profiles_identitykey_label" + style="@style/TextAppearance.Material3.TitleMedium" /> @@ -215,9 +240,8 @@ android:layout_height="wrap_content" android:layout_marginTop="4dp" android:layout_marginBottom="12dp" - android:text="@string/settings_maindevice_identitykey_explanation" - android:textAppearance="?attr/textAppearanceCaption" - android:textColor="?android:attr/textColorTertiary" /> + android:text="@string/profiles_maindevice_identitykey_explanation" + style="@style/TextAppearance.Material3.BodySmall" /> + + @@ -259,23 +295,19 @@ android:orientation="horizontal" android:gravity="center_vertical"> + + - - + android:text="@string/profiles_maindevice_encryptionkey_label" + style="@style/TextAppearance.Material3.TitleMedium" /> @@ -284,9 +316,8 @@ android:layout_height="wrap_content" android:layout_marginTop="4dp" android:layout_marginBottom="12dp" - android:text="@string/settings_maindevice_encryptionkey_explanation" - android:textAppearance="?attr/textAppearanceCaption" - android:textColor="?android:attr/textColorTertiary" /> + android:text="@string/profiles_maindevice_encryptionkey_explanation" + style="@style/TextAppearance.Material3.BodySmall" /> + + diff --git a/app/src/main/res/layout/overview_pods_dual_item.xml b/app/src/main/res/layout/overview_pods_dual_item.xml index 7e7e3752..3acfe0d5 100644 --- a/app/src/main/res/layout/overview_pods_dual_item.xml +++ b/app/src/main/res/layout/overview_pods_dual_item.xml @@ -35,11 +35,26 @@ android:layout_marginStart="4dp" android:layout_marginTop="16dp" android:layout_marginEnd="8dp" + android:ellipsize="end" android:gravity="center_vertical" - app:layout_constraintBottom_toTopOf="@+id/last_seen" + android:maxLines="1" + app:layout_constraintBottom_toTopOf="@+id/device_type" app:layout_constraintEnd_toStartOf="@id/reception" app:layout_constraintStart_toEndOf="@id/device_icon" app:layout_constraintTop_toTopOf="parent" + tools:text="My headphones" /> + + diff --git a/app/src/main/res/layout/overview_pods_single_item.xml b/app/src/main/res/layout/overview_pods_single_item.xml index f6f07857..0de69a25 100644 --- a/app/src/main/res/layout/overview_pods_single_item.xml +++ b/app/src/main/res/layout/overview_pods_single_item.xml @@ -35,24 +35,52 @@ android:layout_marginStart="4dp" android:layout_marginTop="16dp" android:layout_marginEnd="8dp" + android:ellipsize="end" android:gravity="center_vertical" - app:layout_constraintBottom_toTopOf="@+id/last_seen" + android:maxLines="1" + app:layout_constraintBottom_toTopOf="@+id/device_type" app:layout_constraintEnd_toStartOf="@id/reception" app:layout_constraintStart_toEndOf="@id/device_icon" app:layout_constraintTop_toTopOf="parent" - tools:text="Apple AirPods Max" /> + tools:text="My headphones" /> + + + + + app:layout_constraintTop_toBottomOf="@id/last_seen" + tools:text="First seen: 3s ago" /> \ No newline at end of file diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index 4fda5b36..f270ffc8 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -57,7 +57,7 @@ Geen Jou toestelmodel Die model van jou hoof toestel. Dit help die toepassing om jou toestel te herken wanneer dit nie aan jou foon gekoppel is nie. - Identiteitsleutel - Jou toestel se Identiteit Oplossingsleutel (IRK), wat CAPod help om dit tussen nabygeleë toestelle te identifiseer. - AirPods verander gereeld hul Bluetooth-adres vir privaatheid. Die IRK help CAPod om jou toestel te herken. Jy benodig eenmalige toegang tot \'n MacBook. - Enkripsiesleutel - Jou toestel se enkripsiesleutel, wat CAPod toelaat om gedetailleerde statusinligting te herwin. - AirPods stuur \'n statusboodskap, waarvan \'n deel geïnkripteer is. Die enkripsiesleutel laat CAPod toe om die volle boodskap te dekripteer. Jy benodig eenmalige toegang tot \'n MacBook. + Identiteitsleutel + Jou toestel se Identiteit Oplossingsleutel (IRK), wat CAPod help om dit tussen nabygeleë toestelle te identifiseer. + AirPods verander gereeld hul Bluetooth-adres vir privaatheid. Die IRK help CAPod om jou toestel te herken. Jy benodig eenmalige toegang tot \'n MacBook. + Enkripsiesleutel + Jou toestel se enkripsiesleutel, wat CAPod toelaat om gedetailleerde statusinligting te herwin. + AirPods stuur \'n statusboodskap, waarvan \'n deel geïnkripteer is. Die enkripsiesleutel laat CAPod toe om die volle boodskap te dekripteer. Jy benodig eenmalige toegang tot \'n MacBook. Een-pod-modus Die dra van albei pods is nie nodig nie, die dra van \'n enkele pod is voldoende om reaksies te aktiveer. diff --git a/app/src/main/res/values-am/strings.xml b/app/src/main/res/values-am/strings.xml index adc589d4..94995099 100644 --- a/app/src/main/res/values-am/strings.xml +++ b/app/src/main/res/values-am/strings.xml @@ -55,12 +55,12 @@ ምንም የመሳሪያዎ ሞዴል የዋና መሳሪያዎ ሞዴል። ይህ መተግበሪያው ከስልክዎ ጋር ባልተገናኘ ጊዜ መሳሪያዎን እንዲያውቅ ይረዳል። - የማንነት ቁልፍ - የመሳሪያዎ የማንነት መፍቻ ቁልፍ (IRK)፣ ይህም CAPod በአቅራቢያ ካሉ መሳሪያዎች መካከል እንዲለየው ይረዳል። - ኤርፖዶች ለግላዊነት ሲሉ የብሉቱዝ አድራሻቸውን በተደጋጋሚ ይለውጣሉ። IRK CAPod መሳሪያዎን እንዲያውቅ ይረዳል። የአንድ ጊዜ የማክቡክ መዳረሻ ያስፈልግዎታል። - የምስጠራ ቁልፍ - የመሳሪያዎ የምስጠራ ቁልፍ፣ ይህም CAPod ዝርዝር የሁኔታ መረጃ እንዲያገኝ ያስችለዋል። - ኤርፖዶች የሁኔታ መልእክት ይልካሉ፣ ከፊሉ የተመሰጠረ ነው። የምስጠራ ቁልፉ CAPod ሙሉውን መልእክት እንዲፈታ ያስችለዋል። የአንድ ጊዜ የማክቡክ መዳረሻ ያስፈልግዎታል። + የማንነት ቁልፍ + የመሳሪያዎ የማንነት መፍቻ ቁልፍ (IRK)፣ ይህም CAPod በአቅራቢያ ካሉ መሳሪያዎች መካከል እንዲለየው ይረዳል። + ኤርፖዶች ለግላዊነት ሲሉ የብሉቱዝ አድራሻቸውን በተደጋጋሚ ይለውጣሉ። IRK CAPod መሳሪያዎን እንዲያውቅ ይረዳል። የአንድ ጊዜ የማክቡክ መዳረሻ ያስፈልግዎታል። + የምስጠራ ቁልፍ + የመሳሪያዎ የምስጠራ ቁልፍ፣ ይህም CAPod ዝርዝር የሁኔታ መረጃ እንዲያገኝ ያስችለዋል። + ኤርፖዶች የሁኔታ መልእክት ይልካሉ፣ ከፊሉ የተመሰጠረ ነው። የምስጠራ ቁልፉ CAPod ሙሉውን መልእክት እንዲፈታ ያስችለዋል። የአንድ ጊዜ የማክቡክ መዳረሻ ያስፈልግዎታል። ባለአንድ ፖድ ሁነታ ሁለቱንም ፖዶች መልበስ አያስፈልግም፣ አንድ ነጠላ ፖድ መልበስ ግብረመልሶችን ለማስነሳት በቂ ነው። diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index f7e1707c..9e0e0e06 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -50,12 +50,12 @@ لا شيء طراز جهازك طراز جهازك الرئيسي. يساعد هذا التطبيق في التعرف على جهازك عندما لا يكون متصلاً بهاتفك. - مفتاح الهوية - مفتاح حل هوية جهازك (IRK)، والذي يساعد CAPod في التعرف عليه بين الأجهزة القريبة. - تغير AirPods عنوان البلوتوث الخاص بها بشكل متكرر للخصوصية. يساعد IRK CAPod في التعرف على جهازك. تحتاج إلى الوصول لمرة واحدة إلى جهاز MacBook. - مفتاح التشفير - مفتاح تشفير جهازك، والذي يسمح لـ CAPod باسترداد معلومات الحالة التفصيلية. - ترسل AirPods رسالة حالة، جزء منها مشفر. يسمح مفتاح التشفير لـ CAPod بفك تشفير الرسالة الكاملة. تحتاج إلى الوصول لمرة واحدة إلى جهاز MacBook. + مفتاح الهوية + مفتاح حل هوية جهازك (IRK)، والذي يساعد CAPod في التعرف عليه بين الأجهزة القريبة. + تغير AirPods عنوان البلوتوث الخاص بها بشكل متكرر للخصوصية. يساعد IRK CAPod في التعرف على جهازك. تحتاج إلى الوصول لمرة واحدة إلى جهاز MacBook. + مفتاح التشفير + مفتاح تشفير جهازك، والذي يسمح لـ CAPod باسترداد معلومات الحالة التفصيلية. + ترسل AirPods رسالة حالة، جزء منها مشفر. يسمح مفتاح التشفير لـ CAPod بفك تشفير الرسالة الكاملة. تحتاج إلى الوصول لمرة واحدة إلى جهاز MacBook. وضع سماعة واحدة ليس مطلوبًا ارتداء كلتا السماعتين، فارتداء سماعة واحدة كافٍ لتشغيل ردود الفعل. إظهار نافذة منبثقة للعلبة diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index 360efb45..ae72c668 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -55,12 +55,12 @@ Heç biri Cihazınızın modeli Əsas cihazınızın modeli. Bu, tətbiqin telefonunuza qoşulmadığı zaman cihazınızı tanımasına kömək edir. - Kimlik Açarı - Cihazınızın Kimlik Həlletmə Açarı (IRK), CAPod-un onu yaxınlıqdakı cihazlar arasında tanımasına kömək edir. - AirPods məxfilik üçün Bluetooth ünvanlarını tez-tez dəyişir. IRK CAPod-un cihazınızı tanımasına kömək edir. MacBook-a birdəfəlik girişiniz olmalıdır. - Şifrələmə Açarı - Cihazınızın şifrələmə açarı, CAPod-un ətraflı status məlumatlarını əldə etməsinə imkan verir. - AirPods status mesajı göndərir, bunun bir hissəsi şifrələnir. Şifrələmə açarı CAPod-un tam mesajı deşifrə etməsinə imkan verir. MacBook-a birdəfəlik girişiniz olmalıdır. + Kimlik Açarı + Cihazınızın Kimlik Həlletmə Açarı (IRK), CAPod-un onu yaxınlıqdakı cihazlar arasında tanımasına kömək edir. + AirPods məxfilik üçün Bluetooth ünvanlarını tez-tez dəyişir. IRK CAPod-un cihazınızı tanımasına kömək edir. MacBook-a birdəfəlik girişiniz olmalıdır. + Şifrələmə Açarı + Cihazınızın şifrələmə açarı, CAPod-un ətraflı status məlumatlarını əldə etməsinə imkan verir. + AirPods status mesajı göndərir, bunun bir hissəsi şifrələnir. Şifrələmə açarı CAPod-un tam mesajı deşifrə etməsinə imkan verir. MacBook-a birdəfəlik girişiniz olmalıdır. Tək qulaqlıq rejimi Hər iki qulaqlığı taxmaq tələb olunmur, reaksiyaları tətikləmək üçün tək bir qulaqlığı taxmaq kifayətdir. diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index f75b9ae6..0f6b8767 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -55,12 +55,12 @@ Няма Мадэль вашай прылады Мадэль вашай асноўнай прылады. Гэта дапамагае праграме распазнаваць вашу прыладу, калі яна не падключана да вашага тэлефона. - Ключ ідэнтыфікацыі - Ключ вырашэння ідэнтыфікацыі вашай прылады (IRK), які дапамагае CAPod ідэнтыфікаваць яе сярод прылад паблізу. - AirPods часта мяняюць свой адрас Bluetooth у мэтах прыватнасці. IRK дапамагае CAPod распазнаваць вашу прыладу. Вам патрэбен аднаразовы доступ да MacBook. - Ключ шыфравання - Ключ шыфравання вашай прылады, які дазваляе CAPod атрымліваць падрабязную інфармацыю пра стан. - AirPods адпраўляюць паведамленне пра стан, частка якога зашыфравана. Ключ шыфравання дазваляe CAPod расшыфраваць поўнае паведамленне. Вам патрэбен аднаразовы доступ да MacBook. + Ключ ідэнтыфікацыі + Ключ вырашэння ідэнтыфікацыі вашай прылады (IRK), які дапамагае CAPod ідэнтыфікаваць яе сярод прылад паблізу. + AirPods часта мяняюць свой адрас Bluetooth у мэтах прыватнасці. IRK дапамагае CAPod распазнаваць вашу прыладу. Вам патрэбен аднаразовы доступ да MacBook. + Ключ шыфравання + Ключ шыфравання вашай прылады, які дазваляе CAPod атрымліваць падрабязную інфармацыю пра стан. + AirPods адпраўляюць паведамленне пра стан, частка якога зашыфравана. Ключ шыфравання дазваляe CAPod расшыфраваць поўнае паведамленне. Вам патрэбен аднаразовы доступ да MacBook. Рэжым аднаго навушніка Нашэнне абодвух навушнікаў не патрабуецца, нашэння аднаго навушніка дастаткова для запуску рэакцый. diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 83a893ab..3a7074da 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -55,12 +55,12 @@ Няма Модел на вашето устройство Моделът на вашето основно устройство. Това помага на приложението да разпознае вашето устройство, когато не е свързано с телефона ви. - Идентификационен ключ - Идентификационният ключ за разрешаване (IRK) на вашето устройство, който помага на CAPod да го идентифицира сред близките устройства. - AirPods често променят своя Bluetooth адрес от съображения за поверителност. IRK помага на CAPod да разпознае вашето устройство. Нуждаете се от еднократен достъп до MacBook. - Ключ за шифроване - Ключът за шифроване на вашето устройство, който позволява на CAPod да извлича подробна информация за състоянието. - AirPods изпращат съобщение за състоянието, част от което е шифровано. Ключът за шифроване позволява на CAPod да дешифрира пълното съобщение. Нуждаете се от еднократен достъп до MacBook. + Идентификационен ключ + Идентификационният ключ за разрешаване (IRK) на вашето устройство, който помага на CAPod да го идентифицира сред близките устройства. + AirPods често променят своя Bluetooth адрес от съображения за поверителност. IRK помага на CAPod да разпознае вашето устройство. Нуждаете се от еднократен достъп до MacBook. + Ключ за шифроване + Ключът за шифроване на вашето устройство, който позволява на CAPod да извлича подробна информация за състоянието. + AirPods изпращат съобщение за състоянието, част от което е шифровано. Ключът за шифроване позволява на CAPod да дешифрира пълното съобщение. Нуждаете се от еднократен достъп до MacBook. Режим с една слушалка Носенето на двете слушалки не е необходимо, носенето на една слушалка е достатъчно за задействане на реакции. diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml index ce7d9328..9f678b88 100644 --- a/app/src/main/res/values-bn-rBD/strings.xml +++ b/app/src/main/res/values-bn-rBD/strings.xml @@ -55,12 +55,12 @@ কোনোটিই নয় আপনার ডিভাইসের মডেল আপনার প্রধান ডিভাইসের মডেল। এটি অ্যাপটিকে আপনার ডিভাইস চিনতে সাহায্য করে যখন এটি আপনার ফোনের সাথে সংযুক্ত না থাকে। - পরিচয় চাবি - আপনার ডিভাইসের আইডেন্টিটি রিজলভিং কী (IRK), যা CAPod-কে কাছাকাছি ডিভাইসগুলির মধ্যে এটি সনাক্ত করতে সাহায্য করে। - AirPods গোপনীয়তার জন্য প্রায়শই তাদের ব্লুটুথ ঠিকানা পরিবর্তন করে। IRK CAPod-কে আপনার ডিভাইস চিনতে সাহায্য করে। আপনার একটি MacBook-এ এককালীন অ্যাক্সেস প্রয়োজন। - এনক্রিপশন চাবি - আপনার ডিভাইসের এনক্রিপশন চাবি, যা CAPod-কে বিস্তারিত স্ট্যাটাস তথ্য পুনরুদ্ধার করতে দেয়। - AirPods একটি স্ট্যাটাস বার্তা পাঠায়, যার একটি অংশ এনক্রিপ্ট করা থাকে। এনক্রিপশন চাবি CAPod-কে সম্পূর্ণ বার্তা ডিক্রিপ্ট করতে দেয়। আপনার একটি MacBook-এ এককালীন অ্যাক্সেস প্রয়োজন। + পরিচয় চাবি + আপনার ডিভাইসের আইডেন্টিটি রিজলভিং কী (IRK), যা CAPod-কে কাছাকাছি ডিভাইসগুলির মধ্যে এটি সনাক্ত করতে সাহায্য করে। + AirPods গোপনীয়তার জন্য প্রায়শই তাদের ব্লুটুথ ঠিকানা পরিবর্তন করে। IRK CAPod-কে আপনার ডিভাইস চিনতে সাহায্য করে। আপনার একটি MacBook-এ এককালীন অ্যাক্সেস প্রয়োজন। + এনক্রিপশন চাবি + আপনার ডিভাইসের এনক্রিপশন চাবি, যা CAPod-কে বিস্তারিত স্ট্যাটাস তথ্য পুনরুদ্ধার করতে দেয়। + AirPods একটি স্ট্যাটাস বার্তা পাঠায়, যার একটি অংশ এনক্রিপ্ট করা থাকে। এনক্রিপশন চাবি CAPod-কে সম্পূর্ণ বার্তা ডিক্রিপ্ট করতে দেয়। আপনার একটি MacBook-এ এককালীন অ্যাক্সেস প্রয়োজন। একক পড মোড দুটি পড পরিধান করা আবশ্যক নয়, প্রতিক্রিয়া ট্রিগার করার জন্য একটি একক পড পরিধান করাই যথেষ্ট। diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 8008c58b..f2799890 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -50,12 +50,12 @@ Cap El vostre model de dispositiu El model del vostre dispositiu principal. Això ajuda l\'aplicació a reconèixer el vostre dispositiu quan no està connectat al vostre telèfon. - Clau d\'identitat - La clau de resolució d\'identitat (IRK) del dispositiu ajuda al CAPod a identificar-lo entre els dispositius propers. - Els AirPods canvien sovint la seva adreça Bluetooth per motius de privadesa. L\'IRK ajuda al CAPod a reconèixer el vostre dispositiu. Necessiteu accés únic a un MacBook. - Clau de xifratge - La clau de xifratge del vostre dispositiu permet al CAPod recuperar informació detallada de l\'estat. - Els AirPods envien un missatge d\'estat, part del missatge està xifrat. La clau de xifratge permet que el CAPod desxifri el missatge complet. Necessiteu accés únic a un MacBook. + Clau d\'identitat + La clau de resolució d\'identitat (IRK) del dispositiu ajuda al CAPod a identificar-lo entre els dispositius propers. + Els AirPods canvien sovint la seva adreça Bluetooth per motius de privadesa. L\'IRK ajuda al CAPod a reconèixer el vostre dispositiu. Necessiteu accés únic a un MacBook. + Clau de xifratge + La clau de xifratge del vostre dispositiu permet al CAPod recuperar informació detallada de l\'estat. + Els AirPods envien un missatge d\'estat, part del missatge està xifrat. La clau de xifratge permet que el CAPod desxifri el missatge complet. Necessiteu accés únic a un MacBook. Mode d\'un AirPod No cal portar els dos AirdPods, per provocar reaccions només cal portar-ne un. Mostra la finestra emergent de la funda diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 43055fdd..105ce061 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -50,12 +50,12 @@ Žádná Model vašeho zařízení Model vašeho hlavního zařízení. To pomůže aplikaci rozpoznat vaše zařízení, když není připojeno k telefonu. - Klíč identity - Klíč identity (IRK) vašeho zařízení, který pomáhá aplikaci CAPod identifikovat jej mezi okolními zařízeními. - AirPods často mění svou Bluetooth adresu pro ochranu soukromí. IRK pomáhá aplikaci CAPod rozpoznat vaše zařízení. Potřebujete jednorázový přístup k MacBooku. - Šifrovací klíč - Šifrovací klíč vašeho zařízení, který umožňuje aplikaci CAPod získat podrobné informace o stavu. - AirPods odesílají zprávu o stavu, jejíž část je zašifrovaná. Šifrovací klíč umožňuje aplikaci CAPod dešifrovat celou zprávu. Potřebujete jednorázový přístup k MacBooku. + Klíč identity + Klíč identity (IRK) vašeho zařízení, který pomáhá aplikaci CAPod identifikovat jej mezi okolními zařízeními. + AirPods často mění svou Bluetooth adresu pro ochranu soukromí. IRK pomáhá aplikaci CAPod rozpoznat vaše zařízení. Potřebujete jednorázový přístup k MacBooku. + Šifrovací klíč + Šifrovací klíč vašeho zařízení, který umožňuje aplikaci CAPod získat podrobné informace o stavu. + AirPods odesílají zprávu o stavu, jejíž část je zašifrovaná. Šifrovací klíč umožňuje aplikaci CAPod dešifrovat celou zprávu. Potřebujete jednorázový přístup k MacBooku. Režim jednoho sluchátka Není nutné nosit obě sluchátka, k vyvolání reakce stačí nosit jen jedno. Zobrazit vyskakovací okno pouzdra diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 84ba46d3..9ee04129 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -55,12 +55,12 @@ Ingen Din enhedsmodel Modellen af din hovedenhed. Dette hjælper appen med at genkende din enhed, når den ikke er tilsluttet din telefon. - Identitetsnøgle - Din enheds identitetsopløsningsnøgle (IRK), som hjælper CAPod med at identificere den blandt nærliggende enheder. - AirPods ændrer ofte deres Bluetooth-adresse af hensyn til privatlivets fred. IRK\'en hjælper CAPod med at genkende din enhed. Du skal have engangsadgang til en MacBook. - Krypteringsnøgle - Din enheds krypteringsnøgle, som giver CAPod mulighed for at hente detaljerede statusoplysninger. - AirPods sender en statusmeddelelse, hvoraf en del er krypteret. Krypteringsnøglen giver CAPod mulighed for at dekryptere hele meddelelsen. Du skal have engangsadgang til en MacBook. + Identitetsnøgle + Din enheds identitetsopløsningsnøgle (IRK), som hjælper CAPod med at identificere den blandt nærliggende enheder. + AirPods ændrer ofte deres Bluetooth-adresse af hensyn til privatlivets fred. IRK\'en hjælper CAPod med at genkende din enhed. Du skal have engangsadgang til en MacBook. + Krypteringsnøgle + Din enheds krypteringsnøgle, som giver CAPod mulighed for at hente detaljerede statusoplysninger. + AirPods sender en statusmeddelelse, hvoraf en del er krypteret. Krypteringsnøglen giver CAPod mulighed for at dekryptere hele meddelelsen. Du skal have engangsadgang til en MacBook. Enkelt pod-tilstand Det er ikke påkrævet at bære begge pods, at bære en enkelt pod er tilstrækkeligt til at udløse reaktioner. diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index f386b42d..1d125ba7 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -50,12 +50,12 @@ Keine Ihr Gerätemodell Das Modell Ihres Hauptgeräts. Dies hilft der App, Ihr Gerät zu erkennen, wenn es nicht mit Ihrem Telefon verbunden ist. - Identitätsschlüssel - Der Identity Resolving Key (IRK) deines Geräts, der CAPod dabei hilft, es unter Geräten in der Nähe zu identifizieren. - AirPods ändern häufig ihre Bluetooth-Adresse aus Datenschutzgründen. Der IRK hilft CAPod, dein Gerät zu erkennen. Du benötigst einmaligen Zugriff auf ein MacBook. - Verschlüsselungsschlüssel - Der Verschlüsselungsschlüssel deines Geräts, der es CAPod ermöglicht, detaillierte Statusinformationen abzurufen. - AirPods senden eine Statusnachricht, die teilweise verschlüsselt ist. Der Verschlüsselungsschlüssel ermöglicht es CAPod, die vollständige Nachricht zu entschlüsseln. Du benötigst einmaligen Zugriff auf ein MacBook. + Identitätsschlüssel + Der Identity Resolving Key (IRK) deines Geräts, der CAPod dabei hilft, es unter Geräten in der Nähe zu identifizieren. + AirPods ändern häufig ihre Bluetooth-Adresse aus Datenschutzgründen. Der IRK hilft CAPod, dein Gerät zu erkennen. Du benötigst einmaligen Zugriff auf ein MacBook. + Verschlüsselungsschlüssel + Der Verschlüsselungsschlüssel deines Geräts, der es CAPod ermöglicht, detaillierte Statusinformationen abzurufen. + AirPods senden eine Statusnachricht, die teilweise verschlüsselt ist. Der Verschlüsselungsschlüssel ermöglicht es CAPod, die vollständige Nachricht zu entschlüsseln. Du benötigst einmaligen Zugriff auf ein MacBook. Ein-Pod-Modus Das Tragen beider Pods ist nicht erforderlich. Das Tragen eines einzigen Pods reicht aus, um Reaktionen auszulösen. Hüllen popup anzeigen diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 6d1e1e68..1fba4839 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -50,12 +50,12 @@ Καμία Το μοντέλο της συσκευής σας Το μοντέλο της κύριας συσκευής σας. Αυτό βοηθά την εφαρμογή να αναγνωρίσει τη συσκευή σας όταν δεν είναι συνδεδεμένη στο τηλέφωνό σας. - Κλειδί Ταυτότητας - Το Κλειδί Επίλυσης Ταυτότητας της συσκευής σας (IRK), το οποίο βοηθά το CAPod να την αναγνωρίσει μεταξύ κοντινών συσκευών. - Τα AirPods αλλάζουν συχνά τη διεύθυνση Bluetooth τους για λόγους απορρήτου. Το IRK βοηθά το CAPod να αναγνωρίσει τη συσκευή σας. Χρειάζεστε εφάπαξ πρόσβαση σε MacBook. - Κλειδί Κρυπτογράφησης - Το κλειδί κρυπτογράφησης της συσκευής σας, το οποίο επιτρέπει στο CAPod να ανακτήσει λεπτομερείς πληροφορίες κατάστασης. - Τα AirPods στέλνουν ένα μήνυμα κατάστασης, μέρος του οποίου είναι κρυπτογραφημένο. Το κλειδί κρυπτογράφησης επιτρέπει στο CAPod να αποκρυπτογραφήσει ολόκληρο το μήνυμα. Χρειάζεστε εφάπαξ πρόσβαση σε MacBook. + Κλειδί Ταυτότητας + Το Κλειδί Επίλυσης Ταυτότητας της συσκευής σας (IRK), το οποίο βοηθά το CAPod να την αναγνωρίσει μεταξύ κοντινών συσκευών. + Τα AirPods αλλάζουν συχνά τη διεύθυνση Bluetooth τους για λόγους απορρήτου. Το IRK βοηθά το CAPod να αναγνωρίσει τη συσκευή σας. Χρειάζεστε εφάπαξ πρόσβαση σε MacBook. + Κλειδί Κρυπτογράφησης + Το κλειδί κρυπτογράφησης της συσκευής σας, το οποίο επιτρέπει στο CAPod να ανακτήσει λεπτομερείς πληροφορίες κατάστασης. + Τα AirPods στέλνουν ένα μήνυμα κατάστασης, μέρος του οποίου είναι κρυπτογραφημένο. Το κλειδί κρυπτογράφησης επιτρέπει στο CAPod να αποκρυπτογραφήσει ολόκληρο το μήνυμα. Χρειάζεστε εφάπαξ πρόσβαση σε MacBook. Λειτουργία ενός pod Η χρήση και των δύο pod δεν είναι απαραίτητη, η χρήση ενός μόνο pod αρκεί για την ενεργοποίηση αντιδράσεων. Εμφάνιση αναδυόμενου παραθύρου θήκης diff --git a/app/src/main/res/values-es-rAR/strings.xml b/app/src/main/res/values-es-rAR/strings.xml index 10ac02d5..0a263bf0 100644 --- a/app/src/main/res/values-es-rAR/strings.xml +++ b/app/src/main/res/values-es-rAR/strings.xml @@ -50,12 +50,12 @@ Ninguna Modelo de tu dispositivo El modelo de tu dispositivo principal. Esto ayuda a la app a reconocer tu dispositivo cuando no está conectado a tu teléfono. - Clave de Identidad - La Clave de Resolución de Identidad (IRK) de tu dispositivo, que ayuda a CAPod a identificarlo entre dispositivos cercanos. - Los AirPods cambian frecuentemente su dirección Bluetooth por privacidad. La IRK ayuda a CAPod a reconocer tu dispositivo. Necesitás acceso único a una MacBook. - Clave de Cifrado - La clave de cifrado de tu dispositivo, que permite a CAPod recuperar información detallada del estado. - Los AirPods envían un mensaje de estado, parte del cual está cifrado. La clave de cifrado permite a CAPod descifrar el mensaje completo. Necesitás acceso único a una MacBook. + Clave de Identidad + La Clave de Resolución de Identidad (IRK) de tu dispositivo, que ayuda a CAPod a identificarlo entre dispositivos cercanos. + Los AirPods cambian frecuentemente su dirección Bluetooth por privacidad. La IRK ayuda a CAPod a reconocer tu dispositivo. Necesitás acceso único a una MacBook. + Clave de Cifrado + La clave de cifrado de tu dispositivo, que permite a CAPod recuperar información detallada del estado. + Los AirPods envían un mensaje de estado, parte del cual está cifrado. La clave de cifrado permite a CAPod descifrar el mensaje completo. Necesitás acceso único a una MacBook. Modo un auricular No es necesario usar ambos auriculares, usar uno solo es suficiente para activar reacciones. Mostrar pop-up de estuche diff --git a/app/src/main/res/values-es-rMX/strings.xml b/app/src/main/res/values-es-rMX/strings.xml index 2ba5f821..926c51f0 100644 --- a/app/src/main/res/values-es-rMX/strings.xml +++ b/app/src/main/res/values-es-rMX/strings.xml @@ -50,12 +50,12 @@ Ninguna Modelo de tu dispositivo El modelo de tu dispositivo principal. Esto ayuda a la aplicación a reconocer tu dispositivo cuando no está conectado a tu teléfono. - Clave de Identidad - La Clave de Resolución de Identidad (IRK) de tu dispositivo, que ayuda a CAPod a identificarlo entre dispositivos cercanos. - Los AirPods cambian frecuentemente su dirección Bluetooth por privacidad. La IRK ayuda a CAPod a reconocer tu dispositivo. Necesitas acceso único a una MacBook. - Clave de Cifrado - La clave de cifrado de tu dispositivo, que permite a CAPod recuperar información detallada del estado. - Los AirPods envían un mensaje de estado, parte del cual está cifrado. La clave de cifrado permite a CAPod descifrar el mensaje completo. Necesitas acceso único a una MacBook. + Clave de Identidad + La Clave de Resolución de Identidad (IRK) de tu dispositivo, que ayuda a CAPod a identificarlo entre dispositivos cercanos. + Los AirPods cambian frecuentemente su dirección Bluetooth por privacidad. La IRK ayuda a CAPod a reconocer tu dispositivo. Necesitas acceso único a una MacBook. + Clave de Cifrado + La clave de cifrado de tu dispositivo, que permite a CAPod recuperar información detallada del estado. + Los AirPods envían un mensaje de estado, parte del cual está cifrado. La clave de cifrado permite a CAPod descifrar el mensaje completo. Necesitas acceso único a una MacBook. Modo un audífono No es necesario usar ambos audífonos, usar uno solo es suficiente para activar reacciones. Mostrar pop-up de estuche diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 512a245a..8153d8b6 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -50,12 +50,12 @@ Ninguna Modelo de tu dispositivo El modelo de tu dispositivo principal. Esto ayuda a la aplicación a reconocer tu dispositivo cuando no está conectado a tu teléfono. - Clave de identidad - La Clave de Resolución de Identidad (IRK) de tu dispositivo, que ayuda a CAPod a identificarlo entre los dispositivos cercanos. - Los AirPods cambian frecuentemente su dirección Bluetooth por privacidad. El IRK ayuda a CAPod a reconocer tu dispositivo. Necesitas acceso de una sola vez a un MacBook. - Clave de cifrado - La clave de cifrado de tu dispositivo, que permite a CAPod recuperar información detallada del estado. - Los AirPods envían un mensaje de estado, parte del cual está cifrado. La clave de cifrado permite a CAPod descifrar el mensaje completo. Necesitas acceso de una sola vez a un MacBook. + Clave de identidad + La Clave de Resolución de Identidad (IRK) de tu dispositivo, que ayuda a CAPod a identificarlo entre los dispositivos cercanos. + Los AirPods cambian frecuentemente su dirección Bluetooth por privacidad. El IRK ayuda a CAPod a reconocer tu dispositivo. Necesitas acceso de una sola vez a un MacBook. + Clave de cifrado + La clave de cifrado de tu dispositivo, que permite a CAPod recuperar información detallada del estado. + Los AirPods envían un mensaje de estado, parte del cual está cifrado. La clave de cifrado permite a CAPod descifrar el mensaje completo. Necesitas acceso de una sola vez a un MacBook. Modo un solo auricular No es necesario llevar ambos auriculares, llevar uno solo es suficiente para activar las reacciones. Mostrar ventana emergente de la funda diff --git a/app/src/main/res/values-et-rEE/strings.xml b/app/src/main/res/values-et-rEE/strings.xml index 48231179..90219d97 100644 --- a/app/src/main/res/values-et-rEE/strings.xml +++ b/app/src/main/res/values-et-rEE/strings.xml @@ -50,12 +50,12 @@ Mitte ükski Seadme mudel Põhiseadme mudel. See aitab rakendusel tuvastada teie seadet, kui see pole ühendatud teie telefoniga. - Tuvastamisvõti - Teie seadme tunnuse lahendamisvõti (IRK), mis võimaldab CAPodil tuvastada seda ümberkaudsete seadmete hulgast. - AirPodsid muudavad privaatsuse tõttu sageli oma Bluetooth aadressi. IRK aitab CAPodil tuvastada teie seadet. Vajate MacBooki jaoks ühekordset juurdepääsukoodi. - Krüpteerimisvõti - Teie seadme krüpteerimisvõti, mis võimaldab CaPodil saada täpset oleku teavet. - AirPodsid saadavad olekuteateid, millest osad on krüptitut. Krüpteerimisvõti võimaldab CAPodil kogu teadet lugeda. Vajate MacBooki jaoks ühekordset juurdepääsukoodi. + Tuvastamisvõti + Teie seadme tunnuse lahendamisvõti (IRK), mis võimaldab CAPodil tuvastada seda ümberkaudsete seadmete hulgast. + AirPodsid muudavad privaatsuse tõttu sageli oma Bluetooth aadressi. IRK aitab CAPodil tuvastada teie seadet. Vajate MacBooki jaoks ühekordset juurdepääsukoodi. + Krüpteerimisvõti + Teie seadme krüpteerimisvõti, mis võimaldab CaPodil saada täpset oleku teavet. + AirPodsid saadavad olekuteateid, millest osad on krüptitut. Krüpteerimisvõti võimaldab CAPodil kogu teadet lugeda. Vajate MacBooki jaoks ühekordset juurdepääsukoodi. Ühe klapi režiim Mõlema kõrvaklapi kandmine pole kohustuslik, tegevustega alustamiseks piisab ühe kõrvaklapi kandmisest. Näita kaane hüpikakent diff --git a/app/src/main/res/values-eu-rES/strings.xml b/app/src/main/res/values-eu-rES/strings.xml index c3b9750a..d9ee5807 100644 --- a/app/src/main/res/values-eu-rES/strings.xml +++ b/app/src/main/res/values-eu-rES/strings.xml @@ -55,12 +55,12 @@ Bat ere ez Zure gailuaren eredua Zure gailu nagusiaren eredua. Honek aplikazioari zure gailua ezagutzen laguntzen dio zure telefonora konektatuta ez dagoenean. - Identitate Gakoa - Zure gailuaren Identitatea Ebazteko Gakoa (IRK), CAPod-i inguruko gailuen artean identifikatzen laguntzen diona. - AirPod-ek maiz aldatzen dute Bluetooth helbidea pribatutasunagatik. IRK-k CAPod-i zure gailua ezagutzen laguntzen dio. MacBook batera behin-behineko sarbidea behar duzu. - Enkriptazio Gakoa - Zure gailuaren enkriptazio gakoa, CAPod-i egoeraren informazio zehatza eskuratzeko aukera ematen diona. - AirPod-ek egoera mezu bat bidaltzen dute, zati bat enkriptatuta dagoelarik. Enkriptazio gakoak CAPod-i mezu osoa deszifratzeko aukera ematen dio. MacBook batera behin-behineko sarbidea behar duzu. + Identitate Gakoa + Zure gailuaren Identitatea Ebazteko Gakoa (IRK), CAPod-i inguruko gailuen artean identifikatzen laguntzen diona. + AirPod-ek maiz aldatzen dute Bluetooth helbidea pribatutasunagatik. IRK-k CAPod-i zure gailua ezagutzen laguntzen dio. MacBook batera behin-behineko sarbidea behar duzu. + Enkriptazio Gakoa + Zure gailuaren enkriptazio gakoa, CAPod-i egoeraren informazio zehatza eskuratzeko aukera ematen diona. + AirPod-ek egoera mezu bat bidaltzen dute, zati bat enkriptatuta dagoelarik. Enkriptazio gakoak CAPod-i mezu osoa deszifratzeko aukera ematen dio. MacBook batera behin-behineko sarbidea behar duzu. Pod bakarreko modua Ez da beharrezkoa bi pod-ak janztea, pod bakar bat janztea nahikoa da erreakzioak abiarazteko. diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 77a8c23d..df46d0f2 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -50,12 +50,12 @@ هیچ‌کدام مدل دستگاه شما مدل دستگاه اصلی شما. این به برنامه کمک می‌کند دستگاه شما را هنگامی که به تلفن شما متصل نیست، تشخیص دهد. - کلید شناسایی - کلید حل هویت دستگاه شما (IRK)، که به CAPod کمک می‌کند آن را در میان دستگاه‌های اطراف شناسایی کند. - AirPods برای حفظ حریم خصوصی، آدرس بلوتوث خود را مرتباً تغییر می‌دهند. IRK به CAPod کمک می‌کند دستگاه شما را تشخیص دهد. شما به دسترسی یک‌باره به MacBook نیاز دارید. - کلید رمزگذاری - کلید رمزگذاری دستگاه شما، که به CAPod امکان بازیابی اطلاعات دقیق وضعیت را می‌دهد. - AirPods یک پیام وضعیت ارسال می‌کنند که بخشی از آن رمزگذاری شده است. کلید رمزگذاری به CAPod امکان می‌دهد پیام کامل را رمزگشایی کند. شما به دسترسی یک‌باره به MacBook نیاز دارید. + کلید شناسایی + کلید حل هویت دستگاه شما (IRK)، که به CAPod کمک می‌کند آن را در میان دستگاه‌های اطراف شناسایی کند. + AirPods برای حفظ حریم خصوصی، آدرس بلوتوث خود را مرتباً تغییر می‌دهند. IRK به CAPod کمک می‌کند دستگاه شما را تشخیص دهد. شما به دسترسی یک‌باره به MacBook نیاز دارید. + کلید رمزگذاری + کلید رمزگذاری دستگاه شما، که به CAPod امکان بازیابی اطلاعات دقیق وضعیت را می‌دهد. + AirPods یک پیام وضعیت ارسال می‌کنند که بخشی از آن رمزگذاری شده است. کلید رمزگذاری به CAPod امکان می‌دهد پیام کامل را رمزگشایی کند. شما به دسترسی یک‌باره به MacBook نیاز دارید. حالت یک ایرپاد استفاده از هر دو ایرپاد الزامی نیست، استفاده از یک ایرپاد برای ایجاد واکنش کافی است. نمایش پاپ‌آپ کیس diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 44b37971..7ad780d8 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -55,12 +55,12 @@ Ei mitään Laitteesi malli Päälaitteesi malli. Tämä auttaa sovellusta tunnistamaan laitteesi, kun se ei ole yhdistetty puhelimeesi. - Tunnisteavain - Laitteesi identiteetinratkaisuavain (IRK), joka auttaa CAPodia tunnistamaan sen lähellä olevien laitteiden joukosta. - AirPodit vaihtavat usein Bluetooth-osoitettaan yksityisyyden vuoksi. IRK auttaa CAPodia tunnistamaan laitteesi. Tarvitset kertaluonteisen pääsyn MacBookiin. - Salausavain - Laitteesi salausavain, jonka avulla CAPod voi hakea yksityiskohtaisia tilatietoja. - AirPodit lähettävät tilaviestin, josta osa on salattu. Salausavain antaa CAPodille mahdollisuuden purkaa koko viestin salauksen. Tarvitset kertaluonteisen pääsyn MacBookiin. + Tunnisteavain + Laitteesi identiteetinratkaisuavain (IRK), joka auttaa CAPodia tunnistamaan sen lähellä olevien laitteiden joukosta. + AirPodit vaihtavat usein Bluetooth-osoitettaan yksityisyyden vuoksi. IRK auttaa CAPodia tunnistamaan laitteesi. Tarvitset kertaluonteisen pääsyn MacBookiin. + Salausavain + Laitteesi salausavain, jonka avulla CAPod voi hakea yksityiskohtaisia tilatietoja. + AirPodit lähettävät tilaviestin, josta osa on salattu. Salausavain antaa CAPodille mahdollisuuden purkaa koko viestin salauksen. Tarvitset kertaluonteisen pääsyn MacBookiin. Yhden kuulokkeen tila Molempien kuulokkeiden käyttäminen ei ole pakollista, yhden kuulokkeen käyttäminen riittää reaktioiden laukaisemiseen. diff --git a/app/src/main/res/values-fil/strings.xml b/app/src/main/res/values-fil/strings.xml index 2c3edc60..0734b0ce 100644 --- a/app/src/main/res/values-fil/strings.xml +++ b/app/src/main/res/values-fil/strings.xml @@ -55,12 +55,12 @@ Wala Modelo ng iyong device Ang modelo ng iyong pangunahing device. Nakakatulong ito sa app na makilala ang iyong device kapag hindi ito konektado sa iyong telepono. - Identity Key - Ang Identity Resolving Key (IRK) ng iyong device, na tumutulong sa CAPod na matukoy ito sa mga kalapit na device. - Madalas palitan ng AirPods ang kanilang Bluetooth address para sa privacy. Tinutulungan ng IRK ang CAPod na makilala ang iyong device. Kailangan mo ng isang beses na access sa isang MacBook. - Encryption Key - Ang encryption key ng iyong device, na nagpapahintulot sa CAPod na makuha ang detalyadong impormasyon ng status. - Nagpapadala ang AirPods ng status message, na bahagi nito ay naka-encrypt. Pinapayagan ng encryption key ang CAPod na i-decrypt ang buong mensahe. Kailangan mo ng isang beses na access sa isang MacBook. + Identity Key + Ang Identity Resolving Key (IRK) ng iyong device, na tumutulong sa CAPod na matukoy ito sa mga kalapit na device. + Madalas palitan ng AirPods ang kanilang Bluetooth address para sa privacy. Tinutulungan ng IRK ang CAPod na makilala ang iyong device. Kailangan mo ng isang beses na access sa isang MacBook. + Encryption Key + Ang encryption key ng iyong device, na nagpapahintulot sa CAPod na makuha ang detalyadong impormasyon ng status. + Nagpapadala ang AirPods ng status message, na bahagi nito ay naka-encrypt. Pinapayagan ng encryption key ang CAPod na i-decrypt ang buong mensahe. Kailangan mo ng isang beses na access sa isang MacBook. One pod mode Hindi kinakailangang suotin ang parehong pods, sapat na ang pagsusuot ng isang pod para mag-trigger ng mga reaksyon. diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 77de3594..f44951bf 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -50,12 +50,12 @@ Aucune Le modèle de votre appareil Le modèle de votre appareil principal. Facilite la reconnaissance de votre appareil par l’appli s’il n’est pas connecté à votre téléphone. - Clé d’identité - La clé de résolution d\'identité de votre appareil (CRI/IRK), qui aide CAPod à l\'identifier parmi les appareils proches. - Les AirPods changent fréquemment d’adresse Bluetooth pour des raisons de confidentialité. La CRI aide CAPod à reconnaître votre appareil. Un accès ponctuel à un MacBook est nécessaire. - Clé de chiffrement - La clé de chiffrement de votre appareil, qui permet à CAPod de récupérer des renseignements détaillés sur l’état de l’appareil. - Les AirPods envoient un message d’état, dont une partie est chiffrée. La clé de chiffrement permet à CAPod de déchiffrer l’intégralité du message. Un accès ponctuel à un MacBook est nécessaire. + Clé d’identité + La clé de résolution d\'identité de votre appareil (CRI/IRK), qui aide CAPod à l\'identifier parmi les appareils proches. + Les AirPods changent fréquemment d’adresse Bluetooth pour des raisons de confidentialité. La CRI aide CAPod à reconnaître votre appareil. Un accès ponctuel à un MacBook est nécessaire. + Clé de chiffrement + La clé de chiffrement de votre appareil, qui permet à CAPod de récupérer des renseignements détaillés sur l’état de l’appareil. + Les AirPods envoient un message d’état, dont une partie est chiffrée. La clé de chiffrement permet à CAPod de déchiffrer l’intégralité du message. Un accès ponctuel à un MacBook est nécessaire. Mode à un seul AirPod Il n’est pas nécessaire de porter deux AirPods, en porter un seul suffit à déclencher les réactions. Afficher une fenêtre pour l’étui diff --git a/app/src/main/res/values-gl-rES/strings.xml b/app/src/main/res/values-gl-rES/strings.xml index f441953d..c1271bc1 100644 --- a/app/src/main/res/values-gl-rES/strings.xml +++ b/app/src/main/res/values-gl-rES/strings.xml @@ -55,12 +55,12 @@ Ningún Modelo do teu dispositivo O modelo do teu dispositivo principal. Isto axuda á aplicación a recoñecer o teu dispositivo cando non está conectado ao teu teléfono. - Chave de identidade - A Chave de Resolución de Identidade (IRK) do teu dispositivo, que axuda a CAPod a identificalo entre os dispositivos próximos. - Os AirPods cambian frecuentemente o seu enderezo Bluetooth por privacidade. A IRK axuda a CAPod a recoñecer o teu dispositivo. Necesitas acceso único a un MacBook. - Chave de cifrado - A chave de cifrado do teu dispositivo, que permite a CAPod recuperar información detallada do estado. - Os AirPods envían unha mensaxe de estado, parte da cal está cifrada. A chave de cifrado permite a CAPod descifrar a mensaxe completa. Necesitas acceso único a un MacBook. + Chave de identidade + A Chave de Resolución de Identidade (IRK) do teu dispositivo, que axuda a CAPod a identificalo entre os dispositivos próximos. + Os AirPods cambian frecuentemente o seu enderezo Bluetooth por privacidade. A IRK axuda a CAPod a recoñecer o teu dispositivo. Necesitas acceso único a un MacBook. + Chave de cifrado + A chave de cifrado do teu dispositivo, que permite a CAPod recuperar información detallada do estado. + Os AirPods envían unha mensaxe de estado, parte da cal está cifrada. A chave de cifrado permite a CAPod descifrar a mensaxe completa. Necesitas acceso único a un MacBook. Modo dun só auricular Non é necesario levar ambos os auriculares, levar un só é suficiente para activar reaccións. diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index ea2ea8e1..2d289e28 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -50,12 +50,12 @@ कोई नहीं आपके डिवाइस का मॉडल आपके मुख्य डिवाइस का मॉडल। यह ऐप को आपके डिवाइस को पहचानने में मदद करता है जब यह आपके फ़ोन से कनेक्ट नहीं होता है। - पहचान कुंजी - आपके डिवाइस की पहचान समाधान कुंजी (IRK), जो CAPod को आस-पास के डिवाइसों के बीच इसे पहचानने में मदद करती है। - AirPods गोपनीयता के लिए अक्सर अपना ब्लूटूथ पता बदलते हैं। IRK CAPod को आपके डिवाइस को पहचानने में मदद करता है। आपको MacBook तक एकमुश्त पहुंच की आवश्यकता है। - एन्क्रिप्शन कुंजी - आपके डिवाइस की एन्क्रिप्शन कुंजी, जो CAPod को विस्तृत स्थिति जानकारी पुनर्प्राप्त करने की अनुमति देती है। - AirPods एक स्थिति संदेश भेजते हैं, जिसका एक हिस्सा एन्क्रिप्ट किया गया है। एन्क्रिप्शन कुंजी CAPod को पूरा संदेश डिक्रिप्ट करने की अनुमति देती है। आपको MacBook तक एकमुश्त पहुंच की आवश्यकता है। + पहचान कुंजी + आपके डिवाइस की पहचान समाधान कुंजी (IRK), जो CAPod को आस-पास के डिवाइसों के बीच इसे पहचानने में मदद करती है। + AirPods गोपनीयता के लिए अक्सर अपना ब्लूटूथ पता बदलते हैं। IRK CAPod को आपके डिवाइस को पहचानने में मदद करता है। आपको MacBook तक एकमुश्त पहुंच की आवश्यकता है। + एन्क्रिप्शन कुंजी + आपके डिवाइस की एन्क्रिप्शन कुंजी, जो CAPod को विस्तृत स्थिति जानकारी पुनर्प्राप्त करने की अनुमति देती है। + AirPods एक स्थिति संदेश भेजते हैं, जिसका एक हिस्सा एन्क्रिप्ट किया गया है। एन्क्रिप्शन कुंजी CAPod को पूरा संदेश डिक्रिप्ट करने की अनुमति देती है। आपको MacBook तक एकमुश्त पहुंच की आवश्यकता है। एक पॉड मोड दोनों पॉड्स पहनना आवश्यक नहीं है, प्रतिक्रियाओं को ट्रिगर करने के लिए एक ही पॉड पहनना पर्याप्त है। केस पॉपअप दिखाएं diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index e4005af2..4e396be7 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -50,12 +50,12 @@ Nijedan Model vašeg uređaja Model vašeg glavnog uređaja. Ovo pomaže aplikaciji da prepozna vaš uređaj kada nije povezan s vašim telefonom. - Identifikacijski ključ - Identifikacijski ključ za rješavanje (IRK) vašeg uređaja, koji pomaže CAPod-u da ga identificira među obližnjim uređajima. - AirPods često mijenjaju svoju Bluetooth adresu radi privatnosti. IRK pomaže CAPod-u da prepozna vaš uređaj. Potreban vam je jednokratni pristup MacBooku. - Ključ za šifriranje - Ključ za šifriranje vašeg uređaja, koji omogućuje CAPod-u dohvaćanje detaljnih informacija o statusu. - AirPods šalju poruku o statusu, čiji je dio šifriran. Ključ za šifriranje omogućuje CAPod-u dešifriranje cijele poruke. Potreban vam je jednokratni pristup MacBooku. + Identifikacijski ključ + Identifikacijski ključ za rješavanje (IRK) vašeg uređaja, koji pomaže CAPod-u da ga identificira među obližnjim uređajima. + AirPods često mijenjaju svoju Bluetooth adresu radi privatnosti. IRK pomaže CAPod-u da prepozna vaš uređaj. Potreban vam je jednokratni pristup MacBooku. + Ključ za šifriranje + Ključ za šifriranje vašeg uređaja, koji omogućuje CAPod-u dohvaćanje detaljnih informacija o statusu. + AirPods šalju poruku o statusu, čiji je dio šifriran. Ključ za šifriranje omogućuje CAPod-u dešifriranje cijele poruke. Potreban vam je jednokratni pristup MacBooku. Način jedne slušalice Nošenje obje slušalice nije potrebno, nošenje jedne slušalice dovoljno je za pokretanje reakcija. Prikaži skočni prozor kućišta diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index a19bf695..ffc1a241 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -50,12 +50,12 @@ Semmi Az Ön eszközének modellje A fő eszközöd típusa. Ez segít az alkalmazásnak felismerni az eszközt, amikor az nincs csatlakoztatva a telefonhoz. - Azonosító kulcs - Az eszköz identitásfeloldó kulcsa (IRK), amely segít a CAPodnak azonosítani azt a közeli eszközök között. - Az AirPod-ok adatvédelmi okokból gyakran változtatják a Bluetooth-címüket. Az IRK segít a CAPodnak felismerni az eszközét. Egyszeri hozzáférésre van szüksége egy MacBookhoz. - Titkosítási kulcs - Az eszköz titkosítási kulcsa, amely lehetővé teszi a CAPod számára a részletes állapotinformációk lekérését. - Az AirPod-ok állapotüzenetet küldenek, amelynek egy része titkosítva van. A titkosítási kulcs lehetővé teszi a CAPod számára a teljes üzenet visszafejtését. Egyszeri hozzáférésre van szüksége egy MacBookhoz. + Azonosító kulcs + Az eszköz identitásfeloldó kulcsa (IRK), amely segít a CAPodnak azonosítani azt a közeli eszközök között. + Az AirPod-ok adatvédelmi okokból gyakran változtatják a Bluetooth-címüket. Az IRK segít a CAPodnak felismerni az eszközét. Egyszeri hozzáférésre van szüksége egy MacBookhoz. + Titkosítási kulcs + Az eszköz titkosítási kulcsa, amely lehetővé teszi a CAPod számára a részletes állapotinformációk lekérését. + Az AirPod-ok állapotüzenetet küldenek, amelynek egy része titkosítva van. A titkosítási kulcs lehetővé teszi a CAPod számára a teljes üzenet visszafejtését. Egyszeri hozzáférésre van szüksége egy MacBookhoz. Egy fülhallgató mód Nem szükséges mindkét fülhallgató viselése, egyetlen elegendő a reakciók kiváltásához. Előugró ablak a tok kinyitásakor diff --git a/app/src/main/res/values-hy-rAM/strings.xml b/app/src/main/res/values-hy-rAM/strings.xml index ac771c3a..dce96abe 100644 --- a/app/src/main/res/values-hy-rAM/strings.xml +++ b/app/src/main/res/values-hy-rAM/strings.xml @@ -55,12 +55,12 @@ Ոչ մեկը Ձեր սարքի մոդելը Ձեր հիմնական սարքի մոդելը։ Սա օգնում է հավելվածին ճանաչել ձեր սարքը, երբ այն միացված չէ ձեր հեռախոսին։ - Նույնականացման բանալի - Ձեր սարքի Նույնականացման լուծման բանալին (IRK), որն օգնում է CAPod-ին այն նույնականացնել մոտակա սարքերի մեջ։ - AirPods-ները գաղտնիության նկատառումներով հաճախ փոխում են իրենց Bluetooth հասցեն։ IRK-ն օգնում է CAPod-ին ճանաչել ձեր սարքը։ Ձեզ անհրաժեշտ է մեկանգամյա մուտք դեպի MacBook։ - Գաղտնագրման բանալի - Ձեր սարքի գաղտնագրման բանալին, որը թույլ է տալիս CAPod-ին ստանալ կարգավիճակի մանրամասն տեղեկատվություն։ - AirPods-ները ուղարկում են կարգավիճակի հաղորդագրություն, որի մի մասը գաղտնագրված է։ Գաղտնագրման բանալին թույլ է տալիս CAPod-ին վերծանել ամբողջական հաղորդագրությունը։ Ձեզ անհրաժեշտ է մեկանգամյա մուտք դեպի MacBook։ + Նույնականացման բանալի + Ձեր սարքի Նույնականացման լուծման բանալին (IRK), որն օգնում է CAPod-ին այն նույնականացնել մոտակա սարքերի մեջ։ + AirPods-ները գաղտնիության նկատառումներով հաճախ փոխում են իրենց Bluetooth հասցեն։ IRK-ն օգնում է CAPod-ին ճանաչել ձեր սարքը։ Ձեզ անհրաժեշտ է մեկանգամյա մուտք դեպի MacBook։ + Գաղտնագրման բանալի + Ձեր սարքի գաղտնագրման բանալին, որը թույլ է տալիս CAPod-ին ստանալ կարգավիճակի մանրամասն տեղեկատվություն։ + AirPods-ները ուղարկում են կարգավիճակի հաղորդագրություն, որի մի մասը գաղտնագրված է։ Գաղտնագրման բանալին թույլ է տալիս CAPod-ին վերծանել ամբողջական հաղորդագրությունը։ Ձեզ անհրաժեշտ է մեկանգամյա մուտք դեպի MacBook։ Մեկ ականջակալի ռեժիմ Երկու ականջակալներն էլ կրելը պարտադիր չէ, մեկ ականջակալ կրելը բավարար է արձագանքներն ակտիվացնելու համար։ diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 3d61fbf0..f47409a2 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -50,12 +50,12 @@ Tidak ada Model perangkat Anda Model perangkat utama Anda. Ini membantu aplikasi mengenali perangkat Anda saat tidak terhubung ke ponsel Anda. - Kunci Identitas - Kunci Penyelesaian Identitas (IRK) perangkat Anda, yang membantu CAPod mengidentifikasinya di antara perangkat terdekat. - AirPods sering mengubah alamat Bluetooth mereka untuk privasi. IRK membantu CAPod mengenali perangkat Anda. Anda memerlukan akses sekali pakai ke MacBook. - Kunci Enkripsi - Kunci enkripsi perangkat Anda, yang memungkinkan CAPod mengambil informasi status terperinci. - AirPods mengirimkan pesan status, yang sebagian dienkripsi. Kunci enkripsi memungkinkan CAPod mendekripsi pesan lengkap. Anda memerlukan akses sekali pakai ke MacBook. + Kunci Identitas + Kunci Penyelesaian Identitas (IRK) perangkat Anda, yang membantu CAPod mengidentifikasinya di antara perangkat terdekat. + AirPods sering mengubah alamat Bluetooth mereka untuk privasi. IRK membantu CAPod mengenali perangkat Anda. Anda memerlukan akses sekali pakai ke MacBook. + Kunci Enkripsi + Kunci enkripsi perangkat Anda, yang memungkinkan CAPod mengambil informasi status terperinci. + AirPods mengirimkan pesan status, yang sebagian dienkripsi. Kunci enkripsi memungkinkan CAPod mendekripsi pesan lengkap. Anda memerlukan akses sekali pakai ke MacBook. Mode satu pod Memakai kedua pod tidak diperlukan, memakai satu pod saja sudah cukup untuk memicu reaksi. Tampilkan pop-up casing diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index 69b4dcb4..f245f323 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -55,12 +55,12 @@ Ekkert Gerð tækisins þíns Gerð aðaltækisins þíns. Þetta hjálpar forritinu að þekkja tækið þitt þegar það er ekki tengt símanum þínum. - Auðkennislykill - Auðkennisupplausnarlykill tækisins þíns (IRK), sem hjálpar CAPod að bera kennsl á það meðal nálægra tækja. - AirPods breyta oft Bluetooth heimilisfangi sínu vegna persónuverndar. IRK hjálpar CAPod að þekkja tækið þitt. Þú þarft aðgang að MacBook einu sinni. - Dulkóðunarlykill - Dulkóðunarlykill tækisins þíns, sem gerir CAPod kleift að sækja nákvæmar stöðuupplýsingar. - AirPods senda stöðuskilaboð, en hluti þeirra er dulkóðaður. Dulkóðunarlykillinn gerir CAPod kleift að afkóða öll skilaboðin. Þú þarft aðgang að MacBook einu sinni. + Auðkennislykill + Auðkennisupplausnarlykill tækisins þíns (IRK), sem hjálpar CAPod að bera kennsl á það meðal nálægra tækja. + AirPods breyta oft Bluetooth heimilisfangi sínu vegna persónuverndar. IRK hjálpar CAPod að þekkja tækið þitt. Þú þarft aðgang að MacBook einu sinni. + Dulkóðunarlykill + Dulkóðunarlykill tækisins þíns, sem gerir CAPod kleift að sækja nákvæmar stöðuupplýsingar. + AirPods senda stöðuskilaboð, en hluti þeirra er dulkóðaður. Dulkóðunarlykillinn gerir CAPod kleift að afkóða öll skilaboðin. Þú þarft aðgang að MacBook einu sinni. Eins heyrnartóls stilling Ekki er krafist þess að nota bæði heyrnartólin, nóg er að nota eitt heyrnartól til að kalla fram viðbrögð. diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 0e6e9eb3..e0ac7f81 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -50,12 +50,12 @@ Nessuno Modello del tuo dispositivo Il modello del tuo dispositivo principale. Questo aiuta l\'app a riconoscere il tuo dispositivo quando non è connesso al tuo telefono. - Chiave di identità - La Chiave di Risoluzione dell\'Identità (IRK) del tuo dispositivo, che aiuta CAPod a identificarlo tra i dispositivi vicini. - Gli AirPods cambiano frequentemente il loro indirizzo Bluetooth per motivi di privacy. L\'IRK aiuta CAPod a riconoscere il tuo dispositivo. Hai bisogno di un accesso una tantum a un MacBook. - Chiave di crittografia - La chiave di crittografia del tuo dispositivo, che consente a CAPod di recuperare informazioni dettagliate sullo stato. - Gli AirPods inviano un messaggio di stato, parte del quale è crittografato. La chiave di crittografia consente a CAPod di decrittografare l\'intero messaggio. Hai bisogno di un accesso una tantum a un MacBook. + Chiave di identità + La Chiave di Risoluzione dell\'Identità (IRK) del tuo dispositivo, che aiuta CAPod a identificarlo tra i dispositivi vicini. + Gli AirPods cambiano frequentemente il loro indirizzo Bluetooth per motivi di privacy. L\'IRK aiuta CAPod a riconoscere il tuo dispositivo. Hai bisogno di un accesso una tantum a un MacBook. + Chiave di crittografia + La chiave di crittografia del tuo dispositivo, che consente a CAPod di recuperare informazioni dettagliate sullo stato. + Gli AirPods inviano un messaggio di stato, parte del quale è crittografato. La chiave di crittografia consente a CAPod di decrittografare l\'intero messaggio. Hai bisogno di un accesso una tantum a un MacBook. Modalità un solo auricolare Non è necessario indossare entrambi gli auricolari, indossarne uno solo è sufficiente per attivare le reazioni. Mostra pop-up custodia diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index af6f0f23..1deed11a 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -50,12 +50,12 @@ אף אחד דגם המכשיר שלך הדגם של המכשיר הראשי שלך. זה עוזר לאפליקציה לזהות את המכשיר שלך כשהוא לא מחובר לטלפון שלך. - מפתח מזהה - מפתח זיהוי ההתקן (IRK) של המכשיר שלך, אשר עוזר ל-CAPod לזהות אותו בין התקנים קרובים. - AirPods משנים לעתים קרובות את כתובת ה-Bluetooth שלהן למען פרטיות. כתובת ה-IRK עוזרת ל-CAPod לזהות את המכשיר שלך. תזדקק לגישה חד פעמית ל-MacBook. - מפתח הצפנה - מפתח ההצפנה של המכשיר שלך, המאפשר ל-CAPod לאחזר מידע מפורט על המצב. - AirPods שולחים הודעת סטטוס, שחלקה מוצפן. מפתח ההצפנה מאפשר ל-CAPod לפענח את ההודעה המלאה. תזדקק לגישה חד פעמית ל-MacBook. + מפתח מזהה + מפתח זיהוי ההתקן (IRK) של המכשיר שלך, אשר עוזר ל-CAPod לזהות אותו בין התקנים קרובים. + AirPods משנים לעתים קרובות את כתובת ה-Bluetooth שלהן למען פרטיות. כתובת ה-IRK עוזרת ל-CAPod לזהות את המכשיר שלך. תזדקק לגישה חד פעמית ל-MacBook. + מפתח הצפנה + מפתח ההצפנה של המכשיר שלך, המאפשר ל-CAPod לאחזר מידע מפורט על המצב. + AirPods שולחים הודעת סטטוס, שחלקה מוצפן. מפתח ההצפנה מאפשר ל-CAPod לפענח את ההודעה המלאה. תזדקק לגישה חד פעמית ל-MacBook. מצב אוזניה בודדת אין צורך לענוד את שני האוזניות, לבישת אוזניה בודדת מספיקה כדי לעורר תגובות. הצג חלון קופץ diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 8bcdea2c..a411a346 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -55,12 +55,12 @@ なし デバイスモデル メインデバイスのモデル。これにより、アプリは電話に接続されていないときにデバイスを認識できます。 - アイデンティティキー - デバイスのアイデンティティ解決キー(IRK)。CAPodが近くのデバイスの中からそれを識別するのに役立ちます。 - AirPodsはプライバシーのためにBluetoothアドレスを頻繁に変更します。IRKはCAPodがデバイスを認識するのに役立ちます。MacBookへの1回限りのアクセスが必要です。 - 暗号化キー - デバイスの暗号化キー。CAPodが詳細なステータス情報を取得できるようにします。 - AirPodsはステータスメッセージを送信し、その一部は暗号化されています。暗号化キーを使用すると、CAPodは完全なメッセージを復号化できます。MacBookへの1回限りのアクセスが必要です。 + アイデンティティキー + デバイスのアイデンティティ解決キー(IRK)。CAPodが近くのデバイスの中からそれを識別するのに役立ちます。 + AirPodsはプライバシーのためにBluetoothアドレスを頻繁に変更します。IRKはCAPodがデバイスを認識するのに役立ちます。MacBookへの1回限りのアクセスが必要です。 + 暗号化キー + デバイスの暗号化キー。CAPodが詳細なステータス情報を取得できるようにします。 + AirPodsはステータスメッセージを送信し、その一部は暗号化されています。暗号化キーを使用すると、CAPodは完全なメッセージを復号化できます。MacBookへの1回限りのアクセスが必要です。 片耳モード 両方のポッドを装着する必要はありません。リアクションをトリガーするには、片方のポッドを装着するだけで十分です。 diff --git a/app/src/main/res/values-ka-rGE/strings.xml b/app/src/main/res/values-ka-rGE/strings.xml index 0ba05ee0..5c4f9460 100644 --- a/app/src/main/res/values-ka-rGE/strings.xml +++ b/app/src/main/res/values-ka-rGE/strings.xml @@ -55,12 +55,12 @@ არცერთი თქვენი მოწყობილობის მოდელი თქვენი ძირითადი მოწყობილობის მოდელი. ეს ეხმარება აპლიკაციას თქვენი მოწყობილობის ამოცნობაში, როდესაც ის არ არის დაკავშირებული თქვენს ტელეფონთან. - იდენტურობის გასაღები - თქვენი მოწყობილობის იდენტურობის გადაჭრის გასაღები (IRK), რომელიც ეხმარება CAPod-ს ახლომდებარე მოწყობილობებს შორის მისი იდენტიფიცირებაში. - AirPods-ები კონფიდენციალურობის მიზნით ხშირად იცვლიან Bluetooth მისამართს. IRK ეხმარება CAPod-ს თქვენი მოწყობილობის ამოცნობაში. MacBook-ზე ერთჯერადი წვდომა გჭირდებათ. - დაშიფვრის გასაღები - თქვენი მოწყობილობის დაშიფვრის გასაღები, რომელიც CAPod-ს საშუალებას აძლევს მიიღოს დეტალური სტატუსის ინფორმაცია. - AirPods-ები აგზავნიან სტატუსის შეტყობინებას, რომლის ნაწილი დაშიფრულია. დაშიფვრის გასაღები CAPod-ს საშუალებას აძლევს გაშიფროს სრული შეტყობინება. MacBook-ზე ერთჯერადი წვდომა გჭირდებათ. + იდენტურობის გასაღები + თქვენი მოწყობილობის იდენტურობის გადაჭრის გასაღები (IRK), რომელიც ეხმარება CAPod-ს ახლომდებარე მოწყობილობებს შორის მისი იდენტიფიცირებაში. + AirPods-ები კონფიდენციალურობის მიზნით ხშირად იცვლიან Bluetooth მისამართს. IRK ეხმარება CAPod-ს თქვენი მოწყობილობის ამოცნობაში. MacBook-ზე ერთჯერადი წვდომა გჭირდებათ. + დაშიფვრის გასაღები + თქვენი მოწყობილობის დაშიფვრის გასაღები, რომელიც CAPod-ს საშუალებას აძლევს მიიღოს დეტალური სტატუსის ინფორმაცია. + AirPods-ები აგზავნიან სტატუსის შეტყობინებას, რომლის ნაწილი დაშიფრულია. დაშიფვრის გასაღები CAPod-ს საშუალებას აძლევს გაშიფროს სრული შეტყობინება. MacBook-ზე ერთჯერადი წვდომა გჭირდებათ. ერთი ყურსასმენის რეჟიმი ორივე ყურსასმენის ტარება არ არის აუცილებელი, ერთი ყურსასმენის ტარება საკმარისია რეაქციების გასააქტიურებლად. diff --git a/app/src/main/res/values-km-rKH/strings.xml b/app/src/main/res/values-km-rKH/strings.xml index 92244467..9908cd72 100644 --- a/app/src/main/res/values-km-rKH/strings.xml +++ b/app/src/main/res/values-km-rKH/strings.xml @@ -55,12 +55,12 @@ គ្មាន ម៉ូដែលឧបករណ៍របស់អ្នក ម៉ូដែលឧបករណ៍ចម្បងរបស់អ្នក។ វាជួយកម្មវិធីឱ្យស្គាល់ឧបករណ៍របស់អ្នកនៅពេលដែលវាមិនត្រូវបានភ្ជាប់ទៅទូរស័ព្ទរបស់អ្នក។ - កូនសោអត្តសញ្ញាណ - កូនសោដោះស្រាយអត្តសញ្ញាណឧបករណ៍របស់អ្នក (IRK) ដែលជួយ CAPod ឱ្យស្គាល់វាក្នុងចំណោមឧបករណ៍នៅក្បែរ។ - AirPods តែងតែផ្លាស់ប្តូរអាសយដ្ឋាន Bluetooth របស់ពួកគេដើម្បីរក្សាភាពឯកជន។ IRK ជួយ CAPod ឱ្យស្គាល់ឧបករណ៍របស់អ្នក។ អ្នកត្រូវការការចូលប្រើ MacBook តែម្តងប៉ុណ្ណោះ។ - កូនសោអ៊ិនគ្រីប - កូនសោអ៊ិនគ្រីបឧបករណ៍របស់អ្នក ដែលអនុញ្ញាតឱ្យ CAPod ទាញយកព័ត៌មានស្ថានភាពលម្អិត។ - AirPods ផ្ញើសារស្ថានភាព ដែលផ្នែកខ្លះត្រូវបានអ៊ិនគ្រីប។ កូនសោអ៊ិនគ្រីបអនុញ្ញាតឱ្យ CAPod ឌិគ្រីបសារពេញលេញ។ អ្នកត្រូវការការចូលប្រើ MacBook តែម្តងប៉ុណ្ណោះ។ + កូនសោអត្តសញ្ញាណ + កូនសោដោះស្រាយអត្តសញ្ញាណឧបករណ៍របស់អ្នក (IRK) ដែលជួយ CAPod ឱ្យស្គាល់វាក្នុងចំណោមឧបករណ៍នៅក្បែរ។ + AirPods តែងតែផ្លាស់ប្តូរអាសយដ្ឋាន Bluetooth របស់ពួកគេដើម្បីរក្សាភាពឯកជន។ IRK ជួយ CAPod ឱ្យស្គាល់ឧបករណ៍របស់អ្នក។ អ្នកត្រូវការការចូលប្រើ MacBook តែម្តងប៉ុណ្ណោះ។ + កូនសោអ៊ិនគ្រីប + កូនសោអ៊ិនគ្រីបឧបករណ៍របស់អ្នក ដែលអនុញ្ញាតឱ្យ CAPod ទាញយកព័ត៌មានស្ថានភាពលម្អិត។ + AirPods ផ្ញើសារស្ថានភាព ដែលផ្នែកខ្លះត្រូវបានអ៊ិនគ្រីប។ កូនសោអ៊ិនគ្រីបអនុញ្ញាតឱ្យ CAPod ឌិគ្រីបសារពេញលេញ។ អ្នកត្រូវការការចូលប្រើ MacBook តែម្តងប៉ុណ្ណោះ។ របៀបផតមួយ មិនតម្រូវឱ្យពាក់ផតទាំងពីរទេ ការពាក់ផតតែមួយគឺគ្រប់គ្រាន់ដើម្បីបង្កឱ្យមានប្រតិកម្ម។ diff --git a/app/src/main/res/values-kmr-rTR/strings.xml b/app/src/main/res/values-kmr-rTR/strings.xml index 699488a8..8d41aa84 100644 --- a/app/src/main/res/values-kmr-rTR/strings.xml +++ b/app/src/main/res/values-kmr-rTR/strings.xml @@ -55,12 +55,12 @@ Tune Modela amûra we Modela amûra we ya sereke. Ev alîkariya sepanê dike ku amûra we nas bike dema ku ew bi têlefona we ve ne girêdayî ye. - Mifteya Nasnameyê - Mifteya Çareserkirina Nasnameya (IRK) amûra we, ku alîkariya CAPod dike ku wê di nav amûrên nêz de nas bike. - AirPods ji ber nepenîtiyê pir caran navnîşana xwe ya Bluetooth diguherînin. IRK alîkariya CAPod dike ku amûra we nas bike. Pêdiviya we bi gihîştina yekcarî ya MacBook heye. - Mifteya Şîfrekirinê - Mifteya şîfrekirina amûra we, ku dihêle CAPod agahdariya rewşa berfireh bistîne. - AirPods peyamek rewşê dişînin, ku beşek jê şîfrekirî ye. Mifteya şîfrekirinê dihêle CAPod peyama tevahî deşîfre bike. Pêdiviya we bi gihîştina yekcarî ya MacBook heye. + Mifteya Nasnameyê + Mifteya Çareserkirina Nasnameya (IRK) amûra we, ku alîkariya CAPod dike ku wê di nav amûrên nêz de nas bike. + AirPods ji ber nepenîtiyê pir caran navnîşana xwe ya Bluetooth diguherînin. IRK alîkariya CAPod dike ku amûra we nas bike. Pêdiviya we bi gihîştina yekcarî ya MacBook heye. + Mifteya Şîfrekirinê + Mifteya şîfrekirina amûra we, ku dihêle CAPod agahdariya rewşa berfireh bistîne. + AirPods peyamek rewşê dişînin, ku beşek jê şîfrekirî ye. Mifteya şîfrekirinê dihêle CAPod peyama tevahî deşîfre bike. Pêdiviya we bi gihîştina yekcarî ya MacBook heye. Moda yek pod Ne hewce ye ku herdu pod werin lixwekirin, lixwekirina podek tenê bes e ku bertekan bide destpêkirin. diff --git a/app/src/main/res/values-kn-rIN/strings.xml b/app/src/main/res/values-kn-rIN/strings.xml index ed40ab01..39004b0d 100644 --- a/app/src/main/res/values-kn-rIN/strings.xml +++ b/app/src/main/res/values-kn-rIN/strings.xml @@ -55,12 +55,12 @@ ಯಾವುದೂ ಇಲ್ಲ ನಿಮ್ಮ ಸಾಧನದ ಮಾದರಿ ನಿಮ್ಮ ಮುಖ್ಯ ಸಾಧನದ ಮಾದರಿ. ನಿಮ್ಮ ಫೋನ್‌ಗೆ ಸಂಪರ್ಕಗೊಂಡಿಲ್ಲದಿದ್ದಾಗ ನಿಮ್ಮ ಸಾಧನವನ್ನು ಗುರುತಿಸಲು ಇದು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ. - ಗುರುತಿನ ಕೀ - ನಿಮ್ಮ ಸಾಧನದ ಗುರುತಿನ ಪರಿಹಾರ ಕೀ (IRK), ಇದು ಹತ್ತಿರದ ಸಾಧನಗಳ ನಡುವೆ ಅದನ್ನು ಗುರುತಿಸಲು CAPod ಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ. - AirPods ಗೌಪ್ಯತೆಗಾಗಿ ತಮ್ಮ ಬ್ಲೂಟೂತ್ ವಿಳಾಸವನ್ನು ಆಗಾಗ್ಗೆ ಬದಲಾಯಿಸುತ್ತವೆ. IRK CAPod ಗೆ ನಿಮ್ಮ ಸಾಧನವನ್ನು ಗುರುತಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ನಿಮಗೆ MacBook ಗೆ ಒಮ್ಮೆ ಪ್ರವೇಶದ ಅಗತ್ಯವಿದೆ. - ಎನ್‌ಕ್ರಿಪ್ಶನ್ ಕೀ - ನಿಮ್ಮ ಸಾಧನದ ಎನ್‌ಕ್ರಿಪ್ಶನ್ ಕೀ, ಇದು CAPod ಗೆ ವಿವರವಾದ ಸ್ಥಿತಿ ಮಾಹಿತಿಯನ್ನು ಹಿಂಪಡೆಯಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. - AirPods ಸ್ಥಿತಿ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸುತ್ತವೆ, ಅದರ ಒಂದು ಭಾಗವನ್ನು ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡಲಾಗಿದೆ. ಎನ್‌ಕ್ರಿಪ್ಶನ್ ಕೀ CAPod ಗೆ ಪೂರ್ಣ ಸಂದೇಶವನ್ನು ಡೀಕ್ರಿಪ್ಟ್ ಮಾಡಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. ನಿಮಗೆ MacBook ಗೆ ಒಮ್ಮೆ ಪ್ರವೇಶದ ಅಗತ್ಯವಿದೆ. + ಗುರುತಿನ ಕೀ + ನಿಮ್ಮ ಸಾಧನದ ಗುರುತಿನ ಪರಿಹಾರ ಕೀ (IRK), ಇದು ಹತ್ತಿರದ ಸಾಧನಗಳ ನಡುವೆ ಅದನ್ನು ಗುರುತಿಸಲು CAPod ಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ. + AirPods ಗೌಪ್ಯತೆಗಾಗಿ ತಮ್ಮ ಬ್ಲೂಟೂತ್ ವಿಳಾಸವನ್ನು ಆಗಾಗ್ಗೆ ಬದಲಾಯಿಸುತ್ತವೆ. IRK CAPod ಗೆ ನಿಮ್ಮ ಸಾಧನವನ್ನು ಗುರುತಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ನಿಮಗೆ MacBook ಗೆ ಒಮ್ಮೆ ಪ್ರವೇಶದ ಅಗತ್ಯವಿದೆ. + ಎನ್‌ಕ್ರಿಪ್ಶನ್ ಕೀ + ನಿಮ್ಮ ಸಾಧನದ ಎನ್‌ಕ್ರಿಪ್ಶನ್ ಕೀ, ಇದು CAPod ಗೆ ವಿವರವಾದ ಸ್ಥಿತಿ ಮಾಹಿತಿಯನ್ನು ಹಿಂಪಡೆಯಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. + AirPods ಸ್ಥಿತಿ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸುತ್ತವೆ, ಅದರ ಒಂದು ಭಾಗವನ್ನು ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡಲಾಗಿದೆ. ಎನ್‌ಕ್ರಿಪ್ಶನ್ ಕೀ CAPod ಗೆ ಪೂರ್ಣ ಸಂದೇಶವನ್ನು ಡೀಕ್ರಿಪ್ಟ್ ಮಾಡಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. ನಿಮಗೆ MacBook ಗೆ ಒಮ್ಮೆ ಪ್ರವೇಶದ ಅಗತ್ಯವಿದೆ. ಒಂದು ಪಾಡ್ ಮೋಡ್ ಎರಡೂ ಪಾಡ್‌ಗಳನ್ನು ಧರಿಸುವುದು ಅನಿವಾರ್ಯವಲ್ಲ, ಪ್ರತಿಕ್ರಿಯೆಗಳನ್ನು ಪ್ರಚೋದಿಸಲು ಒಂದೇ ಪಾಡ್ ಧರಿಸಿದರೆ ಸಾಕು. diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 2bf9eeae..7cda8061 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -50,12 +50,12 @@ 없음 기기 모델 기본 기기의 모델입니다. 이렇게 하면 휴대폰에 연결되어 있지 않을 때 앱이 기기를 인식하는 데 도움이 됩니다. - ID 키 - 기기의 ID 확인 키(IRK)로, CAPod가 주변 기기 중에서 해당 기기를 식별하는 데 도움이 됩니다. - AirPods는 개인 정보 보호를 위해 Bluetooth 주소를 자주 변경합니다. IRK는 CAPod가 기기를 인식하는 데 도움이 됩니다. MacBook에 한 번 액세스해야 합니다. - 암호화 키 - 기기의 암호화 키로, CAPod가 자세한 상태 정보를 검색할 수 있도록 합니다. - AirPods는 상태 메시지를 보내며, 그중 일부는 암호화됩니다. 암호화 키를 사용하면 CAPod가 전체 메시지를 해독할 수 있습니다. MacBook에 한 번 액세스해야 합니다. + ID 키 + 기기의 ID 확인 키(IRK)로, CAPod가 주변 기기 중에서 해당 기기를 식별하는 데 도움이 됩니다. + AirPods는 개인 정보 보호를 위해 Bluetooth 주소를 자주 변경합니다. IRK는 CAPod가 기기를 인식하는 데 도움이 됩니다. MacBook에 한 번 액세스해야 합니다. + 암호화 키 + 기기의 암호화 키로, CAPod가 자세한 상태 정보를 검색할 수 있도록 합니다. + AirPods는 상태 메시지를 보내며, 그중 일부는 암호화됩니다. 암호화 키를 사용하면 CAPod가 전체 메시지를 해독할 수 있습니다. MacBook에 한 번 액세스해야 합니다. 단일 Pod 모드 양쪽 기기를 모두 착용할 필요 없이 한쪽만 착용해도 앱이 반응합니다. 케이스 팝업 표시 diff --git a/app/src/main/res/values-ky-rKG/strings.xml b/app/src/main/res/values-ky-rKG/strings.xml index 5dd672b4..44102de5 100644 --- a/app/src/main/res/values-ky-rKG/strings.xml +++ b/app/src/main/res/values-ky-rKG/strings.xml @@ -55,12 +55,12 @@ Жок Сиздин түзмөгүңүздүн модели Негизги түзмөгүңүздүн модели. Бул колдонмого түзмөгүңүздү телефонуңузга туташпаганда таанууга жардам берет. - Идентификациялык ачкыч - Түзмөгүңүздүн Идентификациялык Чечүү Ачкычы (IRK), ал CAPodго аны жакынкы түзмөктөрдүн арасынан аныктоого жардам берет. - AirPods купуялуулук үчүн Bluetooth дарегин тез-тез алмаштырып турат. IRK CAPodго түзмөгүңүздү таанууга жардам берет. Сизге MacBook\'ка бир жолку кирүү мүмкүнчүлүгү керек. - Шифрлөө ачкычы - Түзмөгүңүздүн шифрлөө ачкычы, ал CAPodго деталдуу абал маалыматын алууга мүмкүндүк берет. - AirPods абал билдирүүсүн жөнөтөт, анын бир бөлүгү шифрленген. Шифрлөө ачкычы CAPodго толук билдирүүнү чечмелөөгө мүмкүндүк берет. Сизге MacBook\'ка бир жолку кирүү мүмкүнчүлүгү керек. + Идентификациялык ачкыч + Түзмөгүңүздүн Идентификациялык Чечүү Ачкычы (IRK), ал CAPodго аны жакынкы түзмөктөрдүн арасынан аныктоого жардам берет. + AirPods купуялуулук үчүн Bluetooth дарегин тез-тез алмаштырып турат. IRK CAPodго түзмөгүңүздү таанууга жардам берет. Сизге MacBook\'ка бир жолку кирүү мүмкүнчүлүгү керек. + Шифрлөө ачкычы + Түзмөгүңүздүн шифрлөө ачкычы, ал CAPodго деталдуу абал маалыматын алууга мүмкүндүк берет. + AirPods абал билдирүүсүн жөнөтөт, анын бир бөлүгү шифрленген. Шифрлөө ачкычы CAPodго толук билдирүүнү чечмелөөгө мүмкүндүк берет. Сизге MacBook\'ка бир жолку кирүү мүмкүнчүлүгү керек. Бир кулакчын режими Эки кулакчынды тең тагуу талап кылынбайт, бир кулакчынды тагуу реакцияларды жаратуу үчүн жетиштүү. diff --git a/app/src/main/res/values-lo-rLA/strings.xml b/app/src/main/res/values-lo-rLA/strings.xml index 01f070d7..8c797db6 100644 --- a/app/src/main/res/values-lo-rLA/strings.xml +++ b/app/src/main/res/values-lo-rLA/strings.xml @@ -55,12 +55,12 @@ ບໍ່ມີ ម៉ូដែលឧបករណ៍ຂອງທ່ານ ម៉ូដែលឧបករណ៍ຫຼັກຂອງທ່ານ. ນີ້ຊ່ວຍໃຫ້ແອັບຮັບຮູ້ອຸປະກອນຂອງທ່ານເມື່ອມັນບໍ່ໄດ້ເຊື່ອມຕໍ່ກັບໂທລະສັບຂອງທ່ານ. - ລະຫັດປະຈຳຕົວ - ລະຫັດແກ້ໄຂປະຈຳຕົວອຸປະກອນຂອງທ່ານ (IRK), ເຊິ່ງຊ່ວຍ CAPod ໃຫ້ລະບຸມັນໃນບັນດາອຸປະກອນໃກ้ຄຽງ. - AirPods ມັກປ່ຽນທີ່ຢູ່ Bluetooth ຂອງພວກເຂົາເພື່ອຄວາມເປັນສ່ວນຕົວ. IRK ຊ່ວຍ CAPod ໃຫ້ຮັບຮູ້ອຸປະກອນຂອງທ່ານ. ທ່ານຕ້ອງການການເຂົ້າເຖິງ MacBook ຄັ້ງດຽວ. - ລະຫັດເຂົ້າລະຫັດ - ລະຫັດເຂົ້າລະຫັດອຸປະກອນຂອງທ່ານ, ເຊິ່ງອະນຸຍາດໃຫ້ CAPod ເອົາຂໍ້ມູນສະຖານະລະອຽດ. - AirPods ສົ່ງຂໍ້ຄວາມສະຖານະ, ສ່ວນໜຶ່ງຂອງມັນຖືກເຂົ້າລະຫັດ. ລະຫັດເຂົ້າລະຫັດອະນຸຍາດໃຫ້ CAPod ຖອດລະຫັດຂໍ້ຄວາມເຕັມ. ທ່ານຕ້ອງການການເຂົ້າເຖິງ MacBook ຄັ້ງດຽວ. + ລະຫັດປະຈຳຕົວ + ລະຫັດແກ້ໄຂປະຈຳຕົວອຸປະກອນຂອງທ່ານ (IRK), ເຊິ່ງຊ່ວຍ CAPod ໃຫ້ລະບຸມັນໃນບັນດາອຸປະກອນໃກ้ຄຽງ. + AirPods ມັກປ່ຽນທີ່ຢູ່ Bluetooth ຂອງພວກເຂົາເພື່ອຄວາມເປັນສ່ວນຕົວ. IRK ຊ່ວຍ CAPod ໃຫ້ຮັບຮູ້ອຸປະກອນຂອງທ່ານ. ທ່ານຕ້ອງການການເຂົ້າເຖິງ MacBook ຄັ້ງດຽວ. + ລະຫັດເຂົ້າລະຫັດ + ລະຫັດເຂົ້າລະຫັດອຸປະກອນຂອງທ່ານ, ເຊິ່ງອະນຸຍາດໃຫ້ CAPod ເອົາຂໍ້ມູນສະຖານະລະອຽດ. + AirPods ສົ່ງຂໍ້ຄວາມສະຖານະ, ສ່ວນໜຶ່ງຂອງມັນຖືກເຂົ້າລະຫັດ. ລະຫັດເຂົ້າລະຫັດອະນຸຍາດໃຫ້ CAPod ຖອດລະຫັດຂໍ້ຄວາມເຕັມ. ທ່ານຕ້ອງການການເຂົ້າເຖິງ MacBook ຄັ້ງດຽວ. ໂໝດផតດຽວ ບໍ່ຈຳເປັນຕ້ອງໃສ່ផតທັງສອງ, ການໃສ່ផតດຽວກໍພຽງພໍທີ່ຈະກະຕຸ້ນປະຕິກິริยา. diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 5de213d3..5a89c1b9 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -55,12 +55,12 @@ Nėra Jūsų įrenginio modelis Jūsų pagrindinio įrenginio modelis. Tai padeda programai atpažinti jūsų įrenginį, kai jis neprijungtas prie jūsų telefono. - Identifikavimo raktas - Jūsų įrenginio tapatybės nustatymo raktas (IRK), padedantis CAPod jį identifikuoti tarp netoliese esančių įrenginių. - „AirPods“ dažnai keičia savo „Bluetooth“ adresą privatumo sumetimais. IRK padeda CAPod atpažinti jūsų įrenginį. Jums reikės vienkartinės prieigos prie „MacBook“. - Šifravimo raktas - Jūsų įrenginio šifravimo raktas, leidžiantis CAPod gauti išsamią būsenos informaciją. - „AirPods“ siunčia būsenos pranešimą, kurio dalis yra užšifruota. Šifravimo raktas leidžia CAPod iššifruoti visą pranešimą. Jums reikės vienkartinės prieigos prie „MacBook“. + Identifikavimo raktas + Jūsų įrenginio tapatybės nustatymo raktas (IRK), padedantis CAPod jį identifikuoti tarp netoliese esančių įrenginių. + „AirPods“ dažnai keičia savo „Bluetooth“ adresą privatumo sumetimais. IRK padeda CAPod atpažinti jūsų įrenginį. Jums reikės vienkartinės prieigos prie „MacBook“. + Šifravimo raktas + Jūsų įrenginio šifravimo raktas, leidžiantis CAPod gauti išsamią būsenos informaciją. + „AirPods“ siunčia būsenos pranešimą, kurio dalis yra užšifruota. Šifravimo raktas leidžia CAPod iššifruoti visą pranešimą. Jums reikės vienkartinės prieigos prie „MacBook“. Vieno „pod“ režimas Nebūtina nešioti abiejų „pod“; vieno „pod“ nešiojimo pakanka reakcijoms suaktyvinti. diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index b65501ba..668592fe 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -55,12 +55,12 @@ Nav Jūsu ierīces modelis Jūsu galvenās ierīces modelis. Tas palīdz lietotnei atpazīt jūsu ierīci, kad tā nav savienota ar jūsu tālruni. - Identitātes atslēga - Jūsu ierīces identitātes atrisināšanas atslēga (IRK), kas palīdz CAPod to identificēt starp tuvumā esošajām ierīcēm. - AirPods privātuma apsvērumu dēļ bieži maina savu Bluetooth adresi. IRK palīdz CAPod atpazīt jūsu ierīci. Jums ir nepieciešama vienreizēja piekļuve MacBook. - Šifrēšanas atslēga - Jūsu ierīces šifrēšanas atslēga, kas ļauj CAPod iegūt detalizētu statusa informāciju. - AirPods nosūta statusa ziņojumu, kura daļa ir šifrēta. Šifrēšanas atslēga ļauj CAPod atšifrēt pilnu ziņojumu. Jums ir nepieciešama vienreizēja piekļuve MacBook. + Identitātes atslēga + Jūsu ierīces identitātes atrisināšanas atslēga (IRK), kas palīdz CAPod to identificēt starp tuvumā esošajām ierīcēm. + AirPods privātuma apsvērumu dēļ bieži maina savu Bluetooth adresi. IRK palīdz CAPod atpazīt jūsu ierīci. Jums ir nepieciešama vienreizēja piekļuve MacBook. + Šifrēšanas atslēga + Jūsu ierīces šifrēšanas atslēga, kas ļauj CAPod iegūt detalizētu statusa informāciju. + AirPods nosūta statusa ziņojumu, kura daļa ir šifrēta. Šifrēšanas atslēga ļauj CAPod atšifrēt pilnu ziņojumu. Jums ir nepieciešama vienreizēja piekļuve MacBook. Viena austiņas režīms Nav nepieciešams nēsāt abas austiņas, pietiek ar vienas austiņas nēsāšanu, lai izraisītu reakcijas. diff --git a/app/src/main/res/values-mk-rMK/strings.xml b/app/src/main/res/values-mk-rMK/strings.xml index 8efe850c..9f886cc6 100644 --- a/app/src/main/res/values-mk-rMK/strings.xml +++ b/app/src/main/res/values-mk-rMK/strings.xml @@ -55,12 +55,12 @@ Ниеден Модел на вашиот уред Моделот на вашиот главен уред. Ова и помага на апликацијата да го препознае вашиот уред кога не е поврзан со вашиот телефон. - Клуч за идентитет - Клучот за решавање на идентитетот (IRK) на вашиот уред, кој му помага на CAPod да го идентификува меѓу блиските уреди. - AirPods често ја менуваат својата Bluetooth адреса заради приватност. IRK му помага на CAPod да го препознае вашиот уред. Потребен ви е еднократен пристап до MacBook. - Клуч за шифрирање - Клучот за шифрирање на вашиот уред, кој му овозможува на CAPod да добие детални информации за статусот. - AirPods испраќаат статусна порака, чиј дел е шифриран. Клучот за шифрирање му овозможува на CAPod да ја дешифрира целата порака. Потребен ви е еднократен пристап до MacBook. + Клуч за идентитет + Клучот за решавање на идентитетот (IRK) на вашиот уред, кој му помага на CAPod да го идентификува меѓу блиските уреди. + AirPods често ја менуваат својата Bluetooth адреса заради приватност. IRK му помага на CAPod да го препознае вашиот уред. Потребен ви е еднократен пристап до MacBook. + Клуч за шифрирање + Клучот за шифрирање на вашиот уред, кој му овозможува на CAPod да добие детални информации за статусот. + AirPods испраќаат статусна порака, чиј дел е шифриран. Клучот за шифрирање му овозможува на CAPod да ја дешифрира целата порака. Потребен ви е еднократен пристап до MacBook. Режим со една слушалка Не е потребно да се носат двете слушалки, носењето на една слушалка е доволно за да се активираат реакции. diff --git a/app/src/main/res/values-ml-rIN/strings.xml b/app/src/main/res/values-ml-rIN/strings.xml index f4b0f740..7af7ca06 100644 --- a/app/src/main/res/values-ml-rIN/strings.xml +++ b/app/src/main/res/values-ml-rIN/strings.xml @@ -55,12 +55,12 @@ ഒന്നുമില്ല നിങ്ങളുടെ ഉപകരണ മോഡൽ നിങ്ങളുടെ പ്രധാന ഉപകരണത്തിന്റെ മോഡൽ. നിങ്ങളുടെ ഫോണിലേക്ക് കണക്റ്റുചെയ്‌തിട്ടില്ലാത്തപ്പോൾ നിങ്ങളുടെ ഉപകരണം തിരിച്ചറിയാൻ ഇത് ആപ്പിനെ സഹായിക്കുന്നു. - ഐഡന്റിറ്റി കീ - നിങ്ങളുടെ ഉപകരണത്തിന്റെ ഐഡന്റിറ്റി റിസോൾവിംഗ് കീ (IRK), സമീപത്തുള്ള ഉപകരണങ്ങൾക്കിടയിൽ അതിനെ തിരിച്ചറിയാൻ CAPod-നെ സഹായിക്കുന്നു. - സ്വകാര്യതയ്ക്കായി AirPods അവരുടെ ബ്ലൂടൂത്ത് വിലാസം പതിവായി മാറ്റുന്നു. നിങ്ങളുടെ ഉപകരണം തിരിച്ചറിയാൻ IRK CAPod-നെ സഹായിക്കുന്നു. നിങ്ങൾക്ക് MacBook-ലേക്ക് ഒരു തവണ ആക്‌സസ് ആവശ്യമാണ്. - എൻക്രിപ്ഷൻ കീ - നിങ്ങളുടെ ഉപകരണത്തിന്റെ എൻക്രിപ്ഷൻ കീ, ഇത് CAPod-ന് വിശദമായ സ്റ്റാറ്റസ് വിവരങ്ങൾ വീണ്ടെടുക്കാൻ ಅನುಮತಿಸುತ್ತದೆ. - AirPods ഒരു സ്റ്റാറ്റസ് സന്ദേശം അയയ്ക്കുന്നു, അതിന്റെ ഒരു ഭാഗം എൻക്രിപ്റ്റ് ചെയ്‌തിരിക്കുന്നു. എൻക്രിപ്ഷൻ കീ CAPod-ന് മുഴുവൻ സന്ദേശവും ഡീക്രിപ്റ്റ് ചെയ്യാൻ ಅನುಮತಿಸುತ್ತದೆ. നിങ്ങൾക്ക് MacBook-ലേക്ക് ഒരു തവണ ആക്‌സസ് ആവശ്യമാണ്. + ഐഡന്റിറ്റി കീ + നിങ്ങളുടെ ഉപകരണത്തിന്റെ ഐഡന്റിറ്റി റിസോൾവിംഗ് കീ (IRK), സമീപത്തുള്ള ഉപകരണങ്ങൾക്കിടയിൽ അതിനെ തിരിച്ചറിയാൻ CAPod-നെ സഹായിക്കുന്നു. + സ്വകാര്യതയ്ക്കായി AirPods അവരുടെ ബ്ലൂടൂത്ത് വിലാസം പതിവായി മാറ്റുന്നു. നിങ്ങളുടെ ഉപകരണം തിരിച്ചറിയാൻ IRK CAPod-നെ സഹായിക്കുന്നു. നിങ്ങൾക്ക് MacBook-ലേക്ക് ഒരു തവണ ആക്‌സസ് ആവശ്യമാണ്. + എൻക്രിപ്ഷൻ കീ + നിങ്ങളുടെ ഉപകരണത്തിന്റെ എൻക്രിപ്ഷൻ കീ, ഇത് CAPod-ന് വിശദമായ സ്റ്റാറ്റസ് വിവരങ്ങൾ വീണ്ടെടുക്കാൻ ಅನುಮತಿಸುತ್ತದೆ. + AirPods ഒരു സ്റ്റാറ്റസ് സന്ദേശം അയയ്ക്കുന്നു, അതിന്റെ ഒരു ഭാഗം എൻക്രിപ്റ്റ് ചെയ്‌തിരിക്കുന്നു. എൻക്രിപ്ഷൻ കീ CAPod-ന് മുഴുവൻ സന്ദേശവും ഡീക്രിപ്റ്റ് ചെയ്യാൻ ಅನುಮತಿಸುತ್ತದೆ. നിങ്ങൾക്ക് MacBook-ലേക്ക് ഒരു തവണ ആക്‌സസ് ആവശ്യമാണ്. ഒരു പോഡ് മോഡ് രണ്ട് പോഡുകളും ധരിക്കേണ്ട ആവശ്യമില്ല, പ്രതികരണങ്ങൾ പ്രവർത്തനക്ഷമമാക്കാൻ ഒരൊറ്റ പോഡ് ധരിച്ചാൽ മതി. diff --git a/app/src/main/res/values-mn-rMN/strings.xml b/app/src/main/res/values-mn-rMN/strings.xml index 1eeb4e6a..eb4a9c7a 100644 --- a/app/src/main/res/values-mn-rMN/strings.xml +++ b/app/src/main/res/values-mn-rMN/strings.xml @@ -55,12 +55,12 @@ Байхгүй Таны төхөөрөмжийн загвар Таны үндсэн төхөөрөмжийн загвар. Энэ нь таны утсанд холбогдоогүй үед апп-д таны төхөөрөмжийг танихад тусалдаг. - Таних түлхүүр - Таны төхөөрөмжийн Таних Түлхүүр Шийдвэрлэх Түлхүүр (IRK), энэ нь CAPod-д ойролцоох төхөөрөмжүүдийн дундаас түүнийг танихад тусалдаг. - AirPods нь нууцлалын үүднээс Bluetooth хаягаа байнга сольдог. IRK нь CAPod-д таны төхөөрөмжийг танихад тусалдаг. Танд MacBook-д нэг удаагийн хандалт хэрэгтэй. - Шифрлэлтийн түлхүүр - Таны төхөөрөмжийн шифрлэлтийн түлхүүр, энэ нь CAPod-д нарийвчилсан төлөвийн мэдээллийг авахад тусалдаг. - AirPods нь төлөвийн мессеж илгээдэг бөгөөд түүний зарим хэсэг нь шифрлэгдсэн байдаг. Шифрлэлтийн түлхүүр нь CAPod-д бүхэл мессежийг тайлахад тусалдаг. Танд MacBook-д нэг удаагийн хандалт хэрэгтэй. + Таних түлхүүр + Таны төхөөрөмжийн Таних Түлхүүр Шийдвэрлэх Түлхүүр (IRK), энэ нь CAPod-д ойролцоох төхөөрөмжүүдийн дундаас түүнийг танихад тусалдаг. + AirPods нь нууцлалын үүднээс Bluetooth хаягаа байнга сольдог. IRK нь CAPod-д таны төхөөрөмжийг танихад тусалдаг. Танд MacBook-д нэг удаагийн хандалт хэрэгтэй. + Шифрлэлтийн түлхүүр + Таны төхөөрөмжийн шифрлэлтийн түлхүүр, энэ нь CAPod-д нарийвчилсан төлөвийн мэдээллийг авахад тусалдаг. + AirPods нь төлөвийн мессеж илгээдэг бөгөөд түүний зарим хэсэг нь шифрлэгдсэн байдаг. Шифрлэлтийн түлхүүр нь CAPod-д бүхэл мессежийг тайлахад тусалдаг. Танд MacBook-д нэг удаагийн хандалт хэрэгтэй. Нэг чихэвчний горим Хоёр чихэвчийг хоёуланг нь зүүх шаардлагагүй, урвалыг өдөөхийн тулд ганц чихэвч зүүхэд л хангалттай. diff --git a/app/src/main/res/values-mr-rIN/strings.xml b/app/src/main/res/values-mr-rIN/strings.xml index c0e7e041..51f1d73c 100644 --- a/app/src/main/res/values-mr-rIN/strings.xml +++ b/app/src/main/res/values-mr-rIN/strings.xml @@ -55,12 +55,12 @@ काहीही नाही तुमच्या डिव्हाइसचे मॉडेल तुमच्या मुख्य डिव्हाइसचे मॉडेल. हे अॅपला तुमच्या फोनशी कनेक्ट नसताना तुमचे डिव्हाइस ओळखण्यात मदत करते. - ओळख की - तुमच्या डिव्हाइसची ओळख निराकरण की (IRK), जी CAPod ला जवळपासच्या डिव्हाइसपैकी ओळखण्यास मदत करते. - AirPods गोपनीयतेसाठी वारंवार त्यांचे ब्लूटूथ पत्ते बदलतात. IRK CAPod ला तुमचे डिव्हाइस ओळखण्यास मदत करते. तुम्हाला MacBook मध्ये एकदा प्रवेश आवश्यक आहे. - एनक्रिप्शन की - तुमच्या डिव्हाइसची एनक्रिप्शन की, जी CAPod ला तपशीलवार स्थिती माहिती पुनर्प्राप्त करण्यास अनुमती देते. - AirPods स्थिती संदेश पाठवतात, ज्याचा काही भाग एनक्रिप्ट केलेला असतो. एनक्रिप्शन की CAPod ला संपूर्ण संदेश डीक्रिप्ट करण्यास अनुमती देते. तुम्हाला MacBook मध्ये एकदा प्रवेश आवश्यक आहे. + ओळख की + तुमच्या डिव्हाइसची ओळख निराकरण की (IRK), जी CAPod ला जवळपासच्या डिव्हाइसपैकी ओळखण्यास मदत करते. + AirPods गोपनीयतेसाठी वारंवार त्यांचे ब्लूटूथ पत्ते बदलतात. IRK CAPod ला तुमचे डिव्हाइस ओळखण्यास मदत करते. तुम्हाला MacBook मध्ये एकदा प्रवेश आवश्यक आहे. + एनक्रिप्शन की + तुमच्या डिव्हाइसची एनक्रिप्शन की, जी CAPod ला तपशीलवार स्थिती माहिती पुनर्प्राप्त करण्यास अनुमती देते. + AirPods स्थिती संदेश पाठवतात, ज्याचा काही भाग एनक्रिप्ट केलेला असतो. एनक्रिप्शन की CAPod ला संपूर्ण संदेश डीक्रिप्ट करण्यास अनुमती देते. तुम्हाला MacBook मध्ये एकदा प्रवेश आवश्यक आहे. एक पॉड मोड दोन्ही पॉड्स घालणे आवश्यक नाही, प्रतिक्रिया सुरू करण्यासाठी एकच पॉड घालणे पुरेसे आहे. diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index 4e4d458a..11fc9a59 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -50,12 +50,12 @@ Tiada Model peranti anda Model peranti utama anda. Ini membantu apl mengenali peranti anda apabila ia tidak disambungkan ke telefon anda. - Kunci Identiti - Kunci Penyelesaian Identiti (IRK) peranti anda, yang membantu CAPod mengenal pastinya di kalangan peranti berdekatan. - AirPods kerap menukar alamat Bluetooth mereka untuk privasi. IRK membantu CAPod mengenali peranti anda. Anda memerlukan akses sekali sahaja ke MacBook. - Kunci Penyulitan - Kunci penyulitan peranti anda, yang membolehkan CAPod mendapatkan maklumat status terperinci. - AirPods menghantar mesej status, sebahagian daripadanya disulitkan. Kunci penyulitan membolehkan CAPod menyahsulit mesej penuh. Anda memerlukan akses sekali sahaja ke MacBook. + Kunci Identiti + Kunci Penyelesaian Identiti (IRK) peranti anda, yang membantu CAPod mengenal pastinya di kalangan peranti berdekatan. + AirPods kerap menukar alamat Bluetooth mereka untuk privasi. IRK membantu CAPod mengenali peranti anda. Anda memerlukan akses sekali sahaja ke MacBook. + Kunci Penyulitan + Kunci penyulitan peranti anda, yang membolehkan CAPod mendapatkan maklumat status terperinci. + AirPods menghantar mesej status, sebahagian daripadanya disulitkan. Kunci penyulitan membolehkan CAPod menyahsulit mesej penuh. Anda memerlukan akses sekali sahaja ke MacBook. Mod satu pod Memakai kedua-dua pod tidak diperlukan, memakai satu pod sudah memadai untuk mencetuskan tindak balas. Tunjukkan pop timbul bekas diff --git a/app/src/main/res/values-my-rMM/strings.xml b/app/src/main/res/values-my-rMM/strings.xml index 6fe0771b..b6b2fa71 100644 --- a/app/src/main/res/values-my-rMM/strings.xml +++ b/app/src/main/res/values-my-rMM/strings.xml @@ -55,12 +55,12 @@ မရှိပါ သင့်စက်ပစ္စည်းမော်ဒယ် သင့်ပင်မစက်ပစ္စည်း၏မော်ဒယ်။ ၎င်းသည် သင့်ဖုန်းသို့မချိတ်ဆက်ထားသည့်အခါ သင့်စက်ပစ္စည်းကို အက်ပ်ကမှတ်မိစေရန် ကူညီပေးသည်။ - အထောက်အထားကီး - သင့်စက်ပစ္စည်း၏ အထောက်အထားဖြေရှင်းရေးကီး (IRK)၊ ၎င်းသည် CAPod အား အနီးနားရှိစက်ပစ္စည်းများကြားတွင် ၎င်းကိုခွဲခြားသိရှိနိုင်ရန် ကူညီပေးသည်။ - AirPods သည် လုံခြုံရေးအတွက် ၎င်းတို့၏ Bluetooth လိပ်စာကို မကြာခဏပြောင်းလဲတတ်သည်။ IRK သည် CAPod အား သင့်စက်ပစ္စည်းကိုမှတ်မိစေရန် ကူညီပေးသည်။ သင့်အနေဖြင့် MacBook သို့ တစ်ကြိမ်ဝင်ရောက်ခွင့်လိုအပ်သည်။ - စာဝှက်ကီး - သင့်စက်ပစ္စည်း၏ စာဝှက်ကီး၊ ၎င်းသည် CAPod အား အသေးစိတ်အခြေအနေအချက်အလက်များကို ရယူနိုင်စေသည်။ - AirPods သည် အခြေအနေမက်ဆေ့ချ်တစ်ခုပို့လွှတ်ပြီး ၎င်း၏တစ်စိတ်တစ်ပိုင်းကို စာဝှက်ထားသည်။ စာဝှက်ကီးသည် CAPod အား မက်ဆေ့ချ်အပြည့်အစုံကို စာဝှက်ဖြည်နိုင်စေသည်။ သင့်အနေဖြင့် MacBook သို့ တစ်ကြိမ်ဝင်ရောက်ခွင့်လိုအပ်သည်။ + အထောက်အထားကီး + သင့်စက်ပစ္စည်း၏ အထောက်အထားဖြေရှင်းရေးကီး (IRK)၊ ၎င်းသည် CAPod အား အနီးနားရှိစက်ပစ္စည်းများကြားတွင် ၎င်းကိုခွဲခြားသိရှိနိုင်ရန် ကူညီပေးသည်။ + AirPods သည် လုံခြုံရေးအတွက် ၎င်းတို့၏ Bluetooth လိပ်စာကို မကြာခဏပြောင်းလဲတတ်သည်။ IRK သည် CAPod အား သင့်စက်ပစ္စည်းကိုမှတ်မိစေရန် ကူညီပေးသည်။ သင့်အနေဖြင့် MacBook သို့ တစ်ကြိမ်ဝင်ရောက်ခွင့်လိုအပ်သည်။ + စာဝှက်ကီး + သင့်စက်ပစ္စည်း၏ စာဝှက်ကီး၊ ၎င်းသည် CAPod အား အသေးစိတ်အခြေအနေအချက်အလက်များကို ရယူနိုင်စေသည်။ + AirPods သည် အခြေအနေမက်ဆေ့ချ်တစ်ခုပို့လွှတ်ပြီး ၎င်း၏တစ်စိတ်တစ်ပိုင်းကို စာဝှက်ထားသည်။ စာဝှက်ကီးသည် CAPod အား မက်ဆေ့ချ်အပြည့်အစုံကို စာဝှက်ဖြည်နိုင်စေသည်။ သင့်အနေဖြင့် MacBook သို့ တစ်ကြိမ်ဝင်ရောက်ခွင့်လိုအပ်သည်။ တစ်လုံးတည်းမုဒ် နားကြပ်နှစ်လုံးလုံးတပ်ရန်မလိုအပ်ပါ၊ တုံ့ပြန်မှုများကိုစတင်ရန် နားကြပ်တစ်လုံးတည်းတပ်ရုံဖြင့် လုံလောက်ပါသည်။ diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index 604f5893..57626e53 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -50,12 +50,12 @@ Ingen Enhetens modell Modellen til hovedenheten din. Dette hjelper appen med å gjenkjenne enheten din når den ikke er koblet til telefonen. - Identitetsnøkkel - Enhetens identitetsoppløsningsnøkkel (IRK), som hjelper CAPod med å identifisere den blant enheter i nærheten. - AirPods endrer ofte Bluetooth-adressen sin for personvern. IRK-en hjelper CAPod med å gjenkjenne enheten din. Du trenger engangstilgang til en MacBook. - Krypteringsnøkkel - Enhetens krypteringsnøkkel, som lar CAPod hente detaljert statusinformasjon. - AirPods sender en statusmelding, der deler av den er kryptert. Krypteringsnøkkelen lar CAPod dekryptere hele meldingen. Du trenger engangstilgang til en MacBook. + Identitetsnøkkel + Enhetens identitetsoppløsningsnøkkel (IRK), som hjelper CAPod med å identifisere den blant enheter i nærheten. + AirPods endrer ofte Bluetooth-adressen sin for personvern. IRK-en hjelper CAPod med å gjenkjenne enheten din. Du trenger engangstilgang til en MacBook. + Krypteringsnøkkel + Enhetens krypteringsnøkkel, som lar CAPod hente detaljert statusinformasjon. + AirPods sender en statusmelding, der deler av den er kryptert. Krypteringsnøkkelen lar CAPod dekryptere hele meldingen. Du trenger engangstilgang til en MacBook. En pod-modus Du trenger kun ha på deg en pod for å utløse reaksjoner, i stedet for begge. Vis etui-popup diff --git a/app/src/main/res/values-ne-rNP/strings.xml b/app/src/main/res/values-ne-rNP/strings.xml index 72c130be..decb0bdb 100644 --- a/app/src/main/res/values-ne-rNP/strings.xml +++ b/app/src/main/res/values-ne-rNP/strings.xml @@ -55,12 +55,12 @@ कुनै पनि छैन तपाईंको उपकरणको मोडेल तपाईंको मुख्य उपकरणको मोडेल। यसले एपलाई तपाईंको फोनमा जडान नभएको बेला तपाईंको उपकरण चिन्न मद्दत गर्दछ। - पहिचान कुञ्जी - तपाईंको उपकरणको पहिचान समाधान कुञ्जी (IRK), जसले CAPod लाई नजिकका उपकरणहरू बीचमा पहिचान गर्न मद्दत गर्दछ। - AirPods ले गोपनीयताका लागि आफ्नो ब्लुटुथ ठेगाना बारम्बार परिवर्तन गर्दछ। IRK ले CAPod लाई तपाईंको उपकरण चिन्न मद्दत गर्दछ। तपाईंलाई MacBook मा एक पटक पहुँच आवश्यक छ। - इन्क्रिप्शन कुञ्जी - तपाईंको उपकरणको इन्क्रिप्शन कुञ्जी, जसले CAPod लाई विस्तृत स्थिति जानकारी पुन: प्राप्त गर्न अनुमति दिन्छ। - AirPods ले स्थिति सन्देश पठाउँछ, जसको अंश इन्क्रिप्ट गरिएको हुन्छ। इन्क्रिप्शन कुञ्जीले CAPod लाई पूर्ण सन्देश डिक्रिप्ट गर्न अनुमति दिन्छ। तपाईंलाई MacBook मा एक पटक पहुँच आवश्यक छ। + पहिचान कुञ्जी + तपाईंको उपकरणको पहिचान समाधान कुञ्जी (IRK), जसले CAPod लाई नजिकका उपकरणहरू बीचमा पहिचान गर्न मद्दत गर्दछ। + AirPods ले गोपनीयताका लागि आफ्नो ब्लुटुथ ठेगाना बारम्बार परिवर्तन गर्दछ। IRK ले CAPod लाई तपाईंको उपकरण चिन्न मद्दत गर्दछ। तपाईंलाई MacBook मा एक पटक पहुँच आवश्यक छ। + इन्क्रिप्शन कुञ्जी + तपाईंको उपकरणको इन्क्रिप्शन कुञ्जी, जसले CAPod लाई विस्तृत स्थिति जानकारी पुन: प्राप्त गर्न अनुमति दिन्छ। + AirPods ले स्थिति सन्देश पठाउँछ, जसको अंश इन्क्रिप्ट गरिएको हुन्छ। इन्क्रिप्शन कुञ्जीले CAPod लाई पूर्ण सन्देश डिक्रिप्ट गर्न अनुमति दिन्छ। तपाईंलाई MacBook मा एक पटक पहुँच आवश्यक छ। एक पोड मोड दुबै पोडहरू लगाउन आवश्यक छैन, प्रतिक्रियाहरू ट्रिगर गर्न एकल पोड लगाउनु पर्याप्त छ। diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index b5f065ba..8e10a94c 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -50,12 +50,12 @@ Geen Uw apparaatmodel Het model van uw hoofdapparaat. Dit helpt de app uw apparaat te herkennen wanneer het niet is verbonden met uw telefoon. - Identiteitssleutel - De Identity Resolving Key (IRK) van je apparaat, waarmee CAPod het kan identificeren tussen apparaten in de buurt. - AirPods wijzigen regelmatig hun Bluetooth-adres om privacyredenen. De IRK helpt CAPod je apparaat te herkennen. Je hebt hiervoor eenmalige toegang tot een MacBook nodig. - Encryptiesleutel - De encryptiesleutel van je apparaat, waarmee CAPod gedetailleerde statusinformatie kan ophalen. - AirPods sturen een statusbericht, waarvan een deel versleuteld is. De encryptiesleutel stelt CAPod in staat het volledige bericht te ontsleutelen. Je hebt hiervoor eenmalige toegang tot een MacBook nodig. + Identiteitssleutel + De Identity Resolving Key (IRK) van je apparaat, waarmee CAPod het kan identificeren tussen apparaten in de buurt. + AirPods wijzigen regelmatig hun Bluetooth-adres om privacyredenen. De IRK helpt CAPod je apparaat te herkennen. Je hebt hiervoor eenmalige toegang tot een MacBook nodig. + Encryptiesleutel + De encryptiesleutel van je apparaat, waarmee CAPod gedetailleerde statusinformatie kan ophalen. + AirPods sturen een statusbericht, waarvan een deel versleuteld is. De encryptiesleutel stelt CAPod in staat het volledige bericht te ontsleutelen. Je hebt hiervoor eenmalige toegang tot een MacBook nodig. Eén pod-modus Het dragen van beide pods is niet vereist, het dragen van een enkele pod is voldoende om reacties uit te lokken. Case-pop-up weergeven diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 9d33039f..dbb21869 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -50,12 +50,12 @@ Brak Model twojego urządzenia Model twojego głównego urządzenia. Pomaga aplikacji rozpoznać twoje urządzenie, gdy nie jest połączone z telefonem. - Klucz Identyfikacyjny - Klucz Identyfikacyjny Rozwiązania Twojego urządzenia (IRK), który pomaga CAPod zidentyfikować go wśród pobliskich urządzeń. - AirPods często zmienia swój adres Bluetooth dla prywatności. IRK pomaga CAPod rozpoznawać twoje urządzenie. Potrzebujesz jednorazowego dostępu do MacBook. - Klucz Szyfrowania - Klucz szyfrowania Twojego urządzenia, który umożliwia CAPod pobieranie szczegółowych informacji o statusie. - AirPods wysyła wiadomość o statusie, której część jest zaszyfrowana. Klucz szyfrowania pozwala CAPod odszyfrować całą wiadomość. Potrzebujesz jednorazowego dostępu do MacBook. + Klucz Identyfikacyjny + Klucz Identyfikacyjny Rozwiązania Twojego urządzenia (IRK), który pomaga CAPod zidentyfikować go wśród pobliskich urządzeń. + AirPods często zmienia swój adres Bluetooth dla prywatności. IRK pomaga CAPod rozpoznawać twoje urządzenie. Potrzebujesz jednorazowego dostępu do MacBook. + Klucz Szyfrowania + Klucz szyfrowania Twojego urządzenia, który umożliwia CAPod pobieranie szczegółowych informacji o statusie. + AirPods wysyła wiadomość o statusie, której część jest zaszyfrowana. Klucz szyfrowania pozwala CAPod odszyfrować całą wiadomość. Potrzebujesz jednorazowego dostępu do MacBook. Tryb jednego pod\'a Noszenie obu pod\'ów nie jest wymagane. Wystarczy jeden, aby aktywować reakcje. Wyświetl okienko obudowy diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 59f0c429..45a944d6 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -55,12 +55,12 @@ Nenhum Modelo do seu dispositivo O modelo do seu dispositivo principal. Isso ajuda o aplicativo a reconhecer seu dispositivo quando ele não está conectado ao seu telefone. - Chave de Identidade - A Chave de Resolução de Identidade (IRK) do seu dispositivo, que ajuda o CAPod a identificá-lo entre dispositivos próximos. - Os AirPods mudam frequentemente o endereço Bluetooth por motivos de privacidade. A IRK ajuda o CAPod a reconhecer o seu dispositivo. Você precisa de acesso único a um MacBook. - Chave de Criptografia - A chave de criptografia do seu dispositivo, que permite ao CAPod obter informações detalhadas do status. - Os AirPods enviam uma mensagem de status, parte da qual está criptografada. A chave de criptografia permite ao CAPod descriptografar a mensagem completa. Você precisa de acesso único a um MacBook. + Chave de Identidade + A Chave de Resolução de Identidade (IRK) do seu dispositivo, que ajuda o CAPod a identificá-lo entre dispositivos próximos. + Os AirPods mudam frequentemente o endereço Bluetooth por motivos de privacidade. A IRK ajuda o CAPod a reconhecer o seu dispositivo. Você precisa de acesso único a um MacBook. + Chave de Criptografia + A chave de criptografia do seu dispositivo, que permite ao CAPod obter informações detalhadas do status. + Os AirPods enviam uma mensagem de status, parte da qual está criptografada. A chave de criptografia permite ao CAPod descriptografar a mensagem completa. Você precisa de acesso único a um MacBook. Modo de um só pod Não é necessário usar os dois pods, usar um único pod é suficiente para desencadear reações. diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 4598f3ee..02e3b491 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -55,12 +55,12 @@ Nenhum Modelo do seu dispositivo O modelo do seu dispositivo principal. Isto ajuda a aplicação a reconhecer o seu dispositivo quando não está ligado ao seu telemóvel. - Chave de Identidade - A Chave de Resolução de Identidade (IRK) do seu dispositivo, que ajuda o CAPod a identificá-lo entre dispositivos próximos. - Os AirPods mudam frequentemente o seu endereço Bluetooth por motivos de privacidade. A IRK ajuda o CAPod a reconhecer o seu dispositivo. Precisa de acesso único a um MacBook. - Chave de Encriptação - A chave de encriptação do seu dispositivo, que permite ao CAPod obter informações detalhadas do estado. - Os AirPods enviam uma mensagem de estado, parte da qual está encriptada. A chave de encriptação permite ao CAPod desencriptar a mensagem completa. Precisa de acesso único a um MacBook. + Chave de Identidade + A Chave de Resolução de Identidade (IRK) do seu dispositivo, que ajuda o CAPod a identificá-lo entre dispositivos próximos. + Os AirPods mudam frequentemente o seu endereço Bluetooth por motivos de privacidade. A IRK ajuda o CAPod a reconhecer o seu dispositivo. Precisa de acesso único a um MacBook. + Chave de Encriptação + A chave de encriptação do seu dispositivo, que permite ao CAPod obter informações detalhadas do estado. + Os AirPods enviam uma mensagem de estado, parte da qual está encriptada. A chave de encriptação permite ao CAPod desencriptar a mensagem completa. Precisa de acesso único a um MacBook. Modo de um só pod Não é necessário usar os dois pods, usar um único pod é suficiente para desencadear reações. diff --git a/app/src/main/res/values-rm/strings.xml b/app/src/main/res/values-rm/strings.xml index 33f74594..3dd47029 100644 --- a/app/src/main/res/values-rm/strings.xml +++ b/app/src/main/res/values-rm/strings.xml @@ -55,12 +55,12 @@ Nagin Model da Voss apparat Il model da Voss apparat principal. Quai gida l\'app a reconuscher Voss apparat cura ch\'el n\'è betg connectà cun Voss telefonin. - clav d\'identitad - La clav da resoluziun d\'identitad (IRK) da Voss apparat, che gida CAPod ad identificar el tranter ils apparats en vischinanza. - AirPods midan savens lur adressa Bluetooth per motivs da privatezza. L\'IRK gida CAPod a reconuscher Voss apparat. Vus duvrais in access unic ad in MacBook. - Clav da cifratura - La clav da cifratura da Voss apparat, che permetta a CAPod da recuperar infurmaziuns detagliadas dal stadi. - AirPods tramettan in messadi da stadi, da la quala ina part è cifrada. La clav da cifratura permetta a CAPod da decifrar il messadi cumplet. Vus duvrais in access unic ad in MacBook. + clav d\'identitad + La clav da resoluziun d\'identitad (IRK) da Voss apparat, che gida CAPod ad identificar el tranter ils apparats en vischinanza. + AirPods midan savens lur adressa Bluetooth per motivs da privatezza. L\'IRK gida CAPod a reconuscher Voss apparat. Vus duvrais in access unic ad in MacBook. + Clav da cifratura + La clav da cifratura da Voss apparat, che permetta a CAPod da recuperar infurmaziuns detagliadas dal stadi. + AirPods tramettan in messadi da stadi, da la quala ina part è cifrada. La clav da cifratura permetta a CAPod da decifrar il messadi cumplet. Vus duvrais in access unic ad in MacBook. Modus cun in singul pod Purtar omadus pods n\'è betg necessari, purtar in singul pod basta per provocar reacziuns. diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 5feec0a2..d8de65ea 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -50,12 +50,12 @@ Niciunul Modelul dispozitivului dvs. Modelul dispozitivului principal. Acest lucru ajută aplicația să recunoască dispozitivul dvs. atunci când nu este conectat la telefonul dvs. - Cheie de identitate - Cheia de rezolvare a identității (IRK) a dispozitivului dvs., care ajută CAPod să o identifice printre dispozitivele din apropiere. - AirPod-urile își schimbă frecvent adresa Bluetooth din motive de confidențialitate. IRK ajută CAPod să vă recunoască dispozitivul. Aveți nevoie de acces o singură dată la un MacBook. - Cheie de criptare - Cheia de criptare a dispozitivului dvs., care permite CAPod să recupereze informații detaliate despre stare. - AirPod-urile trimit un mesaj de stare, o parte din acesta fiind criptat. Cheia de criptare permite CAPod să decripteze mesajul complet. Aveți nevoie de acces o singură dată la un MacBook. + Cheie de identitate + Cheia de rezolvare a identității (IRK) a dispozitivului dvs., care ajută CAPod să o identifice printre dispozitivele din apropiere. + AirPod-urile își schimbă frecvent adresa Bluetooth din motive de confidențialitate. IRK ajută CAPod să vă recunoască dispozitivul. Aveți nevoie de acces o singură dată la un MacBook. + Cheie de criptare + Cheia de criptare a dispozitivului dvs., care permite CAPod să recupereze informații detaliate despre stare. + AirPod-urile trimit un mesaj de stare, o parte din acesta fiind criptat. Cheia de criptare permite CAPod să decripteze mesajul complet. Aveți nevoie de acces o singură dată la un MacBook. Modul de utilizare o singură cască Nu este necesar să purtați ambele caști, o singură cască este suficientă pentru a declanșa reacțiile. Afișați pop-upul carcasei diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index b62d6461..4a32d6f1 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -50,12 +50,12 @@ Нет Модель Вашего устройства Модель Вашего основного устройства. Это помогает приложению опознать Ваше устройство, когда оно не подключено к Вашему телефону. - Ключ идентификации - Идентификационный ключ (IRK), который помогает CAPod идентифицировать его между близлежащими устройствами. - AirPods часто меняет Bluetooth-адрес для приватности. IRK помогает CAPod распознать Ваше устройство. Вам нужен одноразовый доступ к MacBook. - Ключ шифрования - Ключ шифрования вашего устройства, который позволяет CAPod получать подробную информацию. - AirPods отправляет статусное сообщение, часть которого зашифрована. Ключ шифрования позволяет CAPod расшифровать полное сообщение. Вам нужен одноразовый доступ к MacBook. + Ключ идентификации + Идентификационный ключ (IRK), который помогает CAPod идентифицировать его между близлежащими устройствами. + AirPods часто меняет Bluetooth-адрес для приватности. IRK помогает CAPod распознать Ваше устройство. Вам нужен одноразовый доступ к MacBook. + Ключ шифрования + Ключ шифрования вашего устройства, который позволяет CAPod получать подробную информацию. + AirPods отправляет статусное сообщение, часть которого зашифрована. Ключ шифрования позволяет CAPod расшифровать полное сообщение. Вам нужен одноразовый доступ к MacBook. Режим одного наушника Нет необходимости носить оба наушника, один наушник уже запускает реакции. Показать открытие футляра diff --git a/app/src/main/res/values-sc-rIT/strings.xml b/app/src/main/res/values-sc-rIT/strings.xml index d3c1dcab..9963dd96 100644 --- a/app/src/main/res/values-sc-rIT/strings.xml +++ b/app/src/main/res/values-sc-rIT/strings.xml @@ -54,12 +54,12 @@ Perunu Modellu de su dispositivu tuo Su modellu de su dispositivu tuo printzipale. Custu agiudat s\'app a reconnòschere su dispositivu tuo cando non est cullegadu a su telèfonu tuo. - Crae de identidade - Sa Crae de Risolutzione de Identidade (IRK) de su dispositivu tuo, chi agiudat CAPod a dd\'identificare intre is dispositivos acanta. - Is AirPods mudant s\'indiritzu Bluetooth issoro fatu·fatu pro riservadesa. S\'IRK agiudat CAPod a reconnòschere su dispositivu tuo. Tenes bisòngiu de un\'atzessu una tantum a unu MacBook. - Crae de critografia - Sa crae de critografia de su dispositivu tuo, chi permitit a CAPod de recuperare informatziones de istadu detalliadas. - Is AirPods imbiant unu messàgiu de istadu, una parte de su cale est critografada. Sa crae de critografia permitit a CAPod de decritare su messàgiu intreu. Tenes bisòngiu de un\'atzessu una tantum a unu MacBook. + Crae de identidade + Sa Crae de Risolutzione de Identidade (IRK) de su dispositivu tuo, chi agiudat CAPod a dd\'identificare intre is dispositivos acanta. + Is AirPods mudant s\'indiritzu Bluetooth issoro fatu·fatu pro riservadesa. S\'IRK agiudat CAPod a reconnòschere su dispositivu tuo. Tenes bisòngiu de un\'atzessu una tantum a unu MacBook. + Crae de critografia + Sa crae de critografia de su dispositivu tuo, chi permitit a CAPod de recuperare informatziones de istadu detalliadas. + Is AirPods imbiant unu messàgiu de istadu, una parte de su cale est critografada. Sa crae de critografia permitit a CAPod de decritare su messàgiu intreu. Tenes bisòngiu de un\'atzessu una tantum a unu MacBook. Modalidade una sola corfita Indossare ambas is corfitas non est netzessàriu, indossare una sola corfita est bastante pro iscadenare reatziones. diff --git a/app/src/main/res/values-si-rLK/strings.xml b/app/src/main/res/values-si-rLK/strings.xml index 1206fd7a..dd4371b1 100644 --- a/app/src/main/res/values-si-rLK/strings.xml +++ b/app/src/main/res/values-si-rLK/strings.xml @@ -50,12 +50,12 @@ කිසිවක් නැත ඔබගේ උපාංග මාදිලිය ඔබගේ ප්‍රධාන උපාංගයේ මාදිලිය. ඔබගේ දුරකථනයට සම්බන්ධ නැති විට ඔබගේ උපාංගය හඳුනා ගැනීමට මෙය යෙදුමට උපකාරී වේ. - හඳුනාගැනීමේ යතුර - ඔබගේ උපාංගයේ හඳුනාගැනීමේ යතුර (IRK), එය CAPod හට በአቅራቢያ ඇති උපාංග අතර එය හඳුනා ගැනීමට උපකාරී වේ. - AirPods පෞද්ගලිකත්වය සඳහා නිතරම ඔවුන්ගේ බ්ලූටූත් ලිපිනය වෙනස් කරයි. IRK CAPod හට ඔබගේ උපාංගය හඳුනා ගැනීමට උපකාරී වේ. ඔබට MacBook වෙත එක් වරක් ප්‍රවේශය අවශ්‍ය වේ. - සංකේතාංකන යතුර - ඔබගේ උපාංගයේ සංකේතාංකන යතුර, CAPod හට සවිස්තරාත්මක තත්ත්‍ව තොරතුරු ලබා ගැනීමට ඉඩ සලසයි. - AirPods තත්ත්‍ව පණිවිඩයක් යවයි, එහි කොටසක් සංකේතනය කර ඇත. සංකේතාංකන යතුර CAPod හට සම්පූර්ණ පණිවිඩය විකේතනය කිරීමට ඉඩ සලසයි. ඔබට MacBook වෙත එක් වරක් ප්‍රවේශය අවශ්‍ය වේ. + හඳුනාගැනීමේ යතුර + ඔබගේ උපාංගයේ හඳුනාගැනීමේ යතුර (IRK), එය CAPod හට በአቅራቢያ ඇති උපාංග අතර එය හඳුනා ගැනීමට උපකාරී වේ. + AirPods පෞද්ගලිකත්වය සඳහා නිතරම ඔවුන්ගේ බ්ලූටූත් ලිපිනය වෙනස් කරයි. IRK CAPod හට ඔබගේ උපාංගය හඳුනා ගැනීමට උපකාරී වේ. ඔබට MacBook වෙත එක් වරක් ප්‍රවේශය අවශ්‍ය වේ. + සංකේතාංකන යතුර + ඔබගේ උපාංගයේ සංකේතාංකන යතුර, CAPod හට සවිස්තරාත්මක තත්ත්‍ව තොරතුරු ලබා ගැනීමට ඉඩ සලසයි. + AirPods තත්ත්‍ව පණිවිඩයක් යවයි, එහි කොටසක් සංකේතනය කර ඇත. සංකේතාංකන යතුර CAPod හට සම්පූර්ණ පණිවිඩය විකේතනය කිරීමට ඉඩ සලසයි. ඔබට MacBook වෙත එක් වරක් ප්‍රවේශය අවශ්‍ය වේ. එක් පොඩ් ප්‍රකාරය පොඩ් දෙකම පැළඳීම අවශ්‍ය නොවේ, ප්‍රතික්‍රියා ක්‍රියාත්මක කිරීමට තනි පොඩ් එකක් පැළඳීම ප්‍රමාණවත් වේ. කවරයේ පොප්-අප් පෙන්වන්න diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index b7ef3c3c..69570747 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -50,12 +50,12 @@ Žiadna Model vašeho zariadenia Model vášho hlavného zariadenia. Pomáha to aplikácii rozpoznať vaše zariadenie, keď nie je pripojené k telefónu. - Kľúč identity - Kľúč identity (IRK) vašeho zariadenia, ktorý pomáha aplikácii CAPod identifikovať ho medzi zariadeniami okolo. - AirPods často menia Bluetooth adresu pre ochranu súkromia. IRK pomáha aplikácii CAPod rozpoznať vaše zariadenie. - Šifrovací kľúč - Šifrovací kľúč vašeho zariadenia, ktorý umožňuje aplikácii CAPod získať podrobné informácie o stave. - AirPods odosielajú správu o stave, ktorá je z časti šifrovaná. Šifrovací kľúč umožňuje aplikácii CAPod dešifrovať celú správu. Potrebujete jednorázový prístup k MacBooku. + Kľúč identity + Kľúč identity (IRK) vašeho zariadenia, ktorý pomáha aplikácii CAPod identifikovať ho medzi zariadeniami okolo. + AirPods často menia Bluetooth adresu pre ochranu súkromia. IRK pomáha aplikácii CAPod rozpoznať vaše zariadenie. + Šifrovací kľúč + Šifrovací kľúč vašeho zariadenia, ktorý umožňuje aplikácii CAPod získať podrobné informácie o stave. + AirPods odosielajú správu o stave, ktorá je z časti šifrovaná. Šifrovací kľúč umožňuje aplikácii CAPod dešifrovať celú správu. Potrebujete jednorázový prístup k MacBooku. Režim jedného slúchadla Nosenie oboch slúchadiel nie je potrebné, na spustenie reakcií postačuje nosenie jedného slúchadla. Zobraziť vyskakovacie okno puzdra diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 23134eb4..91043e82 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -49,12 +49,12 @@ Brez Model vaše naprave Model vaše glavne naprave. To pomaga aplikaciji prepoznati vašo napravo, ko ni povezana z vašim telefonom. - Identifikacijski ključ - Identifikacijski ključ za razreševanje (IRK) vaše naprave, ki pomaga CAPod-u, da jo identificira med bližnjimi napravami. - AirPods pogosto spreminjajo svoj naslov Bluetooth zaradi zasebnosti. IRK pomaga CAPod-u prepoznati vašo napravo. Potrebujete enkraten dostop do MacBooka. - Šifrirni ključ - Šifrirni ključ vaše naprave, ki CAPod-u omogoča pridobivanje podrobnih informacij o stanju. - AirPods pošljejo sporočilo o stanju, katerega del je šifriran. Šifrirni ključ CAPod-u omogoča dešifriranje celotnega sporočila. Potrebujete enkraten dostop do MacBooka. + Identifikacijski ključ + Identifikacijski ključ za razreševanje (IRK) vaše naprave, ki pomaga CAPod-u, da jo identificira med bližnjimi napravami. + AirPods pogosto spreminjajo svoj naslov Bluetooth zaradi zasebnosti. IRK pomaga CAPod-u prepoznati vašo napravo. Potrebujete enkraten dostop do MacBooka. + Šifrirni ključ + Šifrirni ključ vaše naprave, ki CAPod-u omogoča pridobivanje podrobnih informacij o stanju. + AirPods pošljejo sporočilo o stanju, katerega del je šifriran. Šifrirni ključ CAPod-u omogoča dešifriranje celotnega sporočila. Potrebujete enkraten dostop do MacBooka. Način ene slušalke Nošenje obeh slušalk ni potrebno, nošenje ene same slušalke zadostuje za sprožitev reakcij. Pokaži pojavno okno ohišja diff --git a/app/src/main/res/values-sq-rAL/strings.xml b/app/src/main/res/values-sq-rAL/strings.xml index 041146d4..891ba197 100644 --- a/app/src/main/res/values-sq-rAL/strings.xml +++ b/app/src/main/res/values-sq-rAL/strings.xml @@ -54,12 +54,12 @@ Asnjë Modeli i pajisjes suaj Modeli i pajisjes suaj kryesore. Kjo ndihmon aplikacionin të njohë pajisjen tuaj kur nuk është lidhur me telefonin tuaj. - Çelësi i Identitetit - Çelësi i Zgjidhjes së Identitetit (IRK) i pajisjes suaj, i cili ndihmon CAPod ta identifikojë atë midis pajisjeve të afërta. - AirPods ndryshojnë shpesh adresën e tyre Bluetooth për privatësi. IRK ndihmon CAPod të njohë pajisjen tuaj. Ju nevojitet qasje njëherëshe në një MacBook. - Çelësi i Kriptimit - Çelësi i kriptimit i pajisjes suaj, i cili lejon CAPod të marrë informacion të detajuar mbi statusin. - AirPods dërgojnë një mesazh statusi, një pjesë e të cilit është e kriptuar. Çelësi i kriptimit lejon CAPod të deshifrojë mesazhin e plotë. Ju nevojitet qasje njëherëshe në një MacBook. + Çelësi i Identitetit + Çelësi i Zgjidhjes së Identitetit (IRK) i pajisjes suaj, i cili ndihmon CAPod ta identifikojë atë midis pajisjeve të afërta. + AirPods ndryshojnë shpesh adresën e tyre Bluetooth për privatësi. IRK ndihmon CAPod të njohë pajisjen tuaj. Ju nevojitet qasje njëherëshe në një MacBook. + Çelësi i Kriptimit + Çelësi i kriptimit i pajisjes suaj, i cili lejon CAPod të marrë informacion të detajuar mbi statusin. + AirPods dërgojnë një mesazh statusi, një pjesë e të cilit është e kriptuar. Çelësi i kriptimit lejon CAPod të deshifrojë mesazhin e plotë. Ju nevojitet qasje njëherëshe në një MacBook. Modaliteti me një kufje Mbajtja e të dyja kufjeve nuk është e nevojshme, mbajtja e një kufjeje të vetme mjafton për të shkaktuar reagime. diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index b711a916..c5ea03eb 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -50,12 +50,12 @@ Ниједан Модел вашег уређаја Модел вашег главног уређаја. Ово помаже апликацији да препозна ваш уређај када није повезан са вашим телефоном. - Кључ идентитета - Кључ за решавање идентитета (IRK) вашег уређаја, који помаже CAPod-у да га идентификује међу оближњим уређајима. - AirPods често мењају своју Bluetooth адресу ради приватности. IRK помаже CAPod-у да препозна ваш уређај. Потребан вам је једнократни приступ MacBook-у. - Кључ за шифровање - Кључ за шифровање вашег уређаја, који омогућава CAPod-у да преузме детаљне информације о статусу. - AirPods шаљу поруку о статусу, чији је део шифрован. Кључ за шифровање омогућава CAPod-у да дешифрује целу поруку. Потребан вам је једнократни приступ MacBook-у. + Кључ идентитета + Кључ за решавање идентитета (IRK) вашег уређаја, који помаже CAPod-у да га идентификује међу оближњим уређајима. + AirPods често мењају своју Bluetooth адресу ради приватности. IRK помаже CAPod-у да препозна ваш уређај. Потребан вам је једнократни приступ MacBook-у. + Кључ за шифровање + Кључ за шифровање вашег уређаја, који омогућава CAPod-у да преузме детаљне информације о статусу. + AirPods шаљу поруку о статусу, чији је део шифрован. Кључ за шифровање омогућава CAPod-у да дешифрује целу поруку. Потребан вам је једнократни приступ MacBook-у. Режим једне слушалице Ношење обе слушалице није обавезно, ношење једне слушалице је довољно за покретање реакција. Прикажи искачући прозор футроле diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 8e139155..1f5ccf04 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -49,12 +49,12 @@ Ingen Din enhetsmodell Modellen på din huvudenhet. Detta hjälper appen att känna igen din enhet när den inte är ansluten till din telefon. - Identitetsnyckel - Din enhets identitetsmatchningsnyckel (IRK), som hjälper CAPod att identifiera den bland närliggande enheter. - AirPods ändrar ofta sin Bluetooth-adress för integritetens skull. IRK hjälper CAPod att känna igen din enhet. Du behöver engångsåtkomst till en MacBook. - Krypteringsnyckel - Din enhets krypteringsnyckel, som gör att CAPod kan hämta detaljerad statusinformation. - AirPods skickar ett statusmeddelande, varav en del är krypterad. Krypteringsnyckeln gör att CAPod kan dekryptera hela meddelandet. Du behöver engångsåtkomst till en MacBook. + Identitetsnyckel + Din enhets identitetsmatchningsnyckel (IRK), som hjälper CAPod att identifiera den bland närliggande enheter. + AirPods ändrar ofta sin Bluetooth-adress för integritetens skull. IRK hjälper CAPod att känna igen din enhet. Du behöver engångsåtkomst till en MacBook. + Krypteringsnyckel + Din enhets krypteringsnyckel, som gör att CAPod kan hämta detaljerad statusinformation. + AirPods skickar ett statusmeddelande, varav en del är krypterad. Krypteringsnyckeln gör att CAPod kan dekryptera hela meddelandet. Du behöver engångsåtkomst till en MacBook. Enkelsnäckläge Att bära båda snäckorna krävs inte, att bära en enda snäcka räcker för att utlösa reaktioner. Visa popup för fodral diff --git a/app/src/main/res/values-sw/strings.xml b/app/src/main/res/values-sw/strings.xml index c57802b0..29150b44 100644 --- a/app/src/main/res/values-sw/strings.xml +++ b/app/src/main/res/values-sw/strings.xml @@ -50,12 +50,12 @@ Hakuna Mfumo wa kifaa chako Mfumo wa kifaa chako kikuu. Hii husaidia programu kutambua kifaa chako kisipounganishwa na simu yako. - Ufunguo wa Utambulisho - Ufunguo wa Kutatua Utambulisho (IRK) wa kifaa chako, unaosaidia CAPod kukitambua miongoni mwa vifaa vilivyo karibu. - AirPods hubadilisha anwani yao ya Bluetooth mara kwa mara kwa faragha. IRK husaidia CAPod kutambua kifaa chako. Unahitaji ufikiaji wa mara moja kwa MacBook. - Ufunguo wa Usimbaji - Ufunguo wa usimbaji wa kifaa chako, unaoruhusu CAPod kupata maelezo ya kina ya hali. - AirPods hutuma ujumbe wa hali, ambao sehemu yake imesimbwa. Ufunguo wa usimbaji huruhusu CAPod kusimbua ujumbe kamili. Unahitaji ufikiaji wa mara moja kwa MacBook. + Ufunguo wa Utambulisho + Ufunguo wa Kutatua Utambulisho (IRK) wa kifaa chako, unaosaidia CAPod kukitambua miongoni mwa vifaa vilivyo karibu. + AirPods hubadilisha anwani yao ya Bluetooth mara kwa mara kwa faragha. IRK husaidia CAPod kutambua kifaa chako. Unahitaji ufikiaji wa mara moja kwa MacBook. + Ufunguo wa Usimbaji + Ufunguo wa usimbaji wa kifaa chako, unaoruhusu CAPod kupata maelezo ya kina ya hali. + AirPods hutuma ujumbe wa hali, ambao sehemu yake imesimbwa. Ufunguo wa usimbaji huruhusu CAPod kusimbua ujumbe kamili. Unahitaji ufikiaji wa mara moja kwa MacBook. Hali ya ganda moja Kuvaa maganda yote mawili si lazima, kuvaa ganda moja kunatosha kuanzisha matendo. Onyesha kidirisha cha kipochi diff --git a/app/src/main/res/values-ta-rIN/strings.xml b/app/src/main/res/values-ta-rIN/strings.xml index def9366c..7f17329b 100644 --- a/app/src/main/res/values-ta-rIN/strings.xml +++ b/app/src/main/res/values-ta-rIN/strings.xml @@ -50,12 +50,12 @@ எதுவுமில்லை உங்கள் சாதனத்தின் மாதிரி உங்கள் முக்கிய சாதனத்தின் மாதிரி. உங்கள் தொலைபேசியுடன் இணைக்கப்படாதபோது உங்கள் சாதனத்தை ஆப்ஸ் அடையாளம் காண இது உதவுகிறது. - அடையாள விசை - உங்கள் சாதனத்தின் அடையாளத் தீர்வு விசை (IRK), இது அருகிலுள்ள சாதனங்களிடையே CAPod அடையாளம் காண உதவுகிறது. - தனியுரிமைக்காக AirPods தங்கள் புளூடூத் முகவரியை அடிக்கடி மாற்றுகின்றன. IRK உங்கள் சாதனத்தை CAPod அடையாளம் காண உதவுகிறது. உங்களுக்கு ஒரு முறை MacBook அணுகல் தேவை. - குறியாக்க விசை - உங்கள் சாதனத்தின் குறியாக்க விசை, இது விரிவான நிலைத் தகவலை மீட்டெடுக்க CAPod ஐ அனுமதிக்கிறது. - AirPods ஒரு நிலை செய்தியை அனுப்புகிறது, அதன் ஒரு பகுதி குறியாக்கம் செய்யப்பட்டுள்ளது. குறியாக்க விசை முழு செய்தியையும் CAPod குறியாக்கம் செய்ய அனுமதிக்கிறது. உங்களுக்கு ஒரு முறை MacBook அணுகல் தேவை. + அடையாள விசை + உங்கள் சாதனத்தின் அடையாளத் தீர்வு விசை (IRK), இது அருகிலுள்ள சாதனங்களிடையே CAPod அடையாளம் காண உதவுகிறது. + தனியுரிமைக்காக AirPods தங்கள் புளூடூத் முகவரியை அடிக்கடி மாற்றுகின்றன. IRK உங்கள் சாதனத்தை CAPod அடையாளம் காண உதவுகிறது. உங்களுக்கு ஒரு முறை MacBook அணுகல் தேவை. + குறியாக்க விசை + உங்கள் சாதனத்தின் குறியாக்க விசை, இது விரிவான நிலைத் தகவலை மீட்டெடுக்க CAPod ஐ அனுமதிக்கிறது. + AirPods ஒரு நிலை செய்தியை அனுப்புகிறது, அதன் ஒரு பகுதி குறியாக்கம் செய்யப்பட்டுள்ளது. குறியாக்க விசை முழு செய்தியையும் CAPod குறியாக்கம் செய்ய அனுமதிக்கிறது. உங்களுக்கு ஒரு முறை MacBook அணுகல் தேவை. ஒரு பாட் முறை இரண்டு பாட்களையும் அணிய வேண்டிய அவசியமில்லை, எதிர்வினைகளைத் தூண்டுவதற்கு ஒரு பாட் அணிந்தால் போதும். கேஸ் பாப்அப்பைக் காட்டு diff --git a/app/src/main/res/values-te-rIN/strings.xml b/app/src/main/res/values-te-rIN/strings.xml index 494c52c7..ec0fe6d2 100644 --- a/app/src/main/res/values-te-rIN/strings.xml +++ b/app/src/main/res/values-te-rIN/strings.xml @@ -55,12 +55,12 @@ ఏదీ లేదు మీ పరికర నమూనా మీ ప్రధాన పరికర నమూనా. ఇది మీ ఫోన్‌కు కనెక్ట్ కానప్పుడు మీ పరికరాన్ని గుర్తించడానికి యాప్‌కు సహాయపడుతుంది. - గుర్తింపు కీ - మీ పరికరం యొక్క గుర్తింపు పరిష్కార కీ (IRK), ఇది సమీపంలోని పరికరాల మధ్య CAPod దాన్ని గుర్తించడంలో సహాయపడుతుంది. - AirPods గోప్యత కోసం తరచుగా వాటి బ్లూటూత్ చిరునామాను మారుస్తాయి. IRK మీ పరికరాన్ని గుర్తించడంలో CAPodకి సహాయపడుతుంది. మీకు MacBookకి ఒకేసారి యాక్సెస్ అవసరం. - ఎన్క్రిప్షన్ కీ - మీ పరికరం యొక్క ఎన్క్రిప్షన్ కీ, ఇది వివరణాత్మక స్థితి సమాచారాన్ని తిరిగి పొందడానికి CAPodని అనుమతిస్తుంది. - AirPods ఒక స్థితి సందేశాన్ని పంపుతాయి, దానిలో కొంత భాగం ఎన్క్రిప్ట్ చేయబడింది. ఎన్క్రిప్షన్ కీ పూర్తి సందేశాన్ని డీక్రిప్ట్ చేయడానికి CAPodని అనుమతిస్తుంది. మీకు MacBookకి ఒకేసారి యాక్సెస్ అవసరం. + గుర్తింపు కీ + మీ పరికరం యొక్క గుర్తింపు పరిష్కార కీ (IRK), ఇది సమీపంలోని పరికరాల మధ్య CAPod దాన్ని గుర్తించడంలో సహాయపడుతుంది. + AirPods గోప్యత కోసం తరచుగా వాటి బ్లూటూత్ చిరునామాను మారుస్తాయి. IRK మీ పరికరాన్ని గుర్తించడంలో CAPodకి సహాయపడుతుంది. మీకు MacBookకి ఒకేసారి యాక్సెస్ అవసరం. + ఎన్క్రిప్షన్ కీ + మీ పరికరం యొక్క ఎన్క్రిప్షన్ కీ, ఇది వివరణాత్మక స్థితి సమాచారాన్ని తిరిగి పొందడానికి CAPodని అనుమతిస్తుంది. + AirPods ఒక స్థితి సందేశాన్ని పంపుతాయి, దానిలో కొంత భాగం ఎన్క్రిప్ట్ చేయబడింది. ఎన్క్రిప్షన్ కీ పూర్తి సందేశాన్ని డీక్రిప్ట్ చేయడానికి CAPodని అనుమతిస్తుంది. మీకు MacBookకి ఒకేసారి యాక్సెస్ అవసరం. ఒక పాడ్ మోడ్ రెండు పాడ్‌లను ధరించడం అవసరం లేదు, ప్రతిచర్యలను ప్రేరేపించడానికి ఒకే పాడ్‌ను ధరించడం సరిపోతుంది. diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index d22ab0b4..986fe0ca 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -50,12 +50,12 @@ ไม่มี รุ่นอุปกรณ์ของคุณ รุ่นของอุปกรณ์หลักของคุณ สิ่งนี้ช่วยให้แอปรู้จักอุปกรณ์ของคุณเมื่อไม่ได้เชื่อมต่อกับโทรศัพท์ของคุณ - คีย์ระบุตัวตน - คีย์แก้ไขข้อมูลประจำตัว (IRK) ของอุปกรณ์ของคุณ ซึ่งช่วยให้ CAPod สามารถระบุอุปกรณ์ท่ามกลางอุปกรณ์ใกล้เคียงได้ - AirPods มักจะเปลี่ยนที่อยู่บลูทูธเพื่อความเป็นส่วนตัว IRK ช่วยให้ CAPod รู้จักอุปกรณ์ของคุณ คุณต้องเข้าถึง MacBook เพียงครั้งเดียว - คีย์เข้ารหัส - คีย์เข้ารหัสของอุปกรณ์ของคุณ ซึ่งช่วยให้ CAPod สามารถดึงข้อมูลสถานะโดยละเอียดได้ - AirPods ส่งข้อความสถานะซึ่งบางส่วนถูกเข้ารหัส คีย์เข้ารหัสช่วยให้ CAPod สามารถถอดรหัสข้อความทั้งหมดได้ คุณต้องเข้าถึง MacBook เพียงครั้งเดียว + คีย์ระบุตัวตน + คีย์แก้ไขข้อมูลประจำตัว (IRK) ของอุปกรณ์ของคุณ ซึ่งช่วยให้ CAPod สามารถระบุอุปกรณ์ท่ามกลางอุปกรณ์ใกล้เคียงได้ + AirPods มักจะเปลี่ยนที่อยู่บลูทูธเพื่อความเป็นส่วนตัว IRK ช่วยให้ CAPod รู้จักอุปกรณ์ของคุณ คุณต้องเข้าถึง MacBook เพียงครั้งเดียว + คีย์เข้ารหัส + คีย์เข้ารหัสของอุปกรณ์ของคุณ ซึ่งช่วยให้ CAPod สามารถดึงข้อมูลสถานะโดยละเอียดได้ + AirPods ส่งข้อความสถานะซึ่งบางส่วนถูกเข้ารหัส คีย์เข้ารหัสช่วยให้ CAPod สามารถถอดรหัสข้อความทั้งหมดได้ คุณต้องเข้าถึง MacBook เพียงครั้งเดียว โหมดพ็อดเดียว ไม่จำเป็นต้องสวมใส่พ็อดทั้งสองข้าง การสวมใส่พ็อดเดียวก็เพียงพอที่จะกระตุ้นการตอบสนอง แสดงป๊อปอัปเคส diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 6e50126b..80495a18 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -50,12 +50,12 @@ Hiçbiri Aygıt modeliniz Ana aygıtın modeli. Bu, uygulamanın telefonunuza bağlı olmadığında aygıtınızı tanımasına yardımcı olur. - Kimlik Anahtarı - Cihazınızın Kimlik Çözümleme Anahtarı (IRK), CAPod\'un yakındaki cihazlar arasında onu tanımlamasına yardımcı olur. - AirPod\'lar gizlilik nedeniyle Bluetooth adreslerini sık sık değiştirir. IRK, CAPod\'un cihazınızı tanımasına yardımcı olur. Bir MacBook\'a tek seferlik erişiminiz olması gerekir. - Şifreleme Anahtarı - Cihazınızın şifreleme anahtarı, CAPod\'un ayrıntılı durum bilgilerini almasını sağlar. - AirPod\'lar, bir kısmı şifrelenmiş bir durum mesajı gönderir. Şifreleme anahtarı, CAPod\'un tüm mesajın şifresini çözmesine olanak tanır. Bir MacBook\'a tek seferlik erişiminiz olması gerekir. + Kimlik Anahtarı + Cihazınızın Kimlik Çözümleme Anahtarı (IRK), CAPod\'un yakındaki cihazlar arasında onu tanımlamasına yardımcı olur. + AirPod\'lar gizlilik nedeniyle Bluetooth adreslerini sık sık değiştirir. IRK, CAPod\'un cihazınızı tanımasına yardımcı olur. Bir MacBook\'a tek seferlik erişiminiz olması gerekir. + Şifreleme Anahtarı + Cihazınızın şifreleme anahtarı, CAPod\'un ayrıntılı durum bilgilerini almasını sağlar. + AirPod\'lar, bir kısmı şifrelenmiş bir durum mesajı gönderir. Şifreleme anahtarı, CAPod\'un tüm mesajın şifresini çözmesine olanak tanır. Bir MacBook\'a tek seferlik erişiminiz olması gerekir. Tek kulaklık modu Her iki kulaklığı da takmak gerekli değildir, tek bir kulaklık takmak eylemleri tetiklemek için yeterlidir. Şarj kutusu için açılır pencere göster diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 053eb456..d14d8fd3 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -50,12 +50,12 @@ Немає Модель Вашого пристрою Модель вашого пристрою. Це допомагає розпізнати ваш пристрій коли він не підʼєднаний до вашого телефону. - Ключ ідентифікації - Ключ розпізнавання ідентичності вашого пристрою (IRK), який допомагає CAPod ідентифікувати його серед пристроїв поблизу. - AirPods часто змінюють свою Bluetooth-адресу для конфіденційності. IRK допомагає CAPod розпізнати ваш пристрій. Вам потрібен одноразовий доступ до MacBook. - Ключ шифрування - Ключ шифрування вашого пристрою, який дозволяє CAPod отримувати детальну інформацію про стан. - AirPods відправляє повідомлення про стан, частина якого зашифрована. Ключ шифрування дозволяє CAPod розшифрувати повне повідомлення. Вам потрібен одноразовий доступ до MacBook. + Ключ ідентифікації + Ключ розпізнавання ідентичності вашого пристрою (IRK), який допомагає CAPod ідентифікувати його серед пристроїв поблизу. + AirPods часто змінюють свою Bluetooth-адресу для конфіденційності. IRK допомагає CAPod розпізнати ваш пристрій. Вам потрібен одноразовий доступ до MacBook. + Ключ шифрування + Ключ шифрування вашого пристрою, який дозволяє CAPod отримувати детальну інформацію про стан. + AirPods відправляє повідомлення про стан, частина якого зашифрована. Ключ шифрування дозволяє CAPod розшифрувати повне повідомлення. Вам потрібен одноразовий доступ до MacBook. Режим одного навушника Одягання обох навушників не є необхідним, одягання одного навушника цілком достатньо для запуску реагування. Показувати спливаюче вікно при відкритті футляра diff --git a/app/src/main/res/values-ur-rIN/strings.xml b/app/src/main/res/values-ur-rIN/strings.xml index a32909f4..7127d452 100644 --- a/app/src/main/res/values-ur-rIN/strings.xml +++ b/app/src/main/res/values-ur-rIN/strings.xml @@ -50,12 +50,12 @@ کوئی نہیں آپ کے آلہ کا ماڈل آپ کے مرکزی آلہ کا ماڈل۔ یہ ایپ کو آپ کے آلہ کو پہچاننے میں مدد کرتا ہے جب یہ آپ کے فون سے منسلک نہ ہو۔ - شناختی کلید - آپ کے آلہ کی شناختی حل کرنے والی کلید (IRK)، جو CAPod کو قریبی آلات میں اسے شناخت کرنے میں مدد کرتی ہے۔ - AirPods رازداری کے لئے اکثر اپنا بلوٹوتھ پتہ تبدیل کرتے ہیں۔ IRK CAPod کو آپ کے آلہ کو پہچاننے میں مدد کرتا ہے۔ آپ کو MacBook تک ایک بار رسائی درکار ہے۔ - خفیہ کاری کلید - آپ کے آلہ کی خفیہ کاری کلید، جو CAPod کو تفصیلی حیثیت کی معلومات بازیافت کرنے کی اجازت دیتی ہے۔ - AirPods ایک حیثیت کا پیغام بھیجتے ہیں، جس کا کچھ حصہ خفیہ ہوتا ہے۔ خفیہ کاری کلید CAPod کو مکمل پیغام کو ڈی کرپٹ کرنے کی اجازت دیتی ہے۔ آپ کو MacBook تک ایک بار رسائی درکار ہے۔ + شناختی کلید + آپ کے آلہ کی شناختی حل کرنے والی کلید (IRK)، جو CAPod کو قریبی آلات میں اسے شناخت کرنے میں مدد کرتی ہے۔ + AirPods رازداری کے لئے اکثر اپنا بلوٹوتھ پتہ تبدیل کرتے ہیں۔ IRK CAPod کو آپ کے آلہ کو پہچاننے میں مدد کرتا ہے۔ آپ کو MacBook تک ایک بار رسائی درکار ہے۔ + خفیہ کاری کلید + آپ کے آلہ کی خفیہ کاری کلید، جو CAPod کو تفصیلی حیثیت کی معلومات بازیافت کرنے کی اجازت دیتی ہے۔ + AirPods ایک حیثیت کا پیغام بھیجتے ہیں، جس کا کچھ حصہ خفیہ ہوتا ہے۔ خفیہ کاری کلید CAPod کو مکمل پیغام کو ڈی کرپٹ کرنے کی اجازت دیتی ہے۔ آپ کو MacBook تک ایک بار رسائی درکار ہے۔ ایک پوڈ موڈ دونوں پوڈ پہننا ضروری نہیں، ایک ہی پوڈ پہننا رد عمل کو متحرک کرنے کے لئے کافی ہے۔ کیس پاپ اپ دکھائیں diff --git a/app/src/main/res/values-uz/strings.xml b/app/src/main/res/values-uz/strings.xml index 2ba59c66..3259535f 100644 --- a/app/src/main/res/values-uz/strings.xml +++ b/app/src/main/res/values-uz/strings.xml @@ -50,12 +50,12 @@ Yo\'q Qurilmangiz modeli Asosiy qurilmangiz modeli. Bu ilovaga telefoningizga ulanmagan paytda qurilmangizni tanib olishga yordam beradi. - Identifikatsiya kaliti - Qurilmangizning Identifikatsiyani hal qilish kaliti (IRK), bu CAPod\'ga yaqin atrofdagi qurilmalar orasida uni aniqlashga yordam beradi. - AirPods maxfiylik uchun tez-tez Bluetooth manzilini o\'zgartiradi. IRK CAPod\'ga qurilmangizni tanib olishga yordam beradi. Sizga MacBook\'ga bir martalik kirish kerak bo\'ladi. - Shifrlash kaliti - Qurilmangizning shifrlash kaliti, bu CAPod\'ga batafsil holat ma\'lumotlarini olish imkonini beradi. - AirPods holat xabarini yuboradi, uning bir qismi shifrlangan. Shifrlash kaliti CAPod\'ga to\'liq xabarni shifrdan chiqarishga imkon beradi. Sizga MacBook\'ga bir martalik kirish kerak bo\'ladi. + Identifikatsiya kaliti + Qurilmangizning Identifikatsiyani hal qilish kaliti (IRK), bu CAPod\'ga yaqin atrofdagi qurilmalar orasida uni aniqlashga yordam beradi. + AirPods maxfiylik uchun tez-tez Bluetooth manzilini o\'zgartiradi. IRK CAPod\'ga qurilmangizni tanib olishga yordam beradi. Sizga MacBook\'ga bir martalik kirish kerak bo\'ladi. + Shifrlash kaliti + Qurilmangizning shifrlash kaliti, bu CAPod\'ga batafsil holat ma\'lumotlarini olish imkonini beradi. + AirPods holat xabarini yuboradi, uning bir qismi shifrlangan. Shifrlash kaliti CAPod\'ga to\'liq xabarni shifrdan chiqarishga imkon beradi. Sizga MacBook\'ga bir martalik kirish kerak bo\'ladi. Bitta pod rejimi Ikkala podni ham taqish shart emas, reaksiyalarni ishga tushirish uchun bitta podni taqish kifoya. Keys ochilganda qalqib chiquvchi oynani ko\'rsatish diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 72f83333..b946e6aa 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -50,12 +50,12 @@ Không có Kiểu thiết bị của bạn Kiểu thiết bị chính của bạn. Điều này giúp ứng dụng nhận ra thiết bị của bạn khi thiết bị không được kết nối với điện thoại của bạn. - Khóa nhận dạng - Khóa giải quyết nhận dạng (IRK) của thiết bị của bạn, giúp CAPod nhận dạng thiết bị đó giữa các thiết bị lân cận. - AirPods thường xuyên thay đổi địa chỉ Bluetooth của họ vì lý do riêng tư. IRK giúp CAPod nhận dạng thiết bị của bạn. Bạn cần truy cập một lần vào MacBook. - Khóa mã hóa - Khóa mã hóa của thiết bị của bạn, cho phép CAPod truy xuất thông tin trạng thái chi tiết. - AirPods gửi một thông báo trạng thái, một phần trong đó được mã hóa. Khóa mã hóa cho phép CAPod giải mã toàn bộ thông báo. Bạn cần truy cập một lần vào MacBook. + Khóa nhận dạng + Khóa giải quyết nhận dạng (IRK) của thiết bị của bạn, giúp CAPod nhận dạng thiết bị đó giữa các thiết bị lân cận. + AirPods thường xuyên thay đổi địa chỉ Bluetooth của họ vì lý do riêng tư. IRK giúp CAPod nhận dạng thiết bị của bạn. Bạn cần truy cập một lần vào MacBook. + Khóa mã hóa + Khóa mã hóa của thiết bị của bạn, cho phép CAPod truy xuất thông tin trạng thái chi tiết. + AirPods gửi một thông báo trạng thái, một phần trong đó được mã hóa. Khóa mã hóa cho phép CAPod giải mã toàn bộ thông báo. Bạn cần truy cập một lần vào MacBook. Chế độ 1 tai nghe Không cần đeo cả hai, chỉ đeo một tai nghe là đủ để kích hoạt phản ứng. Hiển thị case popup diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index f21330a6..31ed76c5 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -109,12 +109,12 @@ 保存 指南 例如:%s - 身份密钥 - 您设备的身份解析密钥 (IRK),可帮助 CAPod 在附近的设备中识别它。 - 出于隐私原因,AirPods 会经常更改其蓝牙地址。IRK 可帮助 CAPod 识别您的设备。您需要一次性访问 MacBook。 - 加密密钥 - 您设备的加密密钥,允许 CAPod 检索详细的状态信息。 - AirPods 会发送状态消息,其中一部分是加密的。加密密钥允许 CAPod 解密完整的消息。您需要一次性访问 MacBook。 + 身份密钥 + 您设备的身份解析密钥 (IRK),可帮助 CAPod 在附近的设备中识别它。 + 出于隐私原因,AirPods 会经常更改其蓝牙地址。IRK 可帮助 CAPod 识别您的设备。您需要一次性访问 MacBook。 + 加密密钥 + 您设备的加密密钥,允许 CAPod 检索详细的状态信息。 + AirPods 会发送状态消息,其中一部分是加密的。加密密钥允许 CAPod 解密完整的消息。您需要一次性访问 MacBook。 调试日志 将应用执行的所有操作记录到您可以共享的文本文件中。 已录制的日志文件 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index c3b39d17..1bdcfd44 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -104,12 +104,12 @@ 例如:%s 額外通知 裝置連接時顯示額外通知。這讓您可以停用「裝置狀態」頻道來隱藏永久的「沒有裝置」通知。 - 身份金鑰 - 您裝置的身份解析金鑰 (IRK),協助 CAPod 在附近的裝置中識別它。 - 為保護私隱,AirPods 會經常更改其藍牙位址。IRK 可協助 CAPod 識別您的裝置。您需要一次性存取 MacBook。 - 加密金鑰 - 您裝置的加密金鑰,允許 CAPod 檢索詳細的狀態資訊。 - AirPods 會傳送狀態訊息,其中一部分已加密。加密金鑰允許 CAPod 解密完整的訊息。您需要一次性存取 MacBook。 + 身份金鑰 + 您裝置的身份解析金鑰 (IRK),協助 CAPod 在附近的裝置中識別它。 + 為保護私隱,AirPods 會經常更改其藍牙位址。IRK 可協助 CAPod 識別您的裝置。您需要一次性存取 MacBook。 + 加密金鑰 + 您裝置的加密金鑰,允許 CAPod 檢索詳細的狀態資訊。 + AirPods 會傳送狀態訊息,其中一部分已加密。加密金鑰允許 CAPod 解密完整的訊息。您需要一次性存取 MacBook。 已連接裝置 偵錯記錄 將應用程式執行的所有動作記錄到您可以分享的文字檔案中。 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 17ecc906..111841de 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -105,12 +105,12 @@ 例如:%s 額外通知 裝置連接時顯示額外通知。這讓您可以停用「裝置狀態」頻道來隱藏永久的「沒有裝置」通知。 - 身份金鑰 - 您裝置的身份解析金鑰 (IRK),協助 CAPod 在附近的裝置中識別它。 - 為保護隱私,AirPods 會經常更改其藍牙位址。IRK 可協助 CAPod 識別您的裝置。您需要一次性存取 MacBook。 - 加密金鑰 - 您裝置的加密金鑰,允許 CAPod 檢索詳細的狀態資訊。 - AirPods 會傳送狀態訊息,其中一部分已加密。加密金鑰允許 CAPod 解密完整的訊息。您需要一次性存取 MacBook。 + 身份金鑰 + 您裝置的身份解析金鑰 (IRK),協助 CAPod 在附近的裝置中識別它。 + 為保護隱私,AirPods 會經常更改其藍牙位址。IRK 可協助 CAPod 識別您的裝置。您需要一次性存取 MacBook。 + 加密金鑰 + 您裝置的加密金鑰,允許 CAPod 檢索詳細的狀態資訊。 + AirPods 會傳送狀態訊息,其中一部分已加密。加密金鑰允許 CAPod 解密完整的訊息。您需要一次性存取 MacBook。 已連接裝置 偵錯記錄 將應用程式執行的所有動作記錄到您可以分享的文字檔案中。 diff --git a/app/src/main/res/values-zu/strings.xml b/app/src/main/res/values-zu/strings.xml index 44db23d6..b7ef4a95 100644 --- a/app/src/main/res/values-zu/strings.xml +++ b/app/src/main/res/values-zu/strings.xml @@ -50,12 +50,12 @@ Lutho Imodeli yedivayisi yakho Imodeli yedivayisi yakho eyinhloko. Lokhu kusiza uhlelo lokusebenza ukubona idivayisi yakho lapho ingaxhunyiwe kufoni yakho. - Ukhiye Wobunikazi - Ukhiye Wokuxazulula Ubunikazi (IRK) wedivayisi yakho, osiza i-CAPod ukuyikhomba phakathi kwamadivayisi aseduze. - Ama-AirPods avame ukushintsha ikheli lawo le-Bluetooth ngenxa yobumfihlo. I-IRK isiza i-CAPod ukubona idivayisi yakho. Udinga ukufinyelela kanye ku-MacBook. - Ukhiye Wokubethela - Ukhiye wokubethela wedivayisi yakho, ovumela i-CAPod ukuthola ulwazi oluningiliziwe lwesimo. - Ama-AirPods athumela umlayezo wesimo, ingxenye yawo ebhalwe ngemfihlo. Ukhiye wokubethela uvumela i-CAPod ukuthi ikhiphe imfihlo kumlayezo ogcwele. Udinga ukufinyelela kanye ku-MacBook. + Ukhiye Wobunikazi + Ukhiye Wokuxazulula Ubunikazi (IRK) wedivayisi yakho, osiza i-CAPod ukuyikhomba phakathi kwamadivayisi aseduze. + Ama-AirPods avame ukushintsha ikheli lawo le-Bluetooth ngenxa yobumfihlo. I-IRK isiza i-CAPod ukubona idivayisi yakho. Udinga ukufinyelela kanye ku-MacBook. + Ukhiye Wokubethela + Ukhiye wokubethela wedivayisi yakho, ovumela i-CAPod ukuthola ulwazi oluningiliziwe lwesimo. + Ama-AirPods athumela umlayezo wesimo, ingxenye yawo ebhalwe ngemfihlo. Ukhiye wokubethela uvumela i-CAPod ukuthi ikhiphe imfihlo kumlayezo ogcwele. Udinga ukufinyelela kanye ku-MacBook. Imodi ye-pod eyodwa Ukugqoka womabili ama-pod akudingekile, ukugqoka i-pod eyodwa kwanele ukuqala ukusabela. Bonisa isigelekeqe sekesi diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f018a921..a312ff15 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -53,18 +53,6 @@ Disable hardware batching Don\'t let the system group collected BLE data before forwarding it to us. - Your device address - The address of your paired device. The app uses this to determine when it is connected to your phone. - None - Your device model - The model of your main device. This helps the app recognize your device when it is not connected to your phone. - Identity Key - Your device\'s Identity Resolving Key (IRK), which helps CAPod identify it among nearby devices. - AirPods frequently change their Bluetooth address for privacy. The IRK helps CAPod recognize your device. You need one-time access to a MacBook. - Encryption Key - Your device\'s encryption key, which allows CAPod to retrieve detailed status information. - AirPods send a status message, part of which is encrypted. The encryption key allows CAPod to decrypt the full message. You need one-time access to a MacBook. - One pod mode Wearing both pods is not required, wearing a single pod is sufficient to trigger reactions. Show case popup @@ -227,42 +215,40 @@ "Allow CAPod to show notifications about your AirPods, e.g. their current status while connected." - No device profiles configured - Create device profiles to manage multiple devices with custom settings and priorities. - Add profile - Create Profile - Edit Profile - Profile name - My AirPods Pro - Device model - Select your device model - Paired device (optional) - Select paired Bluetooth device - Priority - 0 (highest priority) - Lower numbers have higher priority. Use 0 for your main device. - Save profile - Profile name is required - Priority must be a number between 0 and 999 - 0 - Identity Key: Not set - Configured - Encryption Key: Not set - Configured - Identity Key (IRK) - Not configured - Optional: Identity key for enhanced device recognition - Proximity Encryption Key - Not configured - Optional: Encryption key for proximity data decryption - Drag to reorder - Delete Profile - Are you sure you want to delete this profile? This action cannot be undone. - Delete - Device Information - Configure your device name, model, and optional Bluetooth pairing. - Minimum Signal Quality - Only detect devices with signal strength above this threshold. Lower values increase detection range but may cause false positives. + No device profiles configured + Create device profiles to manage multiple devices with custom settings and priorities. + Add profile + Create Profile + Profile name + My Headphones + Device model + Paired device + None + No device selected + Save profile + Drag to reorder + Delete Profile + Are you sure you want to delete this profile? This action cannot be undone. + Delete + Device Information + Configure your device name, model, and optional Bluetooth pairing. + Minimum Signal Quality + Only detect devices with signal strength above this threshold. Lower values increase detection range but may cause false positives. Don\'t set this too high - Bluetooth reception is generally poor and varies with distance and obstacles. + Identity Key + Your device\'s Identity Resolving Key (IRK), which helps CAPod identify it among nearby devices. + AirPods frequently change their Bluetooth address for privacy. The IRK helps CAPod recognize your device. You need one-time access to a MacBook. + Encryption Key + Your device\'s encryption key, which allows CAPod to retrieve detailed status information. + AirPods send a status message, part of which is encrypted. The encryption key allows CAPod to decrypt the full message. You need one-time access to a MacBook. + Invalid key format + Expected format: %1$s + + + Unsaved Changes + You have unsaved changes. What would you like to do? + Save & Exit + Discard + Keep Editing \ No newline at end of file diff --git a/app/src/main/res/xml/preferences_general.xml b/app/src/main/res/xml/preferences_general.xml index 4713b752..6bcee0b1 100644 --- a/app/src/main/res/xml/preferences_general.xml +++ b/app/src/main/res/xml/preferences_general.xml @@ -14,42 +14,6 @@ android:summary="@string/settings_scanner_mode_description" android:title="@string/settings_scanner_mode_label" /> - - - - - - - - - - - - -