Opened 9 months ago

Closed 4 months ago

#25696 closed defect (fixed)

Design of alpha onboarding for Tor Browser for Android

Reported by: isabela Owned by: antonela
Priority: Very High Milestone:
Component: Applications/Tor Browser Version:
Severity: Normal Keywords: ux-team, tbb-mobile, TorBrowserTeam201808R
Cc: tbb-team, tseretni-rmd, igt0, sysrqb, gk, emmapeel Actual Points:
Parent ID: #26531 Points:
Reviewer: Sponsor: Sponsor8

Description (last modified by isabela)

This can be a temporary onboarding until all the experience has been built and we can do a final one covering all the features.

Child Tickets

Attachments (19)

TBA-Onboarding 2.png (71.7 KB) - added by antonela 5 months ago.
TBA-Onboarding 1.png (165.1 KB) - added by antonela 5 months ago.
TBA-Onboarding 3.png (577.6 KB) - added by antonela 5 months ago.
25696 - TBA - Welcome Page.png (819.9 KB) - added by antonela 5 months ago.
24309 - TBA - Welcome Page.png (618.2 KB) - added by antonela 5 months ago.
TBA Welcome Page.2.png (111.1 KB) - added by antonela 5 months ago.
TBA Welcome Page - Keyboard.png (87.8 KB) - added by antonela 5 months ago.
TBA Welcome Page.png (111.1 KB) - added by antonela 5 months ago.
onion_circles_pattern.html (2.5 KB) - added by antonela 5 months ago.
onion_circles_pattern.py (2.3 KB) - added by antonela 5 months ago.
0001-Bug-25696-Implement-alpha-onboarding-for-Tor-Browser.patch (19.5 KB) - added by igt0 4 months ago.
Patch - r0
0001-Bug-25696-Implement-alpha-onboarding-for-Tor-Browser.2.patch (516.2 KB) - added by igt0 4 months ago.
patch-r1
alpha-mockups.zip (896.2 KB) - added by antonela 4 months ago.
0001-Bug-25696-Implement-alpha-onboarding-for-Tor-Browser.3.patch (516.5 KB) - added by igt0 4 months ago.
patch-r2
0001-Bug-25696-Implement-alpha-onboarding-for-Tor-Browser.4.patch (516.2 KB) - added by igt0 4 months ago.
patch-r3
0001-Bug-25696-Design-of-alpha-onboarding-for-Tor-Browser.patch (83.5 KB) - added by igt0 4 months ago.
0001-Bug-25696-Design-of-alpha-onboarding-for-Tor-Browser.2.patch (82.7 KB) - added by igt0 4 months ago.
0001-Bug-25696-Design-of-alpha-onboarding-for-Tor-Browser.3.patch (83.4 KB) - added by igt0 4 months ago.
0001-Bug-25696-Design-of-alpha-onboarding-for-Tor-Browser.4.patch (82.6 KB) - added by igt0 4 months ago.

Change History (82)

comment:1 Changed 9 months ago by gk

Cc: tbb-team added

Ccing the tbb-team.

comment:2 Changed 9 months ago by isabela

Description: modified (diff)
Keywords: tbb-mobile added

comment:3 Changed 8 months ago by dmr

Cc: dmr added

comment:4 Changed 8 months ago by dmr

Cc: dmr removed

comment:5 Changed 8 months ago by tseretni-rmd

Cc: tseretni-rmd added

comment:6 Changed 6 months ago by sysrqb

Parent ID: #26531

Required for first alpha.

Changed 5 months ago by antonela

Attachment: TBA-Onboarding 2.png added

Changed 5 months ago by antonela

Attachment: TBA-Onboarding 1.png added

comment:7 Changed 5 months ago by antonela

Hi! I worked around two options for TBA onboarding.

Notes:

  • I'm using the same content we have for Desktop (#25695). It is quite long for mobile reading, but I'll keep it the same for now. Some of them, are not going to be part of the first alpha like 'circuits.'
  • The illustrations working for the Tor Browser onboarding have desktop computers floating in those compositions. We could a) remove devices b) change them for a mobile phone. I have it noted as a review for the illustrator.
  • Will the onboarding work inside the browser content(2) or before the top nav load(1)?

What do you think?

https://trac.torproject.org/projects/tor/attachment/ticket/25696/TBA-Onboarding%201.png
https://trac.torproject.org/projects/tor/attachment/ticket/25696/TBA-Onboarding%202.png

comment:8 in reply to:  7 Changed 5 months ago by igt0

Cc: igt0 sysrqb gk added

Replying to antonela:

Hi! I worked around two options for TBA onboarding

Hi Antonela!

Thanks for the amazing work!

