Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,12 @@ android {
productFlavors {
production {
dimension "default"
applicationId "com.ccextractor.taskwarrior"
applicationId "com.ccextractor.taskwarriorflutter"
signingConfig keystoreProperties.isEmpty() ? signingConfigs.debug : signingConfigs.production
}
nightly {
dimension "default"
applicationId "com.ccextractor.taskwarrior.nightly"
applicationId "com.ccextractor.taskwarriorflutter.nightly"
versionNameSuffix "-nightly"
signingConfig nightlyKeystoreProperties.isEmpty() ? signingConfigs.debug : signingConfigs.nightly
}
Expand Down
2 changes: 1 addition & 1 deletion android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
</intent-filter>
</activity>

<receiver android:name="TaskWarriorWidgetProvider"
<receiver android:name=".TaskWarriorWidgetProvider"
android:exported="true">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
Expand Down
Binary file not shown.
Binary file not shown.
10 changes: 5 additions & 5 deletions lib/app/modules/about/views/about_page_app_bar.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,17 @@ import 'package:taskwarrior/app/utils/language/sentence_manager.dart';

class AboutPageAppBar extends StatelessWidget implements PreferredSizeWidget {
final AboutController aboutController;
const AboutPageAppBar({required this.aboutController,super.key});
const AboutPageAppBar({required this.aboutController, super.key});

@override
Widget build(BuildContext context) {
return AppBar(
centerTitle: true,
backgroundColor: TaskWarriorColors.kprimaryBackgroundColor,
title: Text(
SentenceManager(
currentLanguage: aboutController.selectedLanguage.value)
.sentences
.aboutPageAppBarTitle,
SentenceManager(currentLanguage: aboutController.selectedLanguage.value)
.sentences
.aboutPageAppBarTitle,
// style: GoogleFonts.poppins(color: TaskWarriorColors.white),
style: TextStyle(
fontFamily: FontFamily.poppins,
Expand All @@ -31,6 +30,7 @@ class AboutPageAppBar extends StatelessWidget implements PreferredSizeWidget {
child: Icon(
Icons.chevron_left,
color: TaskWarriorColors.white,
size: 35,
),
),
);
Expand Down
26 changes: 26 additions & 0 deletions lib/app/modules/home/controllers/home_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:home_widget/home_widget.dart';
import 'package:loggy/loggy.dart';
import 'package:path_provider/path_provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:taskwarrior/app/models/filters.dart';

Expand Down Expand Up @@ -35,6 +36,7 @@ import 'package:taskwarrior/app/v3/db/task_database.dart';
import 'package:taskwarrior/app/v3/db/update.dart';
import 'package:taskwarrior/app/v3/models/task.dart';
import 'package:taskwarrior/app/v3/net/fetch.dart';
import 'package:taskwarrior/rust_bridge/api.dart';
import 'package:textfield_tags/textfield_tags.dart';
import 'package:taskwarrior/app/utils/themes/theme_extension.dart';
import 'package:tutorial_coach_mark/tutorial_coach_mark.dart';
Expand Down Expand Up @@ -101,6 +103,30 @@ class HomeController extends GetxController {
widgetController.update();
}
});
ever(splashController.currentProfile, (_) {
if (splashController.getMode(splashController.currentProfile.value) !=
"TW3") {
refreshTaskWithNewProfile();
}
if (Platform.isAndroid) {
WidgetController widgetController = Get.put(WidgetController());
widgetController.fetchAllData();
widgetController.updateWidget();
}
});
tryRust();
}

Future<void> tryRust() async {
Directory? someDir = await getDownloadsDirectory();

addTask(taskdbDirPath: someDir != null ? someDir.path : "", map: {
'description': "some task from bridge 2",
"uuid": "270750a0-1801-4a24-8b29-a7aaf62fc74d"
});

debugPrint(await getAllTasksJson(
taskdbDirPath: someDir != null ? someDir.path : ""));
}

Future<List<String>> getUniqueProjects() async {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ class HomePageFloatingActionButton extends StatelessWidget {
),
onPressed: () => (controller.taskchampion.value)
? (showModalBottomSheet(
backgroundColor: tColors.dialogBackgroundColor,
context: context,
isScrollControlled: true,
shape: const RoundedRectangleBorder(
Expand All @@ -47,6 +48,7 @@ class HomePageFloatingActionButton extends StatelessWidget {
}
}))
: (showModalBottomSheet(
backgroundColor: tColors.dialogBackgroundColor,
context: context,
isScrollControlled: true,
shape: const RoundedRectangleBorder(
Expand Down
115 changes: 17 additions & 98 deletions lib/app/modules/home/views/nav_drawer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -38,18 +38,18 @@ class NavDrawer extends StatelessWidget {
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
SentenceManager(
currentLanguage:
homeController.selectedLanguage.value)
.sentences
.homePageMenu,
style: TextStyle(
fontSize: TaskWarriorFonts.fontSizeExtraLarge,
fontWeight: TaskWarriorFonts.bold,
color: tColors.primaryTextColor,
),
),
Obx(() => Text(
SentenceManager(
currentLanguage:
homeController.selectedLanguage.value)
.sentences
.homePageMenu,
style: TextStyle(
fontSize: TaskWarriorFonts.fontSizeExtraLarge,
fontWeight: TaskWarriorFonts.bold,
color: tColors.primaryTextColor,
),
)),
Padding(
padding: const EdgeInsets.only(right: 10),
child: ThemeSwitcherClipper(
Expand Down Expand Up @@ -78,98 +78,17 @@ class NavDrawer extends StatelessWidget {
color: tColors.dialogBackgroundColor,
height: Get.height * 0.03,
),
Visibility(
visible: homeController.taskchampion.value,
child: NavDrawerMenuItem(
icon: Icons.task_alt,
Obx(
() => NavDrawerMenuItem(
icon: Icons.person_rounded,
text: SentenceManager(
currentLanguage: homeController.selectedLanguage.value,
).sentences.ccsyncCredentials,
).sentences.navDrawerProfile,
onTap: () {
Get.toNamed(Routes.MANAGE_TASK_CHAMPION_CREDS);
Get.toNamed(Routes.PROFILE);
},
),
),
Visibility(
visible: homeController.taskchampion.value,
child: NavDrawerMenuItem(
icon: Icons.delete,
text: SentenceManager(
currentLanguage: homeController.selectedLanguage.value,
).sentences.deleteTaskTitle,
onTap: () {
showDialog<void>(
context: context,
builder: (BuildContext context) {
return Utils.showAlertDialog(
title: Text(
SentenceManager(
currentLanguage:
homeController.selectedLanguage.value,
).sentences.deleteTaskConfirmation,
style: TextStyle(
color: tColors.primaryTextColor,
),
),
content: Text(
SentenceManager(
currentLanguage:
homeController.selectedLanguage.value,
).sentences.deleteTaskWarning,
style: TextStyle(
color: tColors.primaryDisabledTextColor,
),
),
actions: <Widget>[
TextButton(
child: Text(
SentenceManager(
currentLanguage:
homeController.selectedLanguage.value,
).sentences.homePageCancel,
style: TextStyle(
color: tColors.primaryTextColor,
),
),
onPressed: () {
Navigator.of(context).pop(); // Close the dialog
},
),
TextButton(
child: Text(
SentenceManager(
currentLanguage:
homeController.selectedLanguage.value,
).sentences.navDrawerConfirm,
style: TextStyle(
color: tColors.primaryTextColor,
),
),
onPressed: () {
homeController.deleteAllTasksInDB();
Navigator.of(context).pop(); // Close the dialog
},
),
],
);
},
);
}),
),
Visibility(
visible: !homeController.taskchampion.value,
child: Obx(
() => NavDrawerMenuItem(
icon: Icons.person_rounded,
text: SentenceManager(
currentLanguage: homeController.selectedLanguage.value,
).sentences.navDrawerProfile,
onTap: () {
Get.toNamed(Routes.PROFILE);
},
),
),
),
Visibility(
visible: !homeController.taskchampion.value,
child: Obx(
Expand Down
16 changes: 8 additions & 8 deletions lib/app/modules/home/views/show_tasks.dart
Original file line number Diff line number Diff line change
Expand Up @@ -120,8 +120,7 @@ class TaskViewBuilder extends StatelessWidget {
SlidableAction(
onPressed: (context) {
_markTaskAsCompleted(task.uuid!);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text(
SentenceManager(
currentLanguage:
Expand All @@ -132,8 +131,9 @@ class TaskViewBuilder extends StatelessWidget {
color: tColors.primaryTextColor,
),
),
),
);
backgroundColor:
tColors.secondaryBackgroundColor,
duration: const Duration(seconds: 2)));
},
icon: Icons.done,
label: SentenceManager(
Expand All @@ -150,8 +150,7 @@ class TaskViewBuilder extends StatelessWidget {
SlidableAction(
onPressed: (context) {
_markTaskAsDeleted(task.uuid!);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text(
SentenceManager(
currentLanguage:
Expand All @@ -162,8 +161,9 @@ class TaskViewBuilder extends StatelessWidget {
color: tColors.primaryTextColor,
),
),
),
);
backgroundColor:
tColors.secondaryBackgroundColor,
duration: const Duration(seconds: 2)));
},
icon: Icons.delete,
label: SentenceManager(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,30 +1,65 @@
import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:taskwarrior/app/modules/splash/controllers/splash_controller.dart';
import 'package:taskwarrior/app/utils/taskchampion/credentials_storage.dart';
import 'package:taskwarrior/app/v3/net/origin.dart';
import 'package:http/http.dart' as http;

class ManageTaskChampionCredsController extends GetxController {
final encryptionSecretController = TextEditingController();
final clientIdController = TextEditingController();
final ccsyncBackendUrlController = TextEditingController();

var profilesWidget = Get.find<SplashController>();
RxBool isCheckingCreds = false.obs;
@override
void onInit() {
super.onInit();
loadCredentials();
}

Future<void> loadCredentials() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
encryptionSecretController.text = prefs.getString('encryptionSecret') ?? '';
clientIdController.text = prefs.getString('clientId') ?? '';
ccsyncBackendUrlController.text = prefs.getString('ccsyncBackendUrl') ?? '';
encryptionSecretController.text =
await CredentialsStorage.getEncryptionSecret() ?? '';
clientIdController.text = await CredentialsStorage.getClientId() ?? '';
ccsyncBackendUrlController.text =
await CredentialsStorage.getApiUrl() ?? '';
}

Future<void> saveCredentials() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setString('encryptionSecret', encryptionSecretController.text);
await prefs.setString('clientId', clientIdController.text);
await prefs.setString('ccsyncBackendUrl', ccsyncBackendUrlController.text);
Future<int> saveCredentials() async {
isCheckingCreds.value = true;
String baseUrl = ccsyncBackendUrlController.text;
String uuid = clientIdController.text;
String encryptionSecret = encryptionSecretController.text;
try {
String url =
'$baseUrl/tasks?email=email&origin=$origin&UUID=$uuid&encryptionSecret=$encryptionSecret';

var response = await http.get(Uri.parse(url), headers: {
"Content-Type": "application/json",
}).timeout(const Duration(seconds: 10000));
debugPrint("Fetch tasks response: ${response.statusCode}");
debugPrint("Fetch tasks body: ${response.body}");
if (response.statusCode == 200) {
List<dynamic> allTasks = jsonDecode(response.body);
debugPrint(allTasks.toString());
profilesWidget.setTaskcCreds(
profilesWidget.currentProfile.value,
clientIdController.text,
encryptionSecretController.text,
ccsyncBackendUrlController.text);

isCheckingCreds.value = false;
return 0;
} else {
throw Exception('Failed to load tasks');
}
} catch (e, s) {
debugPrint('Error fetching tasks: $e\n $s');
isCheckingCreds.value = false;
return 1;
}
}

@override
Expand Down
Loading