Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate dev-features to dev branch #2807

Merged
merged 64 commits into from
Apr 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
6f687ce
TF-2644 Display warning dialog when pick file exceeded maximum size i…
dab246 Feb 29, 2024
662ff9b
TF-2644 Display warning dialog when drag & drop file exceeded maximum…
dab246 Feb 29, 2024
6337808
TF-2644 Display warning dialog when share file exceeded maximum size …
dab246 Feb 29, 2024
2e9ba38
TF-2644 Display warning dialog when drag from other email exceeded ma…
dab246 Feb 29, 2024
5934349
TF-2644 Display tooltip message when attachments exceeded maximum siz…
dab246 Feb 29, 2024
ea67282
TF-2644 Handle total size exceeded maximum size when drag & drop mult…
dab246 Mar 1, 2024
00a228e
TF-2644 Remove wrong text in intl_vi.arb
hoangdat Mar 19, 2024
1fcc16b
TF-2667 Use `Username` replace `UserProfile`
dab246 Mar 5, 2024
ec7067d
TF-2667 Create ApplicationVersionWidget to display app version
dab246 Mar 6, 2024
2b95174
TF-2667 Move the creation of mailbox request id to the data layer
dab246 Mar 5, 2024
9e42c23
TF-2667 Show sending message dialog when click send button
dab246 Mar 5, 2024
e98f3da
TF-2667 Replace `isSendEmailLoading` to `ButtonState`
dab246 Mar 5, 2024
9422fcd
TF-2667 Show confirm dialog when send email failed
dab246 Mar 5, 2024
6279895
TF-2667 Show confirm dialog when click close composer
dab246 Mar 5, 2024
b77086b
TF-2667 Show saving message dialog when preform save action
dab246 Mar 5, 2024
75a8c57
TF-2667 Refresh thread & mailbox view when saving message success
dab246 Mar 5, 2024
f1d4912
TF-2667 Handle save message to cache when reload page
dab246 Mar 5, 2024
9803276
TF-2667 Add cancel button in progress send message dialog
dab246 Mar 12, 2024
e5f1729
TF-2667 Add cancel button in progress saving message to drafts dialog
dab246 Mar 12, 2024
58fb2d1
TF-2667 Validate email in recipient form before send email
dab246 Mar 18, 2024
344dcac
TF-2667 Remove log unnecessary
dab246 Mar 18, 2024
b233eae
TF-2667 Clean `WARNING/INFO` when run dart analyze
dab246 Mar 19, 2024
2f7d32c
TF-2667 Write unit test for `Domain` & `MailAddress` class
dab246 Mar 21, 2024
bd96ac4
TF-2667 Fix crash when click on From me in search filter
dab246 Mar 21, 2024
1cff6e9
TF-2667 Remove composer cache after close composer view
dab246 Mar 21, 2024
d2240a8
TF-2667 Handle error better when perform save as drafts
dab246 Mar 21, 2024
4e76d48
TF-2667 Fix width size inline image in email view after send email
dab246 Mar 21, 2024
91fc292
TF-2667 Remove function not used
dab246 Mar 21, 2024
7a81083
TF-2667 Prevent close sending/saving dialog when click system back on…
dab246 Mar 22, 2024
536ecfb
TF-2667 Store email to sending queue when sending with no connection …
dab246 Mar 22, 2024
be71520
TF-2684 Add long press action for TMailButtonWidget
dab246 Mar 12, 2024
1b3c598
TF-2684 Use scrollbar theme replace customize scrollbar
dab246 Mar 12, 2024
83e67db
TF-2684 Enable selectable in blue bar
dab246 Mar 12, 2024
608bd4c
TF-2684 Add button `Mail to attendees` to open composer with `to: all…
dab246 Mar 12, 2024
0b899ec
TF-2684 Fix difficult to select text in blue bar on responsive tablet
dab246 Mar 26, 2024
2caee89
TF-2717 Replace `from cc bcc` buttons in `to` by `arrow down` button …
dab246 Mar 18, 2024
7cde16f
TF-2717 Allow show full signature in composer on mobile
dab246 Mar 19, 2024
095c6c7
TF-2717 Display attachment bar below subject field on mobile
dab246 Mar 19, 2024
3966a88
TF-2717 Display attachment bar below subject field on landscape mobile
dab246 Mar 25, 2024
a8d7447
TF-2717 Display attachment bar below subject field on tablet
dab246 Mar 19, 2024
8ebe42b
TF-2717 Write widgets test for RecipientComposerWidget
dab246 Mar 25, 2024
4ed1031
TF-2717 Write widgets test for case email address too long in recipie…
dab246 Mar 25, 2024
e0b59b8
TF-2717 Write widget test for multiple recipients when focus and unfocus
dab246 Mar 26, 2024
8de6285
TF-2717 Write widget test for text overflow of label tag
dab246 Mar 26, 2024
d9de3fb
TF-2717 Write widget test for change language
dab246 Mar 26, 2024
6234be0
TF-2717 Use `cnb_supported` branch for rich_text_composer dependency
dab246 Apr 1, 2024
a28549d
TF-2717 Get identity when open app, if not get identity, get whenever…
dab246 Apr 1, 2024
974150a
TF-2717 Get identity again when back to dashboard from settings
dab246 Apr 1, 2024
e869289
TF-2717 Disable delete in keyboard shortcut on mobile
dab246 Apr 1, 2024
04ab51f
TF-2717 Auto hide text input recipient when unfocus
dab246 Apr 3, 2024
c5662e8
TF-2717 Use `defaultTargetPlatform` to easily write tests for widget
dab246 Apr 3, 2024
9e72f77
TF-2717 Write widget test for case recipient has expanded button
dab246 Apr 3, 2024
89ca550
TF-2717 Show text input field when click tag recipient item
dab246 Apr 3, 2024
cf60b78
Update `html_editor_enhanced` dependency
dab246 Apr 16, 2024
67e5b19
Set default button padding in confirm dialog
dab246 Apr 19, 2024
b45d83b
Disable outside dismissible confirm dialog in composer
dab246 Apr 19, 2024
5d93435
TF-2671 Fix scroll jumping when typing on composer
tddang-linagora Mar 26, 2024
553c564
TF-2215 Remove LocaleInterceptor
dab246 Jan 15, 2024
e6055b4
TF-2215 Add `Accept-Language` and `Content-Language` when sent email
dab246 Jan 15, 2024
57c6b56
Update pubspec.lock for `html_editor_enhanced` dependency
dab246 Apr 22, 2024
370a859
Fix identity fetching again when open composer
dab246 Apr 23, 2024
b72dba0
Release the variable on memory when the controller is closed
dab246 Apr 23, 2024
5f02d64
Hotfix: Build app ios failed on CI/CD
dab246 Feb 5, 2024
6f81c1f
Hotfix: Build release ios failed
dab246 Feb 7, 2024
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
14 changes: 12 additions & 2 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ on:

name: Build dev binaries

env:
FLUTTER_VERSION: 3.16.0
XCODE_VERSION: ^15.0.1

jobs:
build-app:
name: Build app
Expand All @@ -15,7 +19,7 @@ jobs:
- os: android
runner: ubuntu-latest
- os: ios
runner: macos-latest
runner: macos-13
environment: dev

steps:
Expand All @@ -25,7 +29,7 @@ jobs:
- name: Setup flutter
uses: subosito/flutter-action@v2
with:
flutter-version: "3.16.0"
flutter-version: ${{ env.FLUTTER_VERSION }}
channel: "stable"
cache: true
cache-key: deps-${{ hashFiles('**/pubspec.lock') }} # optional, change this to force refresh cache
Expand All @@ -50,6 +54,12 @@ jobs:
distribution: "temurin"
java-version: "11"

- name: Select Xcode version
if: matrix.os == 'ios'
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: ${{ env.XCODE_VERSION }}

- name: Setup iOS environment
if: matrix.os == 'ios'
run: ../scripts/setup-ios.sh
Expand Down
14 changes: 12 additions & 2 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ on:

name: Release

env:
FLUTTER_VERSION: 3.16.0
XCODE_VERSION: ^15.0.1

jobs:
release:
name: Release
Expand All @@ -16,7 +20,7 @@ jobs:
- os: android
runner: ubuntu-latest
- os: ios
runner: macos-latest
runner: macos-13
fail-fast: false

environment: prod
Expand All @@ -28,7 +32,7 @@ jobs:
- name: Setup flutter
uses: subosito/flutter-action@v2
with:
flutter-version: "3.16.0"
flutter-version: ${{ env.FLUTTER_VERSION }}
channel: "stable"
cache: true
cache-key: deps-${{ hashFiles('**/pubspec.lock') }} # optional, change this to force refresh cache
Expand All @@ -53,6 +57,12 @@ jobs:
distribution: "temurin"
java-version: "11"

- name: Select Xcode version
if: matrix.os == 'ios'
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: ${{ env.XCODE_VERSION }}

- name: Setup Android environment
if: matrix.os == 'android'
env:
Expand Down
26 changes: 25 additions & 1 deletion contact/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.1.0"
fk_user_agent:
dependency: transitive
description:
name: fk_user_agent
sha256: fd6c94e120786985a292d12f61422a581f4e851148d5940af38b819357b8ad0d
url: "https://pub.dev"
source: hosted
version: "2.1.0"
flex_color_picker:
dependency: transitive
description:
Expand Down Expand Up @@ -532,7 +540,7 @@ packages:
description:
path: "."
ref: cnb_support
resolved-ref: "351a1bf0fef48f59d771d3a485cbada950f2ed0a"
resolved-ref: "10f5838aa1c6c4bffc5690f46d05d0cc4e489e1c"
url: "https://github.com/linagora/jmap-dart-client.git"
source: git
version: "0.0.1"
Expand Down Expand Up @@ -639,6 +647,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.0"
package_info_plus:
dependency: transitive
description:
name: package_info_plus
sha256: "7e76fad405b3e4016cd39d08f455a4eb5199723cf594cd1b8916d47140d93017"
url: "https://pub.dev"
source: hosted
version: "4.2.0"
package_info_plus_platform_interface:
dependency: transitive
description:
name: package_info_plus_platform_interface
sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6"
url: "https://pub.dev"
source: hosted
version: "2.0.1"
path:
dependency: transitive
description:
Expand Down
3 changes: 2 additions & 1 deletion core/analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,5 @@ linter:
rules:
constant_identifier_names: false
non_constant_identifier_names: false
unnecessary_string_escapes: false
unnecessary_string_escapes: false
avoid_web_libraries_in_flutter: false
3 changes: 3 additions & 0 deletions core/lib/core.dart
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@ export 'utils/file_utils.dart';
export 'utils/option_param_mixin.dart';
export 'utils/print_utils.dart';
export 'utils/broadcast_channel/broadcast_channel.dart';
export 'utils/list_utils.dart';
export 'utils/mail/domain.dart';
export 'utils/mail/mail_address.dart';

// Views
export 'presentation/views/text/slogan_builder.dart';
Expand Down
1 change: 1 addition & 0 deletions core/lib/data/constants/constant.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@ class Constant {
static const acceptHeaderDefault = 'application/json';
static const contentTypeHeaderDefault = 'application/json';
static const pdfMimeType = 'application/pdf';
static const base64Charset = 'base64';
static const textHtmlMimeType = 'text/html';
}
14 changes: 10 additions & 4 deletions core/lib/data/network/download/download_client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,8 @@ class DownloadClient {
'bytesData': bytesData,
'mimeType': 'image/$fileExtension',
'cid': cid,
'fileName': fileName
'fileName': fileName,
'maxWidth': maxWidth
});

return base64Uri;
Expand All @@ -77,7 +78,8 @@ class DownloadClient {
'bytesData': bytesDataCompressed,
'mimeType': 'image/$fileExtension',
'cid': cid,
'fileName': fileName
'fileName': fileName,
'maxWidth': maxWidth
});

return base64Uri;
Expand All @@ -86,7 +88,8 @@ class DownloadClient {
'bytesData': bytesData,
'mimeType': 'image/$fileExtension',
'cid': cid,
'fileName': fileName
'fileName': fileName,
'maxWidth': maxWidth
});

return base64Uri;
Expand All @@ -103,11 +106,14 @@ class DownloadClient {
var mimeType = entryParam['mimeType'];
final cid = entryParam['cid'];
var fileName = entryParam['fileName'];
var maxWidth = entryParam['maxWidth'] != null
? '${entryParam['maxWidth']}px'
: '100%';
final base64Data = base64Encode(bytesData);
if (fileName.contains('.')) {
fileName = fileName.split('.').first;
}
final base64Uri = '<img src="${HtmlUtils.convertBase64ToImageResourceData(base64Data: base64Data, mimeType: mimeType)}" alt="$fileName" id="cid:$cid" style="max-width: 100%;" />';
final base64Uri = '<img src="${HtmlUtils.convertBase64ToImageResourceData(base64Data: base64Data, mimeType: mimeType)}" alt="$fileName" id="cid:$cid" style="max-width: $maxWidth;" />';
return base64Uri;
}
}
13 changes: 13 additions & 0 deletions core/lib/domain/exceptions/address_exception.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import 'package:equatable/equatable.dart';

class AddressException with EquatableMixin implements Exception {
final String message;

AddressException(this.message);

@override
String toString() => message;

@override
List<Object> get props => [message];
}
3 changes: 2 additions & 1 deletion core/lib/presentation/action/action_callback_define.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@
import 'package:flutter/material.dart';

typedef OnTapActionCallback = void Function();
typedef OnTapActionAtPositionCallback = void Function(RelativeRect position);
typedef OnTapActionAtPositionCallback = void Function(RelativeRect position);
typedef OnLongPressActionCallback = void Function();
1 change: 0 additions & 1 deletion core/lib/presentation/extensions/color_extension.dart
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,6 @@ extension AppColor on Color {
static const colorBackgroundQuotasWarning = Color(0xFFFFC107);
static const colorQuotaWarning = Color(0xFFF05C44);
static const colorQuotaError = Color(0xffE64646);
static const colorThumbScrollBar = Color(0xFFAEB7C2);
static const colorCreateNewIdentityButton = Color(0xFFEBEDF0);
static const colorSpamReportBannerBackground = Color(0xFFBFDEFF);
static const colorSpamReportBannerStrokeBorder = Color(0x1F000000);
Expand Down
6 changes: 3 additions & 3 deletions core/lib/presentation/utils/theme_utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ class ThemeUtils {
dividerTheme: _dividerTheme,
visualDensity: VisualDensity.adaptivePlatformDensity,
scrollbarTheme: ScrollbarThemeData(
thickness: MaterialStateProperty.all(2.0),
radius: const Radius.circular(5.0),
thumbColor: MaterialStateProperty.all(AppColor.colorThumbScrollBar)),
thickness: MaterialStateProperty.all(8.0),
radius: const Radius.circular(8.0),
thumbColor: MaterialStateProperty.all(AppColor.thumbScrollbarColor)),
);
}

Expand Down
7 changes: 7 additions & 0 deletions core/lib/presentation/views/button/tmail_button_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ class TMailButtonWidget extends StatelessWidget {

final OnTapActionCallback? onTapActionCallback;
final OnTapActionAtPositionCallback? onTapActionAtPositionCallback;
final OnLongPressActionCallback? onLongPressActionCallback;

final double borderRadius;
final double? width;
Expand Down Expand Up @@ -44,6 +45,7 @@ class TMailButtonWidget extends StatelessWidget {
required this.text,
this.onTapActionCallback,
this.onTapActionAtPositionCallback,
this.onLongPressActionCallback,
this.borderRadius = 20,
this.width,
this.maxWidth = double.infinity,
Expand Down Expand Up @@ -77,6 +79,7 @@ class TMailButtonWidget extends StatelessWidget {
final Key? key,
OnTapActionCallback? onTapActionCallback,
OnTapActionAtPositionCallback? onTapActionAtPositionCallback,
OnLongPressActionCallback? onLongPressActionCallback,
double borderRadius = 20,
double? width,
double maxWidth = double.infinity,
Expand All @@ -99,6 +102,7 @@ class TMailButtonWidget extends StatelessWidget {
text: '',
onTapActionCallback: onTapActionCallback,
onTapActionAtPositionCallback: onTapActionAtPositionCallback,
onLongPressActionCallback: onLongPressActionCallback,
borderRadius: borderRadius,
width: width,
maxWidth : maxWidth,
Expand All @@ -124,6 +128,7 @@ class TMailButtonWidget extends StatelessWidget {
final Key? key,
OnTapActionCallback? onTapActionCallback,
OnTapActionAtPositionCallback? onTapActionAtPositionCallback,
OnLongPressActionCallback? onLongPressActionCallback,
double borderRadius = 20,
double? width,
double maxWidth = double.infinity,
Expand All @@ -145,6 +150,7 @@ class TMailButtonWidget extends StatelessWidget {
text: text,
onTapActionCallback: onTapActionCallback,
onTapActionAtPositionCallback: onTapActionAtPositionCallback,
onLongPressActionCallback: onLongPressActionCallback,
borderRadius: borderRadius,
width: width,
maxWidth : maxWidth,
Expand Down Expand Up @@ -335,6 +341,7 @@ class TMailButtonWidget extends StatelessWidget {
return TMailContainerWidget(
onTapActionCallback: onTapActionCallback,
onTapActionAtPositionCallback: onTapActionAtPositionCallback,
onLongPressActionCallback: onLongPressActionCallback,
borderRadius: borderRadius,
width: width,
maxWidth: maxWidth,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ class TMailContainerWidget extends StatelessWidget {

final OnTapActionCallback? onTapActionCallback;
final OnTapActionAtPositionCallback? onTapActionAtPositionCallback;
final OnLongPressActionCallback? onLongPressActionCallback;

final Widget child;
final double borderRadius;
Expand All @@ -26,6 +27,7 @@ class TMailContainerWidget extends StatelessWidget {
required this.child,
this.onTapActionCallback,
this.onTapActionAtPositionCallback,
this.onLongPressActionCallback,
this.borderRadius = 20,
this.width,
this.maxWidth = double.infinity,
Expand Down Expand Up @@ -58,6 +60,7 @@ class TMailContainerWidget extends StatelessWidget {
onTapActionAtPositionCallback!.call(position);
}
},
onLongPress: onLongPressActionCallback,
borderRadius: BorderRadius.all(Radius.circular(borderRadius)),
child: tooltipMessage != null
? Tooltip(
Expand Down
Loading
Loading