Warning, /network/kdeconnect-android/src/org/kde/kdeconnect/Plugins/RunCommandPlugin/RunCommandWidgetConfigActivity.kt is written in an unsupported language. File is not indexed.
0001 /*
0002 * SPDX-FileCopyrightText: 2023 Albert Vaca Cintora <albertvaka@gmail.com>
0003 *
0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005 */
0006
0007 package org.kde.kdeconnect.Plugins.RunCommandPlugin
0008
0009 import android.appwidget.AppWidgetManager
0010 import android.appwidget.AppWidgetManager.EXTRA_APPWIDGET_ID
0011 import android.content.Context
0012 import android.content.Intent
0013 import android.os.Bundle
0014 import android.view.View
0015 import android.view.ViewGroup
0016 import android.view.Window
0017 import android.widget.ArrayAdapter
0018 import android.widget.ImageView
0019 import android.widget.TextView
0020 import androidx.appcompat.app.AppCompatActivity
0021 import org.kde.kdeconnect.Device
0022 import org.kde.kdeconnect.KdeConnect
0023 import org.kde.kdeconnect_tp.R
0024 import org.kde.kdeconnect_tp.databinding.WidgetRemoteCommandPluginDialogBinding
0025 import java.util.stream.Collectors
0026 import kotlin.streams.toList
0027
0028 class RunCommandWidgetConfigActivity : AppCompatActivity() {
0029
0030 private var appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID
0031
0032 override fun onCreate(bundle: Bundle?) {
0033 super.onCreate(bundle)
0034
0035 setResult(RESULT_CANCELED) // Default result
0036
0037 appWidgetId = intent.extras?.getInt(EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID) ?: AppWidgetManager.INVALID_APPWIDGET_ID
0038 if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {
0039 finish()
0040 return
0041 }
0042
0043 supportRequestWindowFeature(Window.FEATURE_NO_TITLE)
0044
0045 val binding = WidgetRemoteCommandPluginDialogBinding.inflate(layoutInflater)
0046 setContentView(binding.root)
0047
0048 val pairedDevices = KdeConnect.getInstance().devices.values.stream().filter(Device::isPaired).collect(Collectors.toList());
0049
0050 binding.runCommandsDeviceList.adapter = object : ArrayAdapter<Device>(this, 0, pairedDevices) {
0051 override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
0052 val view : View = convertView ?: layoutInflater.inflate(R.layout.list_item_with_icon_entry, parent, false)
0053 val device = pairedDevices[position]
0054 view.findViewById<TextView>(R.id.list_item_entry_title).text = device.name
0055 view.findViewById<ImageView>(R.id.list_item_entry_icon).setImageDrawable(device.icon)
0056 return view
0057 }
0058 }
0059 binding.runCommandsDeviceList.setOnItemClickListener { _, _, position, _ ->
0060 val deviceId = pairedDevices[position].deviceId
0061 saveWidgetDeviceIdPref(this, appWidgetId, deviceId)
0062
0063 val appWidgetManager = AppWidgetManager.getInstance(this)
0064 updateAppWidget(this, appWidgetManager, appWidgetId)
0065
0066 val resultValue = Intent()
0067 resultValue.putExtra(EXTRA_APPWIDGET_ID, appWidgetId)
0068 setResult(RESULT_OK, resultValue)
0069 finish()
0070 }
0071 binding.runCommandsDeviceList.emptyView = binding.noDevices
0072 }
0073 }
0074
0075 private const val PREFS_NAME = "org.kde.kdeconnect_tp.WidgetProvider"
0076 private const val PREF_PREFIX_KEY = "appwidget_"
0077
0078 internal fun saveWidgetDeviceIdPref(context: Context, appWidgetId: Int, deviceName: String) {
0079 val prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE).edit()
0080 prefs.putString(PREF_PREFIX_KEY + appWidgetId, deviceName)
0081 prefs.apply()
0082 }
0083
0084 internal fun loadWidgetDeviceIdPref(context: Context, appWidgetId: Int): String? {
0085 val prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
0086 return prefs.getString(PREF_PREFIX_KEY + appWidgetId, null)
0087 }
0088
0089 internal fun deleteWidgetDeviceIdPref(context: Context, appWidgetId: Int) {
0090 val prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE).edit()
0091 prefs.remove(PREF_PREFIX_KEY + appWidgetId)
0092 prefs.apply()
0093 }