Remove in-app updater and open_filex integration

This commit is contained in:
zypherift
2026-04-08 00:04:12 +02:00
parent be3050faed
commit eadf7e81a5
20 changed files with 16 additions and 544 deletions

View File

@@ -1,32 +0,0 @@
import 'package:refilc/models/release.dart';
import 'package:flutter/material.dart';
import 'package:refilc_mobile_ui/common/panel/panel_button.dart';
import 'package:flutter_feather_icons/flutter_feather_icons.dart';
import 'update_tile.i18n.dart';
class UpdateTile extends StatelessWidget {
const UpdateTile(this.release, {super.key, this.onTap, this.padding});
final Release release;
final Function()? onTap;
final EdgeInsetsGeometry? padding;
@override
Widget build(BuildContext context) {
return Padding(
padding: padding ?? const EdgeInsets.symmetric(horizontal: 8.0),
child: PanelButton(
onPressed: onTap,
title: Text("update_available".i18n),
leading: const Icon(FeatherIcons.download),
trailing: Text(
release.tag,
style: TextStyle(
fontWeight: FontWeight.w500,
color: Theme.of(context).colorScheme.secondary,
),
),
),
);
}
}

View File

@@ -1,21 +0,0 @@
import 'package:i18n_extension/i18n_extension.dart';
extension Localization on String {
static final _t = Translations.byLocale("hu_hu") +
{
"en_en": {
"update_available": "Update Available",
},
"hu_hu": {
"update_available": "Frissítés elérhető",
},
"de_de": {
"update_available": "Update verfügbar",
},
};
String get i18n => localize(this, _t);
String fill(List<Object> params) => localizeFill(this, params);
String plural(int value) => localizePlural(value, this, _t);
String version(Object modifier) => localizeVersion(modifier, this, _t);
}

View File

@@ -1,18 +0,0 @@
import 'package:refilc/models/release.dart';
import 'package:refilc_mobile_ui/common/widgets/update/update_tile.dart';
import 'package:refilc_mobile_ui/common/widgets/update/updates_view.dart';
import 'package:flutter/material.dart';
class UpdateViewable extends StatelessWidget {
const UpdateViewable(this.release, {super.key});
final Release release;
@override
Widget build(BuildContext context) {
return UpdateTile(
release,
onTap: () => UpdateView.show(release, context: context),
);
}
}

View File

@@ -1,185 +0,0 @@
import 'package:refilc/api/providers/status_provider.dart';
import 'package:refilc/models/release.dart';
import 'package:refilc/theme/colors/colors.dart';
import 'package:refilc/utils/color.dart';
import 'package:refilc_mobile_ui/common/bottom_card.dart';
import 'package:refilc_mobile_ui/common/custom_snack_bar.dart';
import 'package:refilc_mobile_ui/common/material_action_button.dart';
import 'package:refilc/helpers/update_helper.dart';
import 'package:flutter/material.dart';
import 'package:flutter_custom_tabs/flutter_custom_tabs.dart';
import 'package:flutter_markdown/flutter_markdown.dart';
import 'package:provider/provider.dart';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'updates_view.i18n.dart';
class UpdateView extends StatefulWidget {
const UpdateView(this.release, {super.key});
final Release release;
static void show(Release release, {required BuildContext context}) =>
showBottomCard(context: context, child: UpdateView(release));
@override
UpdateViewState createState() => UpdateViewState();
}
class UpdateViewState extends State<UpdateView> {
double progress = 0.0;
UpdateState state = UpdateState.none;
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(12.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 12.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"new_update".i18n,
style: const TextStyle(
fontWeight: FontWeight.w700, fontSize: 18.0),
),
Text(
"${widget.release.version}",
style: TextStyle(
fontWeight: FontWeight.w600,
fontSize: 16.0,
color:
AppColors.of(context).text.withValues(alpha: 0.6),
),
),
],
),
ClipRRect(
borderRadius: BorderRadius.circular(18.0),
child: Image.asset(
"assets/images/pixel.png",
width: 64.0,
),
)
],
),
),
// Description
Container(
margin: const EdgeInsets.only(top: 8.0),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12.0),
),
child: SizedBox(
height: 200.0,
child: Markdown(
padding: const EdgeInsets.symmetric(horizontal: 12.0),
physics: const BouncingScrollPhysics(),
data: widget.release.body,
onTapLink: (text, href, title) =>
launchUrl(Uri.parse(href ?? "")),
),
),
),
// Download button
Center(
child: MaterialActionButton(
backgroundColor: AppColors.of(context).filc,
onPressed:
state == UpdateState.none ? () => downloadPrecheck() : null,
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
if (state == UpdateState.downloading ||
state == UpdateState.preparing)
Container(
height: 18.0,
width: 18.0,
margin: const EdgeInsets.only(right: 8.0),
child: CircularProgressIndicator(
value: progress > 0.05 ? progress : null,
color: ColorUtils.foregroundColor(
AppColors.of(context).filc),
),
),
Text([
"download".i18n,
"downloading".i18n,
"downloading".i18n,
"installing".i18n
][state.index]
.toUpperCase()),
],
),
),
),
],
),
);
}
String fmtSize() =>
"${(widget.release.downloads.first.size / 1024 / 1024).toStringAsFixed(1)} MB";
void downloadPrecheck() {
final status = Provider.of<StatusProvider>(context, listen: false);
if (status.networkType == ConnectivityResult.mobile) {
showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text("mobileAlertTitle".i18n),
content: Text("mobileAlertDesc".i18n.fill([fmtSize()])),
actions: [
TextButton(
onPressed: () {
Navigator.of(context).pop(false);
},
child: Text("no".i18n),
),
TextButton(
onPressed: () {
Navigator.of(context).pop(true);
},
child: Text("yes".i18n),
),
],
),
).then((value) => value ? download() : null);
} else {
download();
}
}
void download() {
widget.release
.install(updateCallback: (p, s) {
if (mounted) {
setState(() {
progress = p;
state = s;
});
}
})
.then((_) => Navigator.of(context).maybePop())
.catchError((error, stackTrace) {
if (mounted) {
Navigator.of(context).maybePop();
ScaffoldMessenger.of(context).showSnackBar(CustomSnackBar(
context: context,
content: Text("error".i18n),
backgroundColor: AppColors.of(context).red,
));
setState(() => state = UpdateState.none);
}
return true;
});
}
}

