Does Xamarin.Forms MasterDetailPage work with Kindle VoiceOver accessibility - c#

I am revisiting an issue where the behaviour of our app on an Amazon Kindle does not work as expected. When using VoiceOver on an Android device it works correctly on version 5.1, 6.0, 7.0, 9.0 and 10. However, on a Kindle Fire 7 (7th generation) running Fire OS 5.6.7.0 the interaction with VoiceOver is a poor experience.
To rule out our app I have tested using the sample code from https://github.com/xamarin/xamarin-forms-samples/tree/master/Navigation/MasterDetailPage. This displays the same issue which is that the MasterDetailPage hamburger menu is unusable when VoiceView is enabled. On any Android device I can tap on any of the menu options and the screen reader highlight will be displayed correctly.
On the Kindle if you are lucky you might get a random element focused, and then drag the highlight, but this is not consistent.
So does Xamarin Forms MasterDetailPage work with Kindle VoiceView? I have tested from 4.1.0sr5 to 4.8.0 with no obvious change. If the answer is that it doesn't work then at least I know to give up trying.

So the main issue is that VoiceView navigation is not intuitive. You cannot tap on elements but you need to swipe left and swipe right to select whole words. I'm guessing this was based on the ebook controls and was kept consistent with the Fire.
So to navigate the menu you have to tap and then swipe left to navigate up and swipe right to navigate down.
There is still a bug with the MasterDetailPage in that when the Master page is shown the hamburger has focus, but swiping left moves up to the toolbar and swiping right goes down to the back button. That might be possible to work around by unselecting the icon after it has been pressed - something to look at.
For a really good example of how painful VoiceView is do the following
Start the Silk Browser
Do a search so that the browser has a list of pages to click
Enable VoiceView
Attempt to select a link.
Once VoiceView is enabled the only way is to swipe left/right every linked element on the page which is not pleasant at all.

Related

Disable PopUp disappearing on HomeButton click in Rg.PopUp Xamarin

How can I disable the PopUp behavior in my App, that makes the PopUp disappear when the homebutton is touched. Specifically I am using an IPad Air as a Device and when I only touch the Homebuttonbar on the Bottom, the PopUp closes. I need this to stop as I want the PopUp only to close when the Ok button is pressed and the user has made a choice…
Thanks
I kinda tried to solve the problem by repepushing the PopUp if it is not closed by the OK Button. But I would like to disable the pop behavior in the first place...
https://youtu.be/Y9eTrOvFdj4
Check the video please to understand the problem, please.
I tried it with iPad Air and iPad Air 2 simulator. When the PopUp page pops up, click the Home button below, and then go back to the App. The result is that the PopUp page is still there. So I'm not sure if your other code is causing this problem.
Please check the version of the plugin you are using and update it to the latest version if available.
There is an override method(OnResume) in App.cs where you can repop.

Getting Master Detail to behave on UWP just like it does on Android and IOS

I have a prism Xamarin Forms application which is being designed for both UWP, Android on IOS. This is the first UWP app that I have created. I want to have a menu that is only accessible from the first level of navigation. To do this, in the past, I have used a Master-Detail page. However, I have encountered some behaviour differences that I need some help with.
When I use a Master-Detail screen on IOS or Android it behaves like a menu only accessible to the first level of navigation. Any subpage that you might navigate from there you don't see menu it is replaced by the back button.
When I use a Master-Detail screen on UWP it's behaviour is different. The menu is available on all pages no matter how far into the navigation stack you travel. It is by default also a menu tray of items anchored on the left side of your application.
I have figured out how to make the menu collapse into the hamburger button that I am used to on an Android and IOS application by setting the parameter MasterBehavior to the value Popover. But I would like to have the menu completely disappear on any page navigated past the first level as it does on IOS of Android.
Does anyone know of a way to make this happen?
I think I can say safely that this can't be done in pure Xamarin.Forms.
To change this you would have to change to which UWP Frame the content is loaded, and I am not aware that Frame is exposed anywhere in Xamarin.Forms which means that even custom renderers cannot help.
However you may try to build the native navigation that would act like that in the UWP project and then load inside those native controls Xamarin.Forms page, that should work and deliver the results that you have requested. Not trivial and no few lines that I can show you, but if that is important for you it should be possible this way.

Simulating page transition animation when showing a Grid in UWP

