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

[#17023] Share qr code variants #17736

Merged
merged 16 commits into from
Oct 31, 2023
Merged

Conversation

ulisesmac
Copy link
Contributor

fixes #17023

Summary

This PR implements the Share QR code variants component

Add avatar to profile variant and supports blur on Android:

image

Wallet Legacy variant:

image

Wallet Multichain variant:

image

Review notes

The QR code generation depends on a call to our media-server and we don't want to call the media server inside quo components. So the code is structured in the following way:

  • Quo component: receives an image as QR code
  • Preview screen: calls media server and pass the QR code image to the Quo component
  • status-im2.common.qr-codes: uses the Quo component along with the media server to expose an easy to use component. this is the one used in the shell.share screen.

Testing notes

For Design review and QA:
Besides the preview screen added, the previous component has been substituted by this new one in the shell:

photo_2023-10-25_12-11-18 photo_2023-10-25_12-11-10

NOTE: Please for design review, focus only on the share QR code component in the shell, since other components (like emoji hash) haven't been changed.

Platforms

  • Android
  • iOS

Steps to test

  • Open Status
  • Go to preview screen -> Share -> Share QR Code

status: ready

Comment on lines +34 to +59
(h/describe "Fires all events for all types"
(letfn [(test-fire-events [props test-seq]
(doseq [{:keys [test-name event-name
callback-prop-key
accessibility-label]} test-seq
:let [event-fn (h/mock-fn)]]
(h/test test-name
(render-share-qr-code (assoc props callback-prop-key event-fn))
(h/fire-event event-name (h/get-by-label-text accessibility-label))
(h/was-called-times event-fn 1))))]

(h/describe "Profile"
(test-fire-events
{:type :profile}
[{:test-name "Text pressed"
:accessibility-label :share-qr-code-info-text
:event-name :press
:callback-prop-key :on-text-press}
{:test-name "Text long pressed"
:accessibility-label :share-qr-code-info-text
:event-name :long-press
:callback-prop-key :on-text-long-press}
{:test-name "Share button"
:accessibility-label :link-to-profile
:event-name :press
:callback-prop-key :on-share-press}]))
Copy link
Contributor Author

@ulisesmac ulisesmac Oct 25, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seriously thinking about creating this as a macro instead of being a function, it reduced the code complexity a lot and we just need to describe the test using a map 🤔 It could be generalized and exposed in the helpers namespace
WDYT?

@status-im-auto
Copy link
Member

status-im-auto commented Oct 25, 2023

Jenkins Builds

Click to see older builds (16)
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ cb2dfa7 #1 2023-10-25 18:25:20 ~5 min android-e2e 🤖apk 📲
✔️ cb2dfa7 #1 2023-10-25 18:26:55 ~7 min ios 📱ipa 📲
✔️ cb2dfa7 #1 2023-10-25 18:29:33 ~9 min android 🤖apk 📲
✔️ cb2dfa7 #1 2023-10-25 18:29:41 ~9 min tests 📄log
✔️ cb2dfa7 #3 2023-10-25 18:45:56 ~5 min ios 📱ipa 📲
✔️ cb2dfa7 #3 2023-10-25 18:46:27 ~6 min android 🤖apk 📲
✔️ cb2dfa7 #3 2023-10-25 18:46:42 ~6 min android-e2e 🤖apk 📲
✔️ cb2dfa7 #3 2023-10-25 18:49:00 ~8 min tests 📄log
✔️ 960033c #4 2023-10-25 22:02:50 ~6 min ios 📱ipa 📲
✔️ 960033c #4 2023-10-25 22:03:07 ~6 min android 🤖apk 📲
✔️ 960033c #4 2023-10-25 22:03:09 ~6 min android-e2e 🤖apk 📲
✔️ 960033c #4 2023-10-25 22:06:51 ~10 min tests 📄log
✔️ 0eaec99 #5 2023-10-27 00:40:27 ~5 min ios 📱ipa 📲
✔️ 0eaec99 #5 2023-10-27 00:44:12 ~9 min android-e2e 🤖apk 📲
✔️ 0eaec99 #5 2023-10-27 00:44:26 ~9 min android 🤖apk 📲
✔️ 0eaec99 #5 2023-10-27 00:45:32 ~10 min tests 📄log
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ ea538bf #6 2023-10-31 01:21:36 ~5 min android-e2e 🤖apk 📲
✔️ ea538bf #6 2023-10-31 01:21:54 ~5 min ios 📱ipa 📲
✔️ ea538bf #6 2023-10-31 01:23:19 ~7 min android 🤖apk 📲
✔️ ea538bf #7 2023-10-31 01:58:40 ~8 min tests 📄log
✔️ 644544e #7 2023-10-31 18:27:50 ~5 min android-e2e 🤖apk 📲
✔️ 644544e #7 2023-10-31 18:32:47 ~10 min android 🤖apk 📲
✔️ 644544e #8 2023-10-31 18:33:04 ~10 min tests 📄log
✔️ 644544e #7 2023-10-31 18:34:30 ~12 min ios 📱ipa 📲

Comment on lines +93 to +106
(defn- network-colored-text
[network-short-name]
[text/text {:style (style/network-short-name-text network-short-name)}
(str network-short-name ":")])

(defn- wallet-multichain-colored-address
[full-address]
(let [[networks address] (as-> full-address $
(string/split $ ":")
[(butlast $) (last $)])
->network-hiccup-xf (map #(vector network-colored-text %))]
(as-> networks $
(into [:<>] ->network-hiccup-xf $)
(conj $ address))))
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@OmarBasem you recently refactored this behaviour, here I just added another implementation of it. It doesn't need to set ^:key for the text nodes, you could take it in consideration while abstracting the general solution.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ulisesmac can you please show me how to make that work for the implementation in https://github.com/status-im/status-mobile/pull/17732/files/cd03a2349f9335a5aca623cb8212b45d3c4b5b6d#diff-e3dc7e8c9c9d0e79e3e3ef677ba5e72ebbf9fe1b8ceee3adf30bd08ff17fee62 In my implementation the address is a component with props. I think the one here is just text?

[network-short-name]
{:color (-> network-short-name
(get-network-full-name :unknown)
(colors/resolve-color nil))})
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why resolve nil? Better to pass theme if that is what's happening here

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This component doesn't have theme variants.

(resolver-color color nil) is being used because network colors don't have a dark/light variant and since this component is not "theme sensitive", then we don't have the theme prop available

Copy link
Contributor

@J-Son89 J-Son89 Oct 25, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Got it, I think @ilmotta was suggesting we pass them so this is future proofed should we need to adjust the colors mechanism.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, at least there's a way to quickly search for all calls to resolve-color where theme is nil, so it's not the end of the world. But I can see a designer changing some color to be themeable and they may expect the mobile code to automatically resolve colors by theme. Maybe they have this assumption and won't even bother telling us they changed this tiny detail. Or maybe this is overthinking on my part.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think if they add a dark color for the networks, they will also update figma to show light/blur variants of those components, IMO, right now we'd be creating code speculating. I'm not sure if it's worth it 🤔

If you think we should do it, then I can change it 🙂

:blur-type :transparent
:overlay-color style/overlay-color
:background-color style/overlay-color}])]
[quo.theme/provider {:theme :dark}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we need the theme provider hardcoded here? It's just a case the we don't care about Thai component in light theme as we never use that

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, I don't get the idea.

I added this because all the styles and subcomponents in this component are expected to be rendered in dark mode regardless the current app theme, for example: texts, tabs and buttons.

I'm unsing this component in the preview screen (which can be dark or light), and we could use this component in any screen, so I think setting the theme/provider as dark is a task of this component.

Copy link
Contributor

@J-Son89 J-Son89 Oct 25, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, we have not done this for other components. The point here is that we will never use this component in light theme anyway and even if someone is looking at the preview screens of light theme well they are looking at an incorrect configuration. Ideally tooling like Malli will handle this in the preview screens (maybe show an icon when using a misconfiguration or something ). It's a broader issue then 'theme'

I'm not sure we need to have this type of guard railing on the components.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I used this approach here for the Scan QR screen

[quo.theme/provider {:theme :light}

As you can see here the screen is forced to be dark, but the button should be light as per Figma designs https://www.figma.com/file/HKncH4wnDwZDAhc4AryK8Y/Wallet-for-Mobile?type=design&node-id=689-193111&mode=design&t=XRiavTx7gYh1t2PG-4

I can see other parts of the codebase where we are using the same approach, like here

Copy link
Contributor

@J-Son89 J-Son89 Oct 25, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just an fyi - this example

Is a bit different because it's a chunk of the screen which is in dark theme regardless of the theme of the page. I.e that's the bottom tabs in the application which is always in dark but the screen above it can be light/dark.

In the case of this component here- it will only be used on a page/wrapping with dark theme.

In any case I'm not strongly against the approach, just giving my 2c 👍

Comment on lines 237 to 253
(defn get-rerender-fn
"Rerenders a component.
Takes a JS Object representing a component and returns a function that accepts hiccup
representing the component to rerender with, optionally, the new props.
e.g.
(let [rerender-fn (h/get-rerender-fn
(h/render [my-component {:prop-1 :A
:prop-2 :B}]))]
;; Rerenders `my-component` with the new props
(rerender-fn [my-component {:prop-1 :new-A
:prop-2 :new-B}]))
"
[component]
(fn [component-updated]
(let [rerender-fn (oops/oget component "rerender")
react-element (reagent/as-element component-updated)]
(rerender-fn react-element))))
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a rerender function helper

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice @ulisesmac. The first sentence says "Rerenders a component", but that's not what the function does. For the first sentence we could use "Returns rerender function from React Native Testing Library.".

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks Icaro!

Comment on lines +15 to +19
:type :select
:options [{:key :profile}
{:key :wallet-legacy}
{:key :wallet-multichain}]}])
Copy link
Contributor