Notes:

  • I'm using the same content we have for Desktop (#25695). It is quite long for mobile reading, but I'll keep it the same for now. Some of them, are not going to be part of the first alpha like 'circuits.'
  • The illustrations working for the Tor Browser onboarding have desktop computers floating in those compositions. We could a) remove devices b) change them for a mobile phone. I have it noted as a review for the illustrator.
  • Will the onboarding work inside the browser content(2) or before the top nav load(1)?

What do you think?

It runs inside the browser content(in fact it is not a browser content[HTML], it is an android stuff).

https://trac.torproject.org/projects/tor/attachment/ticket/25696/TBA-Onboarding%201.png
https://trac.torproject.org/projects/tor/attachment/ticket/25696/TBA-Onboarding%202.png

I like the TBA-Onboarding 2 because it follows the same look'n feel of the Firefox Mobile. However, as I said in the irc, they use tabs in the onboarding, should We use the same pattern?

comment:9 Changed 5 months ago by ProTipGuyFWIWWeLoveARMA

Is the onboarding Mozilla backed extension for Desktop the same as the one for Android https://searchfox.org/mozilla-central/source/browser/extensions/onboarding ?

comment:10 in reply to:  9 Changed 5 months ago by igt0

Changed 5 months ago by antonela

Attachment: TBA-Onboarding 3.png added

comment:11 Changed 5 months ago by antonela

hey! I made an onboarding version using the current tabs
https://trac.torproject.org/projects/tor/attachment/ticket/25696/TBA-Onboarding%203.png

I'm working with the content here
https://pad.riseup.net/p/tba-alpha-onboarding

let me know what do you think!

Last edited 5 months ago by antonela (previous) (diff)

comment:12 Changed 5 months ago by gk

Looks good to me! I went over the content as well and made some suggestions.

Changed 5 months ago by antonela

Changed 5 months ago by antonela

Changed 5 months ago by antonela

Attachment: TBA Welcome Page.2.png added

Changed 5 months ago by antonela

Changed 5 months ago by antonela

Attachment: TBA Welcome Page.png added

comment:13 Changed 5 months ago by antonela

TBA about:tor based on #25695

https://trac.torproject.org/projects/tor/attachment/ticket/25696/24309%20-%20TBA%20-%20Welcome%20Page.png

igt0: Are you going to use/call TB sources? or should we have a different set of assets for TBA? Let me know the best way to provide assets for it.

comment:14 in reply to:  13 Changed 5 months ago by igt0

It is the same asset. Just to make sure, are the circles made in CSS, right?

Replying to antonela:

TBA about:tor based on #25695

https://trac.torproject.org/projects/tor/attachment/ticket/25696/24309%20-%20TBA%20-%20Welcome%20Page.png

igt0: Are you going to use/call TB sources? or should we have a different set of assets for TBA? Let me know the best way to provide assets for it.

Changed 5 months ago by antonela

Attachment: onion_circles_pattern.html added

Changed 5 months ago by antonela

Attachment: onion_circles_pattern.py added

comment:15 Changed 5 months ago by antonela

Cool! I made a .css version and pospeselr made a python version that generates .svg.
Attaching both here.

https://trac.torproject.org/projects/tor/attachment/ticket/25696/onion_circles_pattern.html
https://trac.torproject.org/projects/tor/attachment/ticket/25696/onion_circles_pattern.py

.png and .svg version were ready to be exported at ​https://marvelapp.com/5981a4b/screen/44384308/handoff

comment:16 Changed 5 months ago by gk

Keywords: TorBrowserTeam201808 added
Priority: MediumVery High

comment:18 Changed 4 months ago by brade

What is your plan / strategy for localizing the onboarding strings? Localization is still an open issue for onboarding within the desktop version; our plan is to add the strings to a new file within Torbutton and modify the Firefox onboarding code to pull the strings from there (which is the strategy we have used on desktop for similar situations).

comment:19 Changed 4 months ago by emmapeel

Cc: emmapeel added

I agree that localization of the onboarding strings is very important, as the more confused the user, the more important the native language to help him/her understand what is going on.

I imagine I can take mobile/android/base/locales/en-US/android_strings.dtd and start with the localization.

Is there any problem with that?

comment:20 Changed 4 months ago by antonela

Thanks emmapeel!

igt0/sysrqb: could you give emmapeel access to the repo?

comment:21 in reply to:  18 Changed 4 months ago by sysrqb

Replying to brade:

What is your plan / strategy for localizing the onboarding strings? Localization is still an open issue for onboarding within the desktop version; our plan is to add the strings to a new file within Torbutton and modify the Firefox onboarding code to pull the strings from there (which is the strategy we have used on desktop for similar situations).