View File

@@ -1,46 +0,0 @@
import 'package:i18n_extension/i18n_extension.dart';
extension Localization on String {
static final _t = Translations.byLocale("hu_hu") +
{
"en_en": {
"new_update": "New Update",
"download": "download",
"downloading": "downloading",
"installing": "installing",
"error": "Failed to install update!",
"no": "No",
"yes": "Yes",
"mobileAlertTitle": "Hold up!",
"mobileAlertDesc": "You're on mobile network trying to download a %s update. Are you sure you want to continue?"
},
"hu_hu": {
"new_update": "Új frissítés",
"download": "Letöltés",
"downloading": "Letöltés",
"installing": "Telepítés",
"error": "Nem sikerült telepíteni a frissítést!",
"no": "Nem",
"yes": "Igen",
"mobileAlertTitle": "Figyelem!",
"mobileAlertDesc": "Jelenleg mobil interneten vagy, és egy %s méretű frissítést próbálsz letölteni. Biztosan folytatod?"
},
"de_de": {
"new_update": "Neues Update",
"download": "herunterladen",
"downloading": "Herunterladen",
"installing": "Installation",
"error": "Update konnte nicht installiert werden!",
"no": "Nein",
"yes": "Ja",
"mobileAlertTitle": "Achtung!",
"mobileAlertDesc":
"Sie befinden sich gerade im mobilen Internet und versuchen, ein %s Update herunterzuladen. Sind Sie sicher, dass Sie weitermachen wollen?"
},
};
String get i18n => localize(this, _t);
String fill(List<Object> params) => localizeFill(this, params);
String plural(int value) => localizePlural(value, this, _t);
String version(Object modifier) => localizeVersion(modifier, this, _t);
}

View File

@@ -5,7 +5,6 @@ import 'dart:math';
import 'package:animations/animations.dart';
import 'package:collection/collection.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:refilc/api/providers/update_provider.dart';
import 'package:refilc/models/settings.dart';
import 'package:refilc/theme/colors/utils.dart';
import 'package:refilc/ui/date_widget.dart';
@@ -59,7 +58,6 @@ class AbsencesPageState extends State<AbsencesPage>
late AbsenceProvider absenceProvider;
late TimetableProvider timetableProvider;
late NoteProvider noteProvider;
late UpdateProvider updateProvider;
late String firstName;
late TabController _tabController;
late List<SubjectAbsence> absences = [];
@@ -136,7 +134,6 @@ class AbsencesPageState extends State<AbsencesPage>
user = Provider.of<UserProvider>(context);
absenceProvider = Provider.of<AbsenceProvider>(context);
noteProvider = Provider.of<NoteProvider>(context);
updateProvider = Provider.of<UpdateProvider>(context);
timetableProvider = Provider.of<TimetableProvider>(context);
List<String> nameParts = user.displayName?.split(" ") ?? ["?"];
@@ -168,7 +165,7 @@ class AbsencesPageState extends State<AbsencesPage>
backgroundColor: Theme.of(context)
.colorScheme
.tertiary, //ColorUtils.stringToColor(user.displayName ?? "?"),
badge: updateProvider.available,
badge: false,
role: user.role,
profilePictureString: user.picture,
gradeStreak: (user.gradeStreak ?? 0) > 1,

