Skip to content

Commit 49d4e92

Browse files
authored
Merge pull request #322 from JangamRuthvik/dev
get uuid of task upon tapping on task from home widget
2 parents d380522 + 28513f5 commit 49d4e92

File tree

6 files changed

+99
-45
lines changed

6 files changed

+99
-45
lines changed

android/app/src/main/AndroidManifest.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@
3030
<action android:name="android.intent.action.MAIN"/>
3131
<category android:name="android.intent.category.LAUNCHER"/>
3232
</intent-filter>
33+
<intent-filter>
34+
<action android:name="es.antonborri.home_widget.action.LAUNCH" />
35+
</intent-filter>
3336
</activity>
3437
<receiver android:name="TaskWarriorWidgetProvider"
3538
android:exported="true">

android/app/src/main/kotlin/com/example/taskwarrior/TaskWarriorWidgetProvider.kt

Lines changed: 66 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -10,42 +10,70 @@ import android.widget.RemoteViews
1010
import es.antonborri.home_widget.HomeWidgetBackgroundIntent
1111
import es.antonborri.home_widget.HomeWidgetLaunchIntent
1212
import es.antonborri.home_widget.HomeWidgetProvider
13+
import es.antonborri.home_widget.HomeWidgetPlugin
14+
import android.content.BroadcastReceiver
1315
import org.json.JSONException
1416
import android.content.Intent
1517
import android.widget.RemoteViewsService
1618
import org.json.JSONObject
1719
import org.json.JSONArray as OrgJSONArray
1820
import com.ccextractor.taskwarriorflutter.MainActivity
1921
import 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
}
5179
class 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
}

android/app/src/main/res/values/strings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<string name="text_data_key">textData</string>
77
<string name="image_data_key">imageData</string>
88
<string name="app_widget_launch_action">es.antonborri.home_widget.action.LAUNCH</string>
9-
<string name="app_widget_card_clicked_uri">TravelScheduleAppWidget://cardClicked</string>
9+
<string name="app_widget_card_clicked_uri">TaskWarriorAppWidget://cardClicked</string>
1010
<string name="my_widget_description">This widget shows pending tasks from TaskWarrior app</string>
1111
<string name="appwidget_text">TaskWarrior</string>
1212
<string name="add_widget">Add widget</string>

lib/controller/WidgetController.dart

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,17 +56,15 @@ class WidgetController extends GetxController {
5656
l.add({
5757
"description": "$i.${task.description}",
5858
"urgency": 'urgencyLevel : ${urgency(task)}',
59+
"uuid":task.uuid
5960
});
6061
i++;
6162
}
6263
}
6364
if (l.isEmpty) {
64-
l.add({
65-
"description": "No tasks added yet.",
66-
"urgency": "urgencyLevel : 0"
67-
});
65+
l.add({"description": "No tasks added yet.", "urgency": "urgencyLevel : 0","uuid":""});
6866
}
69-
await HomeWidget.saveWidgetData('tasks', jsonEncode(l));
67+
await HomeWidget.saveWidgetData("tasks", jsonEncode(l));
7068
}
7169

7270
Future updateWidget() async {

lib/main.dart

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import 'dart:io';
55
import 'package:flutter/material.dart';
66
import 'package:flutter/services.dart';
77
import 'package:get/get.dart';
8+
import 'package:home_widget/home_widget.dart';
89

910
import 'package:loggy/loggy.dart';
1011
import 'package:path_provider/path_provider.dart';
@@ -63,6 +64,20 @@ Future main([List<String> args = const []]) async {
6364
return const AppSetupPlaceholder();
6465
}
6566
})));
67+
HomeWidget.widgetClicked.listen((uri) async{
68+
if (uri != null) {
69+
debugPrint("i am here and uri is $uri");
70+
String? uuid = uri.queryParameters["uuid"];
71+
debugPrint('uuid is $uuid');
72+
if (uuid!=null) {
73+
// Future.delayed(Duration(seconds: 5)).then((value) => Navigator.push(context, MaterialPageRoute(builder: (context) => DetailRoute(uuid),)));
74+
}
75+
}
76+
if (uri?.host == "cardClicked") {
77+
final taskUUID = uri!.queryParameters["uuid"];
78+
debugPrint(taskUUID);
79+
}
80+
});
6681
}
6782

6883
Future<List<Directory>> getDirectories() async {
@@ -72,6 +87,7 @@ Future<List<Directory>> getDirectories() async {
7287
Directory baseDirectory =
7388
(directory != null) ? Directory(directory) : defaultDirectory;
7489
return [defaultDirectory, baseDirectory];
90+
7591
}
7692

7793
Future init() async {

pubspec.lock

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1166,26 +1166,26 @@ packages:
11661166
dependency: "direct main"
11671167
description:
11681168
name: url_launcher
1169-
sha256: e9aa5ea75c84cf46b3db4eea212523591211c3cf2e13099ee4ec147f54201c86
1169+
sha256: "0ecc004c62fd3ed36a2ffcbe0dd9700aee63bd7532d0b642a488b1ec310f492e"
11701170
url: "https://pub.dev"
11711171
source: hosted
1172-
version: "6.2.2"
1172+
version: "6.2.5"
11731173
url_launcher_android:
11741174
dependency: transitive
11751175
description:
11761176
name: url_launcher_android
1177-
sha256: "31222ffb0063171b526d3e569079cf1f8b294075ba323443fdc690842bfd4def"
1177+
sha256: d4ed0711849dd8e33eb2dd69c25db0d0d3fdc37e0a62e629fe32f57a22db2745
11781178
url: "https://pub.dev"
11791179
source: hosted
1180-
version: "6.2.0"
1180+
version: "6.3.0"
11811181
url_launcher_ios:
11821182
dependency: transitive
11831183
description:
11841184
name: url_launcher_ios
1185-
sha256: bba3373219b7abb6b5e0d071b0fe66dfbe005d07517a68e38d4fc3638f35c6d3
1185+
sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03"
11861186
url: "https://pub.dev"
11871187
source: hosted
1188-
version: "6.2.1"
1188+
version: "6.2.4"
11891189
url_launcher_linux:
11901190
dependency: transitive
11911191
description:
@@ -1206,18 +1206,18 @@ packages:
12061206
dependency: transitive
12071207
description:
12081208
name: url_launcher_platform_interface
1209-
sha256: "980e8d9af422f477be6948bdfb68df8433be71f5743a188968b0c1b887807e50"
1209+
sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029"
12101210
url: "https://pub.dev"
12111211
source: hosted
1212-
version: "2.2.0"
1212+
version: "2.3.2"
12131213
url_launcher_web:
12141214
dependency: transitive
12151215
description:
12161216
name: url_launcher_web
1217-
sha256: "7286aec002c8feecc338cc33269e96b73955ab227456e9fb2a91f7fab8a358e9"
1217+
sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b
12181218
url: "https://pub.dev"
12191219
source: hosted
1220-
version: "2.2.2"
1220+
version: "2.2.3"
12211221
url_launcher_windows:
12221222
dependency: transitive
12231223
description:

0 commit comments

Comments
 (0)