@OmarBasem OmarBasem Oct 26, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it would be better if there is 2 types profile and wallet, and then when wallet is selected, legacy and multichain should be handled from within the component. When using the component in flows it is either the profile variant or the wallet variant (which defaults to legacy and the user can change it to multichain)

Basically, I think changing between legacy and multichain needs to be handled by user taps, not through external props. Currently in the preview screen I am not able to switch between legacy and multichain by tapping the buttons on the component.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @OmarBasem

We agreed on reflect the figma properties as mucha as we can.

In figma, the component receives a property type and the possible types are the ones I listed:
image

image
image

image

Currently in the preview screen I am not able to switch between legacy and multichain by tapping the buttons on the component.

Those tabs receive a callback, that callback could be used to mutate the a ratom that triggers a :type change 👍

:padding-top 12
:padding-bottom 8})

;; Header
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For section comments, consider sticking to the Clojure style guide, i.e. 3 or 4 semicolons.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done!

[network-short-name]
{:color (-> network-short-name
(get-network-full-name :unknown)
(colors/resolve-color nil))})
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, at least there's a way to quickly search for all calls to resolve-color where theme is nil, so it's not the end of the world. But I can see a designer changing some color to be themeable and they may expect the mobile code to automatically resolve colors by theme. Maybe they have this assumption and won't even bother telling us they changed this tiny detail. Or maybe this is overthinking on my part.

