QOL: Chores.
Final beta before release 1.0.
This commit is contained in:
parent
ac7a5c885d
commit
8293ddeb68
10 changed files with 98 additions and 49 deletions
16
README.md
16
README.md
|
@ -24,6 +24,7 @@ The app does not store data locally, due to the way android permissions function
|
||||||
|
|
||||||
# Implementation
|
# Implementation
|
||||||
|
|
||||||
|
- [ ] Application Icon for mobile and web favicon
|
||||||
- [x] Basic UI
|
- [x] Basic UI
|
||||||
- [x] Permissions
|
- [x] Permissions
|
||||||
- [x] Automatic updates
|
- [x] Automatic updates
|
||||||
|
@ -32,10 +33,11 @@ The app does not store data locally, due to the way android permissions function
|
||||||
- [x] Track driving hours
|
- [x] Track driving hours
|
||||||
- [x] Track trips
|
- [x] Track trips
|
||||||
- [x] Track stops/deliveries
|
- [x] Track stops/deliveries
|
||||||
- [x] Track trip base pay
|
- [x] ~~Track trip base pay~~
|
||||||
- [x] Track each delivery's tips
|
- [x] ~~Track each delivery's tips~~
|
||||||
- [ ] Map marker for each stop/delivery with text saying "Trip #X/DropOff #X\nBase Pay: $$$; Tip: $$$"
|
- [x] Track total pay
|
||||||
- [ ] Basic version of the app in readonly mode when deployed on a web server.
|
- [x] Map marker for each stop/delivery with text saying "Trip #X/DropOff #X ~~\nBase Pay: [amount]; Tip: [amount]~~
|
||||||
- [ ] Backend server
|
- [x] Basic version of the app in readonly mode when deployed on a web server.
|
||||||
- [ ] PHP?
|
- [x] Backend server
|
||||||
- [ ] Dart based?
|
- [x] PHP
|
||||||
|
- [ ] ~~Dart based?~~
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:label="timetrack"
|
android:label="Time Tracker"
|
||||||
android:name="${applicationName}"
|
android:name="${applicationName}"
|
||||||
android:icon="@mipmap/ic_launcher">
|
android:icon="@mipmap/ic_launcher">
|
||||||
<activity
|
<activity
|
||||||
|
|
|
@ -9,7 +9,7 @@ class TTConsts {
|
||||||
static get SESSION_SERVER =>
|
static get SESSION_SERVER =>
|
||||||
"https://api.zontreck.com/timetrack/$UPDATE_CHANNEL/timetrack.php";
|
"https://api.zontreck.com/timetrack/$UPDATE_CHANNEL/timetrack.php";
|
||||||
|
|
||||||
static const VERSION = "1.0.0-beta.9";
|
static const VERSION = "1.0.0-beta.10";
|
||||||
|
|
||||||
static bool UPDATE_AVAILABLE = false;
|
static bool UPDATE_AVAILABLE = false;
|
||||||
static UpdateChannel UPDATE_CHANNEL = UpdateChannel.beta;
|
static UpdateChannel UPDATE_CHANNEL = UpdateChannel.beta;
|
||||||
|
|
|
@ -247,13 +247,15 @@ class SessionData {
|
||||||
StartTime = DateTime.parse(jsMap['start'] as String);
|
StartTime = DateTime.parse(jsMap['start'] as String);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (jsMap.containsKey("end"))
|
if (jsMap.containsKey("end")) {
|
||||||
EndTime = DateTime.parse(jsMap["end"] as String);
|
EndTime = DateTime.parse(jsMap["end"] as String);
|
||||||
|
}
|
||||||
|
|
||||||
if (jsMap.containsKey("totalPay"))
|
if (jsMap.containsKey("totalPay")) {
|
||||||
TotalPay = jsMap["totalPay"] as double;
|
TotalPay = jsMap["totalPay"] as double;
|
||||||
else
|
} else {
|
||||||
TotalPay = null;
|
TotalPay = null;
|
||||||
|
}
|
||||||
|
|
||||||
IsReadOnly = true;
|
IsReadOnly = true;
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ import 'package:libacflutter/Constants.dart';
|
||||||
import 'package:libacflutter/Prompt.dart';
|
import 'package:libacflutter/Prompt.dart';
|
||||||
import 'package:timetrack/consts.dart';
|
import 'package:timetrack/consts.dart';
|
||||||
import 'package:timetrack/data.dart';
|
import 'package:timetrack/data.dart';
|
||||||
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
|
||||||
class HomePage extends StatefulWidget {
|
class HomePage extends StatefulWidget {
|
||||||
const HomePage({super.key});
|
const HomePage({super.key});
|
||||||
|
@ -91,6 +92,19 @@ class _HomePageState extends State<HomePage> {
|
||||||
setState(() {});
|
setState(() {});
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
ListTile(
|
||||||
|
title: Text("Source Code"),
|
||||||
|
subtitle: Text("Licensed under the GPLv3"),
|
||||||
|
leading: Icon(Icons.code_rounded),
|
||||||
|
onTap: () async {
|
||||||
|
final Uri url = Uri.parse(
|
||||||
|
'https://git.zontreck.com/AriasCreations/TimeTracker',
|
||||||
|
);
|
||||||
|
if (!await launchUrl(url)) {
|
||||||
|
throw Exception('Could not launch $url');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
/*
|
/*
|
||||||
ListTile(
|
ListTile(
|
||||||
title: Text("RESET APP SESSION"),
|
title: Text("RESET APP SESSION"),
|
||||||
|
|
|
@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:libacflutter/Constants.dart';
|
import 'package:libacflutter/Constants.dart';
|
||||||
import 'package:timetrack/consts.dart';
|
import 'package:timetrack/consts.dart';
|
||||||
import 'package:timetrack/data.dart';
|
import 'package:timetrack/data.dart';
|
||||||
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
|
||||||
class WebMain extends StatefulWidget {
|
class WebMain extends StatefulWidget {
|
||||||
const WebMain({super.key});
|
const WebMain({super.key});
|
||||||
|
@ -66,6 +67,35 @@ class _WebMain extends State<WebMain> {
|
||||||
setState(() {});
|
setState(() {});
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|
||||||
|
ListTile(
|
||||||
|
title: Text("Source Code"),
|
||||||
|
subtitle: Text("Licensed under the GPLv3"),
|
||||||
|
leading: Icon(Icons.code_rounded),
|
||||||
|
onTap: () async {
|
||||||
|
final Uri url = Uri.parse(
|
||||||
|
'https://git.zontreck.com/AriasCreations/TimeTracker',
|
||||||
|
);
|
||||||
|
if (!await launchUrl(url)) {
|
||||||
|
throw Exception('Could not launch $url');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
|
ListTile(
|
||||||
|
title: Text("Download Mobile App"),
|
||||||
|
subtitle: Text(
|
||||||
|
"Click to go to the download page, from there you will want the APK file.",
|
||||||
|
),
|
||||||
|
leading: Icon(Icons.download),
|
||||||
|
onTap: () async {
|
||||||
|
final Uri url = Uri.parse(
|
||||||
|
"https://ci.zontreck.com/job/Projects/job/Dart/job/Time%20Tracker/",
|
||||||
|
);
|
||||||
|
if (!await launchUrl(url)) {
|
||||||
|
throw Exception("Could not launch $url");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
@ -40,11 +40,11 @@ static void my_application_activate(GApplication* application) {
|
||||||
if (use_header_bar) {
|
if (use_header_bar) {
|
||||||
GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new());
|
GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new());
|
||||||
gtk_widget_show(GTK_WIDGET(header_bar));
|
gtk_widget_show(GTK_WIDGET(header_bar));
|
||||||
gtk_header_bar_set_title(header_bar, "timetrack");
|
gtk_header_bar_set_title(header_bar, "Time Tracker");
|
||||||
gtk_header_bar_set_show_close_button(header_bar, TRUE);
|
gtk_header_bar_set_show_close_button(header_bar, TRUE);
|
||||||
gtk_window_set_titlebar(window, GTK_WIDGET(header_bar));
|
gtk_window_set_titlebar(window, GTK_WIDGET(header_bar));
|
||||||
} else {
|
} else {
|
||||||
gtk_window_set_title(window, "timetrack");
|
gtk_window_set_title(window, "Time Tracker");
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_window_set_default_size(window, 1280, 720);
|
gtk_window_set_default_size(window, 1280, 720);
|
||||||
|
|
|
@ -16,7 +16,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev
|
||||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||||
# In Windows, build-name is used as the major, minor, and patch parts
|
# In Windows, build-name is used as the major, minor, and patch parts
|
||||||
# of the product and file versions while build-number is used as the build suffix.
|
# of the product and file versions while build-number is used as the build suffix.
|
||||||
version: 1.0.0-beta.9
|
version: 1.0.0-beta.10
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ^3.7.2
|
sdk: ^3.7.2
|
||||||
|
@ -46,6 +46,7 @@ dependencies:
|
||||||
flutter_map: ^8.1.1
|
flutter_map: ^8.1.1
|
||||||
latlong2: ^0.9.1
|
latlong2: ^0.9.1
|
||||||
flutter_map_tile_caching: ^10.1.1
|
flutter_map_tile_caching: ^10.1.1
|
||||||
|
url_launcher: ^6.3.1
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
|
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
|
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
|
||||||
<meta name="description" content="A new Flutter project.">
|
<meta name="description" content="A simple, yet effective GPS, time, and mile tracker">
|
||||||
|
|
||||||
<!-- iOS meta tags & icons -->
|
<!-- iOS meta tags & icons -->
|
||||||
<meta name="mobile-web-app-capable" content="yes">
|
<meta name="mobile-web-app-capable" content="yes">
|
||||||
|
|
|
@ -1,35 +1,35 @@
|
||||||
{
|
{
|
||||||
"name": "timetrack",
|
"name": "Time Tracker",
|
||||||
"short_name": "timetrack",
|
"short_name": "timetrack",
|
||||||
"start_url": ".",
|
"start_url": ".",
|
||||||
"display": "standalone",
|
"display": "standalone",
|
||||||
"background_color": "#0175C2",
|
"background_color": "#0175C2",
|
||||||
"theme_color": "#0175C2",
|
"theme_color": "#0175C2",
|
||||||
"description": "A new Flutter project.",
|
"description": "A simple, yet effective GPS, time, and mile tracker",
|
||||||
"orientation": "portrait-primary",
|
"orientation": "portrait-primary",
|
||||||
"prefer_related_applications": false,
|
"prefer_related_applications": false,
|
||||||
"icons": [
|
"icons": [
|
||||||
{
|
{
|
||||||
"src": "icons/Icon-192.png",
|
"src": "icons/Icon-192.png",
|
||||||
"sizes": "192x192",
|
"sizes": "192x192",
|
||||||
"type": "image/png"
|
"type": "image/png"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"src": "icons/Icon-512.png",
|
"src": "icons/Icon-512.png",
|
||||||
"sizes": "512x512",
|
"sizes": "512x512",
|
||||||
"type": "image/png"
|
"type": "image/png"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"src": "icons/Icon-maskable-192.png",
|
"src": "icons/Icon-maskable-192.png",
|
||||||
"sizes": "192x192",
|
"sizes": "192x192",
|
||||||
"type": "image/png",
|
"type": "image/png",
|
||||||
"purpose": "maskable"
|
"purpose": "maskable"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"src": "icons/Icon-maskable-512.png",
|
"src": "icons/Icon-maskable-512.png",
|
||||||
"sizes": "512x512",
|
"sizes": "512x512",
|
||||||
"type": "image/png",
|
"type": "image/png",
|
||||||
"purpose": "maskable"
|
"purpose": "maskable"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue