Samsung / Tizen.CircularUI

Tizen Wearable CircularUI project is to develop an open source software motivate software developer to creating Tizen Wearable Xamarin Forms app more easily and efficiently.
Other
80 stars 32 forks source link

Focus not enabled on second page of IndexPage #161

Closed kellison3205 closed 5 years ago

kellison3205 commented 5 years ago

I created a simple app with an IndexPage as the MainPage of my app. I added 2 pages. The first has text and a button. The second has some circleSteppers. If the circleStepper page is 1st, it works correctly. But if it is second it doesn't get focus. I tried putting CurrentPage.Focus() in CurrentPageChanged, but CurrentPage.IsFocused() is false before and after calling Focus() for the 2nd page.

jkpu commented 5 years ago

Thank you for your reporting.

But, I cannot reproduce this issue. I think you didn't set RotaryFocusObject in CirclePage.

refer to CirclePage guide RotaryFocusObject property sets the currently focused control that is handled by rotating and display the circle object of the focused control. If the value is not set properly, the control will not receive the Rotary Event

<w:CirclePage x:Name="SecondPage" RotaryFocusObject ="{x:Reference stepper}">

Please refer to following the test code that I have tried to reproduce your issue.

<?xml version="1.0" encoding="utf-8" ?>
<w:IndexPage
    x:Class="WearableUIGallery.TC.TCIndexPageFocus"
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:local="clr-namespace:WearableUIGallery"
    xmlns:w="clr-namespace:Tizen.Wearable.CircularUI.Forms;assembly=Tizen.Wearable.CircularUI.Forms">
    <ContentPage x:Name="FistPage">
        <StackLayout VerticalOptions="CenterAndExpand">
            <Label
                HeightRequest="120"
                FontAttributes="Bold"
                HorizontalTextAlignment="Center"
                Text="Hello Xamarin!"/>
            <Button
                x:Name="button"
                Clicked="OnButtonClicked"
                HorizontalOptions="CenterAndExpand"
                Text="Press"
                WidthRequest="200" />
        </StackLayout>
    </ContentPage>
    <w:CirclePage x:Name="SecondPage" RotaryFocusObject ="{x:Reference stepper}">
        <w:CirclePage.Content>
            <StackLayout  Orientation="Vertical">
                <Label
                    FontAttributes="Bold"
                    HorizontalTextAlignment="Center"
                    Text="Title"/>
                <w:CircleStepper
                    x:Name="stepper"
                    Title="Steper title"
                    Focused="OnFocused"
                    Maximum="10"
                    Minimum="0"
                    WidthRequest="60"
                    Value="0" />
            </StackLayout>
        </w:CirclePage.Content>
    </w:CirclePage>
</w:IndexPage>

CircleStepper is worked on the second page. the following figure is a screenshot of the above code.

w-4 0-circle-x86-preview-2019-02-15-135854

kellison3205 commented 5 years ago

I am sending you my code. It is a very simple test case.

TizenWearableXamlApp1.zip https://drive.google.com/file/d/1acPtJ6sZg77TxzFQIHAymQ0ImYYkYXcG/view?usp=drive_web It is for Visual Studio 2017. The TCCircleStepper2 is from the sample code showing all the CircularUI components. I add it and my simple ACircle1 class to the IndexPageMain in the .cs file. If I put the TCCircleStepper2 class first, it works correctly. If I put it as the second page of the Index it does not.

Thanks for looking into this. Karen Ellison

On Thu, Feb 14, 2019 at 9:07 PM Jeongkyun notifications@github.com wrote:

Thank you for your reporting. But, I cannot reproduce this issue. I think you didn't set RotaryFocusObject in CirclePage.

Please refer to following the test code that I have tried to reproduce your issue.

<?xml version="1.0" encoding="utf-8" ?> <w:IndexPage x:Class="WearableUIGallery.TC.TCIndexPageFocus" xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:WearableUIGallery" xmlns:w="clr-namespace:Tizen.Wearable.CircularUI.Forms;assembly=Tizen.Wearable.CircularUI.Forms">

kellison3205 commented 5 years ago

I should be more specific. On the TCCircleStepper2 page the focus is on the hour value and the stepper works. But if I try to select minutes or seconds, the stepper does not get changed as it should to the correct stepper and those values don't change. This only happens when the stepper page is second in the IndexPage. If it is first, it works correctly.

kellison3205 commented 5 years ago

I didn't mean to close it. I pushed the wrong button.

jkpu commented 5 years ago

I have verified that Xamarin control's focus(Circlestepper, Datetime, Entry, and so on) isn't enabled on second page or more pages of IndexPage, And also Issue is same on Xamarin.Forms.CarouselPage.

Both CircularUI and Xamarin widget have same focus issue. It can be native UIFW issue. Native FW issue patch can't be update in Tizen Platform Version 4.0 and 5.0 because this version already released.

We will look into this issue more. If you need to use IndexPage in your application. I recommend you to place the widget that needs focus on the first page of the IndexPage.

jkpu commented 5 years ago

This issue was fixed in PR(https://github.com/Samsung/Tizen.CircularUI/pull/167) and will be included next Nuget version.

jkpu commented 5 years ago

Patch of indexpage focus issue was included version 1.1.0-pre1-00020