This seems like the most scalable solution. igt0's patch in comment:17 adds the strings in the android_strings.dtd file, but we'll likely be happier if we keep localizable string for desktop and android in the same place - especially for the identical strings we use in both places. Using android_string.dtd may be the easiest solution for the first alpha (and not provide localized strings), and then we can move the strings into torbutton when we're ready for releasing localized versions of TBA.

comment:22 Changed 4 months ago by emmapeel

I have added it to transifex at https://www.transifex.com/otf/torproject/tba-android_stringsdtd/

and it checks the file at

https://gitweb.torproject.org/tor-browser.git/plain/mobile/android/base/locales/en-US/android_strings.dtd

as its source. This may need to be updated later on, but the translation memory will repopulate the strings if they appear on another file.

i will add it to the translations git soon-ish

Last edited 4 months ago by emmapeel (previous) (diff)

comment:23 in reply to:  22 ; Changed 4 months ago by sysrqb

Replying to emmapeel:

I have added it to transifex at https://www.transifex.com/otf/torproject/tba-android_stringsdtd/

and it checks the file at

https://gitweb.torproject.org/tor-browser.git/plain/mobile/android/base/locales/en-US/android_strings.dtd

Hrm. Does this duplicate work from Mozilla? That file is currently localized by Mozilla, too. As an example, es-ES: https://hg.mozilla.org/l10n-central/es-ES/file/tip/mobile/android/base/android_strings.dtd

I agree Tor Browser-specific strings must be localized, but will translators localize all strings in that file? Even if we only add a few new strings?

comment:24 Changed 4 months ago by antonela

comment:25 in reply to:  23 Changed 4 months ago by arthuredelstein

Replying to sysrqb:

Replying to emmapeel:

I have added it to transifex at https://www.transifex.com/otf/torproject/tba-android_stringsdtd/

and it checks the file at

https://gitweb.torproject.org/tor-browser.git/plain/mobile/android/base/locales/en-US/android_strings.dtd

Hrm. Does this duplicate work from Mozilla? That file is currently localized by Mozilla, too. As an example, es-ES: https://hg.mozilla.org/l10n-central/es-ES/file/tip/mobile/android/base/android_strings.dtd

I agree Tor Browser-specific strings must be localized, but will translators localize all strings in that file? Even if we only add a few new strings?

Looks like we don't want this file in Transifex. I opened #27125 for fixing this issue.

comment:26 Changed 4 months ago by gk

Keywords: TorBrowserTeam201808R added; TorBrowserTeam201808 removed

comment:27 Changed 4 months ago by sysrqb

Status: needs_reviewneeds_revision

Do we need two public constructors inFirstrunTorPanelConfig? I only see one place where the constructor is used (in SimplePanelConfigs) and they all call the constructor with five arguments.


firstrun_privacy_title and some of the other *_title strings should not have "Title" in the string. They should say "Privacy", "Tor Network", etc. (instead of "Privacy Title", "Tor Network Title").


We'll want the darker Private tab theme, but that isn't critical for this right now.


The first two panels use the Firefox icon, we should change that.


For some reason the escaped-apostrophe in firstrun_tornetwork_message ("there\’s no single point of failure") isn't rendering on my device. It shows theres no single point of failure.


firstrun_tips_message is missing a period at the end.


Can you change R.id.firstrun_link in FirstrunLastPanel so it uses a resource that says "Close"?

comment:28 in reply to:  27 ; Changed 4 months ago by igt0

Replying to sysrqb:

Do we need two public constructors inFirstrunTorPanelConfig? I only see one place where the constructor is used (in SimplePanelConfigs) and they all call the constructor with five arguments.


firstrun_privacy_title and some of the other *_title strings should not have "Title" in the string. They should say "Privacy", "Tor Network", etc. (instead of "Privacy Title", "Tor Network Title").

Yes, it is because we don't have copy for those strings. Should we remove the titles? (if we keep them, and just remove the title word, the tab name and the title elements will have the same phrase)


We'll want the darker Private tab theme, but that isn't critical for this right now.


The first two panels use the Firefox icon, we should change that.


For some reason the escaped-apostrophe in firstrun_tornetwork_message ("there\’s no single point of failure") isn't rendering on my device. It shows theres no single point of failure.


firstrun_tips_message is missing a period at the end.


Can you change R.id.firstrun_link in FirstrunLastPanel so it uses a resource that says "Close"?

comment:29 in reply to:  28 ; Changed 4 months ago by igt0

Replying to igt0:

Replying to sysrqb:

Do we need two public constructors inFirstrunTorPanelConfig? I only see one place where the constructor is used (in SimplePanelConfigs) and they all call the constructor with five arguments.


firstrun_privacy_title and some of the other *_title strings should not have "Title" in the string. They should say "Privacy", "Tor Network", etc. (instead of "Privacy Title", "Tor Network Title").