:size 24
:active (= :wallet-multichain share-qr-type)
:on-press on-multichain-press}
"Multichain"]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are we sure multichain is an internationally understood word? In portuguese I sometimes saw/heard the usage of the word multi-cadeia, so maybe we should translate.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep, forgot to add them, now it's addded!

(defn wallet-multichain-bottom
[{:keys [share-qr-type component-width qr-data on-text-press on-text-long-press
on-share-press networks on-settings-press]}]
(let [network-image-source (fn [network]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nitpick: this function can be decoupled from the view lifecycle because it's not closing over any value. When it's defined inline, the dev is forced to read the entire function implementation to be sure it's not closing over the props. I don't know if others do this, but I often do in my attempts to understand if the component can be simplified.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't always remove constant functions from component's life cycle unless they are complex, sometimes I just create them on the mount phase of the component.

I extracted this function :) so now it's defined using defn-, I think it's a good suggestion, makes no sense to recreate the exact same function again and again.

(str $ qr-data)))

(defn share-qr-code
"Receives the following properties:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FYI: These comments about the types will be largely superseded by Malli schemas and then we will be able to use the docstring only for the things that are truly important to manually document. By next week we should be able to start using this capability already.

Comment on lines 237 to 253
(defn get-rerender-fn
"Rerenders a component.
Takes a JS Object representing a component and returns a function that accepts hiccup
representing the component to rerender with, optionally, the new props.
e.g.
(let [rerender-fn (h/get-rerender-fn
(h/render [my-component {:prop-1 :A
:prop-2 :B}]))]
;; Rerenders `my-component` with the new props
(rerender-fn [my-component {:prop-1 :new-A
:prop-2 :new-B}]))
"
[component]
(fn [component-updated]
(let [rerender-fn (oops/oget component "rerender")
react-element (reagent/as-element component-updated)]
(rerender-fn react-element))))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice @ulisesmac. The first sentence says "Rerenders a component", but that's not what the function does. For the first sentence we could use "Returns rerender function from React Native Testing Library.".

[utils.i18n :as i18n]
[utils.image-server :as image-server]
[utils.re-frame :as rf]))
(:require [clojure.string :as string]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be better IMO if the formatting differences for the ns macro are reverted in this PR. I see other files changed too. Maybe your editor is formatting automatically for you like this? I ask this because zprint is not currently configured to keep the first namespace aligned with :require, the tool actually respects whatever style we choose, which is a problem because we will keep introducing personal styling choices that only make rebasing more painful since one of the most common conflicts are in the ns macro.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did this because we have differences in the formatting style between zprint and clj-kondo (btw, also IntelliJ formats requires as clj-kondo, so I think zprint is not doing it properly). The formatting added is equally styled for everyone.

Anyway, I reverted them in 0eaec99, since I also don't like this kind of diffs.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, we need to sort this out at once. zprint should be driving the formatting, not the other tools, but zprint should also be configured a little bit better for the team's taste for namespaces.

:value "Ethereum, Optimism, Arbitrum and unknown"}]}])

