From 0923c8ecda43a06fab05f95a0469a569ef2dc994 Mon Sep 17 00:00:00 2001 From: Albert Vaca Cintora Date: Tue, 24 Dec 2024 17:34:56 +0100 Subject: [PATCH] Show number of custom devices in settings fragment --- res/values/strings.xml | 1 + .../Backends/LanBackend/LanLinkProvider.java | 2 +- .../UserInterface/CustomDevicesActivity.java | 10 ++++---- .../UserInterface/SettingsFragment.kt | 24 ++++++++++++++++++- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 56dea421..79d4879a 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -269,6 +269,7 @@ SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted Invalid device name Received text, saved to clipboard Custom device list + %d devices added manually Add devices by IP Custom device deleted If your device is not automatically detected you can add its IP address or hostname by clicking on the Floating Action Button diff --git a/src/org/kde/kdeconnect/Backends/LanBackend/LanLinkProvider.java b/src/org/kde/kdeconnect/Backends/LanBackend/LanLinkProvider.java index 0158e731..ffb051c7 100644 --- a/src/org/kde/kdeconnect/Backends/LanBackend/LanLinkProvider.java +++ b/src/org/kde/kdeconnect/Backends/LanBackend/LanLinkProvider.java @@ -386,7 +386,7 @@ public class LanLinkProvider extends BaseLinkProvider { ThreadHelper.execute(() -> { List hostList = CustomDevicesActivity - .getCustomDeviceList(PreferenceManager.getDefaultSharedPreferences(context)); + .getCustomDeviceList(context); if (TrustedNetworkHelper.isTrustedNetwork(context)) { hostList.add(DeviceHost.BROADCAST); //Default: broadcast. diff --git a/src/org/kde/kdeconnect/UserInterface/CustomDevicesActivity.java b/src/org/kde/kdeconnect/UserInterface/CustomDevicesActivity.java index d76eda1f..8e416b44 100644 --- a/src/org/kde/kdeconnect/UserInterface/CustomDevicesActivity.java +++ b/src/org/kde/kdeconnect/UserInterface/CustomDevicesActivity.java @@ -7,6 +7,7 @@ package org.kde.kdeconnect.UserInterface; +import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; @@ -48,7 +49,6 @@ public class CustomDevicesActivity extends AppCompatActivity implements CustomDe private ArrayList customDeviceList; private EditTextAlertDialogFragment addDeviceDialog; - private SharedPreferences sharedPreferences; private CustomDevicesAdapter customDevicesAdapter; private DeletedCustomDevice lastDeletedCustomDevice; private int editingDeviceAtPosition; @@ -70,9 +70,7 @@ public class CustomDevicesActivity extends AppCompatActivity implements CustomDe fab.setOnClickListener(v -> showEditTextDialog(null)); - sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); - - customDeviceList = getCustomDeviceList(sharedPreferences); + customDeviceList = getCustomDeviceList(this); customDeviceList.forEach(host -> host.checkReachable(() -> { runOnUiThread(() -> customDevicesAdapter.notifyDataSetChanged()); return Unit.INSTANCE; @@ -131,6 +129,7 @@ public class CustomDevicesActivity extends AppCompatActivity implements CustomDe } private void saveList() { + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); String serialized = TextUtils.join(IP_DELIM, customDeviceList); sharedPreferences .edit() @@ -154,7 +153,8 @@ public class CustomDevicesActivity extends AppCompatActivity implements CustomDe return ipList; } - public static ArrayList getCustomDeviceList(SharedPreferences sharedPreferences) { + public static ArrayList getCustomDeviceList(Context context) { + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); String deviceListPrefs = sharedPreferences.getString(KEY_CUSTOM_DEVLIST_PREFERENCE, ""); ArrayList list = deserializeIpList(deviceListPrefs); list.sort(Comparator.comparing(DeviceHost::toString)); diff --git a/src/org/kde/kdeconnect/UserInterface/SettingsFragment.kt b/src/org/kde/kdeconnect/UserInterface/SettingsFragment.kt index 5674aabb..a32ea1e9 100644 --- a/src/org/kde/kdeconnect/UserInterface/SettingsFragment.kt +++ b/src/org/kde/kdeconnect/UserInterface/SettingsFragment.kt @@ -6,6 +6,7 @@ package org.kde.kdeconnect.UserInterface import android.Manifest +import android.app.Activity import android.content.Context import android.content.Intent import android.content.pm.PackageManager @@ -151,16 +152,37 @@ class SettingsFragment : PreferenceFragmentCompat() { } } + private val REQUEST_REFRESH_DEVICES_BY_IP = 1 + + private lateinit var devicesByIpPref : Preference + /** Opens activity to configure device by IP when clicked */ private fun devicesByIpPref(context: Context) = Preference(context).apply { + devicesByIpPref = this isPersistent = false setTitle(R.string.custom_device_list) + updateDevicesByIpSummary() onPreferenceClickListener = Preference.OnPreferenceClickListener { - startActivity(Intent(context, CustomDevicesActivity::class.java)) + startActivityForResult(Intent(context, CustomDevicesActivity::class.java), REQUEST_REFRESH_DEVICES_BY_IP) true } } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + if (requestCode == REQUEST_REFRESH_DEVICES_BY_IP) { + updateDevicesByIpSummary() + } else { + super.onActivityResult(requestCode, resultCode, data) + } + } + + private fun updateDevicesByIpSummary() { + devicesByIpPref.setSummary(getString( + R.string.custom_devices_settings_summary, + CustomDevicesActivity.getCustomDeviceList(context).size + )) + } + private fun udpBroadcastPref(context: Context) = SwitchPreference(context).apply { setDefaultValue(true) key = KEY_UDP_BROADCAST_ENABLED