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

Release v2.3.2 #773

Merged
merged 60 commits into from
Oct 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
3549ee1
fix: blynk when scroll in search room
drminh2807 Sep 28, 2023
ec48d68
Fix UI chat wrong
nqhhdev Sep 29, 2023
5ce1959
Update padding for chat list screen
nqhhdev Sep 29, 2023
10ac262
hot-fix: chat list out of order
sherlockvn Oct 2, 2023
bd943f6
TW-715: Fix clear DB when logout in web
nqhhdev Oct 2, 2023
8daaf1d
fix: last sender display name null safety
Sep 28, 2023
4597d0b
fix: remove download file when no attachment
Oct 2, 2023
484f9e5
fix: Build iOS 17
drminh2807 Oct 3, 2023
be45675
TW-726 Notification no sound in iOS
drminh2807 Oct 4, 2023
4dc36b9
TW-692: Update UI when change page
nqhhdev Sep 29, 2023
cfdb8d5
TW-692: Update folder settings
nqhhdev Sep 29, 2023
8991919
TW-692: Fix overflow for display name
nqhhdev Sep 29, 2023
94640d9
TW-692: Remove Settings screen from go_router
nqhhdev Sep 29, 2023
14a2691
TW-692: Create settings, settings profile enum and settings profile p…
nqhhdev Sep 29, 2023
3da7dfd
TW-692: Create SettingsDashboardManagerController for manage settings
nqhhdev Sep 29, 2023
1afe18e
TW-692: Add new text for intl
nqhhdev Sep 29, 2023
f955c23
TW-692: Create `SettingsProfileItemBuilder`
nqhhdev Sep 29, 2023
94fac4f
TW-692: Create `SettingsItemBuilder`
nqhhdev Sep 29, 2023
bea3db7
TW-692: Create `SettingsProfileViewMobile`
nqhhdev Sep 29, 2023
29e0c95
TW-692: Create `SettingsProfileViewWeb`
nqhhdev Sep 29, 2023
495aaf0
TW-692: Update settings screen
nqhhdev Sep 29, 2023
65d07a1
TW-692: Update settings profile screen
nqhhdev Sep 29, 2023
127f29a
TW-692: Add SnackBar for copy and update highlight when select option…
nqhhdev Sep 29, 2023
6308787
TW-692: Create `TwakeEventDispatcher`, `TwakeInappEventTypes` to use …
nqhhdev Oct 3, 2023
e1e42bf
TW-692: Create `FetchProfileMixin` to handle fetch profile
nqhhdev Oct 3, 2023
fe29ab4
TW-692: Handle sync profile for stream
nqhhdev Oct 3, 2023
1aefa10
TW-692: Add ADR for send/listen event
nqhhdev Oct 3, 2023
6965012
TW-692: Create `UploadProfileInteractor`
nqhhdev Oct 3, 2023
d6e8085
TW-692: Implement `UploadProfile` in presentation layer
nqhhdev Oct 3, 2023
e25689a
fix: drag & drop on web version
Oct 2, 2023
421ca3d
TW-732 Load more in add member in group need support mouse scroll
drminh2807 Oct 3, 2023
ecccc9d
TW-679 Load more not work in contact tab
drminh2807 Oct 3, 2023
018248b
fixup! TW-732 Load more in add member in group need support mouse scroll
drminh2807 Oct 3, 2023
95a508d
feat: display only first message display name when multi
Oct 2, 2023
3db8bbe
TW-724 Improve composer with enter shortcut and need support Vietnamese
drminh2807 Oct 3, 2023
fe4d604
TW-726 Notification android
drminh2807 Oct 4, 2023
3adabfb
TW-740: remove change avatar event when user first set his avatar
sherlockvn Oct 4, 2023
1046e2a
fix: Search contacts cached
drminh2807 Oct 5, 2023
5daf836
TW-729: swipe left to right to back from chat screen
sherlockvn Oct 3, 2023
26891ce
TW-730: add custom components to build animation when open to view im…
sherlockvn Oct 3, 2023
4c2554c
TW-730: apply new hero animation when open sending im
sherlockvn Oct 3, 2023
5691f4d
TW-730: update navigation to have hero animation
sherlockvn Oct 3, 2023
3b59345
TW-730: update image viewer to have hero animation on pop
sherlockvn Oct 3, 2023
0ff4116
TW-730: update video player to have hero animation on pop
sherlockvn Oct 3, 2023
f6d39ea
TW-730: update sending video player to have hero animation
sherlockvn Oct 3, 2023
ec91bf5
TW-730: update play video action method to have eventId for hero tag
sherlockvn Oct 3, 2023
ab91371
TW-730: fix forward image not back to chat screen
sherlockvn Oct 4, 2023
f14fd0b
TW-730: support full screen for images
sherlockvn Oct 5, 2023
7b620a3
improve: images/videos viewer
sherlockvn Oct 5, 2023
34e496d
feat: new encrypted message design
Oct 2, 2023
6f01416
fix: remove pusher when logout
drminh2807 Oct 5, 2023
d7b937c
TW-734: remove forward quick action in web
sherlockvn Oct 6, 2023
7fbec71
TW-745: remove bigger bubble when hover
sherlockvn Oct 6, 2023
4e39823
TW-765: Keep navigation bar when open search page
nqhhdev Oct 6, 2023
8e40db6
TW-741: redesign reply content style
Oct 3, 2023
d802efb
TW-633: preview pdf on web client
Sep 27, 2023
771a4cf
TW-633: add twake snackbar helper
Oct 5, 2023
d76e925
feat: add spacing between messages bubbles
Oct 5, 2023
c7af134
hot-fix/remove black background when swipe video
sherlockvn Oct 6, 2023
f2109d7
Bump version to v2.3.2
hoangdat Oct 6, 2023
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
20 changes: 17 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -1706,6 +1706,21 @@ Version 0.30.0 will be the first version with arm64 support. You can download bi
This CHANGELOG.md was generated with [**Changelog for
Dart**](https://pub.dartlang.org/packages/changelog)

## [2.3.2+2330] - 2023-10-06

### Added

- New Settings screeen
- Load more error

### Fixed

- blink when scrolling chat
- UI chat wrong
- error in clear DB when logout in web
- drag n drop in web
- gesture to back

## [2.3.1+2330] - 2023-09-29

### Fixed
Expand All @@ -1717,9 +1732,7 @@ Dart**](https://pub.dartlang.org/packages/changelog)
- upload thumbnail and calculate blur hash

## [2.3.0+2330] - 2023-09-25

### Added

- Download file in all platform
- Context menu for web
- Search insie App
Expand Down Expand Up @@ -1757,7 +1770,8 @@ Dart**](https://pub.dartlang.org/packages/changelog)
- Reduce unnecessary API request to Profile API
- Fix the placeholder for image to reduce memory consumption

[2.3.1+2330]: https://github.com/linagora/twake-on-matrix/releases/tag/2.3.1
[2.3.2+2330]: https://github.com/linagora/twake-on-matrix/releases/tag/2.3.2

[2.3.1+2330]: https://github.com/linagora/twake-on-matrix/releases/tag/2.3.1
[2.3.0+2330]: https://github.com/linagora/twake-on-matrix/releases/tag/2.3.0
[2.2.4+2330]: https://github.com/linagora/twake-on-matrix/releases/tag/2.2.4
32 changes: 28 additions & 4 deletions assets/l10n/intl_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -1689,7 +1689,7 @@
"type": "text",
"placeholders": {}
},
"search": "Search for people and channels",
"searchForPeopleAndChannels": "Search for people and channels",
"@search": {
"type": "text",
"placeholders": {}
Expand Down Expand Up @@ -2647,7 +2647,6 @@
"tapToAllowAccessToYourGallery": "Tap to allow access to your Gallery",
"tapToAllowAccessToYourCamera": "You can enable camera access in the Settings app to make video calls in",
"twake": "Twake",
"dismiss": "Dismiss",
"permissionAccess": "Permission access",
"allow": "Allow",
"explainStoragePermission": "Twake need access to your storage to preview file",
Expand All @@ -2669,7 +2668,6 @@
}
},
"keyboard": "Keyboard",
"tapToAllowAccessToYourGallery": "Tap to allow access to your Gallery",
"changeChatAvatar": "Change the Chat avatar",
"roomAvatarMaxFileSize": "The avatar size is too large",
"@roomAvatarMaxFileSize": {},
Expand Down Expand Up @@ -2734,5 +2732,31 @@
"unmuteThisMessage": "Unmute this message",
"read": "Read",
"unread": "Unread",
"unmute": "Unmute"
"unmute": "Unmute",
"privacyAndSecurity" : "Privacy & Security",
"notificationAndSounds": "Notification & Sounds",
"appLanguage": "App Language",
"chatFolders": "Chat Folders",
"settingsChatSubtitle" : "Appearance, themes, wallpaper, chat history.",
"settingsPrivacyAndSecuritySubtitle": "Block contacts, disappearing messages.",
"settingsNotificationAndSoundsSubtitle": "Custom how you get notifications from Twake such as previewing messages, sounds, time,...",
"settingsChatFoldersSubtitle": "Create and manage folders for different groups of chats and quickly switch between them.",
"settingsAppLanguageSubtitle": "English (phone’s language).",
"settingsDevicesSubtitle": "Control your sign in and sign out on any device.",
"settingsHelpSubtitle": "Help center, contact us, privacy policy.",
"displayName": "Display Name",
"bio": "Bio (optional)",
"matrixId": "Matrix ID",
"email": "Email",
"company": "Company",
"basicInfo": "BASIC INFO",
"editProfileDescriptions": "Update your profile with a new name, picture and a short introduction.",
"workIdentitiesInfo": "WORK IDENTITIES INFO",
"editWorkIdentitiesDescriptions": "Edit your work identity settings such as Matrix ID, email or company name.",
"copiedMatrixIdToClipboard": "Copied Matrix ID to clipboard.",
"changeProfilePhoto": "Change profile photo",
"thisMessageHasBeenEncrypted": "This message has been encrypted",
"roomCreationFailed": "Room creation failed",
"errorGettingPdf": "Error getting PDF",
"errorPreviewingFile": "Error previewing file"
}
73 changes: 73 additions & 0 deletions docs/adr/0009-Instructions-for-naming-twake-events.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# 7. Instructions for naming twake events

