Warning, /network/kdeconnect-android/src/org/kde/kdeconnect/Plugins/RunCommandPlugin/RunCommandWidgetDataProvider.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.util.Log
0014 import android.view.View
0015 import android.widget.RemoteViews
0016 import android.widget.RemoteViewsService
0017 import android.widget.RemoteViewsService.RemoteViewsFactory
0018 import org.kde.kdeconnect.KdeConnect
0019 import org.kde.kdeconnect_tp.R
0020 
0021 internal class RunCommandWidgetDataProvider(private val context: Context, val intent: Intent?) : RemoteViewsFactory {
0022 
0023     private var deviceId : String? = null
0024     private var widgetId : Int = AppWidgetManager.INVALID_APPWIDGET_ID
0025 
0026     override fun onCreate() {
0027         widgetId = intent?.getIntExtra(EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID) ?: AppWidgetManager.INVALID_APPWIDGET_ID
0028         if (widgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {
0029             Log.e("KDEConnect/Widget", "RunCommandWidgetDataProvider: No widget id extra was set")
0030             return
0031         }
0032         deviceId = loadWidgetDeviceIdPref(context, widgetId)
0033     }
0034 
0035     override fun onDataSetChanged() {
0036         deviceId = loadWidgetDeviceIdPref(context, widgetId)
0037     }
0038 
0039     override fun onDestroy() {}
0040 
0041     private fun getPlugin(): RunCommandPlugin? {
0042         return KdeConnect.getInstance().getDevicePlugin(deviceId, RunCommandPlugin::class.java)
0043     }
0044 
0045     override fun getCount(): Int {
0046         return getPlugin()?.commandItems?.size ?: 0
0047     }
0048 
0049     override fun getViewAt(i: Int): RemoteViews {
0050         val remoteView = RemoteViews(context.packageName, R.layout.list_item_entry)
0051 
0052         val plugin : RunCommandPlugin? = getPlugin()
0053         if (plugin == null) {
0054             // Either the deviceId was null, or the plugin is not available.
0055             if (deviceId != null) {
0056                 Log.e("getViewAt", "RunCommandWidgetDataProvider: Plugin not found")
0057             }
0058             // Return a new, not-configured layout as a fallback
0059             return remoteView
0060         }
0061 
0062         val listItem = plugin.commandItems[i]
0063 
0064         remoteView.setTextViewText(R.id.list_item_entry_title, listItem.name)
0065         remoteView.setTextViewText(R.id.list_item_entry_summary, listItem.command)
0066         remoteView.setViewVisibility(R.id.list_item_entry_summary, View.VISIBLE)
0067 
0068         val runCommandIntent = Intent(context, RunCommandWidgetProvider::class.java)
0069         runCommandIntent.action = RUN_COMMAND_ACTION
0070         runCommandIntent.putExtra(EXTRA_APPWIDGET_ID, widgetId)
0071         runCommandIntent.putExtra(TARGET_COMMAND, listItem.key)
0072         runCommandIntent.putExtra(TARGET_DEVICE, deviceId)
0073         remoteView.setOnClickFillInIntent(R.id.list_item_entry, runCommandIntent)
0074 
0075         return remoteView
0076     }
0077 
0078     override fun getLoadingView(): RemoteViews? {
0079         return null
0080     }
0081 
0082     override fun getViewTypeCount(): Int {
0083         return 1
0084     }
0085 
0086     override fun getItemId(i: Int): Long {
0087         return getPlugin()?.commandItems?.get(i)?.key?.hashCode()?.toLong() ?: 0
0088     }
0089 
0090     override fun hasStableIds(): Boolean {
0091         return false
0092     }
0093 }
0094 
0095 class CommandsRemoteViewsService : RemoteViewsService() {
0096     override fun onGetViewFactory(intent: Intent): RemoteViewsFactory {
0097         return RunCommandWidgetDataProvider(this.applicationContext, intent)
0098     }
0099 }
0100