Kindness Mode UX Update#1670
Conversation
…roxy quality check and instructions on how to improve.
|
@bitmold, it's about time you have a look at this. Since you know the Tor-controlling part way better than me: What would you consider the best way to implement the test? Additionally, I would be happy for any testing against non-standard phones and tablets. Thank you! |
|
please rebase |
|
Awesome, I'll take a look at it tonight + tomorrow morning. |
|
Something is strange with the latest merge. This commit tladesignz@b070bf1 changes Also, |
…amping: Revert "Redesign Kindness UI and simplify layouts" This reverts commit 044c520.
|
The connected UI looks great, but unfortunately it breaks in landscape
And this is a bit nitpicky, but the labels aren't lining up with these grey panels Also @cstiens it just dawned on me that on the kindness screen rectangular grey panels are used, whereas on the "more" screen to the right rounded panels are used. Personally, I think the slightly rounded ones look much nicer. |
Good catch! I removed the legacy test. |
… corners similar to MoreFragment.
…lements 24 hour check and currently-running check.
…lements 24 hour check and currently-running check.
… for now, since it automatically starts the SnowflakeProxy.
Found another problem: We need to bind to the However, doing so unintentionally starts a SnowflakeProxy. I'm afraid, |
This is true, it needs to be modified, however I don't think a thorough redesign is needed.
When the Service is created in |
Re the logging, I had mentioned on the call that for the time being it's excessively logged and that we'd want to tune things down. Perhaps I should've made things clearer on the PR though. When viewing both sets of logs (the main app's and the logs from the tor process side-by-side with ./scripts/view_logs_tmux.sh |
|
One quick thing: in this commit e9bb460 I added small horizontal margins ( If you are using a small screen, it feels very cramped spanning the maximum possible space
|
|
@cstiens would appreciate your feedback on how to go about visually defining some of these additional states Benjamin and I were discussing above
@tladesignz Happy to start implementing this though |
|
@tladesignz I have some ideas and will work on this. Will report back here in the coming days with something for you to review...
|
…switching to a censored country recommit small margins on kindness mode header, removed them to take a screenshot and committed that by mistake
|
@tladesignz I have some questions about NAT type quality, which as far as I'm aware only applies to Wi-Fi I understand that In order to get the NAT type, we need to start snowflake proxy, and that's why you are saying it's problematic that we can start My understanding from reading // some earlier initial config
err = sf.checkNATType(config, sf.NATProbeURL)
if err != nil {
// non-fatal error. Log it and continue
log.Printf("Error checking NAT type: %s", err.Error())
setCurrentNATType(NATUnknown)
}
sf.EventDispatcher.OnNewSnowflakeEvent(event.EventOnCurrentNATTypeDetermined{CurNATType: getCurrentNATType()})
NatRetestTask := task.Periodic{
Interval: sf.NATTypeMeasurementInterval,
Execute: func() error {
return sf.checkNATType(config, sf.NATProbeURL)
},
// Not setting OnError would shut down the periodic task on error by default.
OnError: func(err error) {
log.Printf("Periodic probetest failed: %s, retaining current NAT type: %s", err.Error(), getCurrentNATType())
},
}
if sf.NATTypeMeasurementInterval != 0 {
NatRetestTask.WaitThenStart()
defer NatRetestTask.Close()
}
// more config and eventually we get to the main loop...So essentially, you get the NAT type once Snowflake Proxy starts, and then every Pls, correct me if I'm wrong in my understnading of how any of the above works... But with this understanding a few questions and concerns come to mind:
That ⬆️ seems like a lot, and for what? All of these questions/uncertainties lead me to think that we shouldn't display the "Proxy Quality: unknown/restricted/unrestricted" label when Kindness Mode is disabled. It suggests that you actualy have a proxy running when you don't, and may very well change once you start the proxy, and as far as I can tell you do actually have to start the proxy to learn this. Why not hide it when it's disabled, and then re-enable its visibility when kindness mode is turned on? Unless I'm missing something, it seems like |
|
If, in Another, i had another idea that came to mind just now... Every time we get a new network event, (gain Wi-Fi, revert to cellular, connect to a new Wi-Fi, etc) Alternatively, is there anyway |
tladesignz
left a comment
There was a problem hiding this comment.
Well, well, well. TBH, I'm not really fond of that approach to deny Kindness Mode when the user selected a certain country in an unrelated feature.
You're reusing information which was meant for a completely different feature. In the context of that feature, the country list makes sense, as for the countries there are specific DNS servers to use.
But said country list is not a definitive list of countries where censorship happens. These two things correlate, but are not necessarily the same.
Think of special connections: white SIM cards; Starlink; university research Wi-Fi
That's why I always pushed for the ultimate test: Try to run a straight Tor connection. That's the actual always true fact upon which we can decide if running a Snowflake Proxy makes sense or not.
How about this:
There is certainly the case, that for some people, it could theoretically be detrimental to get their Tor connection closed and a straight Tor connection established.
In the current implementation, this is somewhat surprising.
We certainly need some interstitial alert before actually starting the test.
That seems to me the right place to use the country information.
"We need to run a straight Tor connection as a test to see, if your current location is a good place for running a Snowflake Proxy. We will now disconnect your Tor VPN and run that test.
DO NOT PROCEED, if running an unobfuscated Tor connection right now could get you in trouble."
And, additionally or alternatively, when we see a country on our list:
"You selected XXX as your country. Running a Snowflake Proxy in that country most probably does not make sense. You cannot help others here. STOP RIGHT NOW."
I leave it to @cstiens to improve my wording.
|
@bitmold re NAT quality evaluation: Wow, you quite overthought this a lot. No, I don't want to start Snowflake Proxy just to get the NAT quality info. I just want to get that info at all, when it is available. My first approach was to bind to the service and get the value communicated that way, but that turned out to be a bad idea, because that would actually start the Snowflake Proxy as the service is currently set up. Your idea of rather using a local broadcast of course also works. AFAIR, that is discouraged though since recently and my Android Studio complains about it. But, if you think to stay on local broadcasts is better than to redesign the service so it doesn't automatically start the Snowflake Proxy, I'm fine. I like the idea of restarting the Snowflake Proxy on network changes. And thanks for the hin with the I still think that showing |
@tladesignz my confusion is there's currently a view displaying the NAT type, introduced by this PR, when kindness mode is turned off. Why even show it? Since the only way for the NAT type to be available is after starting snowflake proxy, correct? Or to put it another way, the only way to get the NAT type in |
|
Curious on your thoughts for a reasonable |
As I already stated above:
|
For iOS/macOS I decided upon 1 hour. Since it's a foreground thing on iOS, I suppose user's are not going to move much while running the Snowflake Proxy. Of course, that can be very different on Android. But 5 minutes still seems a little much. |
|
Since there's no way to simply ask For mac an hour seems perfect though |
I didn't mean to suggest that those countries were an exhaustive list of regions where you can't run snowflake. I made the change after it seemed like a user of the iOS app based in Turkey complained after failing the test. Of course, in all the countries not in that list, if you try to start kindness mode you have the opportunity to pass or fail the definitive test. The idea was to save users who want to just get online to talk to their families or read the news time by blocking off part of this app because even though there's been all this amazing UX work put into Orbot, the app still is still inevitably filled with a lot of confusing terminology and technical concepts that most users do not have a solid understanding of. I'd rather just block it in some places where it's almost always not going to work anytime soon, rather than say something to the effect of
I think many users would find this warning confusing and scary. To me, keeping things streamlined and uncomplicated for users who have chosen to specify that they're in a sensitive area vastly outweighs being able to on ramp the rare starlink user in say Afghanistan, for example. And even if If they're clandestinely using starlink against the violent morality laws of the Taliban, then it's safe to assume that they probably have bigger concerns than helping users connect to the tor network via Orbot's kindness mode. If I had to guess, the lion's share of people in that region who are able to pass the test and sustainably run kindness mode would probably be some less than tech-savvy people in proximity to the Supreme Leader that have Orbot installed and then randomly turned on kindness mode and are somewhat unknowingly dedicating bandwidth to help people over the world connect to Tor. But say you do have Starlink in a violently censored place and do use kindness mode - well for those, what 2 dozen users, having kindness mode on is only useful while they're on that starlink network, the minute they go 6-15ft (1.8-4.5m) away from the router and possibly join another network then they're running kindness mode uselessly, while perhaps also jeopardizing their personal safety. As for someone on a privileged university Wi-Fi the same drawback is the case. Maybe, this very negligible amount of users could be snowflakes, but they're still going to become immediately unhelpful proxies the minute they leave their campus network. I would imagine this hypothetical researcher would probably be more drawn to the standalone proxy anyway. As for white SIM card holders in Iran, my understanding was those SIMs were issued to those aligned with IRGC. Since it seems like you have to be aligned with the state's project of censorship to get one of those SIM cards, I don't think those Orbot users would be interested in helping to run a technology that's historically been used for circumvention in Iran. How about this:
|
|
I 100% agree with you though that the testing dialog should have some kind of interstitial warning like you mentioned in that comment I just quoted |
…eck, deprecated api, unused import
Love your physical dedication! 😁 |
…tan. define country codes used in CensoredCountries.kt to make reading src/diffs easier and seeing what changed over time
- Add test to see if a non-orbot VPN app is running, failing the test - Make this new non-orbot VPN test happen before even seeing if there's a quality check. Users who pass a quality check should still be unable to active kindness mode if they later went about turning on a non-orbot VPN
…inks it has internet if theres an active VPN connection to another VPN app, even if that VPN connection is broken/the other app deines orbot internet connection
…f you can/cant be a snowflake without connecting to Tor. If your connection is inconclusive without attempting a direct tor connection, obtain that the user will connect DIRECTLY to Tor. Explain that any active tor connection they may currently have via a bridge will be disconnected for a moment. Only do the connection test after getting the users consent.
…tance, if you have a VPN app running explain you must either get rid of it or use Orbot as the VPN. provide a way to get into the system VPN settings






Fixes issue #1509.