View File

@@ -9,7 +9,6 @@ import 'package:collection/collection.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/foundation.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:refilc/api/providers/update_provider.dart';
import 'package:refilc/models/settings.dart';
import 'package:refilc/ui/widgets/grade/grade_tile.dart';
import 'package:refilc_kreta_api/models/exam.dart';
@@ -79,7 +78,6 @@ class GradesPageState extends State<GradesPage> {
late UserProvider user;
late GradeProvider gradeProvider;
late UpdateProvider updateProvider;
late GradeCalculatorProvider calculatorProvider;
late HomeworkProvider homeworkProvider;
late ExamProvider examProvider;
@@ -450,7 +448,6 @@ class GradesPageState extends State<GradesPage> {
Widget build(BuildContext context) {
user = Provider.of<UserProvider>(context);
gradeProvider = Provider.of<GradeProvider>(context);
updateProvider = Provider.of<UpdateProvider>(context);
calculatorProvider = Provider.of<GradeCalculatorProvider>(context);
homeworkProvider = Provider.of<HomeworkProvider>(context);
examProvider = Provider.of<ExamProvider>(context);
@@ -587,7 +584,7 @@ class GradesPageState extends State<GradesPage> {
backgroundColor: Theme.of(context)
.colorScheme
.tertiary, //ColorUtils.stringToColor(user.displayName ?? "?"),
badge: updateProvider.available,
badge: false,
role: user.role,
profilePictureString: user.picture,
gradeStreak: (user.gradeStreak ?? 0) > 1,

View File

@@ -13,7 +13,6 @@ import 'package:intl/intl.dart';
import 'package:refilc_mobile_ui/pages/messages/messages_page.dart';
import 'package:refilc_plus/providers/plus_provider.dart';
import 'package:animated_list_plus/animated_list_plus.dart';
import 'package:refilc/api/providers/update_provider.dart';
import 'package:refilc/api/providers/sync.dart';
import 'package:confetti/confetti.dart';
import 'package:refilc/models/settings.dart';
@@ -51,7 +50,6 @@ class HomePageState extends State<HomePage> with TickerProviderStateMixin {
late TabController _tabController;
late UserProvider user;
late SettingsProvider settings;
late UpdateProvider updateProvider;
late StatusProvider statusProvider;
late GradeProvider gradeProvider;
late TimetableProvider timetableProvider;
@@ -174,7 +172,6 @@ class HomePageState extends State<HomePage> with TickerProviderStateMixin {
user = Provider.of<UserProvider>(context);
settings = Provider.of<SettingsProvider>(context);
statusProvider = Provider.of<StatusProvider>(context, listen: false);
updateProvider = Provider.of<UpdateProvider>(context);
_liveCard = Provider.of<LiveCardProvider>(context);
gradeProvider = Provider.of<GradeProvider>(context);
context.watch<PlusProvider>();
@@ -335,7 +332,7 @@ class HomePageState extends State<HomePage> with TickerProviderStateMixin {
.tertiary, //!settings.presentationMode
//? ColorUtils.stringToColor(user.displayName ?? "?")
//: Theme.of(context).colorScheme.secondary,
badge: updateProvider.available,
badge: false,
role: user.role,
profilePictureString: user.picture,
gradeStreak: (user.gradeStreak ?? 0) > 1,

View File

@@ -1,7 +1,6 @@
import 'dart:math';
import 'package:google_fonts/google_fonts.dart';
import 'package:refilc/api/providers/update_provider.dart';
import 'package:refilc/models/settings.dart';
import 'package:refilc/ui/date_widget.dart';
import 'package:refilc_kreta_api/providers/message_provider.dart';
@@ -35,7 +34,6 @@ class MessagesPageState extends State<MessagesPage>
late UserProvider user;
late MessageProvider messageProvider;
late UpdateProvider updateProvider;
late String firstName;
late TabController tabController;
@@ -50,7 +48,6 @@ class MessagesPageState extends State<MessagesPage>
Widget build(BuildContext context) {
user = Provider.of<UserProvider>(context);
messageProvider = Provider.of<MessageProvider>(context);
updateProvider = Provider.of<UpdateProvider>(context);
List<String> nameParts = user.displayName?.split(" ") ?? ["?"];
firstName = nameParts.length > 1 ? nameParts[1] : nameParts[0];
@@ -108,7 +105,7 @@ class MessagesPageState extends State<MessagesPage>
backgroundColor: Theme.of(context)
.colorScheme
.tertiary, //ColorUtils.stringToColor(user.displayName ?? "?"),
badge: updateProvider.available,
badge: false,
role: user.role,
profilePictureString: user.picture,
gradeStreak: (user.gradeStreak ?? 0) > 1,

View File

@@ -26,7 +26,6 @@ import 'package:flutter_feather_icons/flutter_feather_icons.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:refilc/api/providers/database_provider.dart';
import 'package:refilc/api/providers/self_note_provider.dart';
import 'package:refilc/api/providers/update_provider.dart';
import 'package:refilc/models/self_note.dart';
import 'package:refilc/models/settings.dart';
import 'package:refilc/utils/format.dart';
@@ -76,7 +75,6 @@ class NotesPage extends StatefulWidget {
class NotesPageState extends State<NotesPage> with TickerProviderStateMixin {
late UserProvider user;
late UpdateProvider updateProvider;
late DatabaseProvider databaseProvider;
late SelfNoteProvider selfNoteProvider;
@@ -112,7 +110,6 @@ Future<void> deleteTodoItem(TodoItem item) async {
user = Provider.of<UserProvider>(context, listen: false);
databaseProvider = Provider.of<DatabaseProvider>(context, listen: false);
updateProvider = Provider.of<UpdateProvider>(context, listen: false);
selfNoteProvider = Provider.of<SelfNoteProvider>(context, listen: false);
doneItems = await databaseProvider.userQuery.toDoItems(userId: user.id!);
@@ -287,7 +284,6 @@ if (selfNoteProvider.todos.isNotEmpty) {
Widget build(BuildContext context) {
user = Provider.of<UserProvider>(context);
databaseProvider = Provider.of<DatabaseProvider>(context);
updateProvider = Provider.of<UpdateProvider>(context);
selfNoteProvider = Provider.of<SelfNoteProvider>(context);
List<String> nameParts = user.displayName?.split(" ") ?? ["?"];
@@ -357,7 +353,7 @@ if (selfNoteProvider.todos.isNotEmpty) {
name: firstName,
backgroundColor: Theme.of(context).colorScheme.tertiary,
//ColorUtils.stringToColor(user.displayName ?? "?"),
badge: updateProvider.available,
badge: false,
role: user.role,
profilePictureString: user.picture,
gradeStreak: (user.gradeStreak ?? 0) > 1,

View File

@@ -3,7 +3,6 @@ import 'package:animations/animations.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:i18n_extension/i18n_extension.dart';
import 'package:refilc/api/providers/database_provider.dart';
import 'package:refilc/api/providers/update_provider.dart';
import 'package:refilc/models/settings.dart';
import 'package:refilc/utils/format.dart';
import 'package:refilc_kreta_api/client/client.dart';
@@ -77,7 +76,6 @@ class TimetablePageState extends State<TimetablePage>
late UserProvider user;
late TimetableProvider timetableProvider;
late UpdateProvider updateProvider;
late SettingsProvider settingsProvider;
late DatabaseProvider db;
@@ -209,7 +207,6 @@ class TimetablePageState extends State<TimetablePage>
Widget build(BuildContext context) {
user = Provider.of<UserProvider>(context);
timetableProvider = Provider.of<TimetableProvider>(context);
updateProvider = Provider.of<UpdateProvider>(context);
settingsProvider = Provider.of<SettingsProvider>(context);
getCustom();
@@ -315,7 +312,7 @@ class TimetablePageState extends State<TimetablePage>
backgroundColor: Theme.of(context)
.colorScheme
.tertiary, //ColorUtils.stringToColor(user.displayName ?? "?"),
badge: updateProvider.available,
badge: false,
role: user.role,
profilePictureString: user.picture,
gradeStreak: (user.gradeStreak ?? 0) > 1,

View File

@@ -1,7 +1,6 @@
// ignore_for_file: deprecated_member_use
import 'package:flutter_svg/svg.dart';
import 'package:refilc/api/providers/update_provider.dart';
import 'package:refilc/helpers/quick_actions.dart';
import 'package:refilc/models/settings.dart';
import 'package:refilc/theme/observer.dart';
@@ -54,7 +53,6 @@ class NavigationScreenState extends State<NavigationScreen>
late SettingsProvider settings;
late NewsProvider newsProvider;
late GoalProvider goalProvider;
late UpdateProvider updateProvider;
late GradeProvider gradeProvicer;
late AdProvider adProvider;
@@ -181,10 +179,6 @@ class NavigationScreenState extends State<NavigationScreen>
goalProvider = Provider.of<GoalProvider>(context, listen: false);
goalProvider.fetchDone(gradeProvider: gradeProvicer);
// get releases
updateProvider = Provider.of<UpdateProvider>(context, listen: false);
updateProvider.fetch();
// get advertisements
adProvider = Provider.of<AdProvider>(context, listen: false);
adProvider.fetch();

View File

@@ -22,7 +22,6 @@ import 'dart:convert';
import 'dart:io';
import 'package:refilc/api/providers/live_card_provider.dart';
import 'package:refilc/api/providers/update_provider.dart';
import 'package:refilc_kreta_api/providers/absence_provider.dart';
import 'package:refilc_kreta_api/providers/event_provider.dart';
import 'package:refilc_kreta_api/providers/exam_provider.dart';
@@ -52,7 +51,6 @@ import 'package:refilc_mobile_ui/common/splitted_panel/splitted_panel.dart';
import 'package:refilc_mobile_ui/common/system_chrome.dart';
// import 'package:refilc_mobile_ui/common/system_chrome.dart';
import 'package:refilc_mobile_ui/common/widgets/update/updates_view.dart';
import 'package:refilc_mobile_ui/screens/news/news_screen.dart';
// import 'package:refilc_mobile_ui/screens/notes/notes_screen.dart';
@@ -105,7 +103,6 @@ class SettingsScreenState extends State<SettingsScreen>
Future<Map>? futureRelease;
late UserProvider user;
late UpdateProvider updateProvider;
late SettingsProvider settings;
late DatabaseProvider databaseProvider;
late KretaClient kretaClient;
@@ -270,10 +267,6 @@ class SettingsScreenState extends State<SettingsScreen>
@override
void initState() {
super.initState();
Future.delayed(Duration.zero, () {
futureRelease = Provider.of<UpdateProvider>(context, listen: false)
.installedVersion();
});
_hideContainersController = AnimationController(
vsync: this, duration: const Duration(milliseconds: 200));
}
@@ -293,7 +286,6 @@ class SettingsScreenState extends State<SettingsScreen>
Widget build(BuildContext context) {
user = Provider.of<UserProvider>(context);
settings = Provider.of<SettingsProvider>(context);
updateProvider = Provider.of<UpdateProvider>(context);
databaseProvider = Provider.of<DatabaseProvider>(context);
kretaClient = Provider.of<KretaClient>(context);
@@ -393,7 +385,7 @@ class SettingsScreenState extends State<SettingsScreen>
radius: 48.42069,
onTap: () => _showBottomSheet(user.getUser(user.id ?? "")),
name: firstName,
badge: updateProvider.available,
badge: false,
role: user.role,
profilePictureString: user.picture,
gradeStreak: (user.gradeStreak ?? 0) > 1,
@@ -610,27 +602,6 @@ class SettingsScreenState extends State<SettingsScreen>
// ),
// ),
// updates
if (updateProvider.available)
Padding(
padding: const EdgeInsets.symmetric(
vertical: 12.0, horizontal: 24.0),
child: Panel(
child: PanelButton(
onPressed: () => _openUpdates(context),
title: Text("update_available".i18n),
leading: const Icon(FeatherIcons.download),
trailing: Text(
updateProvider.releases.first.tag,
style: TextStyle(
fontWeight: FontWeight.w500,
color: Theme.of(context).colorScheme.secondary,
),
),
),
),
),
// const Padding(
// padding: EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
// child: PremiumBannerButton(),
@@ -1174,9 +1145,6 @@ class SettingsScreenState extends State<SettingsScreen>
Navigator.of(context, rootNavigator: true)
.push(CupertinoPageRoute(builder: (context) => const NewsScreen()));
void _openUpdates(BuildContext context) =>
UpdateView.show(updateProvider.releases.first, context: context);
void _openPrivacy(BuildContext context) => PrivacyView.show(context);
// void _openNotes(BuildContext context, Map<String, bool> doneItems) async =>