diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SwitchSettingViewHolder.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SwitchSettingViewHolder.java deleted file mode 100644 index 398711bea2..0000000000 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SwitchSettingViewHolder.java +++ /dev/null @@ -1,106 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later - -package org.dolphinemu.dolphinemu.features.settings.ui.viewholder; - -import android.view.View; - -import androidx.annotation.Nullable; - -import org.dolphinemu.dolphinemu.databinding.ListItemSettingSwitchBinding; -import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting; -import org.dolphinemu.dolphinemu.features.settings.model.view.SwitchSetting; -import org.dolphinemu.dolphinemu.features.settings.model.view.SettingsItem; -import org.dolphinemu.dolphinemu.features.settings.ui.SettingsAdapter; -import org.dolphinemu.dolphinemu.utils.DirectoryInitialization; - -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; - -public final class SwitchSettingViewHolder extends SettingViewHolder -{ - private SwitchSetting mItem; - private boolean iplExists = false; - - private final ListItemSettingSwitchBinding mBinding; - - public SwitchSettingViewHolder(ListItemSettingSwitchBinding binding, SettingsAdapter adapter) - { - super(binding.getRoot(), adapter); - mBinding = binding; - } - - @Override - public void bind(SettingsItem item) - { - mItem = (SwitchSetting) item; - - mBinding.textSettingName.setText(item.getName()); - mBinding.textSettingDescription.setText(item.getDescription()); - - mBinding.settingSwitch.setChecked(mItem.isChecked()); - mBinding.settingSwitch.setEnabled(mItem.isEditable()); - - // Check for IPL to make sure user can skip. - if (mItem.getSetting() == BooleanSetting.MAIN_SKIP_IPL) - { - ArrayList iplDirs = new ArrayList<>(Arrays.asList("USA", "JAP", "EUR")); - for (String dir : iplDirs) - { - File iplFile = new File(DirectoryInitialization.getUserDirectory(), - File.separator + "GC" + File.separator + dir + File.separator + "IPL.bin"); - if (iplFile.exists()) - { - iplExists = true; - break; - } - } - - mBinding.settingSwitch.setEnabled(iplExists || !mItem.isChecked()); - } - - mBinding.settingSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> - { - // If a user has skip IPL disabled previously and deleted their IPL file, we need to allow - // them to skip it or else their game will appear broken. However, once this is enabled, we - // need to disable the option again to prevent the same issue from occurring. - if (mItem.getSetting() == BooleanSetting.MAIN_SKIP_IPL && !iplExists && isChecked) - { - mBinding.settingSwitch.setEnabled(false); - } - - getAdapter().onBooleanClick(mItem, mBinding.settingSwitch.isChecked()); - - setStyle(mBinding.textSettingName, mItem); - }); - - setStyle(mBinding.textSettingName, mItem); - } - - @Override - public void onClick(View clicked) - { - if (!mItem.isEditable()) - { - showNotRuntimeEditableError(); - return; - } - - if (mItem.getSetting() == BooleanSetting.MAIN_SKIP_IPL && !iplExists) - { - if (mItem.isChecked()) - { - showIplNotAvailableError(); - return; - } - } - - mBinding.settingSwitch.toggle(); - } - - @Nullable @Override - protected SettingsItem getItem() - { - return mItem; - } -} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SwitchSettingViewHolder.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SwitchSettingViewHolder.kt new file mode 100644 index 0000000000..fc575ead48 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SwitchSettingViewHolder.kt @@ -0,0 +1,82 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +package org.dolphinemu.dolphinemu.features.settings.ui.viewholder + +import android.view.View +import android.widget.CompoundButton +import org.dolphinemu.dolphinemu.databinding.ListItemSettingSwitchBinding +import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting +import org.dolphinemu.dolphinemu.features.settings.model.view.SettingsItem +import org.dolphinemu.dolphinemu.features.settings.model.view.SwitchSetting +import org.dolphinemu.dolphinemu.features.settings.ui.SettingsAdapter +import org.dolphinemu.dolphinemu.utils.DirectoryInitialization +import java.io.File +import java.util.* + +class SwitchSettingViewHolder( + private val binding: ListItemSettingSwitchBinding, + adapter: SettingsAdapter +) : SettingViewHolder(binding.root, adapter) { + private lateinit var setting: SwitchSetting + + override val item: SettingsItem + get() = setting + + private var iplExists = false + + override fun bind(item: SettingsItem) { + setting = item as SwitchSetting + + binding.textSettingName.text = item.name + binding.textSettingDescription.text = item.description + + binding.settingSwitch.isChecked = setting.isChecked + binding.settingSwitch.isEnabled = setting.isEditable + + // Check for IPL to make sure user can skip. + if (setting.setting === BooleanSetting.MAIN_SKIP_IPL) { + val iplDirs = ArrayList(listOf("USA", "JAP", "EUR")) + for (dir in iplDirs) { + val iplFile = File( + DirectoryInitialization.getUserDirectory(), + File.separator + "GC" + File.separator + dir + File.separator + "IPL.bin" + ) + if (iplFile.exists()) { + iplExists = true + break + } + } + binding.settingSwitch.isEnabled = iplExists || !setting.isChecked + } + + binding.settingSwitch.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean -> + // If a user has skip IPL disabled previously and deleted their IPL file, we need to allow + // them to skip it or else their game will appear broken. However, once this is enabled, we + // need to disable the option again to prevent the same issue from occurring. + if (setting.setting === BooleanSetting.MAIN_SKIP_IPL && !iplExists && isChecked) { + binding.settingSwitch.isEnabled = false + } + + adapter.onBooleanClick(setting, binding.settingSwitch.isChecked) + + setStyle(binding.textSettingName, setting) + } + setStyle(binding.textSettingName, setting) + } + + override fun onClick(clicked: View) { + if (!setting.isEditable) { + showNotRuntimeEditableError() + return + } + + if (setting.setting === BooleanSetting.MAIN_SKIP_IPL && !iplExists) { + if (setting.isChecked) { + showIplNotAvailableError() + return + } + } + + binding.settingSwitch.toggle() + } +}