eltos / SimpleDialogFragments

An Android library to create dialogs with ease and handle user interaction reliably, using fragments and material design.
Apache License 2.0
119 stars 17 forks source link

Feature Request - Add visible radio buttons, even for `SimpleListDialog.SINGLE_CHOICE_DIRECT` #75

Closed mendhak closed 2 years ago

mendhak commented 2 years ago

In the SimpleListDialog, when the choice mode is SINGLE_CHOICE_DIRECT, it would be good to still show radio buttons, so users know that there is a choice to make here.

Currently no radio button is shown and the dialog looks like a list of text, but it's not obvious that any action needs to be taken. I'm just thinking from regular users' point of view, even if the dialog closes right away, having some kind of indicator to 'do' something would be useful.

imageimage

Design If applicable, add images supporting your proposal I'm not great at editing stuff but: image

eltos commented 2 years ago

On the one hand, a radio icon makes a clearer distinction of options for the user, and it allows preset to be used (i.e. current setting). On the other hand, the Material Design guide does not use the radio button for direct choices, and the user might not expect it's choice to be applied immediately. The "SINGLE_CHOICE_DIRECT" mode might also be used for purposes where the concept of a radio button choice does not really apply (i.e. actions).

I would probably rather add an option, so the developer can specify the layout/icon to be shown. Maybe with a default "AUTO" option that shows the radio buttons if there is a preset? One could also think of an arrow icon instead.

What do you think?

EDIT: method and constant names proposed below have changed!

```java SimpleListDialog.build() .title(R.string.select_one) .choiceMode(SimpleListDialog.SINGLE_CHOICE_DIRECT) .choicePreset(1) .items(getBaseContext(), R.array.choices) .show(this, CHOICE_DIALOG); ``` Automatically uses `SimpleListDialog.ICON_SINGLE_CHOICE` because a preset has been set
```java SimpleListDialog.build() .title(R.string.select_one) .choiceMode(SimpleListDialog.SINGLE_CHOICE_DIRECT) //.choicePreset(1) .items(getBaseContext(), R.array.choices) .show(this, CHOICE_DIALOG); ``` Automatically uses `SimpleListDialog.ICON_NONE`
```java SimpleListDialog.build() .title(R.string.select_one) .choiceMode(SimpleListDialog.SINGLE_CHOICE_DIRECT) .checkIcon(SimpleListDialog.ICON_ACTION) .items(getBaseContext(), R.array.choices) .show(this, CHOICE_DIALOG); ``` Explicitly setting icon
mendhak commented 2 years ago

Oh I had no idea the guidelines specified that. See, told you I'm not a UI person :grin:

I was going by what ListPreference dialogs do, they show radio buttons - I'm basically using SimpleDialogFragments to replace some ListPreferences, but I guess those don't follow the guidelines.

Yes your idea is really good. Thanks for considering it and being accommodating.

(Paraphrasing here for my own understanding)

So by default just follow what the guidelines have said, a simple list of terms.

If there is a choicePreset, the dialog is saying to the user "here's what was chosen before, you can change that choice now". I think this particular line goes really well with ListPreference paradigm. That's it.

Finally the checkIcon thing is interesting, I hadn't even thought about that. It's a list of call to actions, could be a lot of possibilities.

mendhak commented 2 years ago

I did some testing against your branch (via jitpack) and it looks quite good!

image

image