@@ -10,42 +10,70 @@ import android.widget.RemoteViews
1010import es.antonborri.home_widget.HomeWidgetBackgroundIntent
1111import es.antonborri.home_widget.HomeWidgetLaunchIntent
1212import es.antonborri.home_widget.HomeWidgetProvider
13+ import es.antonborri.home_widget.HomeWidgetPlugin
14+ import android.content.BroadcastReceiver
1315import org.json.JSONException
1416import android.content.Intent
1517import android.widget.RemoteViewsService
1618import org.json.JSONObject
1719import org.json.JSONArray as OrgJSONArray
1820import com.ccextractor.taskwarriorflutter.MainActivity
1921import com.ccextractor.taskwarriorflutter.R
20-
21-
22- class TaskWarriorWidgetProvider : HomeWidgetProvider () {
23-
24- override fun onUpdate (context : Context , appWidgetManager : AppWidgetManager , appWidgetIds : IntArray , widgetData : SharedPreferences ) {
22+ import android.os.Bundle
23+ import android.app.PendingIntent
24+ import android.appwidget.AppWidgetProvider
25+
26+
27+ class TaskWarriorWidgetProvider : AppWidgetProvider () {
28+
29+ override fun onReceive (context : Context , intent : Intent ) {
30+ // val myaction = intent.action
31+ if (intent.action == " TASK_ACTION" ) {
32+ val extras = intent.extras
33+ if (extras!= null ){
34+ val uuid = extras.getString(" uuid" )? : " "
35+ val launchIntent = Intent (context, MainActivity ::class .java).apply {
36+ action = context.getString(R .string.app_widget_launch_action)
37+ data = Uri .parse(" ${context.getString(R .string.app_widget_card_clicked_uri)} ?uuid=$uuid " )
38+ flags = Intent . FLAG_ACTIVITY_NEW_TASK
39+ context?.startActivity(this )
40+ }
41+ HomeWidgetLaunchIntent .getActivity(context, MainActivity ::class .java, Uri .parse(" TaskWarrior://taskView?taskId=$uuid " ))
42+ }
43+ }
44+ super .onReceive(context, intent)
45+ }
46+ override fun onUpdate (context : Context , appWidgetManager : AppWidgetManager , appWidgetIds : IntArray ) {
2547 appWidgetIds.forEach { widgetId ->
48+ val sharedPrefs = HomeWidgetPlugin .getData(context)
49+ val tasks = sharedPrefs.getString(" tasks" , " " )
50+ val intent = Intent (context,ListViewRemoteViewsService ::class .java).apply {
51+ putExtra(" tasksJsonString" , tasks)
52+ data = Uri .parse(toUri(Intent .URI_INTENT_SCHEME ))
53+ }
2654 val views = RemoteViews (context.packageName, R .layout.taskwarrior_layout).apply {
27- // Open App on Widget Click
55+
2856 val pendingIntent = HomeWidgetLaunchIntent .getActivity(
2957 context,
3058 MainActivity ::class .java)
31- setOnClickPendingIntent(R .id.container_layout, pendingIntent)
32-
33- // setOnClickPendingIntent(R.id.idTvTitle, backgroundIntent)
34-
35- val tasksJsonString = widgetData.getString(" tasks" , null )
36-
37- val intent = Intent (context,ListViewRemoteViewsService ::class .java).apply {
38- putExtra(" tasksJsonString" , tasksJsonString)
39- data = Uri .parse(toUri(Intent .URI_INTENT_SCHEME ))
40- }
59+ setOnClickPendingIntent(R .id.container_layout, pendingIntent)
4160 setRemoteAdapter(R .id.list_view, intent)
42- val listViewPendingIntentTemplate = HomeWidgetLaunchIntent .getActivity(context, MainActivity ::class .java, Uri .parse(" examplehomewidget://mainactivity" ))
43-
44- setPendingIntentTemplate(R .id.list_view, listViewPendingIntentTemplate)
61+
4562 }
46-
63+
64+ val clickPendingIntent: PendingIntent = Intent (
65+ context,
66+ TaskWarriorWidgetProvider ::class .java).run {
67+ setAction(" TASK_ACTION" )
68+ setIdentifier(" uuid" )
69+ data = Uri .parse(toUri(Intent .URI_INTENT_SCHEME ))
70+
71+ PendingIntent .getBroadcast(context,0 ,this ,PendingIntent .FLAG_MUTABLE or PendingIntent .FLAG_UPDATE_CURRENT or Intent .FILL_IN_COMPONENT )
72+ }
73+ views.setPendingIntentTemplate(R .id.list_view,clickPendingIntent)
4774 appWidgetManager.updateAppWidget(widgetId, views)
4875 }
76+ super .onUpdate(context, appWidgetManager, appWidgetIds)
4977 }
5078 }
5179class ListViewRemoteViewsFactory (
@@ -76,14 +104,22 @@ class ListViewRemoteViewsFactory(
76104
77105 override fun getViewAt (position : Int ): RemoteViews {
78106 val task = tasks[position]
79-
80- val taskView = RemoteViews (context.packageName, R .layout.listitem_layout)
81- taskView.setTextViewText(R .id.title_textview, task.title)
82- taskView.setTextViewText(R .id.urgency_textview, task.urgencyLevel)
83-
84- return taskView
107+ return RemoteViews (context.packageName, R .layout.listitem_layout).apply {
108+ setTextViewText(R .id.title_textview, task.title)
109+ setTextViewText(R .id.urgency_textview, task.urgencyLevel)
110+ val a = Intent ().apply {
111+
112+ Bundle ().also { extras ->
113+ extras.putString(" uuid" , " ${tasks[position].uuid} " )
114+ putExtras(extras)
115+ }
116+
117+ }
118+ setOnClickFillInIntent(R .id.list_item_container,a)
119+
120+ }
121+
85122 }
86-
87123 override fun getLoadingView (): RemoteViews ? = null
88124
89125 override fun getViewTypeCount (): Int = 1
@@ -99,12 +135,13 @@ class ListViewRemoteViewsService : RemoteViewsService() {
99135 return ListViewRemoteViewsFactory (applicationContext, tasksJsonString)
100136 }
101137}
102- data class Task (val title : String , val urgencyLevel : String ) {
138+ data class Task (val title : String , val urgencyLevel : String , val uuid : String ) {
103139 companion object {
104140 fun fromJson (json : JSONObject ): Task {
105141 val title = json.optString(" description" , " " )
106142 val urgencyLevel = json.optString(" urgency" , " " )
107- return Task (title, urgencyLevel)
143+ val uuid = json.optString(" uuid" ," " )
144+ return Task (title, urgencyLevel,uuid)
108145 }
109146 }
110147}
0 commit comments