From 85b30f198b82e963d4d19fcaaa8ee06b6ca28c58 Mon Sep 17 00:00:00 2001 From: Charles Lombardo Date: Wed, 1 Mar 2023 17:13:01 -0500 Subject: [PATCH 1/5] Android: Convert Skylander to Kotlin --- .../activities/EmulationActivity.java | 6 +-- .../features/skylanders/model/Skylander.java | 37 ------------------- .../features/skylanders/model/Skylander.kt | 15 ++++++++ 3 files changed, 18 insertions(+), 40 deletions(-) delete mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/model/Skylander.java create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/model/Skylander.kt diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java index bede7f3818..808adbff26 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java @@ -406,7 +406,7 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP outState.putBoolean(EXTRA_MENU_TOAST_SHOWN, mMenuToastShown); outState.putInt(EXTRA_SKYLANDER_SLOT, mSkylanderSlot); outState.putInt(EXTRA_SKYLANDER_ID, mSkylanderData.getId()); - outState.putInt(EXTRA_SKYLANDER_VAR, mSkylanderData.getVar()); + outState.putInt(EXTRA_SKYLANDER_VAR, mSkylanderData.getVariant()); outState.putString(EXTRA_SKYLANDER_NAME, mSkylanderData.getName()); super.onSaveInstanceState(outState); } @@ -546,10 +546,10 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP } else if (requestCode == REQUEST_CREATE_SKYLANDER) { - if (!(mSkylanderData.getId() == -1) && !(mSkylanderData.getVar() == -1)) + if (!(mSkylanderData.getId() == -1) && !(mSkylanderData.getVariant() == -1)) { Pair slot = SkylanderConfig.createSkylander(mSkylanderData.getId(), - mSkylanderData.getVar(), + mSkylanderData.getVariant(), result.getData().toString(), sSkylanderSlots.get(mSkylanderSlot).getPortalSlot()); clearSkylander(mSkylanderSlot); sSkylanderSlots.get(mSkylanderSlot).setPortalSlot(slot.first); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/model/Skylander.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/model/Skylander.java deleted file mode 100644 index b4c96a1a13..0000000000 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/model/Skylander.java +++ /dev/null @@ -1,37 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later - -package org.dolphinemu.dolphinemu.features.skylanders.model; - -public class Skylander -{ - private SkylanderPair mPair; - private String mName; - - public final static Skylander BLANK_SKYLANDER = new Skylander(-1, -1, "Blank"); - - public Skylander(int id, int var, String name) - { - mPair = new SkylanderPair(id, var); - mName = name; - } - - public String getName() - { - return mName; - } - - public void setName(String name) - { - this.mName = name; - } - - public int getId() - { - return mPair.getId(); - } - - public int getVar() - { - return mPair.getVar(); - } -} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/model/Skylander.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/model/Skylander.kt new file mode 100644 index 0000000000..021607baeb --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/model/Skylander.kt @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +package org.dolphinemu.dolphinemu.features.skylanders.model + +class Skylander(id: Int, variant: Int, var name: String) { + private val pair: SkylanderPair = SkylanderPair(id, variant) + + val id: Int get() = pair.id + val variant: Int get() = pair.variant + + companion object { + @JvmField + val BLANK_SKYLANDER = Skylander(-1, -1, "Blank") + } +} From 71e82d76b5da25e3dbb7084688ddbb2fcfdc6c57 Mon Sep 17 00:00:00 2001 From: Charles Lombardo Date: Wed, 1 Mar 2023 17:13:42 -0500 Subject: [PATCH 2/5] Android: Convert SkylanderPair to Kotlin --- .../skylanders/model/SkylanderPair.java | 54 ------------------- .../skylanders/model/SkylanderPair.kt | 15 ++++++ 2 files changed, 15 insertions(+), 54 deletions(-) delete mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/model/SkylanderPair.java create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/model/SkylanderPair.kt diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/model/SkylanderPair.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/model/SkylanderPair.java deleted file mode 100644 index e4fca37afd..0000000000 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/model/SkylanderPair.java +++ /dev/null @@ -1,54 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later - -package org.dolphinemu.dolphinemu.features.skylanders.model; - -import androidx.annotation.Nullable; - -public class SkylanderPair -{ - private int mId; - private int mVar; - - public SkylanderPair(int id, int var) - { - mId = id; - mVar = var; - } - - public int getId() - { - return mId; - } - - public void setId(int mId) - { - this.mId = mId; - } - - public int getVar() - { - return mVar; - } - - public void setVar(int mVar) - { - this.mVar = mVar; - } - - @Override public int hashCode() - { - return (mId << 16) + mVar; - } - - @Override public boolean equals(@Nullable Object obj) - { - if (!(obj instanceof SkylanderPair)) - return false; - SkylanderPair pairObj = (SkylanderPair) obj; - if (pairObj.getId() != mId) - return false; - if (pairObj.getVar() != mVar) - return false; - return true; - } -} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/model/SkylanderPair.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/model/SkylanderPair.kt new file mode 100644 index 0000000000..6b20567bbb --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/model/SkylanderPair.kt @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +package org.dolphinemu.dolphinemu.features.skylanders.model + +class SkylanderPair(var id: Int, var variant: Int) { + override fun hashCode(): Int { + return (id shl 16) + variant + } + + override fun equals(other: Any?): Boolean { + if (other !is SkylanderPair) return false + if (other.id != id) return false + return other.variant == variant + } +} From bbc1951afbc3f6be875a1ab8fcccd246207a3740 Mon Sep 17 00:00:00 2001 From: Charles Lombardo Date: Wed, 1 Mar 2023 17:13:58 -0500 Subject: [PATCH 3/5] Android: Convert SkylanderConfig to Kotlin --- .../features/skylanders/SkylanderConfig.java | 32 ------------------- .../features/skylanders/SkylanderConfig.kt | 28 ++++++++++++++++ 2 files changed, 28 insertions(+), 32 deletions(-) delete mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/SkylanderConfig.java create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/SkylanderConfig.kt diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/SkylanderConfig.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/SkylanderConfig.java deleted file mode 100644 index 285e017a8f..0000000000 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/SkylanderConfig.java +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later - -package org.dolphinemu.dolphinemu.features.skylanders; - -import android.util.Pair; - -import org.dolphinemu.dolphinemu.features.skylanders.model.SkylanderPair; - -import java.util.Map; - -public class SkylanderConfig -{ - public static final Map LIST_SKYLANDERS; - public static final Map REVERSE_LIST_SKYLANDERS; - - static - { - LIST_SKYLANDERS = getSkylanderMap(); - REVERSE_LIST_SKYLANDERS = getInverseSkylanderMap(); - } - - public static native Map getSkylanderMap(); - - public static native Map getInverseSkylanderMap(); - - public static native boolean removeSkylander(int slot); - - public static native Pair loadSkylander(int slot, String fileName); - - public static native Pair createSkylander(int id, int var, String fileName, - int slot); -} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/SkylanderConfig.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/SkylanderConfig.kt new file mode 100644 index 0000000000..b8cf8a4759 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/SkylanderConfig.kt @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +package org.dolphinemu.dolphinemu.features.skylanders + +import android.util.Pair +import org.dolphinemu.dolphinemu.features.skylanders.model.SkylanderPair + +object SkylanderConfig { + var LIST_SKYLANDERS: Map = getSkylanderMap() + var REVERSE_LIST_SKYLANDERS: Map = getInverseSkylanderMap() + + private external fun getSkylanderMap(): Map + private external fun getInverseSkylanderMap(): Map + + @JvmStatic + external fun removeSkylander(slot: Int): Boolean + + @JvmStatic + external fun loadSkylander(slot: Int, fileName: String?): Pair? + + @JvmStatic + external fun createSkylander( + id: Int, + variant: Int, + fileName: String, + slot: Int + ): Pair +} From 36f1315513e9e12f81dc219882c3b15bc421797f Mon Sep 17 00:00:00 2001 From: Charles Lombardo Date: Wed, 1 Mar 2023 17:14:52 -0500 Subject: [PATCH 4/5] Android: Convert SkylanderSlot to Kotlin --- .../features/skylanders/ui/SkylanderSlot.java | 42 ------------------- .../features/skylanders/ui/SkylanderSlot.kt | 7 ++++ 2 files changed, 7 insertions(+), 42 deletions(-) delete mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/ui/SkylanderSlot.java create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/ui/SkylanderSlot.kt diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/ui/SkylanderSlot.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/ui/SkylanderSlot.java deleted file mode 100644 index 857c077106..0000000000 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/ui/SkylanderSlot.java +++ /dev/null @@ -1,42 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later - -package org.dolphinemu.dolphinemu.features.skylanders.ui; - -public class SkylanderSlot -{ - private String mLabel; - private final int mSlotNum; - private int mPortalSlot; - - public SkylanderSlot(String label, int slot) - { - mLabel = label; - mSlotNum = slot; - mPortalSlot = -1; - } - - public String getLabel() - { - return mLabel; - } - - public void setLabel(String label) - { - mLabel = label; - } - - public int getSlotNum() - { - return mSlotNum; - } - - public int getPortalSlot() - { - return mPortalSlot; - } - - public void setPortalSlot(int mPortalSlot) - { - this.mPortalSlot = mPortalSlot; - } -} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/ui/SkylanderSlot.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/ui/SkylanderSlot.kt new file mode 100644 index 0000000000..968ecd082e --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/ui/SkylanderSlot.kt @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +package org.dolphinemu.dolphinemu.features.skylanders.ui + +class SkylanderSlot(var label: String, val slotNum: Int) { + var portalSlot: Int = -1 +} From 7efb672be6c91a41da8405e7e6d0677147a005e9 Mon Sep 17 00:00:00 2001 From: Charles Lombardo Date: Wed, 1 Mar 2023 17:15:41 -0500 Subject: [PATCH 5/5] Android: Convert SkylanderSlotAdapter to Kotlin --- .../skylanders/ui/SkylanderSlotAdapter.java | 160 ------------------ .../skylanders/ui/SkylanderSlotAdapter.kt | 132 +++++++++++++++ 2 files changed, 132 insertions(+), 160 deletions(-) delete mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/ui/SkylanderSlotAdapter.java create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/skylanders/ui/SkylanderSlotAdapter.kt 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()) + } +}