Yes, it is because we don't have copy for those strings. Should we remove the titles? (if we keep them, and just remove the title word, the tab name and the title elements will have the same phrase)

I will use titles from https://marvelapp.com/5981a4b/screen/44384322


We'll want the darker Private tab theme, but that isn't critical for this right now.


The first two panels use the Firefox icon, we should change that.


For some reason the escaped-apostrophe in firstrun_tornetwork_message ("there\’s no single point of failure") isn't rendering on my device. It shows theres no single point of failure.


firstrun_tips_message is missing a period at the end.


Can you change R.id.firstrun_link in FirstrunLastPanel so it uses a resource that says "Close"?

comment:30 Changed 4 months ago by antonela

We'll want the darker Private tab theme, but that isn't critical for this right now.

Oh, yes. Some people discussed it before at #10399 - #6444. I'd love to take it back to our roadmaps.

comment:31 in reply to:  29 Changed 4 months ago by sysrqb

Replying to igt0:

Replying to igt0:

Replying to sysrqb:

firstrun_privacy_title and some of the other *_title strings should not have "Title" in the string. They should say "Privacy", "Tor Network", etc. (instead of "Privacy Title", "Tor Network Title").

Yes, it is because we don't have copy for those strings. Should we remove the titles? (if we keep them, and just remove the title word, the tab name and the title elements will have the same phrase)

I will use titles from https://marvelapp.com/5981a4b/screen/44384322

Yes, perfect, thanks.

comment:32 in reply to:  27 Changed 4 months ago by sysrqb

Replying to sysrqb:

Can you change R.id.firstrun_link in FirstrunLastPanel so it uses a resource that says "Close"?

Maybe we should use the same "Start Browsing" button as Firefox:
https://gitweb.torproject.org/tor-browser.git/tree/mobile/android/base/java/org/mozilla/gecko/firstrun/LastPanel.java?h=tor-browser-60.1.0esr-8.0-1#n32

comment:33 Changed 4 months ago by igt0

Status: needs_revisionneeds_review

I updated the code, assets, links and copy.

  • Updated the last screen "Next" copy to "Start Browsing"
  • Update all the image assets to use the Tor ones
  • Fixed copy problems
  • Updated the code removing dead code
  • Updated the tab title, background and strip colors to follow the design

https://trac.torproject.org/projects/tor/attachment/ticket/25696/0001-Bug-25696-Implement-alpha-onboarding-for-Tor-Browser.2.patch

Changed 4 months ago by antonela

Attachment: alpha-mockups.zip added

comment:34 Changed 4 months ago by igt0

  • Update text description line-height
  • Change Background image color
  • Make images bigger

https://trac.torproject.org/projects/tor/attachment/ticket/25696/0001-Bug-25696-Implement-alpha-onboarding-for-Tor-Browser.3.patch

comment:35 in reply to:  34 ; Changed 4 months ago by sysrqb

Replying to igt0:

  • Update text description line-height
  • Change Background image color
  • Make images bigger

https://trac.torproject.org/projects/tor/attachment/ticket/25696/0001-Bug-25696-Implement-alpha-onboarding-for-Tor-Browser.3.patch

This looks good! Some nits.

  1. Do we need the private constructor in FirstrunTorPanelConfig?
  2. "Experience Tips" is awkward wording, but we should be consistent with desktop, so we can use that for now.
  3. I see desktop has additional functionality on each panel ("Review Settings", "See FAQs", "Visit an Onion"). Do we want that?
  4. In mobile/android/app/src/main/res/layout/firstrun_animation_container.xml, should home_tab_menu_strap_tor be home_tab_menu_strip_tor?

comment:36 in reply to:  35 Changed 4 months ago by igt0

Replying to sysrqb:

Replying to igt0:

  • Update text description line-height
  • Change Background image color
  • Make images bigger

https://trac.torproject.org/projects/tor/attachment/ticket/25696/0001-Bug-25696-Implement-alpha-onboarding-for-Tor-Browser.3.patch

This looks good! Some nits.

  1. Do we need the private constructor in FirstrunTorPanelConfig?

Left over, I removed

  1. "Experience Tips" is awkward wording, but we should be consistent with desktop, so we can use that for now.
  2. I see desktop has additional functionality on each panel ("Review Settings", "See FAQs", "Visit an Onion"). Do we want that?

For the alpha, we just followed what Fennec had. (image + title + description + next button)

  1. In mobile/android/app/src/main/res/layout/firstrun_animation_container.xml, should home_tab_menu_strap_tor be home_tab_menu_strip_tor?

nice catch. I updated it.

Updated code:

