Update change log (#1511)
This commit is contained in:
commit
e99544e335
18
CHANGELOG.md
18
CHANGELOG.md
|
@ -1,6 +1,24 @@
|
||||||
# CHANGELOG
|
# CHANGELOG
|
||||||
|
|
||||||
|
|
||||||
|
## v0.7.118
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* #### Explore with the new Search Tab ✨
|
||||||
|
|
||||||
|
Introducing a dedicated search tab with distinct sections for effortless discovery.
|
||||||
|
|
||||||
|
You can now discover items that come under different Locations, Moments, Contacts, Photo descriptions, Albums and File types with ease.
|
||||||
|
|
||||||
|
* #### Black Friday Sale 🎉
|
||||||
|
|
||||||
|
You can now purchase Ente's plans for 3 years at 30% off and 5 years at 50% off.
|
||||||
|
|
||||||
|
The storage you purchase will be stacked on top of your current plan.
|
||||||
|
|
||||||
|
This is the lowest our prices will ever be, so do consider upgrading!
|
||||||
|
|
||||||
|
|
||||||
## v0.7.82
|
## v0.7.82
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
|
@ -16,7 +16,7 @@ class UpdateService {
|
||||||
static final UpdateService instance = UpdateService._privateConstructor();
|
static final UpdateService instance = UpdateService._privateConstructor();
|
||||||
static const kUpdateAvailableShownTimeKey = "update_available_shown_time_key";
|
static const kUpdateAvailableShownTimeKey = "update_available_shown_time_key";
|
||||||
static const changeLogVersionKey = "update_change_log_key";
|
static const changeLogVersionKey = "update_change_log_key";
|
||||||
static const currentChangeLogVersion = 12;
|
static const currentChangeLogVersion = 13;
|
||||||
|
|
||||||
LatestVersionInfo? _latestVersion;
|
LatestVersionInfo? _latestVersion;
|
||||||
final _logger = Logger("UpdateService");
|
final _logger = Logger("UpdateService");
|
||||||
|
|
|
@ -1,12 +1,15 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import "package:flutter_animate/flutter_animate.dart";
|
||||||
import "package:photos/generated/l10n.dart";
|
import "package:photos/generated/l10n.dart";
|
||||||
import 'package:photos/services/update_service.dart';
|
import 'package:photos/services/update_service.dart';
|
||||||
import 'package:photos/theme/ente_theme.dart';
|
import 'package:photos/theme/ente_theme.dart';
|
||||||
import 'package:photos/ui/components/buttons/button_widget.dart';
|
import 'package:photos/ui/components/buttons/button_widget.dart';
|
||||||
import 'package:photos/ui/components/divider_widget.dart';
|
import 'package:photos/ui/components/divider_widget.dart';
|
||||||
import 'package:photos/ui/components/models/button_type.dart';
|
import 'package:photos/ui/components/models/button_type.dart';
|
||||||
|
import "package:photos/ui/components/notification_widget.dart";
|
||||||
import 'package:photos/ui/components/title_bar_title_widget.dart';
|
import 'package:photos/ui/components/title_bar_title_widget.dart';
|
||||||
import 'package:photos/ui/notification/update/change_log_entry.dart';
|
import 'package:photos/ui/notification/update/change_log_entry.dart';
|
||||||
|
import "package:photos/utils/black_friday_util.dart";
|
||||||
import "package:url_launcher/url_launcher_string.dart";
|
import "package:url_launcher/url_launcher_string.dart";
|
||||||
|
|
||||||
class ChangeLogPage extends StatefulWidget {
|
class ChangeLogPage extends StatefulWidget {
|
||||||
|
@ -64,6 +67,36 @@ class _ChangeLogPageState extends State<ChangeLogPage> {
|
||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
|
shouldShowBfBanner()
|
||||||
|
? RepaintBoundary(
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.only(bottom: 8),
|
||||||
|
child: NotificationWidget(
|
||||||
|
isBlackFriday: true,
|
||||||
|
startIcon: Icons.celebration,
|
||||||
|
actionIcon: Icons.arrow_forward_outlined,
|
||||||
|
text: S.of(context).blackFridaySale,
|
||||||
|
subText: S.of(context).upto50OffUntil4thDec,
|
||||||
|
type: NotificationType.goldenBanner,
|
||||||
|
onTap: () async {
|
||||||
|
launchUrlString(
|
||||||
|
"https://ente.io/blackfriday",
|
||||||
|
mode: LaunchMode.platformDefault,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.animate(
|
||||||
|
onPlay: (controller) => controller.repeat(),
|
||||||
|
)
|
||||||
|
.shimmer(
|
||||||
|
duration: 1000.ms,
|
||||||
|
delay: 3200.ms,
|
||||||
|
size: 0.6,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: const SizedBox.shrink(),
|
||||||
|
|
||||||
ButtonWidget(
|
ButtonWidget(
|
||||||
buttonType: ButtonType.trailingIconPrimary,
|
buttonType: ButtonType.trailingIconPrimary,
|
||||||
buttonSize: ButtonSize.large,
|
buttonSize: ButtonSize.large,
|
||||||
|
@ -89,19 +122,23 @@ class _ChangeLogPageState extends State<ChangeLogPage> {
|
||||||
// await UpdateService.instance.launchReviewUrl();
|
// await UpdateService.instance.launchReviewUrl();
|
||||||
// },
|
// },
|
||||||
// ),
|
// ),
|
||||||
ButtonWidget(
|
|
||||||
buttonType: ButtonType.trailingIconSecondary,
|
shouldShowBfBanner()
|
||||||
buttonSize: ButtonSize.large,
|
? const SizedBox.shrink()
|
||||||
labelText: "Join the ente community",
|
: ButtonWidget(
|
||||||
icon: Icons.people_alt_rounded,
|
buttonType: ButtonType.trailingIconSecondary,
|
||||||
iconColor: enteColorScheme.primary500,
|
buttonSize: ButtonSize.large,
|
||||||
onTap: () async {
|
labelText: "Join the ente community",
|
||||||
launchUrlString(
|
icon: Icons.people_alt_rounded,
|
||||||
"https://ente.io/community",
|
iconColor: enteColorScheme.primary500,
|
||||||
mode: LaunchMode.externalApplication,
|
onTap: () async {
|
||||||
);
|
launchUrlString(
|
||||||
},
|
"https://ente.io/community",
|
||||||
),
|
mode: LaunchMode.externalApplication,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
@ -118,35 +155,20 @@ class _ChangeLogPageState extends State<ChangeLogPage> {
|
||||||
final List<ChangeLogEntry> items = [];
|
final List<ChangeLogEntry> items = [];
|
||||||
items.add(
|
items.add(
|
||||||
ChangeLogEntry(
|
ChangeLogEntry(
|
||||||
"Hidden albums ✨",
|
"Explore with the new Search Tab ✨",
|
||||||
'You can now hide albums, just like individual memories.\n',
|
'Introducing a dedicated search tab with distinct sections for effortless discovery.\n'
|
||||||
|
'\nYou can now discover items that come under different Locations, Moments, Contacts, Photo descriptions, Albums and File types with ease.\n',
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
items.add(
|
items.add(
|
||||||
ChangeLogEntry(
|
ChangeLogEntry(
|
||||||
"Album improvements ✨",
|
"Black Friday Sale 🎉",
|
||||||
'You can now pin your favourite albums, and set cover photos for them.\n'
|
"You can now purchase Ente's plans for 3 years at 30% off and 5 years at 50% off!\n"
|
||||||
'\nWe have also added a way to first create empty albums, and then add photos to it, both from ente and your device gallery.\n'),
|
'\nThe storage you purchase will be stacked on top of your current plan.\n'
|
||||||
);
|
'\nThis is the lowest our prices will ever be, so do consider upgrading!\n',
|
||||||
|
|
||||||
items.add(
|
|
||||||
ChangeLogEntry(
|
|
||||||
"Email verification ✨",
|
|
||||||
'We have now made email verification optional, so you can sign in with'
|
|
||||||
' just your email address and password, without waiting for a verification code.\n'
|
|
||||||
'\nYou can opt in / out of email verification from Settings > Security.\n',
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
items.add(
|
|
||||||
ChangeLogEntry(
|
|
||||||
"Bug fixes & other enhancements",
|
|
||||||
'We have squashed a few pesky bugs that were reported by our community,'
|
|
||||||
'and have improved the experience for albums and quick links.\n'
|
|
||||||
'\nIf you would like to help us improve ente, come join the ente community!',
|
|
||||||
isFeature: false,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
return Container(
|
return Container(
|
||||||
padding: const EdgeInsets.only(left: 16),
|
padding: const EdgeInsets.only(left: 16),
|
||||||
child: Scrollbar(
|
child: Scrollbar(
|
||||||
|
|
|
@ -9,7 +9,6 @@ import 'package:photos/events/opened_settings_event.dart';
|
||||||
import "package:photos/generated/l10n.dart";
|
import "package:photos/generated/l10n.dart";
|
||||||
import 'package:photos/services/feature_flag_service.dart';
|
import 'package:photos/services/feature_flag_service.dart';
|
||||||
import "package:photos/services/storage_bonus_service.dart";
|
import "package:photos/services/storage_bonus_service.dart";
|
||||||
import "package:photos/services/user_service.dart";
|
|
||||||
import 'package:photos/theme/colors.dart';
|
import 'package:photos/theme/colors.dart';
|
||||||
import 'package:photos/theme/ente_theme.dart';
|
import 'package:photos/theme/ente_theme.dart';
|
||||||
import "package:photos/ui/components/notification_widget.dart";
|
import "package:photos/ui/components/notification_widget.dart";
|
||||||
|
@ -28,6 +27,7 @@ import 'package:photos/ui/settings/storage_card_widget.dart';
|
||||||
import 'package:photos/ui/settings/support_section_widget.dart';
|
import 'package:photos/ui/settings/support_section_widget.dart';
|
||||||
import 'package:photos/ui/settings/theme_switch_widget.dart';
|
import 'package:photos/ui/settings/theme_switch_widget.dart';
|
||||||
import "package:photos/ui/sharing/verify_identity_dialog.dart";
|
import "package:photos/ui/sharing/verify_identity_dialog.dart";
|
||||||
|
import "package:photos/utils/black_friday_util.dart";
|
||||||
import "package:photos/utils/navigation_util.dart";
|
import "package:photos/utils/navigation_util.dart";
|
||||||
import "package:url_launcher/url_launcher_string.dart";
|
import "package:url_launcher/url_launcher_string.dart";
|
||||||
|
|
||||||
|
@ -188,23 +188,6 @@ class SettingsPage extends StatelessWidget {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool shouldShowBfBanner() {
|
|
||||||
if (!Platform.isAndroid && !kDebugMode) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
// if date is after 5th of December 2023, 00:00:00, hide banner
|
|
||||||
if (DateTime.now().isAfter(DateTime(2023, 12, 5))) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
// if coupon is already applied, can hide the banner
|
|
||||||
return (UserService.instance
|
|
||||||
.getCachedUserDetails()
|
|
||||||
?.bonusData
|
|
||||||
?.getAddOnBonuses()
|
|
||||||
.isEmpty ??
|
|
||||||
true);
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> _showVerifyIdentityDialog(BuildContext context) async {
|
Future<void> _showVerifyIdentityDialog(BuildContext context) async {
|
||||||
await showDialog(
|
await showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
|
|
21
lib/utils/black_friday_util.dart
Normal file
21
lib/utils/black_friday_util.dart
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
import "dart:io";
|
||||||
|
|
||||||
|
import "package:flutter/foundation.dart";
|
||||||
|
import "package:photos/services/user_service.dart";
|
||||||
|
|
||||||
|
bool shouldShowBfBanner() {
|
||||||
|
if (!Platform.isAndroid && !kDebugMode) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// if date is after 5th of December 2023, 00:00:00, hide banner
|
||||||
|
if (DateTime.now().isAfter(DateTime(2023, 12, 5))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// if coupon is already applied, can hide the banner
|
||||||
|
return (UserService.instance
|
||||||
|
.getCachedUserDetails()
|
||||||
|
?.bonusData
|
||||||
|
?.getAddOnBonuses()
|
||||||
|
.isEmpty ??
|
||||||
|
true);
|
||||||
|
}
|
|
@ -12,7 +12,7 @@ description: ente photos application
|
||||||
# Read more about iOS versioning at
|
# Read more about iOS versioning at
|
||||||
# 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
|
||||||
|
|
||||||
version: 0.7.117+517
|
version: 0.7.118+518
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=3.0.0 <4.0.0"
|
sdk: ">=3.0.0 <4.0.0"
|
||||||
|
|
Loading…
Reference in a new issue