(defn- get-network-short-name-url
[network-kw]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a bit unconventional to add types to names in Clojure.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

undone!

[width]
(into [rn/view {:style style/dashed-line}]
(take (style/number-lines-and-spaces-to-fill width))
(cycle [[line] [space]])))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's been a while since I last saw cycle. Nice!

@status-im-auto
Copy link
Member

84% of end-end tests have passed

Total executed tests: 45
Failed tests: 4
Expected to fail tests: 3
Passed tests: 38
IDs of failed tests: 702813,702786,702846,702807 
IDs of expected to fail tests: 702732,702731,702808 

Failed tests (4)

Click to expand
  • Rerun failed tests

  • Class TestCommunityMultipleDeviceMergedTwo:

    1. test_community_mentions_push_notification, id: 702786

    Device 2: Getting PN by 'user_2'
    Device 2: Looking for a message by text: user_2

    critical/chats/test_public_chat_browsing.py:882: in test_community_mentions_push_notification
        self.errors.verify_no_errors()
    base_test_case.py:191: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     Channel did not open by clicking on a notification with the mention for admin
    E    Edited message is not shown correctly for the sender
    E    Edited message is not shown correctly for the (receiver) admin
    E    Channel did not open by clicking on a notification with the mention for the invited member
    



    Device sessions

    Class TestGroupChatMultipleDeviceMergedNewUI:

    1. test_group_chat_join_send_text_messages_push, id: 702807

    Device 2: Text is Delivered
    Device 1: Looking for a message by text: Hey, admin!

    critical/chats/test_group_chat.py:97: in test_group_chat_join_send_text_messages_push
        self.errors.verify_no_errors()
    base_test_case.py:191: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     Message Hey, admin! was not received by admin
    



    Device sessions

    Class TestCommunityOneDeviceMerged:

    1. test_community_navigate_to_channel_when_relaunch, id: 702846

    ## Signed in successfully!
    Device 1: Looking for a message by text: some_text

    critical/chats/test_public_chat_browsing.py:81: in test_community_navigate_to_channel_when_relaunch
        self.drivers[0].fail("Not navigated to channel view after reopening app")
    base_test_case.py:179: in fail
        pytest.fail('Device %s: %s' % (self.number, text))
     Device 1: Not navigated to channel view after reopening app
    



    Device sessions

    Class TestOneToOneChatMultipleSharedDevicesNewUi:

    1. test_1_1_chat_push_emoji, id: 702813

    Device 1: App to background
    Device 2: Sending message 'emoji'

    critical/chats/test_1_1_public_chats.py:345: in test_1_1_chat_push_emoji
        chat_2.send_message(emoji.emojize(emoji_message))
    ../views/chat_view.py:1000: in send_message
        self.chat_message_input.wait_for_element(wait_chat_input_sec)
    ../views/base_element.py:121: in wait_for_element
        raise TimeoutException(
     Device `2`: `ChatMessageInput` by` accessibility id`: `chat-message-input` is not found on the screen after wait_for_element
    



    Device sessions

    Expected to fail tests (3)

    Click to expand

    Class TestGroupChatMultipleDeviceMergedNewUI:

    1. test_group_chat_pin_messages, id: 702732

    Test is not run, e2e blocker  
    

    [[reason: [NOTRUN] Pin feature is in development]]

    2. test_group_chat_offline_pn, id: 702808

    Device 3: Looking for a message by text: message from old member
    Device 3: Looking for a message by text: message from new member

    critical/chats/test_group_chat.py:309: in test_group_chat_offline_pn
        self.errors.verify_no_errors()
    base_test_case.py:191: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     Messages PN was not fetched from offline 
    

    [[Data delivery issue]]

    Device sessions

    Class TestOneToOneChatMultipleSharedDevicesNewUi:

    1. test_1_1_chat_pin_messages, id: 702731

    Test is not run, e2e blocker  
    

    [[reason: [NOTRUN] Pin feature is in development]]

    Passed tests (38)

    Click to expand

    Class TestCommunityMultipleDeviceMergedTwo:

    1. test_community_markdown_support, id: 702809
    Device sessions

    2. test_community_hashtag_links_to_community_channels, id: 702948
    Device sessions

    3. test_community_leave, id: 702845
    Device sessions

    4. test_community_join_when_node_owner_offline, id: 703629
    Device sessions

    Class TestGroupChatMultipleDeviceMergedNewUI:

    1. test_group_chat_mute_chat, id: 703495
    Device sessions

    2. test_group_chat_send_image_save_and_share, id: 703297
    Device sessions

    3. test_group_chat_reactions, id: 703202
    Device sessions

    Class TestCommunityMultipleDeviceMerged:

    1. test_community_several_images_send_reply, id: 703194
    Device sessions

    2. test_community_one_image_send_reply, id: 702859
    Device sessions

    3. test_community_emoji_send_copy_paste_reply, id: 702840
    Device sessions

    4. test_community_mark_all_messages_as_read, id: 703086
    Device sessions

    5. test_community_contact_block_unblock_offline, id: 702894
    Device sessions

    6. test_community_message_delete, id: 702839
    Device sessions

    7. test_community_message_send_check_timestamps_sender_username, id: 702838
    Device sessions

    8. test_community_links_with_previews_github_youtube_twitter_gif_send_enable, id: 702844
    Device sessions

    9. test_community_message_edit, id: 702843
    Device sessions

    10. test_community_unread_messages_badge, id: 702841
    Device sessions

    Class TestActivityCenterContactRequestMultipleDevicePR:

    1. test_add_contact_field_validation, id: 702777
    Device sessions

    2. test_activity_center_contact_request_accept_swipe_mark_all_as_read, id: 702851
    Device sessions

    3. test_activity_center_contact_request_decline, id: 702850
    Device sessions

    Class TestCommunityOneDeviceMerged:

    1. test_restore_multiaccount_with_waku_backup_remove_switch, id: 703133
    Device sessions

    2. test_community_copy_and_paste_message_in_chat_input, id: 702742
    Device sessions

    3. test_community_discovery, id: 703503
    Device sessions

    4. test_community_undo_delete_message, id: 702869
    Device sessions

    5. test_community_mute_community_and_channel, id: 703382
    Device sessions

    Class TestActivityMultipleDevicePR:

    1. test_navigation_jump_to, id: 702936
    Device sessions

    2. test_activity_center_reply_read_unread_delete_filter_swipe, id: 702947
    Device sessions

    Class TestOneToOneChatMultipleSharedDevicesNewUiTwo:

    1. test_1_1_chat_delete_via_long_press_relogin, id: 702784
    Device sessions

    2. test_1_1_chat_is_shown_message_sent_delivered_from_offline, id: 702783
    Device sessions

    3. test_1_1_chat_mute_chat, id: 703496
    Device sessions

    Class TestActivityMultipleDevicePRTwo:

    1. test_activity_center_mentions, id: 702957
    Device sessions

    2. test_activity_center_admin_notification_accept_swipe, id: 702958
    Device sessions

    Class TestOneToOneChatMultipleSharedDevicesNewUi:

    1. test_1_1_chat_emoji_send_reply_and_open_link, id: 702782
    Device sessions

    2. test_1_1_chat_text_message_delete_push_disappear, id: 702733
    Device sessions

    3. test_1_1_chat_non_latin_messages_stack_update_profile_photo, id: 702745
    Device sessions

    4. test_1_1_chat_edit_message, id: 702855
    Device sessions

    5. test_1_1_chat_send_image_save_and_share, id: 703391
    Device sessions

    6. test_1_1_chat_message_reaction, id: 702730
    Device sessions

    @pavloburykh pavloburykh self-assigned this Oct 27, 2023
    @pavloburykh
    Copy link
    Contributor

    @ulisesmac thanx for the PR. No issues from my side. Ready for design review. cc @Francesca-G

    Copy link

    @Francesca-G Francesca-G left a comment

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    Hello @ulisesmac!

    We updated the sharing screen (and the QR component), as stated in the change-log discord channel message here

    image

    Maybe we should put this design review on hold until we have updated screens, wdyt? :)

    @J-Son89
    Copy link
    Contributor

    J-Son89 commented Oct 30, 2023

    @Francesca-G - this work was started before the changes hade been made/requested in the changelog. I think it's better to treat the updates as a separate issue as it will take some time to properly adjust them and there are other priorities in the wallet development. I believe @ulisesmac has also done some none ui improvements here that will be great to have merged in.
    Could you please review it with respect to the old designs? 🙏

    Copy link

    @Francesca-G Francesca-G left a comment

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    @J-Son89 @ulisesmac sure, no problem :)

    The component looks good, only thing that doesn't match is the icon, as you can see here (implementation on the right)

    Screenshot 2023-10-30 alle 15 57 28

    @ulisesmac
    Copy link
    Contributor Author

    @J-Son89 @ulisesmac sure, no problem :)

    The component looks good, only thing that doesn't match is the icon, as you can see here (implementation on the right)
    Screenshot 2023-10-30 alle 15 57 28

    Seems like the icon used for the implementation is the same that's going to be used in the following design:
    image

    So I'll keep it, and I'll create an issue to address the new design!. Thanks!

    @ulisesmac
    Copy link
    Contributor Author

    @Francesca-G Here's the new issue:
    #17769

    @ulisesmac ulisesmac merged commit 4a874ce into develop Oct 31, 2023
    6 checks passed
    @ulisesmac ulisesmac deleted the 17023-share-qr-code-variants branch October 31, 2023 18:35
    yevh-berdnyk pushed a commit that referenced this pull request Dec 8, 2023
    * Align docstring
    
    * Create share-qr-code component
    
    * Remove empty style file
    
    * Implement common.share-qr-code including call to media server
    
    * Add share-qr-code preview screen
    
    * Use share-qr-code component in shell's share screen
    
    * Add tests and some fixes
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Projects
    Archived in project
    Archived in project
    Development

    Successfully merging this pull request may close these issues.

    Implement "Wallet Legacy" and "Wallet Multichain" variants in the "Share QR Code" component
    9 participants