https://trac.torproject.org/projects/tor/attachment/ticket/25696/0001-Bug-25696-Implement-alpha-onboarding-for-Tor-Browser.4.patch

comment:37 Changed 4 months ago by sysrqb

lgtm. GeKo, comments?

comment:38 Changed 4 months ago by gk

So, the packaging step breaks for me with the patch. I wonder whether I am doing something wrong. I used sisbell's setup and am building .apk's for a while now but with your patch applied (I used bug_25696_test in my public tor-browser repo) I get:

25:32.96 Processing annotations...
25:33.81 Annotation processing complete in 851ms
25:33.86 :geckoview:processOfficialWithoutGeckoBinariesNoMinApiDebugResources
25:33.86 :app:processOfficialWithoutGeckoBinariesNoMinApiPhotonDebugResources
25:33.90 :geckoview:compileOfficialWithoutGeckoBinariesNoMinApiDebugKotlin
25:33.91 :geckoview:generateOfficialWithoutGeckoBinariesNoMinApiDebugSources
25:33.91 :geckoview:javaPreCompileOfficialWithoutGeckoBinariesNoMinApiDebug
25:34.51 :geckoview:compileOfficialWithoutGeckoBinariesNoMinApiDebugJavaWithJavac/var/tmp/build/firefox-9c58e200f6eb/mobile/android/app/src/main/res/layout/firstrun_animation_container.xml:24:59-92: AAPT: No resource found that matches the given name (at 'strip' with value '@drawable/home_tab_menu_strip_tor').
25:34.51 
25:34.51 /var/tmp/build/firefox-9c58e200f6eb/obj-arm-linux-androideabi/gradle/build/mobile/android/app/intermediates/res/merged/officialWithoutGeckoBinariesNoMinApiPhoton/debug/layout/firstrun_animation_container.xml:19: error: Error: No resource found that matches the given name (at 'strip' with value '@drawable/home_tab_menu_strip_tor').
25:34.51 
25:34.51 
25:34.58 Failed to execute aapt
25:34.58 com.android.ide.common.process.ProcessException: Failed to execute aapt
25:34.58 	at com.android.builder.core.AndroidBuilder.processResources(AndroidBuilder.java:796)
25:34.58 	at com.android.build.gradle.tasks.ProcessAndroidResources.invokeAaptForSplit(ProcessAndroidResources.java:551)
25:34.58 	at com.android.build.gradle.tasks.ProcessAndroidResources.doFullTaskAction(ProcessAndroidResources.java:285)
25:34.58 	at com.android.build.gradle.internal.tasks.IncrementalTask.taskAction(IncrementalTask.java:109)
25:34.58 	at sun.reflect.GeneratedMethodAccessor221.invoke(Unknown Source)
25:34.58 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
25:34.58 	at java.lang.reflect.Method.invoke(Method.java:498)
25:34.58 	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
25:34.58 	at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$IncrementalTaskAction.doExecute(DefaultTaskClassInfoStore.java:173)
25:34.58 	at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134)
25:34.59 	at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:121)
25:34.59 	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:122)
25:34.59 	at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
25:34.59 	at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
25:34.59 	at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
25:34.59 	at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
25:34.59 	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:111)
25:34.59 	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
25:34.59 	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
25:34.59 	at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:63)
25:34.59 	at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
25:34.59 	at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
25:34.59 	at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)
25:34.59 	at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
25:34.59 	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
25:34.59 	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
25:34.59 	at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
25:34.59 	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
25:34.59 	at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248)
25:34.59 	at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
25:34.59 	at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
25:34.59 	at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
25:34.59 	at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
25:34.59 	at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)
25:34.59 	at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)
25:34.59 	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:124)
25:34.59 	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:80)
25:34.60 	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:105)
25:34.60 	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:99)
25:34.60 	at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:625)
25:34.60 	at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:580)
25:34.60 	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:99)
25:34.60 	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
25:34.60 	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
25:34.60 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
25:34.60 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
25:34.60 	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
25:34.60 	at java.lang.Thread.run(Thread.java:748)

How am I supposed to package the code (I am just running ./mach package)?

comment:39 in reply to:  38 ; Changed 4 months ago by igt0

Can you verify if your local branch has the following file:

./mobile/android/branding/torbrowser/res/drawable-nodpi/home_tab_menu_strip_tor.9.png ?

Looks like gradle was not able to find it. (I am seeing it in the patch)

Replying to gk:

So, the packaging step breaks for me with the patch. I wonder whether I am doing something wrong. I used sisbell's setup and am building .apk's for a while now but with your patch applied (I used bug_25696_test in my public tor-browser repo) I get:

25:32.96 Processing annotations...
25:33.81 Annotation processing complete in 851ms
25:33.86 :geckoview:processOfficialWithoutGeckoBinariesNoMinApiDebugResources
25:33.86 :app:processOfficialWithoutGeckoBinariesNoMinApiPhotonDebugResources
25:33.90 :geckoview:compileOfficialWithoutGeckoBinariesNoMinApiDebugKotlin
25:33.91 :geckoview:generateOfficialWithoutGeckoBinariesNoMinApiDebugSources
25:33.91 :geckoview:javaPreCompileOfficialWithoutGeckoBinariesNoMinApiDebug
25:34.51 :geckoview:compileOfficialWithoutGeckoBinariesNoMinApiDebugJavaWithJavac/var/tmp/build/firefox-9c58e200f6eb/mobile/android/app/src/main/res/layout/firstrun_animation_container.xml:24:59-92: AAPT: No resource found that matches the given name (at 'strip' with value '@drawable/home_tab_menu_strip_tor').
25:34.51 
25:34.51 /var/tmp/build/firefox-9c58e200f6eb/obj-arm-linux-androideabi/gradle/build/mobile/android/app/intermediates/res/merged/officialWithoutGeckoBinariesNoMinApiPhoton/debug/layout/firstrun_animation_container.xml:19: error: Error: No resource found that matches the given name (at 'strip' with value '@drawable/home_tab_menu_strip_tor').
25:34.51 
25:34.51 
25:34.58 Failed to execute aapt
25:34.58 com.android.ide.common.process.ProcessException: Failed to execute aapt
25:34.58 	at com.android.builder.core.AndroidBuilder.processResources(AndroidBuilder.java:796)
25:34.58 	at com.android.build.gradle.tasks.ProcessAndroidResources.invokeAaptForSplit(ProcessAndroidResources.java:551)
25:34.58 	at com.android.build.gradle.tasks.ProcessAndroidResources.doFullTaskAction(ProcessAndroidResources.java:285)
25:34.58 	at com.android.build.gradle.internal.tasks.IncrementalTask.taskAction(IncrementalTask.java:109)
25:34.58 	at sun.reflect.GeneratedMethodAccessor221.invoke(Unknown Source)
25:34.58 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
25:34.58 	at java.lang.reflect.Method.invoke(Method.java:498)
25:34.58 	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
25:34.58 	at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$IncrementalTaskAction.doExecute(DefaultTaskClassInfoStore.java:173)
25:34.58 	at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134)
25:34.59 	at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:121)
25:34.59 	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:122)
25:34.59 	at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
25:34.59 	at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
25:34.59 	at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
25:34.59 	at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
25:34.59 	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:111)
25:34.59 	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
25:34.59 	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
25:34.59 	at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:63)
25:34.59 	at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
25:34.59 	at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
25:34.59 	at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)
25:34.59 	at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
25:34.59 	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
25:34.59 	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
25:34.59 	at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
25:34.59 	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
25:34.59 	at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248)
25:34.59 	at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
25:34.59 	at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
25:34.59 	at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
25:34.59 	at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
25:34.59 	at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)
25:34.59 	at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)
25:34.59 	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:124)
25:34.59 	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:80)
25:34.60 	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:105)
25:34.60 	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:99)
25:34.60 	at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:625)
25:34.60 	at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:580)
25:34.60 	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:99)
25:34.60 	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
25:34.60 	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
25:34.60 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
25:34.60 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
25:34.60 	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
25:34.60 	at java.lang.Thread.run(Thread.java:748)

How am I supposed to package the code (I am just running ./mach package)?

comment:40 in reply to:  39 Changed 4 months ago by gk

Replying to igt0:

Can you verify if your local branch has the following file:

./mobile/android/branding/torbrowser/res/drawable-nodpi/home_tab_menu_strip_tor.9.png ?

Looks like gradle was not able to find it. (I am seeing it in the patch)

Well, as I said, I pointed the tor-browser-build machine to bug_25696_test and that one has the file (https://gitweb.torproject.org/user/gk/tor-browser.git/diff/mobile/android/branding/torbrowser/res/drawable-nodpi/home_tab_menu_strip_tor.9.png?h=bug_25696_test&id=9c58e200f6eb526a5b337138b994b9eb31af5817)

I can retry a build and we can look closer.

Last edited 4 months ago by gk (previous) (diff)

comment:41 Changed 4 months ago by gk

Resolution: fixed
Status: needs_reviewclosed

Okay, that was my mistake. The .mozconfigs were out of sync. Nice work, igt0! Pushed to tor-browser-60.1.0esr-8.0-1 (commit 9c58e200f6eb526a5b337138b994b9eb31af5817).

comment:42 Changed 4 months ago by antonela

The copy got updates here
https://pad.riseup.net/p/tba-alpha-onboarding

and I updated the mockups here
https://marvelapp.com/714gfe8

comment:43 Changed 4 months ago by igt0

Resolution: fixed
Status: closedreopened

comment:45 Changed 4 months ago by igt0

Updated code:

  • Update description copy and background.
  • Update title copy
  • Change latest link layout

https://trac.torproject.org/projects/tor/attachment/ticket/25696/0001-Bug-25696-Design-of-alpha-onboarding-for-Tor-Browser.patch

comment:46 Changed 4 months ago by gk

Keywords: TorBrowserTeam201808 added; TorBrowserTeam201808R removed
Status: needs_reviewneeds_revision

That needs revision at least for the typos in the strings:

1) s/wil show you how/will show you how7 (that's actually a typo in the copy)
2) s/are deleted after your session/is deleted after your session ("information storage" is not plural)
3) s/FAQ\'S/FAQs/