I have a Windows 10 (UWP) app with a few screens in a SplitView. When navigating among pages a page transition animation is shown (I added animations to the SplitView's Frame).
One page of the app is a bit different. In the left half a calendar is shown. In the right half a detail for a day is shown. When a user taps a day in the calendar (on the left), the detail is shown on the right.
When the windows is narrow or the app runs on a phone, only the calendar or the day are shown. So the users sees the calendar, taps on a day and the calendar hides (Visibility=Collapsed) and the day detail shows (Visibility=Visible). And vice versa on back key press.
The problem is that this feels awkward, because there is no animation that would look like transitioning from calendar to day.
So the question is, how to simulate a page transition animation when showing a Grid?
I took a look at the UWP sample for a master-detail scenario (my situation is basically a master-detail scenario). In the sample Microsoft has two pages instead of on, a master page with a list and a detail and a separate, duplicated, detail page. And a ton of ugly code behind for navigating depending on screen size, manipulation the back stack when windows size changes and so on. Not really an elegant solution.
Not sure about an elegant solution to simulate a navigation transition, but I wouldn't use Visibility. It doesn't play well with animations.
I'd consider using something like a Transform animation to offset the two element by one screen width. I won't simulate a navigation transition, but it'll be better than a jarring switch.
Alternatively you could simulate something like the Pivot transition when it changes tabs.

Navigation to another page using swipe gesture (Windows Phone 8)

I've searched quite a lot on the Internet but haven't been able to found the exact thing that I want.
I now that I should be using the Manipulation events such as Manipulation Started, Delta, Completed.
As I said I managed to navigate to another page using swipe combining these three events, but what I actually want is to see THE MOTION when moving from the actual page to another like for example when you swipe from the Official Windows Phone 8 page to the Apps page using a left swipe. Can you please point out on how to achieve such a thing.
http://agilemobility.net/2014/07/windows-phone-8-swipe-gesture/
This page shows an example on how to that, but the motion of moving the current page and bringing the second one is displayed.
I wasn't aware of the following, and yes, Pivot is the answer to my question.
Taken from: https://msdn.microsoft.com/en-us/library/windows/apps/ff941103(v=vs.105).aspx
You can use a custom template named Windows Phone Pivot App when creating a new project. This template will come pre-populated with content and you can modify the template accordingly.
List itemThe Pivot control can be added to the Toolbox in Visual Studio and can be easily dropped into your project.
You can add a Windows Phone Pivot Page to an existing project.

TagVisualizer - when active - blocks Textbox touch Keyboard focus inside a ScatterViewItem

I have a TagVisualizer covering the entire screen. Nested inside is a fullscreen ScatterView. Inside one of my ScatterViewItems is UserControl which lists n amount of SurfaceTextBoxs. The UserControl and ScatterViewItems are always visible.
E.g.
<TagVisualizer Panel.ZIndex="1">
<TagVisualizer.Definitions>
...
<TagVisualizer.Definitions>
<ScatterView Panel.ZIndex="2">
<ScatterViewItem />
<ScatterViewItem />
<ScatterViewItem >
<UserControl />
</ScatterViewItem>
...
</ScatterView>
</TagVisualizer>
The problem I have is when there is no tags being recognized on the table the Touch input works and the Keyboard pops up and functions correctly. However when there is a tag on the table being recognized the keyboard no longer focuses on the textblock and wont react to user touch input. I thought layering the content zindex would solve this but I was wrong...
What is frustrating is that my code works with the Surface Input Simulator tools but not on the device itself. (tag and touch tool options, not mouse).
The tags are precisely cutout and do not appear as blobs / finger
touches on the table.
Dragging and dropping of content from
scatterview to librarybars etc all work as intended.
Other buttons and touch elements are all working as intended
The Source for each tag is IsHitTestVisible=false and has no buttons etc (only a Ellipse which shows me where the tag is if being recognised)
Only the
keyboard functionality is not functioning as I thought it was
intended.
I believe the reason behind this is due to that the Tag captures the Mouse context and won't let go and the default Keyboard functionality needs not the touch input but the single mouse event. How would I go about making the Keyboard work on a SurfaceTextBox - Inside a UserControl - when a Tag is being recognized?
I'm new to WPF and this problem is causing me a minor headache...I have looked at the SDK examples and I cannot find a solution for this.. Is there something stupid I am doing or something simple not doing/have missed?
Any help would be appreciative :)
After researching more about the keyboard structure of Surface 2.0 programs and again following the Shopping Cart example you have to use the Surface 2.0 Keyboard, not the Tablet one (the one you can toggle on/off in the control panel). I made the foolish error in thinking that both the keyboards can operate the same... nope.
The Surface 2.0 keyboard accepts touch input and works with TagVisualizers. This is due binding the keyboard to certain SurfaceTextBoxes and it taking in touch input even when the mouse has not clicked on it.
The Tablet windows default keyboard does not work with touch input unless a mouse input has touched it (when there is no other input the last and current active touch input is promoted to a mouse). This keyboard always shows when no over keyboard is specified and it is enabled in the Control Panel. This is tedious to work with TagVisualizers as when there is no mouse/touch input but there is a recognized tag.. this tag will steal the contact and until you take it off.
This problem does not exist with the Surface 2.0 keyboard. When you develop with the Surface 2.0 keyboard the Tablet keyboard will take it's place (annoyingly) until you run your software via the Surface Shell...
To develop your program and see the Surface 2.0 Keyboard you will have to have a development environment for and on a set up for Surface. E.g. develop on a Samsung SUR40 etc
http://msdn.microsoft.com/en-us/library/ff727875.aspx Testing in Windows mode
http://msdn.microsoft.com/en-us/library/ff727840.aspx Testing/debugging for surface
http://msdn.microsoft.com/en-us/library/ff727766.aspx Surface Keyboard
P.s. I believe this is correct... I am still researching on this issue and if I find a way around this Ill update my answer...
Edit:
To extend this answer.. You should code the application to use the Surface Shell, via the launcher you should either launch your application from the selection of available applications and / or set the shell to one application mode if you're programming for a store environment.

Categories