Android: Convert SwitchSettingViewHolder to Kotlin
This commit is contained in:
parent
49e480ee53
commit
92f39a98d6
|
@ -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<String> 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;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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()
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue