/// <since_tizen> 8 </since_tizen>
public class RadioButton : SelectButton
{
+ private bool selectedAgain = false;
+
static RadioButton() { }
/// <summary>
}
}
- /// <summary>
- /// Set CheckState to true after selecting RadioButton.
- /// </summary>
- /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
- [EditorBrowsable(EditorBrowsableState.Never)]
- protected override void OnSelectedChanged()
- {
- if (!IsSelected)
- {
- IsSelected = true;
- }
- }
-
/// <inheritdoc/>
[EditorBrowsable(EditorBrowsableState.Never)]
protected override ImageView CreateIcon()
SizeModeFactor = new Vector3(1, 1, 1),
};
}
+
+ /// <inheritdoc/>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public override bool OnKey(Key key)
+ {
+ if ((IsEnabled == false) || (key == null))
+ {
+ return false;
+ }
+
+ if (key.State == Key.StateType.Up)
+ {
+ if (key.KeyPressedName == "Return")
+ {
+ if (IsSelected == true)
+ {
+ selectedAgain = true;
+ }
+ }
+ }
+
+ bool ret = base.OnKey(key);
+
+ if (selectedAgain == true)
+ {
+ IsSelected = true;
+ selectedAgain = false;
+ }
+
+ return ret;
+ }
+
+ /// <inheritdoc/>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ protected override bool HandleControlStateOnTouch(Touch touch)
+ {
+ if ((IsEnabled == false) || (touch == null))
+ {
+ return false;
+ }
+
+ PointStateType state = touch.GetState(0);
+ switch (state)
+ {
+ case PointStateType.Up:
+ if (IsSelected == true)
+ {
+ selectedAgain = true;
+ }
+ break;
+ default:
+ break;
+ }
+
+ bool ret = base.HandleControlStateOnTouch(touch);
+
+ if (selectedAgain == true)
+ {
+ IsSelected = true;
+ selectedAgain = false;
+ }
+
+ return ret;
+ }
+
+ /// <inheritdoc/>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ protected override void OnControlStateChanged(ControlStateChangedEventArgs info)
+ {
+ if (info.PreviousState.Contains(ControlState.Selected) != info.CurrentState.Contains(ControlState.Selected))
+ {
+ // RadioButton does not invoke SelectedChanged if button or key
+ // is unpressed while its state is selected.
+ if (selectedAgain == true)
+ {
+ return;
+ }
+
+ base.OnControlStateChanged(info);
+ }
+ }
}
}
{
private SelectGroup itemGroup = null;
+ private bool invokeSelectedChanged = false;
+
/// <summary>
/// Item group which is used to manager all SelectButton in it.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public override bool OnKey(Key key)
{
- if (IsEnabled == false)
+ if ((IsEnabled == false) || (key == null))
{
return false;
}
- bool ret = base.OnKey(key);
+
if (key.State == Key.StateType.Up)
{
if (key.KeyPressedName == "Return")
{
- OnSelect();
+ invokeSelectedChanged = true;
}
}
+ else
+ {
+ invokeSelectedChanged = false;
+ }
- return ret;
+ return base.OnKey(key);
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool HandleControlStateOnTouch(Touch touch)
{
- if (false == IsEnabled)
+ if ((IsEnabled == false) || (touch == null))
{
return false;
}
PointStateType state = touch.GetState(0);
- bool ret = base.HandleControlStateOnTouch(touch);
switch (state)
{
case PointStateType.Up:
- OnSelect();
+ invokeSelectedChanged = true;
break;
default:
+ invokeSelectedChanged = false;
break;
}
- return ret;
+
+ return base.HandleControlStateOnTouch(touch);
}
/// <summary>
IsSelectable = true;
}
- private void OnSelect()
+ /// <inheritdoc/>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ protected override void OnControlStateChanged(ControlStateChangedEventArgs info)
{
- OnSelectedChanged();
-
- if (SelectedChanged != null)
+ if (info.PreviousState.Contains(ControlState.Selected) != info.CurrentState.Contains(ControlState.Selected))
{
- SelectedChangedEventArgs eventArgs = new SelectedChangedEventArgs();
- eventArgs.IsSelected = IsSelected;
- SelectedChanged(this, eventArgs);
+ // SelectedChanged is invoked when button or key is unpressed.
+ if (invokeSelectedChanged == false)
+ {
+ return;
+ }
+
+ OnSelectedChanged();
+
+ if (SelectedChanged != null)
+ {
+ SelectedChangedEventArgs eventArgs = new SelectedChangedEventArgs();
+ eventArgs.IsSelected = IsSelected;
+ SelectedChanged(this, eventArgs);
+ }
}
}
}