Date: 2023-10-03

## Status

Accepted

## Docs

- [Spec](https://spec.matrix.org/v1.6/#events)

## Context

- All data exchanged through Matrix is represented as an “event”. In addition, we have local support events.
- We can use local events to handle logic and behavior by injecting events into a defined stream.

## Decision

How to name events
- Below are the naming rules for events.
- App.twake is the name of the application.
- Inapp is event use for local support.
- Profile is the name of the feature.
- Avatar is the name of the event.
ex: 'app.twake.inapp.profile.avatar'

How to use events.
- Send event

```
class TwakeEventDispatcher {
static final TwakeEventDispatcher _twakeEventDispatcher =
TwakeEventDispatcher._instance();

factory TwakeEventDispatcher() {
return _twakeEventDispatcher;
}

TwakeEventDispatcher._instance();

void sendAccountDataEvent({
required Client client,
required BasicEvent basicEvent,
}) {
client.onAccountData.add(basicEvent);
}
}

twakeEventDispatcher.sendAccountDataEvent(
client: client,
basicEvent: BasicEvent(
type: TwakeInappEventTypes.uploadAvatarEvent,
content: profile.toJson(),
),
);
```
- Listen event and handle it

```
client.onAccountData.stream.listen((event) {
Logs().d(
'FetchProfileMixin::onAccountData() - EventType: ${event.type} - EventContent: ${event.content}',
);
if (event.type == TwakeInappEventTypes.uploadAvatarEvent) {
profileNotifier.value = Profile.fromJson(event.content);
}
});
```

## Consequences

- If we do not specifically define the event, it will be duplicated with the homeserver event
4 changes: 4 additions & 0 deletions ios/Podfile
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
target.build_configurations.each do |config|
xcconfig_path = config.base_configuration_reference.real_path
xcconfig = File.read(xcconfig_path)
xcconfig_mod = xcconfig.gsub(/DT_TOOLCHAIN_DIR/, "TOOLCHAIN_DIR")
File.open(xcconfig_path, "w") { |file| file << xcconfig_mod }
config.build_settings['ENABLE_BITCODE'] = 'NO'

# see https://github.com/flutter-webrtc/flutter-webrtc/issues/1054
Expand Down
2 changes: 1 addition & 1 deletion ios/Runner.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -190,14 +190,14 @@
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
8C9CCA7C5C45651F90C7BFDD /* [CP] Check Pods Manifest.lock */,
C1005C4D261071B5002F4F32 /* Embed App Extensions */,
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
F9C8EE392B9AB471149C306E /* [CP] Embed Pods Frameworks */,
C1005C4D261071B5002F4F32 /* Embed App Extensions */,
);
buildRules = (
);
Expand Down
6 changes: 6 additions & 0 deletions ios/Runner/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,12 @@ let apnTokenKey = "apnToken"
case "getInitialNoti":
result(self?.initialNotiInfo)
self?.initialNotiInfo = nil
case "clearAll":
UIApplication.shared.applicationIconBadgeNumber = 0
let center = UNUserNotificationCenter.current()
center.removeAllDeliveredNotifications()
center.removeAllPendingNotificationRequests()
result(true)
default:
break
}
Expand Down
1 change: 1 addition & 0 deletions lib/config/app_config.dart
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ abstract class AppConfig {
static const String defaultVideoBlurHash = 'L5H2EC=PM+yV0g-mq.wG9c010J}I';
static const int thumbnailQuality = 70;
static const int blurHashSize = 32;
static const int imageQuality = 50;

static String? issueId;

Expand Down
40 changes: 23 additions & 17 deletions lib/config/go_routes/go_router.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import 'package:fluffychat/pages/chat_draft/draft_chat.dart';
import 'package:fluffychat/pages/chat_encryption_settings/chat_encryption_settings.dart';
import 'package:fluffychat/pages/error_page/error_page.dart';
import 'package:fluffychat/pages/homeserver_picker/homeserver_picker.dart';
import 'package:fluffychat/pages/settings_dashboard/settings_profile/settings_profile.dart';
import 'package:fluffychat/pages/share/share.dart';
import 'package:fluffychat/pages/story/story_page.dart';
import 'package:fluffychat/presentation/model/chat/chat_router_input_argument.dart';
Expand All @@ -25,15 +26,15 @@ import 'package:fluffychat/pages/invitation_selection/invitation_selection.dart'
import 'package:fluffychat/pages/login/login.dart';
import 'package:fluffychat/pages/new_group/new_group.dart';
import 'package:fluffychat/pages/new_private_chat/new_private_chat.dart';
import 'package:fluffychat/pages/settings_3pid/settings_3pid.dart';
import 'package:fluffychat/pages/settings_chat/settings_chat.dart';
import 'package:fluffychat/pages/settings_emotes/settings_emotes.dart';
import 'package:fluffychat/pages/settings_ignore_list/settings_ignore_list.dart';
import 'package:fluffychat/pages/settings_multiple_emotes/settings_multiple_emotes.dart';
import 'package:fluffychat/pages/settings_notifications/settings_notifications.dart';
import 'package:fluffychat/pages/settings_security/settings_security.dart';
import 'package:fluffychat/pages/settings_stories/settings_stories.dart';
import 'package:fluffychat/pages/settings_style/settings_style.dart';
import 'package:fluffychat/pages/settings_dashboard/settings_3pid/settings_3pid.dart';
import 'package:fluffychat/pages/settings_dashboard/settings_chat/settings_chat.dart';
import 'package:fluffychat/pages/settings_dashboard/settings_emotes/settings_emotes.dart';
import 'package:fluffychat/pages/settings_dashboard/settings_ignore_list/settings_ignore_list.dart';
import 'package:fluffychat/pages/settings_dashboard/settings_multiple_emotes/settings_multiple_emotes.dart';
import 'package:fluffychat/pages/settings_dashboard/settings_notifications/settings_notifications.dart';
import 'package:fluffychat/pages/settings_dashboard/settings_security/settings_security.dart';
import 'package:fluffychat/pages/settings_dashboard/settings_stories/settings_stories.dart';
import 'package:fluffychat/pages/settings_dashboard/settings_style/settings_style.dart';
import 'package:fluffychat/pages/sign_up/signup.dart';
import 'package:fluffychat/widgets/log_view.dart';
import 'package:fluffychat/widgets/matrix.dart';
Expand Down Expand Up @@ -243,6 +244,13 @@ abstract class AppRoutes {
);
},
),
GoRoute(
path: 'profile',
pageBuilder: (context, state) => defaultPageBuilder(
context,
const SettingsProfile(),
),
),
GoRoute(
path: 'notifications',
pageBuilder: (context, state) => defaultPageBuilder(
Expand Down Expand Up @@ -344,34 +352,32 @@ abstract class AppRoutes {
switch (extra.type) {
case ChatRouterInputArgumentType.draft:
if (extra.data is String?) {
return NoTransitionPage(
return CupertinoPage(
child: Chat(
roomId: state.pathParameters['roomid']!,
key: Key(state.pathParameters['roomid']!),
roomName: extra.data as String?,
),
);
}
return NoTransitionPage(
return CupertinoPage(
child: Chat(
roomId: state.pathParameters['roomid']!,
key: Key(state.pathParameters['roomid']!),
),
);
case ChatRouterInputArgumentType.share:
return defaultPageBuilder(
context,
Chat(
return CupertinoPage(
child: Chat(
roomId: state.pathParameters['roomid']!,
key: Key(state.pathParameters['roomid']!),
shareFile: extra.data as MatrixFile?,
),
);
}
}
return defaultPageBuilder(
context,
Chat(
return CupertinoPage(
child: Chat(
roomId: state.pathParameters['roomid']!,
key: Key(state.pathParameters['roomid']!),
),
Expand Down
6 changes: 6 additions & 0 deletions lib/di/global/get_it_initializer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ import 'package:fluffychat/domain/usecase/send_file_interactor.dart';
import 'package:fluffychat/domain/usecase/send_file_on_web_interactor.dart';
import 'package:fluffychat/domain/usecase/send_image_interactor.dart';
import 'package:fluffychat/domain/usecase/send_images_interactor.dart';
import 'package:fluffychat/domain/usecase/settings/update_profile_interactor.dart';
import 'package:fluffychat/event/twake_event_dispatcher.dart';
import 'package:fluffychat/utils/responsive/responsive_utils.dart';
import 'package:get_it/get_it.dart';

Expand Down Expand Up @@ -71,6 +73,7 @@ class GetItInitializer {
HiveDI().bind();
NetworkConnectivityDI().bind();
getIt.registerSingleton(ResponsiveUtils());
getIt.registerSingleton(TwakeEventDispatcher());
}

void bindingQueue() {
Expand Down Expand Up @@ -175,5 +178,8 @@ class GetItInitializer {
getIt.registerSingleton<TimelineSearchEventInteractor>(
TimelineSearchEventInteractor(),
);
getIt.registerSingleton<UpdateProfileInteractor>(
UpdateProfileInteractor(),
);
}
}
10 changes: 10 additions & 0 deletions lib/domain/app_state/settings/update_profile_failure.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import 'package:fluffychat/app_state/failure.dart';

class UpdateProfileFailure extends Failure {
final dynamic exception;

const UpdateProfileFailure(this.exception) : super();

@override
List<Object?> get props => [exception];
}
8 changes: 8 additions & 0 deletions lib/domain/app_state/settings/update_profile_loading.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import 'package:fluffychat/app_state/success.dart';

class UpdateProfileLoading extends Success {
const UpdateProfileLoading();

@override
List<Object?> get props => [];
}
21 changes: 21 additions & 0 deletions lib/domain/app_state/settings/update_profile_success.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import 'package:fluffychat/app_state/success.dart';

class UpdateProfileInitial extends Success {
@override
List<Object?> get props => [];
}

class UpdateProfileSuccess extends Success {
final Uri? avatar;
final String? displayName;
final bool isDeleteAvatar;

const UpdateProfileSuccess({
this.avatar,
this.displayName,
this.isDeleteAvatar = false,
});

@override
List<Object?> get props => [avatar, displayName, isDeleteAvatar];
}
Loading