Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #11163 from t895/convert-layout
Android: Replace spinners with dropdown menus
  • Loading branch information
JosJuice committed Oct 23, 2022
2 parents 7f2c78f + 0fdae88 commit 7743afd
Show file tree
Hide file tree
Showing 7 changed files with 279 additions and 255 deletions.
Expand Up @@ -4,7 +4,6 @@

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
Expand Down Expand Up @@ -49,18 +48,8 @@ public RiivolutionAdapter(Context context, RiivolutionPatches patches)
public RiivolutionViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
LayoutInflater inflater = LayoutInflater.from(parent.getContext());

switch (viewType)
{
case RiivolutionViewHolder.TYPE_HEADER:
View headerView = inflater.inflate(R.layout.list_item_riivolution_header, parent, false);
return new RiivolutionViewHolder(headerView);
case RiivolutionViewHolder.TYPE_OPTION:
View optionView = inflater.inflate(R.layout.list_item_riivolution_option, parent, false);
return new RiivolutionViewHolder(optionView);
default:
throw new UnsupportedOperationException();
}
return new RiivolutionViewHolder(
inflater.inflate(R.layout.list_item_riivolution, parent, false));
}

@Override
Expand All @@ -74,11 +63,4 @@ public int getItemCount()
{
return mItems.size();
}

@Override
public int getItemViewType(int position)
{
return mItems.get(position).mOptionIndex != -1 ?
RiivolutionViewHolder.TYPE_OPTION : RiivolutionViewHolder.TYPE_HEADER;
}
}
Expand Up @@ -6,24 +6,23 @@
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.google.android.material.textfield.MaterialAutoCompleteTextView;
import com.google.android.material.textfield.TextInputLayout;

import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.features.riivolution.model.RiivolutionPatches;

public class RiivolutionViewHolder extends RecyclerView.ViewHolder
implements AdapterView.OnItemSelectedListener
implements AdapterView.OnItemClickListener
{
public static final int TYPE_HEADER = 0;
public static final int TYPE_OPTION = 1;

private final TextView mTextView;
private final Spinner mSpinner;

private final TextInputLayout mChoiceLayout;
private final MaterialAutoCompleteTextView mChoiceDropdown;
private RiivolutionPatches mPatches;
private RiivolutionItem mItem;

Expand All @@ -32,18 +31,34 @@ public RiivolutionViewHolder(@NonNull View itemView)
super(itemView);

mTextView = itemView.findViewById(R.id.text_name);
mSpinner = itemView.findViewById(R.id.spinner_choice);
mChoiceLayout = itemView.findViewById(R.id.layout_choice);
mChoiceDropdown = itemView.findViewById(R.id.dropdown_choice);
}

public void bind(Context context, RiivolutionPatches patches, RiivolutionItem item)
{
// TODO: Remove workaround for text filtering issue in material components when fixed
// https://github.com/material-components/material-components-android/issues/1464
mChoiceDropdown.setSaveEnabled(false);

String text;
if (item.mOptionIndex != -1)
{
mTextView.setVisibility(View.GONE);
text = patches.getOptionName(item.mDiscIndex, item.mSectionIndex, item.mOptionIndex);
mChoiceLayout.setHint(text);
}
else if (item.mSectionIndex != -1)
{
mTextView.setTextAppearance(context, R.style.TextAppearance_AppCompat_Medium);
mChoiceLayout.setVisibility(View.GONE);
text = patches.getSectionName(item.mDiscIndex, item.mSectionIndex);
}
else
{
mChoiceLayout.setVisibility(View.GONE);
text = patches.getDiscName(item.mDiscIndex);
}
mTextView.setText(text);

if (item.mOptionIndex != -1)
Expand All @@ -52,32 +67,28 @@ else if (item.mSectionIndex != -1)
mItem = item;

ArrayAdapter<String> adapter = new ArrayAdapter<>(context,
R.layout.list_item_riivolution_header);
R.layout.support_simple_spinner_dropdown_item);

int choiceCount = patches.getChoiceCount(mItem.mDiscIndex, mItem.mSectionIndex,
mItem.mOptionIndex);
int choiceCount =
patches.getChoiceCount(mItem.mDiscIndex, mItem.mSectionIndex, mItem.mOptionIndex);
adapter.add(context.getString(R.string.riivolution_disabled));
for (int i = 0; i < choiceCount; i++)
{
adapter.add(patches.getChoiceName(mItem.mDiscIndex, mItem.mSectionIndex, mItem.mOptionIndex,
i));
}

mSpinner.setAdapter(adapter);
mSpinner.setSelection(patches.getSelectedChoice(mItem.mDiscIndex, mItem.mSectionIndex,
mItem.mOptionIndex));
mSpinner.setOnItemSelectedListener(this);
mChoiceDropdown.setAdapter(adapter);
mChoiceDropdown.setText(adapter.getItem(
patches.getSelectedChoice(mItem.mDiscIndex, mItem.mSectionIndex, mItem.mOptionIndex)),
false);
mChoiceDropdown.setOnItemClickListener(this);
}
}

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
mPatches.setSelectedChoice(mItem.mDiscIndex, mItem.mSectionIndex, mItem.mOptionIndex, position);
}

@Override
public void onNothingSelected(AdapterView<?> parent)
{
}
}

0 comments on commit 7743afd

Please sign in to comment.