diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/ui/SkylanderSlotAdapter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/ui/SkylanderSlotAdapter.java deleted file mode 100644 index 65171ab112..0000000000 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/ui/SkylanderSlotAdapter.java +++ /dev/null @@ -1,160 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later - -package org.dolphinemu.dolphinemu.features.skylanders.ui; - -import android.content.Intent; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; -import androidx.recyclerview.widget.RecyclerView; - -import com.google.android.material.dialog.MaterialAlertDialogBuilder; - -import org.dolphinemu.dolphinemu.R; -import org.dolphinemu.dolphinemu.activities.EmulationActivity; -import org.dolphinemu.dolphinemu.databinding.DialogCreateSkylanderBinding; -import org.dolphinemu.dolphinemu.databinding.ListItemSkylanderSlotBinding; -import org.dolphinemu.dolphinemu.features.skylanders.SkylanderConfig; -import org.dolphinemu.dolphinemu.features.skylanders.model.SkylanderPair; - -import java.util.ArrayList; -import java.util.List; - -public class SkylanderSlotAdapter extends RecyclerView.Adapter - implements AdapterView.OnItemClickListener -{ - public static class ViewHolder extends RecyclerView.ViewHolder - { - public ListItemSkylanderSlotBinding binding; - - public ViewHolder(@NonNull ListItemSkylanderSlotBinding binding) - { - super(binding.getRoot()); - this.binding = binding; - } - } - - private final List mSlots; - private final EmulationActivity mActivity; - - private DialogCreateSkylanderBinding mBinding; - - public SkylanderSlotAdapter(List slots, EmulationActivity context) - { - mSlots = slots; - mActivity = context; - } - - @NonNull - @Override - public SkylanderSlotAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) - { - LayoutInflater inflater = LayoutInflater.from(parent.getContext()); - ListItemSkylanderSlotBinding binding = - ListItemSkylanderSlotBinding.inflate(inflater, parent, false); - return new ViewHolder(binding); - } - - @Override - public void onBindViewHolder(@NonNull ViewHolder holder, int position) - { - SkylanderSlot slot = mSlots.get(position); - holder.binding.textSkylanderName.setText(slot.getLabel()); - - holder.binding.buttonClearSkylander.setOnClickListener(v -> - { - SkylanderConfig.removeSkylander(slot.getPortalSlot()); - mActivity.clearSkylander(slot.getSlotNum()); - }); - - holder.binding.buttonLoadSkylander.setOnClickListener(v -> - { - Intent loadSkylander = new Intent(Intent.ACTION_OPEN_DOCUMENT); - loadSkylander.addCategory(Intent.CATEGORY_OPENABLE); - loadSkylander.setType("*/*"); - mActivity.setSkylanderData(0, 0, "", position); - mActivity.startActivityForResult(loadSkylander, EmulationActivity.REQUEST_SKYLANDER_FILE); - }); - - LayoutInflater inflater = LayoutInflater.from(mActivity); - mBinding = DialogCreateSkylanderBinding.inflate(inflater); - - List skylanderNames = new ArrayList<>(SkylanderConfig.REVERSE_LIST_SKYLANDERS.keySet()); - skylanderNames.sort(String::compareToIgnoreCase); - - mBinding.skylanderDropdown.setAdapter( - new ArrayAdapter<>(mActivity, R.layout.support_simple_spinner_dropdown_item, - skylanderNames)); - mBinding.skylanderDropdown.setOnItemClickListener(this); - - holder.binding.buttonCreateSkylander.setOnClickListener(v -> - { - if (mBinding.getRoot().getParent() != null) - { - ((ViewGroup) mBinding.getRoot().getParent()).removeAllViews(); - } - AlertDialog createDialog = new MaterialAlertDialogBuilder(mActivity) - .setTitle(R.string.create_skylander_title) - .setView(mBinding.getRoot()) - .setPositiveButton(R.string.create_skylander, null) - .setNegativeButton(R.string.cancel, null) - .show(); - createDialog.getButton(android.app.AlertDialog.BUTTON_POSITIVE).setOnClickListener( - v1 -> - { - if (!mBinding.skylanderId.getText().toString().isBlank() && - !mBinding.skylanderVar.getText().toString().isBlank()) - { - Intent createSkylander = new Intent(Intent.ACTION_CREATE_DOCUMENT); - createSkylander.addCategory(Intent.CATEGORY_OPENABLE); - createSkylander.setType("*/*"); - int id = Integer.parseInt(mBinding.skylanderId.getText().toString()); - int var = Integer.parseInt(mBinding.skylanderVar.getText().toString()); - String name = SkylanderConfig.LIST_SKYLANDERS.get(new SkylanderPair(id, var)); - if (name != null) - { - createSkylander.putExtra(Intent.EXTRA_TITLE, - name + ".sky"); - mActivity.setSkylanderData(id, var, name, position); - } - else - { - createSkylander.putExtra(Intent.EXTRA_TITLE, - "Unknown(ID" + id + "Var" + var + ").sky"); - mActivity.setSkylanderData(id, var, "Unknown", position); - } - mActivity.startActivityForResult(createSkylander, - EmulationActivity.REQUEST_CREATE_SKYLANDER); - createDialog.dismiss(); - } - else - { - Toast.makeText(mActivity, R.string.invalid_skylander, - Toast.LENGTH_SHORT).show(); - } - }); - }); - - } - - @Override - public int getItemCount() - { - return mSlots.size(); - } - - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) - { - SkylanderPair skylanderIdVar = - SkylanderConfig.REVERSE_LIST_SKYLANDERS.get(parent.getItemAtPosition(position)); - mBinding.skylanderId.setText(String.valueOf(skylanderIdVar.getId())); - mBinding.skylanderVar.setText(String.valueOf(skylanderIdVar.getVar())); - } -} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/ui/SkylanderSlotAdapter.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/ui/SkylanderSlotAdapter.kt new file mode 100644 index 0000000000..bc23ca3f37 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/ui/SkylanderSlotAdapter.kt @@ -0,0 +1,132 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +package org.dolphinemu.dolphinemu.features.skylanders.ui + +import android.app.AlertDialog +import android.content.Intent +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.AdapterView +import android.widget.AdapterView.OnItemClickListener +import android.widget.ArrayAdapter +import android.widget.Toast +import androidx.recyclerview.widget.RecyclerView +import com.google.android.material.dialog.MaterialAlertDialogBuilder +import org.dolphinemu.dolphinemu.R +import org.dolphinemu.dolphinemu.activities.EmulationActivity +import org.dolphinemu.dolphinemu.databinding.DialogCreateSkylanderBinding +import org.dolphinemu.dolphinemu.databinding.ListItemSkylanderSlotBinding +import org.dolphinemu.dolphinemu.features.skylanders.SkylanderConfig +import org.dolphinemu.dolphinemu.features.skylanders.SkylanderConfig.removeSkylander +import org.dolphinemu.dolphinemu.features.skylanders.model.SkylanderPair + +class SkylanderSlotAdapter( + private val slots: List, + private val activity: EmulationActivity +) : RecyclerView.Adapter(), OnItemClickListener { + class ViewHolder(var binding: ListItemSkylanderSlotBinding) : + RecyclerView.ViewHolder(binding.getRoot()) + + private lateinit var binding: DialogCreateSkylanderBinding + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val inflater = LayoutInflater.from(parent.context) + val binding = ListItemSkylanderSlotBinding.inflate(inflater, parent, false) + return ViewHolder(binding) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val slot = slots[position] + holder.binding.textSkylanderName.text = slot.label + + holder.binding.buttonClearSkylander.setOnClickListener { + removeSkylander(slot.portalSlot) + activity.clearSkylander(slot.slotNum) + } + + holder.binding.buttonLoadSkylander.setOnClickListener { + val loadSkylander = Intent(Intent.ACTION_OPEN_DOCUMENT) + loadSkylander.addCategory(Intent.CATEGORY_OPENABLE) + loadSkylander.type = "*/*" + activity.setSkylanderData(0, 0, "", position) + activity.startActivityForResult( + loadSkylander, + EmulationActivity.REQUEST_SKYLANDER_FILE + ) + } + + val inflater = LayoutInflater.from(activity) + binding = DialogCreateSkylanderBinding.inflate(inflater) + + val nameList = SkylanderConfig.REVERSE_LIST_SKYLANDERS.keys.toMutableList() + nameList.sort() + val skylanderNames: ArrayList = ArrayList(nameList) + + binding.skylanderDropdown.setAdapter( + ArrayAdapter( + activity, R.layout.support_simple_spinner_dropdown_item, + skylanderNames + ) + ) + binding.skylanderDropdown.onItemClickListener = this + + holder.binding.buttonCreateSkylander.setOnClickListener { + if (binding.getRoot().parent != null) { + (binding.getRoot().parent as ViewGroup).removeAllViews() + } + val createDialog = MaterialAlertDialogBuilder(activity) + .setTitle(R.string.create_skylander_title) + .setView(binding.getRoot()) + .setPositiveButton(R.string.create_skylander, null) + .setNegativeButton(R.string.cancel, null) + .show() + createDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener { + if (binding.skylanderId.text.toString().isNotBlank() && + binding.skylanderVar.text.toString().isNotBlank() + ) { + val createSkylander = Intent(Intent.ACTION_CREATE_DOCUMENT) + createSkylander.addCategory(Intent.CATEGORY_OPENABLE) + createSkylander.type = "*/*" + val id = binding.skylanderId.text.toString().toInt() + val variant = binding.skylanderVar.text.toString().toInt() + val name = SkylanderConfig.LIST_SKYLANDERS[SkylanderPair(id, variant)] + if (name != null) { + createSkylander.putExtra( + Intent.EXTRA_TITLE, + "$name.sky" + ) + activity.setSkylanderData(id, variant, name, position) + } else { + createSkylander.putExtra( + Intent.EXTRA_TITLE, + "Unknown(ID: " + id + "Variant: " + variant + ").sky" + ) + activity.setSkylanderData(id, variant, "Unknown", position) + } + activity.startActivityForResult( + createSkylander, + EmulationActivity.REQUEST_CREATE_SKYLANDER + ) + createDialog.dismiss() + } else { + Toast.makeText( + activity, R.string.invalid_skylander, + Toast.LENGTH_SHORT + ).show() + } + } + } + } + + override fun getItemCount(): Int { + return slots.size + } + + override fun onItemClick(parent: AdapterView<*>, view: View, position: Int, id: Long) { + val skylanderIdVar = + SkylanderConfig.REVERSE_LIST_SKYLANDERS[parent.getItemAtPosition(position)] + binding.skylanderId.setText(skylanderIdVar!!.id.toString()) + binding.skylanderVar.setText(skylanderIdVar.variant.toString()) + } +}