More importantly, though, clicking on the labels that replaced the "Next" ones don't do what they suggest they do. I can see why this is wrt to our security settings as Torbutton is not available yet on first start but it fails in the FAQs case and .onion case as well. I am okay with the "Next" label and the current behavior but mixing the behavior and the new text is not good.

Additionally, while reading the privacy and network related texts it occurred to me that we are promising more than we deliver: first party isolation of traffic is not possible yet in the first alpha. While the browser code for it is there and even Torbutton gets shipped the link to Orbot/Tor is missing. Without it there is no traffic isolation possible (I have not checked how the respective Orbot setting works but it is independent from Tor Browser for Android). We get the regular isolation of cookies and storage etc., though, as this is a browser-only feature. Thus, I think we need to adapt those two parts.

comment:47 in reply to:  46 Changed 4 months ago by isabela

Worked on these and also made the text shorter - it was still quite long for the experience:

https://pad.riseup.net/p/tba-alpha-onboarding

New version created by me is at the top.

Replying to gk:

That needs revision at least for the typos in the strings:

1) s/wil show you how/will show you how7 (that's actually a typo in the copy)
2) s/are deleted after your session/is deleted after your session ("information storage" is not plural)
3) s/FAQ\'S/FAQs/

More importantly, though, clicking on the labels that replaced the "Next" ones don't do what they suggest they do. I can see why this is wrt to our security settings as Torbutton is not available yet on first start but it fails in the FAQs case and .onion case as well. I am okay with the "Next" label and the current behavior but mixing the behavior and the new text is not good.

Additionally, while reading the privacy and network related texts it occurred to me that we are promising more than we deliver: first party isolation of traffic is not possible yet in the first alpha. While the browser code for it is there and even Torbutton gets shipped the link to Orbot/Tor is missing. Without it there is no traffic isolation possible (I have not checked how the respective Orbot setting works but it is independent from Tor Browser for Android). We get the regular isolation of cookies and storage etc., though, as this is a browser-only feature. Thus, I think we need to adapt those two parts.

comment:48 Changed 4 months ago by steph

I just added a couple more edits, there were still some typos. There were subject/verb disagreements in onion services.

comment:50 Changed 4 months ago by sysrqb

I think the buttons are confusing, too - as Georg said.

  1. "Start Now" is okay
  2. "GO TO TOR NETWORK" is not obvious. Maybe we do want "GO TO TOR NETWORK TAB" (or maybe PAGE/PANEL/... would be a better word of this)
  3. GO TO SECURITY SETTINGS, REVIEW SETTINGS, SEE FAQ, VISIT AN ONION
    1. They only go to the next panel (and exit on the last one) - instead of the action they describe
    2. Should we simply use "Next" as the label for the first alpha or should we implement these correctly and delay the release?

comment:51 in reply to:  50 Changed 4 months ago by isabela

Hello!

Sorry I should have updated here at the ticket as well. I sent a review to Igor and he added fixes to the flow that is fixing the buttons and what we are saying they do :)

I added them only to the pad:
https://pad.riseup.net/p/tba-alpha-onboarding

here is English:


change 'Go to security settings' at Tor Network, to 'Next'

Remove 'click bellow to see what the different options do.'

change 'Review Settings' at Security, to 'Next'

on Tips - add this phrase at the end of the paragraph: 'See FAQs.' (link to support site)

change 'See FAQs' button to 'Next'

onion site link is opening a blank page - should open ddg .onion address

Replying to sysrqb:

I think the buttons are confusing, too - as Georg said.

  1. "Start Now" is okay
  2. "GO TO TOR NETWORK" is not obvious. Maybe we do want "GO TO TOR NETWORK TAB" (or maybe PAGE/PANEL/... would be a better word of this)
  3. GO TO SECURITY SETTINGS, REVIEW SETTINGS, SEE FAQ, VISIT AN ONION
  4. They only go to the next panel (and exit on the last one) - instead of the action they describe
  5. Should we simply use "Next" as the label for the first alpha or should we implement these correctly and delay the release?

