diff --git a/.idea/zulip.iml b/.idea/zulip.iml index bc835ab69a..61fb622fa1 100644 --- a/.idea/zulip.iml +++ b/.idea/zulip.iml @@ -16,8 +16,8 @@ - + - + \ No newline at end of file diff --git a/android/app/build.gradle b/android/app/build.gradle index f360f667e5..b059346964 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -21,6 +21,7 @@ try { android { namespace "com.zulip.flutter" + ndkVersion "26.3.11579264" compileSdkVersion flutter.compileSdkVersion diff --git a/android/build.gradle b/android/build.gradle index bc157bd1a1..a0dcbe5d3e 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,3 +1,13 @@ +buildscript { + repositories { + google() // Ensure this is included + mavenCentral()// Optional, depending on your project + } + dependencies { + classpath 'com.android.tools.build:gradle:8.2.0' // Your Gradle plugin version + } +} + allprojects { repositories { google() @@ -6,6 +16,7 @@ allprojects { } rootProject.buildDir = '../build' + subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" } diff --git a/android/gradle.properties b/android/gradle.properties index 2974fbcb00..558f906549 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,6 +1,8 @@ org.gradle.jvmargs=-Xmx3072M android.useAndroidX=true android.enableJetifier=true +android.ndkVersion=26.3.11579264 + # Versions for our Android build dependencies. # Defining them here makes them available both in diff --git a/lib/widgets/message_list.dart b/lib/widgets/message_list.dart index a27a8051e9..9ef431b663 100644 --- a/lib/widgets/message_list.dart +++ b/lib/widgets/message_list.dart @@ -1318,6 +1318,9 @@ class MessageWithPossibleSender extends StatelessWidget { if (item.showSender) { final time = _kMessageTimestampFormat .format(DateTime.fromMillisecondsSinceEpoch(1000 * message.timestamp)); + + final isCurrentUser = store.account.userId == message.senderId; + senderRow = Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.baseline, @@ -1334,13 +1337,15 @@ class MessageWithPossibleSender extends StatelessWidget { userId: message.senderId), const SizedBox(width: 8), Flexible( - child: Text(message.senderFullName, // TODO get from user data + child: Text(isCurrentUser ? '${message.senderFullName} (you)' : message.senderFullName, // TODO get from user data style: TextStyle( fontSize: 18, height: (22 / 18), color: messageListTheme.senderName, ).merge(weightVariableTextStyle(context, wght: 600)), - overflow: TextOverflow.ellipsis)), + overflow: TextOverflow.ellipsis + ) + ), if (sender?.isBot ?? false) ...[ const SizedBox(width: 5), Icon( @@ -1349,7 +1354,8 @@ class MessageWithPossibleSender extends StatelessWidget { color: messageListTheme.senderBotIcon, ), ], - ]))), + ] + ))), const SizedBox(width: 4), Text(time, style: TextStyle( diff --git a/packages/zulip_plugin/pubspec.lock b/packages/zulip_plugin/pubspec.lock new file mode 100644 index 0000000000..e4de75859b --- /dev/null +++ b/packages/zulip_plugin/pubspec.lock @@ -0,0 +1,6 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: {} +sdks: + dart: ">=3.4.0-256.0.dev <4.0.0" + flutter: ">=3.3.0" diff --git a/pubspec.lock b/pubspec.lock index 4ee3317f8d..32b454ec30 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -291,10 +291,10 @@ packages: dependency: "direct dev" description: name: fake_async - sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.3.3" ffi: dependency: transitive description: @@ -355,10 +355,10 @@ packages: dependency: "direct main" description: name: firebase_core - sha256: "0307c1fde82e2b8b97e0be2dab93612aff9a72f31ebe9bfac66ed8b37ef7c568" + sha256: "93dc4dd12f9b02c5767f235307f609e61ed9211047132d07f9e02c668f0bfc33" url: "https://pub.dev" source: hosted - version: "3.10.0" + version: "3.11.0" firebase_core_platform_interface: dependency: transitive description: @@ -371,10 +371,10 @@ packages: dependency: transitive description: name: firebase_core_web - sha256: fbc008cf390d909b823763064b63afefe9f02d8afdb13eb3f485b871afee956b + sha256: "0e13c80f0de8acaa5d0519cbe23c8b4cc138a2d5d508b5755c861bdfc9762678" url: "https://pub.dev" source: hosted - version: "2.19.0" + version: "2.20.0" firebase_messaging: dependency: "direct main" description: @@ -607,10 +607,10 @@ packages: dependency: "direct main" description: name: intl - sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" url: "https://pub.dev" source: hosted - version: "0.19.0" + version: "0.20.2" io: dependency: transitive description: @@ -647,10 +647,10 @@ packages: dependency: transitive description: name: leak_tracker - sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec + sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" url: "https://pub.dev" source: hosted - version: "10.0.8" + version: "10.0.9" leak_tracker_flutter_testing: dependency: transitive description: @@ -1244,10 +1244,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" + sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02 url: "https://pub.dev" source: hosted - version: "14.3.1" + version: "15.0.0" wakelock_plus: dependency: "direct main" description: @@ -1300,10 +1300,10 @@ packages: dependency: transitive description: name: webdriver - sha256: "3d773670966f02a646319410766d3b5e1037efb7f07cc68f844d5e06cd4d61c8" + sha256: "2f3a14ca026957870cfd9c635b83507e0e51d8091568e90129fbf805aba7cade" url: "https://pub.dev" source: hosted - version: "3.0.4" + version: "3.1.0" webkit_inspection_protocol: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 27b7519334..465ea0f352 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -42,7 +42,6 @@ dependencies: device_info_plus: ^11.2.0 drift: ^2.5.0 file_picker: ^8.0.0+1 - firebase_core: ^3.3.0 firebase_messaging: ^15.0.1 flutter_color_models: ^1.3.3+2 html: ^0.15.1 @@ -64,6 +63,7 @@ dependencies: wakelock_plus: ^1.2.8 zulip_plugin: path: ./packages/zulip_plugin + firebase_core: ^3.11.0 # Keep list sorted when adding dependencies; it helps prevent merge conflicts. dependency_overrides: diff --git a/tools/content/fetch_messages.dart b/tools/content/fetch_messages.dart index 5f9f03b149..599bedabef 100644 --- a/tools/content/fetch_messages.dart +++ b/tools/content/fetch_messages.dart @@ -11,7 +11,7 @@ import 'package:zulip/api/backoff.dart'; import 'model.dart'; /// Fetch all public message contents from a Zulip server in bulk. -/// +///dsa /// It outputs JSON entries of the message IDs and the rendered HTML contents in /// JSON Lines (https://jsonlines.org) format. The output can be used later to /// perform checks for discovering unimplemented features. diff --git a/windows/flutter/CMakeLists.txt b/windows/flutter/CMakeLists.txt index 930d2071a3..903f4899d6 100644 --- a/windows/flutter/CMakeLists.txt +++ b/windows/flutter/CMakeLists.txt @@ -10,6 +10,11 @@ include(${EPHEMERAL_DIR}/generated_config.cmake) # https://github.com/flutter/flutter/issues/57146. set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + # === Flutter Library === set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") @@ -92,7 +97,7 @@ add_custom_command( COMMAND ${CMAKE_COMMAND} -E env ${FLUTTER_TOOL_ENVIRONMENT} "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" - windows-x64 $ + ${FLUTTER_TARGET_PLATFORM} $ VERBATIM ) add_custom_target(flutter_assemble DEPENDS diff --git a/windows/runner/flutter_window.cpp b/windows/runner/flutter_window.cpp index b25e363efa..955ee3038f 100644 --- a/windows/runner/flutter_window.cpp +++ b/windows/runner/flutter_window.cpp @@ -31,6 +31,11 @@ bool FlutterWindow::OnCreate() { this->Show(); }); + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + return true; }