comment:52 Changed 4 months ago by gk

Status: needs_reviewneeds_revision

OKay, so this means we need a new patch as the latest is only reflecting the changes in the strings but on in behavior (i.e. DDG is not opened).

comment:53 Changed 4 months ago by igt0

Status: needs_revisionneeds_review

Updated patch:

https://trac.torproject.org/projects/tor/attachment/ticket/25696/0001-Bug-25696-Design-of-alpha-onboarding-for-Tor-Browser.3.patch

The only missing thing is the See FAQs linking to TBB faq page. It is not done because the TBA(Firefox) firstrun was not implemented to have links in the text and the amount of changes to make it work that way is not small.

comment:54 in reply to:  53 ; Changed 4 months ago by gk

Keywords: TorBrowserTeam201808R added; TorBrowserTeam201808 removed

Replying to igt0:

Updated patch:

https://trac.torproject.org/projects/tor/attachment/ticket/25696/0001-Bug-25696-Design-of-alpha-onboarding-for-Tor-Browser.3.patch

The only missing thing is the See FAQs linking to TBB faq page. It is not done because the TBA(Firefox) firstrun was not implemented to have links in the text and the amount of changes to make it work that way is not small.

That's okay. Could you file a follow-up ticket for that task? sysrqb: Can you give this patch a final round of testing? I don't have a mobile device with me right now.

comment:55 in reply to:  54 ; Changed 4 months ago by sysrqb

Replying to gk:

Replying to igt0:
That's okay. Could you file a follow-up ticket for that task? sysrqb: Can you give this patch a final round of testing? I don't have a mobile device with me right now.

It looks good, but it isn't working the same when I test on older and new versions of Android. On a device with API 22 (Android 5.1.1) the site is pre-loaded and available when the user clicks "Visit an Onion". However, this causes a usability problem because when the DDG .onion loads, the browser prompts for installing the DDG PWA.

However, on a newer device (API 26, Android 8.1.0), the firstrun panels are good but the DDG .onion is not pre-loaded and when I go to the last panel and press "Visit an Onion", it does not load DDG - I only see the usual activitystream homescreen :( I'm not sure why there is a difference yet.

igt0, are you seeing the correct behavior?

comment:56 in reply to:  55 Changed 4 months ago by igt0

The minimum version I tested in a physical device was version 22 (Android 5.1.1). Version 21 I tested now in the emulator and I see the exactly same problem you are seeing. With and Without the onboarding patch, if the homepage configuration is added.

Replying to sysrqb:

Replying to gk:

Replying to igt0:
That's okay. Could you file a follow-up ticket for that task? sysrqb: Can you give this patch a final round of testing? I don't have a mobile device with me right now.

It looks good, but it isn't working the same when I test on older and new versions of Android. On a device with API 22 (Android 5.1.1) the site is pre-loaded and available when the user clicks "Visit an Onion". However, this causes a usability problem because when the DDG .onion loads, the browser prompts for installing the DDG PWA.

However, on a newer device (API 26, Android 8.1.0), the firstrun panels are good but the DDG .onion is not pre-loaded and when I go to the last panel and press "Visit an Onion", it does not load DDG - I only see the usual activitystream homescreen :( I'm not sure why there is a difference yet.

igt0, are you seeing the correct behavior?

comment:57 Changed 4 months ago by igt0

Status: needs_reviewneeds_revision

comment:58 Changed 4 months ago by igt0

Status: needs_revisionneeds_review

comment:59 Changed 4 months ago by sysrqb

Status: needs_reviewmerge_ready

I like it! I think "Go Explore" is a little better than "Go to explore" (to me, "Go to explore" sounds like it is a button/link that goes to another tab named "Explore"). "Go Explore" is similar to "Go Browse". I'm okay with this patch, though - we can use this and modify the wording after the release.

GeKo, are you okay with this?

Last edited 4 months ago by sysrqb (previous) (diff)

comment:60 Changed 4 months ago by gk

Yes.

comment:61 Changed 4 months ago by antonela

Great. I also updated the mocks for the blog post with "Go Explore". Thanks!

comment:62 Changed 4 months ago by gk

Okay, tor-browser-mobile-60.1.0esr-1.0-build3 is a thing after applying the patch to tor-browser-60.1.0esr-8.0-1 commit 35f8db1e622e520992486b751ade241c23f33871).

I think we can fix the "to" by just fixing the underlying DDG related bug. Igt0/sysrqb could you file a new issue for that?

comment:63 Changed 4 months ago by gk

Resolution: fixed
Status: merge_readyclosed
Note: See TracTickets for help on using tickets.