mirror of
https://github.com/WinampDesktop/winamp.git
synced 2025-05-01 12:55:42 -04:00
Android: Support more than one controller
This commit is contained in:
parent
1839bfab3b
commit
c8a029c5cb
@ -43,9 +43,9 @@
|
|||||||
android:value="com.github.stenzek.duckstation.MainActivity" />
|
android:value="com.github.stenzek.duckstation.MainActivity" />
|
||||||
</activity>
|
</activity>
|
||||||
<activity
|
<activity
|
||||||
android:name=".ControllerMappingActivity"
|
android:name=".ControllerSettingsActivity"
|
||||||
android:configChanges="orientation|keyboardHidden|screenSize"
|
android:configChanges="orientation|keyboardHidden|screenSize"
|
||||||
android:label="@string/title_activity_settings"
|
android:label="@string/controller_mapping_activity_title"
|
||||||
android:parentActivityName=".MainActivity">
|
android:parentActivityName=".MainActivity">
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="android.support.PARENT_ACTIVITY"
|
android:name="android.support.PARENT_ACTIVITY"
|
||||||
|
@ -16,11 +16,12 @@ import androidx.appcompat.app.ActionBar;
|
|||||||
import androidx.appcompat.app.AlertDialog;
|
import androidx.appcompat.app.AlertDialog;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.fragment.app.FragmentActivity;
|
import androidx.preference.ListPreference;
|
||||||
import androidx.fragment.app.FragmentFactory;
|
import androidx.preference.PreferenceCategory;
|
||||||
import androidx.preference.PreferenceFragmentCompat;
|
import androidx.preference.PreferenceFragmentCompat;
|
||||||
import androidx.preference.PreferenceManager;
|
import androidx.preference.PreferenceManager;
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
|
import androidx.preference.SwitchPreferenceCompat;
|
||||||
import androidx.viewpager2.adapter.FragmentStateAdapter;
|
import androidx.viewpager2.adapter.FragmentStateAdapter;
|
||||||
import androidx.viewpager2.widget.ViewPager2;
|
import androidx.viewpager2.widget.ViewPager2;
|
||||||
|
|
||||||
@ -29,7 +30,7 @@ import com.google.android.material.tabs.TabLayoutMediator;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class ControllerMappingActivity extends AppCompatActivity {
|
public class ControllerSettingsActivity extends AppCompatActivity {
|
||||||
|
|
||||||
private static final int NUM_CONTROLLER_PORTS = 2;
|
private static final int NUM_CONTROLLER_PORTS = 2;
|
||||||
|
|
||||||
@ -109,7 +110,7 @@ public class ControllerMappingActivity extends AppCompatActivity {
|
|||||||
doLoadProfile(profileNames[choice]);
|
doLoadProfile(profileNames[choice]);
|
||||||
dialog.dismiss();
|
dialog.dismiss();
|
||||||
})
|
})
|
||||||
.setNegativeButton("Cancel", ((dialog, which) -> dialog.dismiss()))
|
.setNegativeButton(R.string.controller_mapping_activity_cancel, ((dialog, which) -> dialog.dismiss()))
|
||||||
.create()
|
.create()
|
||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
@ -140,7 +141,7 @@ public class ControllerMappingActivity extends AppCompatActivity {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Toast.makeText(ControllerMappingActivity.this, String.format(ControllerMappingActivity.this.getString(R.string.controller_mapping_activity_input_profile_saved), name),
|
Toast.makeText(ControllerSettingsActivity.this, String.format(ControllerSettingsActivity.this.getString(R.string.controller_mapping_activity_input_profile_saved), name),
|
||||||
Toast.LENGTH_LONG).show();
|
Toast.LENGTH_LONG).show();
|
||||||
});
|
});
|
||||||
builder.setNegativeButton(R.string.controller_mapping_activity_cancel, (dialog, which) -> dialog.dismiss());
|
builder.setNegativeButton(R.string.controller_mapping_activity_cancel, (dialog, which) -> dialog.dismiss());
|
||||||
@ -159,57 +160,150 @@ public class ControllerMappingActivity extends AppCompatActivity {
|
|||||||
pref.updateValue();
|
pref.updateValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class ControllerPortFragment extends PreferenceFragmentCompat {
|
public static class SettingsFragment extends PreferenceFragmentCompat {
|
||||||
private ControllerMappingActivity activity;
|
@Override
|
||||||
private int controllerIndex;
|
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
||||||
|
setPreferencesFromResource(R.xml.controllers_preferences, rootKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public ControllerPortFragment(ControllerMappingActivity activity, int controllerIndex) {
|
public static class ControllerPortFragment extends PreferenceFragmentCompat {
|
||||||
|
private ControllerSettingsActivity activity;
|
||||||
|
private int controllerIndex;
|
||||||
|
private PreferenceCategory mButtonsCategory;
|
||||||
|
private PreferenceCategory mAxisCategory;
|
||||||
|
private PreferenceCategory mSettingsCategory;
|
||||||
|
|
||||||
|
public ControllerPortFragment(ControllerSettingsActivity activity, int controllerIndex) {
|
||||||
this.activity = activity;
|
this.activity = activity;
|
||||||
this.controllerIndex = controllerIndex;
|
this.controllerIndex = controllerIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
||||||
|
final PreferenceScreen ps = getPreferenceManager().createPreferenceScreen(getContext());
|
||||||
|
setPreferenceScreen(ps);
|
||||||
|
createPreferences();
|
||||||
|
}
|
||||||
|
|
||||||
|
private SwitchPreferenceCompat createTogglePreference(String key, int title, int summary, boolean defaultValue) {
|
||||||
|
final SwitchPreferenceCompat pref = new SwitchPreferenceCompat(getContext());
|
||||||
|
pref.setKey(key);
|
||||||
|
pref.setTitle(title);
|
||||||
|
pref.setSummary(summary);
|
||||||
|
pref.setIconSpaceReserved(false);
|
||||||
|
pref.setDefaultValue(defaultValue);
|
||||||
|
return pref;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createPreferences() {
|
||||||
|
final PreferenceScreen ps = getPreferenceScreen();
|
||||||
final SharedPreferences sp = getPreferenceManager().getSharedPreferences();
|
final SharedPreferences sp = getPreferenceManager().getSharedPreferences();
|
||||||
final String defaultControllerType = controllerIndex == 0 ? "DigitalController" : "None";
|
final String defaultControllerType = controllerIndex == 0 ? "DigitalController" : "None";
|
||||||
final String controllerType = sp.getString(String.format("Controller%d/Type", controllerIndex), defaultControllerType);
|
final String controllerTypeKey = String.format("Controller%d/Type", controllerIndex);
|
||||||
|
final String controllerType = sp.getString(controllerTypeKey, defaultControllerType);
|
||||||
|
final String[] controllerButtons = AndroidHostInterface.getControllerButtonNames(controllerType);
|
||||||
|
final String[] axisButtons = AndroidHostInterface.getControllerAxisNames(controllerType);
|
||||||
|
final int vibrationMotors = AndroidHostInterface.getControllerVibrationMotorCount(controllerType);
|
||||||
|
|
||||||
|
final ListPreference typePreference = new ListPreference(getContext());
|
||||||
|
typePreference.setEntries(R.array.settings_controller_type_entries);
|
||||||
|
typePreference.setEntryValues(R.array.settings_controller_type_values);
|
||||||
|
typePreference.setKey(controllerTypeKey);
|
||||||
|
typePreference.setTitle(R.string.settings_controller_type);
|
||||||
|
typePreference.setSummaryProvider(ListPreference.SimpleSummaryProvider.getInstance());
|
||||||
|
typePreference.setIconSpaceReserved(false);
|
||||||
|
typePreference.setOnPreferenceChangeListener((pref, value) -> {
|
||||||
|
removePreferences();
|
||||||
|
createPreferences(value.toString());
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
ps.addPreference(typePreference);
|
||||||
|
|
||||||
|
mButtonsCategory = new PreferenceCategory(getContext());
|
||||||
|
mButtonsCategory.setTitle(getContext().getString(R.string.controller_settings_category_button_bindings));
|
||||||
|
mButtonsCategory.setIconSpaceReserved(false);
|
||||||
|
ps.addPreference(mButtonsCategory);
|
||||||
|
|
||||||
|
mAxisCategory = new PreferenceCategory(getContext());
|
||||||
|
mAxisCategory.setTitle(getContext().getString(R.string.controller_settings_category_axis_bindings));
|
||||||
|
mAxisCategory.setIconSpaceReserved(false);
|
||||||
|
ps.addPreference(mAxisCategory);
|
||||||
|
|
||||||
|
mSettingsCategory = new PreferenceCategory(getContext());
|
||||||
|
mSettingsCategory.setTitle(getContext().getString(R.string.controller_settings_category_settings));
|
||||||
|
mSettingsCategory.setIconSpaceReserved(false);
|
||||||
|
ps.addPreference(mSettingsCategory);
|
||||||
|
|
||||||
|
createPreferences(controllerType);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createPreferences(String controllerType) {
|
||||||
|
final PreferenceScreen ps = getPreferenceScreen();
|
||||||
|
final SharedPreferences sp = getPreferenceManager().getSharedPreferences();
|
||||||
final String[] controllerButtons = AndroidHostInterface.getControllerButtonNames(controllerType);
|
final String[] controllerButtons = AndroidHostInterface.getControllerButtonNames(controllerType);
|
||||||
final String[] axisButtons = AndroidHostInterface.getControllerAxisNames(controllerType);
|
final String[] axisButtons = AndroidHostInterface.getControllerAxisNames(controllerType);
|
||||||
final int vibrationMotors = AndroidHostInterface.getControllerVibrationMotorCount(controllerType);
|
final int vibrationMotors = AndroidHostInterface.getControllerVibrationMotorCount(controllerType);
|
||||||
|
|
||||||
final PreferenceScreen ps = getPreferenceManager().createPreferenceScreen(getContext());
|
|
||||||
if (controllerButtons != null) {
|
if (controllerButtons != null) {
|
||||||
for (String buttonName : controllerButtons) {
|
for (String buttonName : controllerButtons) {
|
||||||
final ControllerBindingPreference cbp = new ControllerBindingPreference(getContext(), null);
|
final ControllerBindingPreference cbp = new ControllerBindingPreference(getContext(), null);
|
||||||
cbp.initButton(controllerIndex, buttonName);
|
cbp.initButton(controllerIndex, buttonName);
|
||||||
ps.addPreference(cbp);
|
mButtonsCategory.addPreference(cbp);
|
||||||
activity.mPreferences.add(cbp);
|
activity.mPreferences.add(cbp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (axisButtons != null) {
|
if (axisButtons != null) {
|
||||||
for (String axisName : axisButtons) {
|
for (String axisName : axisButtons) {
|
||||||
final ControllerBindingPreference cbp = new ControllerBindingPreference(getContext(), null);
|
final ControllerBindingPreference cbp = new ControllerBindingPreference(getContext(), null);
|
||||||
cbp.initAxis(controllerIndex, axisName);
|
cbp.initAxis(controllerIndex, axisName);
|
||||||
ps.addPreference(cbp);
|
mAxisCategory.addPreference(cbp);
|
||||||
activity.mPreferences.add(cbp);
|
activity.mPreferences.add(cbp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vibrationMotors > 0) {
|
if (vibrationMotors > 0) {
|
||||||
final ControllerBindingPreference cbp = new ControllerBindingPreference(getContext(), null);
|
final ControllerBindingPreference cbp = new ControllerBindingPreference(getContext(), null);
|
||||||
cbp.initVibration(controllerIndex);
|
cbp.initVibration(controllerIndex);
|
||||||
ps.addPreference(cbp);
|
mSettingsCategory.addPreference(cbp);
|
||||||
activity.mPreferences.add(cbp);
|
activity.mPreferences.add(cbp);
|
||||||
}
|
}
|
||||||
|
|
||||||
setPreferenceScreen(ps);
|
if (controllerType.equals("AnalogController")) {
|
||||||
|
mSettingsCategory.addPreference(
|
||||||
|
createTogglePreference(String.format("Controller%d/ForceAnalogOnReset", controllerIndex),
|
||||||
|
R.string.settings_use_analog_sticks_for_dpad, R.string.settings_summary_enable_analog_mode_on_reset, true));
|
||||||
|
|
||||||
|
mSettingsCategory.addPreference(
|
||||||
|
createTogglePreference(String.format("Controller%d/AnalogDPadInDigitalMode", controllerIndex),
|
||||||
|
R.string.settings_enable_analog_mode_on_reset, R.string.settings_summary_use_analog_sticks_for_dpad, true));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void removePreferences() {
|
||||||
|
for (int i = 0; i < mButtonsCategory.getPreferenceCount(); i++) {
|
||||||
|
activity.mPreferences.remove(mButtonsCategory.getPreference(i));
|
||||||
|
}
|
||||||
|
mButtonsCategory.removeAll();
|
||||||
|
|
||||||
|
for (int i = 0; i < mAxisCategory.getPreferenceCount(); i++) {
|
||||||
|
activity.mPreferences.remove(mAxisCategory.getPreference(i));
|
||||||
|
}
|
||||||
|
mAxisCategory.removeAll();
|
||||||
|
|
||||||
|
for (int i = 0; i < mSettingsCategory.getPreferenceCount(); i++) {
|
||||||
|
activity.mPreferences.remove(mSettingsCategory.getPreference(i));
|
||||||
|
}
|
||||||
|
mSettingsCategory.removeAll();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class HotkeyFragment extends PreferenceFragmentCompat {
|
public static class HotkeyFragment extends PreferenceFragmentCompat {
|
||||||
private ControllerMappingActivity activity;
|
private ControllerSettingsActivity activity;
|
||||||
private HotkeyInfo[] mHotkeyInfo;
|
private HotkeyInfo[] mHotkeyInfo;
|
||||||
|
|
||||||
public HotkeyFragment(ControllerMappingActivity activity) {
|
public HotkeyFragment(ControllerSettingsActivity activity) {
|
||||||
this.activity = activity;
|
this.activity = activity;
|
||||||
this.mHotkeyInfo = AndroidHostInterface.getInstance().getHotkeyInfoList();
|
this.mHotkeyInfo = AndroidHostInterface.getInstance().getHotkeyInfoList();
|
||||||
}
|
}
|
||||||
@ -231,56 +325,65 @@ public class ControllerMappingActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static class SettingsCollectionFragment extends Fragment {
|
public static class SettingsCollectionFragment extends Fragment {
|
||||||
private ControllerMappingActivity activity;
|
private ControllerSettingsActivity activity;
|
||||||
private SettingsCollectionAdapter adapter;
|
private SettingsCollectionAdapter adapter;
|
||||||
private ViewPager2 viewPager;
|
private ViewPager2 viewPager;
|
||||||
|
private String[] controllerPortNames;
|
||||||
|
|
||||||
public SettingsCollectionFragment(ControllerMappingActivity activity) {
|
public SettingsCollectionFragment(ControllerSettingsActivity activity) {
|
||||||
this.activity = activity;
|
this.activity = activity;
|
||||||
|
|
||||||
|
controllerPortNames = new String[] { "Port 1", "Port 2" };
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||||
return inflater.inflate(R.layout.fragment_controller_mapping, container, false);
|
return inflater.inflate(R.layout.fragment_controller_settings, container, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||||
adapter = new SettingsCollectionAdapter(activity, this);
|
adapter = new SettingsCollectionAdapter(activity, this, controllerPortNames.length);
|
||||||
viewPager = view.findViewById(R.id.view_pager);
|
viewPager = view.findViewById(R.id.view_pager);
|
||||||
viewPager.setAdapter(adapter);
|
viewPager.setAdapter(adapter);
|
||||||
|
|
||||||
TabLayout tabLayout = view.findViewById(R.id.tab_layout);
|
TabLayout tabLayout = view.findViewById(R.id.tab_layout);
|
||||||
new TabLayoutMediator(tabLayout, viewPager, (tab, position) -> {
|
new TabLayoutMediator(tabLayout, viewPager, (tab, position) -> {
|
||||||
if (position == NUM_CONTROLLER_PORTS)
|
if (position == 0)
|
||||||
tab.setText("Hotkeys");
|
tab.setText(R.string.controller_settings_tab_settings);
|
||||||
|
else if (position <= controllerPortNames.length)
|
||||||
|
tab.setText(controllerPortNames[position - 1]);
|
||||||
else
|
else
|
||||||
tab.setText(String.format("Port %d", position + 1));
|
tab.setText(R.string.controller_settings_tab_hotkeys);
|
||||||
}).attach();
|
}).attach();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class SettingsCollectionAdapter extends FragmentStateAdapter {
|
public static class SettingsCollectionAdapter extends FragmentStateAdapter {
|
||||||
private ControllerMappingActivity activity;
|
private ControllerSettingsActivity activity;
|
||||||
|
private int controllerPorts;
|
||||||
|
|
||||||
public SettingsCollectionAdapter(@NonNull ControllerMappingActivity activity, @NonNull Fragment fragment) {
|
public SettingsCollectionAdapter(@NonNull ControllerSettingsActivity activity, @NonNull Fragment fragment, int controllerPorts) {
|
||||||
super(fragment);
|
super(fragment);
|
||||||
this.activity = activity;
|
this.activity = activity;
|
||||||
|
this.controllerPorts = controllerPorts;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public Fragment createFragment(int position) {
|
public Fragment createFragment(int position) {
|
||||||
if (position != NUM_CONTROLLER_PORTS)
|
if (position == 0)
|
||||||
return new ControllerPortFragment(activity, position + 1);
|
return new SettingsFragment();
|
||||||
|
else if (position <= controllerPorts)
|
||||||
|
return new ControllerPortFragment(activity, position);
|
||||||
else
|
else
|
||||||
return new HotkeyFragment(activity);
|
return new HotkeyFragment(activity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getItemCount() {
|
public int getItemCount() {
|
||||||
return NUM_CONTROLLER_PORTS + 1;
|
return NUM_CONTROLLER_PORTS + 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,16 +1,11 @@
|
|||||||
package com.github.stenzek.duckstation;
|
package com.github.stenzek.duckstation;
|
||||||
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Property;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.EditText;
|
|
||||||
import android.widget.ListAdapter;
|
import android.widget.ListAdapter;
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
@ -20,7 +15,6 @@ import androidx.appcompat.app.AppCompatActivity;
|
|||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.fragment.app.ListFragment;
|
import androidx.fragment.app.ListFragment;
|
||||||
import androidx.preference.PreferenceFragmentCompat;
|
import androidx.preference.PreferenceFragmentCompat;
|
||||||
import androidx.preference.PreferenceManager;
|
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
import androidx.viewpager2.adapter.FragmentStateAdapter;
|
import androidx.viewpager2.adapter.FragmentStateAdapter;
|
||||||
import androidx.viewpager2.widget.ViewPager2;
|
import androidx.viewpager2.widget.ViewPager2;
|
||||||
@ -28,8 +22,6 @@ import androidx.viewpager2.widget.ViewPager2;
|
|||||||
import com.google.android.material.tabs.TabLayout;
|
import com.google.android.material.tabs.TabLayout;
|
||||||
import com.google.android.material.tabs.TabLayoutMediator;
|
import com.google.android.material.tabs.TabLayoutMediator;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
public class GamePropertiesActivity extends AppCompatActivity {
|
public class GamePropertiesActivity extends AppCompatActivity {
|
||||||
PropertyListAdapter mPropertiesListAdapter;
|
PropertyListAdapter mPropertiesListAdapter;
|
||||||
GameListEntry mGameListEntry;
|
GameListEntry mGameListEntry;
|
||||||
@ -183,7 +175,7 @@ public class GamePropertiesActivity extends AppCompatActivity {
|
|||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||||
return inflater.inflate(R.layout.fragment_controller_mapping, container, false);
|
return inflater.inflate(R.layout.fragment_controller_settings, container, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -26,8 +26,6 @@ import androidx.appcompat.app.AppCompatDelegate;
|
|||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import androidx.core.app.ActivityCompat;
|
import androidx.core.app.ActivityCompat;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.fragment.app.Fragment;
|
|
||||||
import androidx.fragment.app.FragmentFactory;
|
|
||||||
import androidx.preference.PreferenceManager;
|
import androidx.preference.PreferenceManager;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
@ -237,8 +235,8 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
Intent intent = new Intent(this, SettingsActivity.class);
|
Intent intent = new Intent(this, SettingsActivity.class);
|
||||||
startActivityForResult(intent, REQUEST_SETTINGS);
|
startActivityForResult(intent, REQUEST_SETTINGS);
|
||||||
return true;
|
return true;
|
||||||
} else if (id == R.id.action_controller_mapping) {
|
} else if (id == R.id.action_controller_settings) {
|
||||||
Intent intent = new Intent(this, ControllerMappingActivity.class);
|
Intent intent = new Intent(this, ControllerSettingsActivity.class);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
return true;
|
return true;
|
||||||
} else if (id == R.id.action_switch_view) {
|
} else if (id == R.id.action_switch_view) {
|
||||||
|
@ -107,13 +107,10 @@ public class SettingsActivity extends AppCompatActivity {
|
|||||||
case 3: // Enhancements
|
case 3: // Enhancements
|
||||||
return new SettingsFragment(R.xml.enhancements_preferences);
|
return new SettingsFragment(R.xml.enhancements_preferences);
|
||||||
|
|
||||||
case 4: // Controllers
|
case 4: // Achievements
|
||||||
return new SettingsFragment(R.xml.controllers_preferences);
|
|
||||||
|
|
||||||
case 5: // Achievements
|
|
||||||
return new AchievementSettingsFragment();
|
return new AchievementSettingsFragment();
|
||||||
|
|
||||||
case 6: // Advanced
|
case 5: // Advanced
|
||||||
return new SettingsFragment(R.xml.advanced_preferences);
|
return new SettingsFragment(R.xml.advanced_preferences);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -123,7 +120,7 @@ public class SettingsActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getItemCount() {
|
public int getItemCount() {
|
||||||
return 7;
|
return 6;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -10,7 +10,8 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:tabTextAppearance="@style/TabTextAppearance"
|
app:tabTextAppearance="@style/TabTextAppearance"
|
||||||
app:tabMode="fixed" />
|
app:tabMinWidth="150dp"
|
||||||
|
app:tabMode="scrollable" />
|
||||||
|
|
||||||
<androidx.viewpager2.widget.ViewPager2
|
<androidx.viewpager2.widget.ViewPager2
|
||||||
android:id="@+id/view_pager"
|
android:id="@+id/view_pager"
|
@ -21,12 +21,14 @@
|
|||||||
android:id="@+id/action_switch_view"
|
android:id="@+id/action_switch_view"
|
||||||
android:icon="@drawable/ic_baseline_settings_24"
|
android:icon="@drawable/ic_baseline_settings_24"
|
||||||
android:orderInCategory="100"
|
android:orderInCategory="100"
|
||||||
android:title="@string/action_settings"
|
android:title="Switch View"
|
||||||
app:showAsAction="ifRoom" />
|
app:showAsAction="ifRoom" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_controller_mapping"
|
android:id="@+id/action_controller_settings"
|
||||||
android:icon="@drawable/ic_baseline_gamepad_24"
|
android:icon="@drawable/ic_baseline_gamepad_24"
|
||||||
android:title="@string/action_controller_mapping" />
|
android:orderInCategory="102"
|
||||||
|
android:title="@string/action_controller_mapping"
|
||||||
|
app:showAsAction="ifRoom" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_edit_game_directories"
|
android:id="@+id/action_edit_game_directories"
|
||||||
android:title="@string/menu_main_edit_game_directories" />
|
android:title="@string/menu_main_edit_game_directories" />
|
||||||
|
@ -69,8 +69,11 @@
|
|||||||
<item>xBR (Sin unión de bordes)</item>
|
<item>xBR (Sin unión de bordes)</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="settings_controller_type_entries">
|
<string-array name="settings_controller_type_entries">
|
||||||
|
<item>None</item>
|
||||||
<item>Control Digital (Mando)</item>
|
<item>Control Digital (Mando)</item>
|
||||||
<item>Control Analógico (DualShock)</item>
|
<item>Control Analógico (DualShock)</item>
|
||||||
|
<item>Analog Joystick</item>
|
||||||
|
<item>NeGcon</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="settings_memory_card_mode_entries">
|
<string-array name="settings_memory_card_mode_entries">
|
||||||
<item>Sin tarjeta de memoria</item>
|
<item>Sin tarjeta de memoria</item>
|
||||||
@ -139,7 +142,6 @@
|
|||||||
<item>Pantalla</item>
|
<item>Pantalla</item>
|
||||||
<item>Audio</item>
|
<item>Audio</item>
|
||||||
<item>Mejoras</item>
|
<item>Mejoras</item>
|
||||||
<item>Controles</item>
|
|
||||||
<item>Achievements</item>
|
<item>Achievements</item>
|
||||||
<item>Avanzado</item>
|
<item>Avanzado</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
@ -69,8 +69,11 @@
|
|||||||
<item>xBR (No Blending Bordi)</item>
|
<item>xBR (No Blending Bordi)</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="settings_controller_type_entries">
|
<string-array name="settings_controller_type_entries">
|
||||||
|
<item>None</item>
|
||||||
<item>Controller Digitale (Gamepad)</item>
|
<item>Controller Digitale (Gamepad)</item>
|
||||||
<item>Controller Analogico (DualShock)</item>
|
<item>Controller Analogico (DualShock)</item>
|
||||||
|
<item>Analog Joystick</item>
|
||||||
|
<item>NeGcon</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="settings_memory_card_mode_entries">
|
<string-array name="settings_memory_card_mode_entries">
|
||||||
<item>No Memory Card</item>
|
<item>No Memory Card</item>
|
||||||
@ -139,7 +142,6 @@
|
|||||||
<item>Display</item>
|
<item>Display</item>
|
||||||
<item>Audio</item>
|
<item>Audio</item>
|
||||||
<item>Miglioramenti</item>
|
<item>Miglioramenti</item>
|
||||||
<item>Controller</item>
|
|
||||||
<item>Achievements</item>
|
<item>Achievements</item>
|
||||||
<item>Avanzate</item>
|
<item>Avanzate</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
@ -69,8 +69,11 @@
|
|||||||
<item>xBR (Geen Edge Blending)</item>
|
<item>xBR (Geen Edge Blending)</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="settings_controller_type_entries">
|
<string-array name="settings_controller_type_entries">
|
||||||
|
<item>None</item>
|
||||||
<item>Digitale Controller (Gamepad)</item>
|
<item>Digitale Controller (Gamepad)</item>
|
||||||
<item>Analoge Controller (DualShock)</item>
|
<item>Analoge Controller (DualShock)</item>
|
||||||
|
<item>Analog Joystick</item>
|
||||||
|
<item>NeGcon</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="settings_memory_card_mode_entries">
|
<string-array name="settings_memory_card_mode_entries">
|
||||||
<item>Geen Geheugenkaart</item>
|
<item>Geen Geheugenkaart</item>
|
||||||
@ -139,7 +142,6 @@
|
|||||||
<item>Weergave</item>
|
<item>Weergave</item>
|
||||||
<item>Audio</item>
|
<item>Audio</item>
|
||||||
<item>Verbeteringen</item>
|
<item>Verbeteringen</item>
|
||||||
<item>Controllers</item>
|
|
||||||
<item>Achievements</item>
|
<item>Achievements</item>
|
||||||
<item>Geavanceerd</item>
|
<item>Geavanceerd</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
@ -69,8 +69,11 @@
|
|||||||
<item>xBR (Sem ajustes laterais)</item>
|
<item>xBR (Sem ajustes laterais)</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="settings_controller_type_entries">
|
<string-array name="settings_controller_type_entries">
|
||||||
|
<item>None</item>
|
||||||
<item>Controle Digital (Gamepad)</item>
|
<item>Controle Digital (Gamepad)</item>
|
||||||
<item>Controle Analógico (DualShock)</item>
|
<item>Controle Analógico (DualShock)</item>
|
||||||
|
<item>Analog Joystick</item>
|
||||||
|
<item>NeGcon</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="settings_memory_card_mode_entries">
|
<string-array name="settings_memory_card_mode_entries">
|
||||||
<item>Sem Cartão de Memória</item>
|
<item>Sem Cartão de Memória</item>
|
||||||
@ -139,7 +142,6 @@
|
|||||||
<item>Vídeo</item>
|
<item>Vídeo</item>
|
||||||
<item>Áudio</item>
|
<item>Áudio</item>
|
||||||
<item>Melhorias</item>
|
<item>Melhorias</item>
|
||||||
<item>Controles</item>
|
|
||||||
<item>Achievements</item>
|
<item>Achievements</item>
|
||||||
<item>Avançado</item>
|
<item>Avançado</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
@ -69,8 +69,11 @@
|
|||||||
<item>xBR (без сглаживания краёв)</item>
|
<item>xBR (без сглаживания краёв)</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="settings_controller_type_entries">
|
<string-array name="settings_controller_type_entries">
|
||||||
|
<item>None</item>
|
||||||
<item>Цифровой</item>
|
<item>Цифровой</item>
|
||||||
<item>Аналоговый (DualShock)</item>
|
<item>Аналоговый (DualShock)</item>
|
||||||
|
<item>Analog Joystick</item>
|
||||||
|
<item>NeGcon</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="settings_memory_card_mode_entries">
|
<string-array name="settings_memory_card_mode_entries">
|
||||||
<item>Без карты памяти</item>
|
<item>Без карты памяти</item>
|
||||||
@ -145,7 +148,6 @@
|
|||||||
<item>Экран</item>
|
<item>Экран</item>
|
||||||
<item>Звук</item>
|
<item>Звук</item>
|
||||||
<item>Улучшения</item>
|
<item>Улучшения</item>
|
||||||
<item>Контроллеры</item>
|
|
||||||
<item>Достижения</item>
|
<item>Достижения</item>
|
||||||
<item>Расширенные</item>
|
<item>Расширенные</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
@ -138,12 +138,18 @@
|
|||||||
<item>xBRBinAlpha</item>
|
<item>xBRBinAlpha</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="settings_controller_type_entries">
|
<string-array name="settings_controller_type_entries">
|
||||||
|
<item>None</item>
|
||||||
<item>Digital Controller (Gamepad)</item>
|
<item>Digital Controller (Gamepad)</item>
|
||||||
<item>Analog Controller (DualShock)</item>
|
<item>Analog Controller (DualShock)</item>
|
||||||
|
<item>Analog Joystick</item>
|
||||||
|
<item>NeGcon</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="settings_controller_type_values">
|
<string-array name="settings_controller_type_values">
|
||||||
|
<item>None</item>
|
||||||
<item>DigitalController</item>
|
<item>DigitalController</item>
|
||||||
<item>AnalogController</item>
|
<item>AnalogController</item>
|
||||||
|
<item>AnalogJoystick</item>
|
||||||
|
<item>NeGcon</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="settings_memory_card_mode_entries">
|
<string-array name="settings_memory_card_mode_entries">
|
||||||
<item>No Memory Card</item>
|
<item>No Memory Card</item>
|
||||||
@ -265,7 +271,6 @@
|
|||||||
<item>Display</item>
|
<item>Display</item>
|
||||||
<item>Audio</item>
|
<item>Audio</item>
|
||||||
<item>Enhancements</item>
|
<item>Enhancements</item>
|
||||||
<item>Controllers</item>
|
|
||||||
<item>Achievements</item>
|
<item>Achievements</item>
|
||||||
<item>Advanced</item>
|
<item>Advanced</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<resources>
|
<resources>
|
||||||
<string name="app_name">DuckStation</string>
|
<string name="app_name">DuckStation</string>
|
||||||
<string name="action_settings">Settings</string>
|
<string name="action_settings">Settings</string>
|
||||||
<string name="action_controller_mapping">Controller Mapping</string>
|
<string name="action_controller_mapping">Controller Settings</string>
|
||||||
<string name="title_activity_settings">Settings</string>
|
<string name="title_activity_settings">Settings</string>
|
||||||
<string name="settings_console_region">Console Region</string>
|
<string name="settings_console_region">Console Region</string>
|
||||||
<string name="settings_console_tty_output">Enable TTY Output</string>
|
<string name="settings_console_tty_output">Enable TTY Output</string>
|
||||||
@ -167,7 +167,7 @@
|
|||||||
<string name="controller_binding_dialog_no_binding"><![CDATA[<No Binding>]]></string>
|
<string name="controller_binding_dialog_no_binding"><![CDATA[<No Binding>]]></string>
|
||||||
<string name="controller_binding_dialog_cancel">Cancel</string>
|
<string name="controller_binding_dialog_cancel">Cancel</string>
|
||||||
<string name="controller_binding_dialog_clear">Clear</string>
|
<string name="controller_binding_dialog_clear">Clear</string>
|
||||||
<string name="controller_mapping_activity_title">Controller Mapping</string>
|
<string name="controller_mapping_activity_title">Controller Settings</string>
|
||||||
<string name="controller_mapping_activity_no_profiles_found">No profiles found.</string>
|
<string name="controller_mapping_activity_no_profiles_found">No profiles found.</string>
|
||||||
<string name="controller_mapping_activity_select_input_profile">Select Input Profile</string>
|
<string name="controller_mapping_activity_select_input_profile">Select Input Profile</string>
|
||||||
<string name="controller_mapping_activity_failed_to_load_profile">Failed to load profile \'%s\'</string>
|
<string name="controller_mapping_activity_failed_to_load_profile">Failed to load profile \'%s\'</string>
|
||||||
@ -267,4 +267,11 @@
|
|||||||
<string name="settings_achievements_confirm_logout_title">Confirm Logout</string>
|
<string name="settings_achievements_confirm_logout_title">Confirm Logout</string>
|
||||||
<string name="settings_achievements_confirm_logout_message">After logging out, no more achievements will be unlocked until you log back in again. Achievements already unlocked will not be lost.</string>
|
<string name="settings_achievements_confirm_logout_message">After logging out, no more achievements will be unlocked until you log back in again. Achievements already unlocked will not be lost.</string>
|
||||||
<string name="controller_binding_device_for_vibration">Device for Vibration</string>
|
<string name="controller_binding_device_for_vibration">Device for Vibration</string>
|
||||||
|
<string name="controller_settings_tab_settings">Settings</string>
|
||||||
|
<string name="controller_settings_tab_hotkeys">Hotkeys</string>
|
||||||
|
<string name="controller_settings_category_button_bindings">Button Bindings</string>
|
||||||
|
<string name="controller_settings_category_axis_bindings">Axis Bindings</string>
|
||||||
|
<string name="controller_settings_category_settings">Settings</string>
|
||||||
|
<string name="controller_settings_category_touchscreen_controller">Touchscreen Controller</string>
|
||||||
|
<string name="controller_settings_category_memory_cards">Memory Cards</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -14,88 +14,64 @@
|
|||||||
~ limitations under the License.
|
~ limitations under the License.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"
|
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
|
|
||||||
<ListPreference
|
<PreferenceCategory
|
||||||
app:key="Controller1/Type"
|
app:iconSpaceReserved="false"
|
||||||
app:title="@string/settings_controller_type"
|
app:title="@string/controller_settings_category_touchscreen_controller">
|
||||||
app:entries="@array/settings_controller_type_entries"
|
<ListPreference
|
||||||
app:entryValues="@array/settings_controller_type_values"
|
app:defaultValue="digital"
|
||||||
app:defaultValue="DigitalController"
|
app:entries="@array/settings_touchscreen_controller_view_entries"
|
||||||
app:useSimpleSummaryProvider="true"
|
app:entryValues="@array/settings_touchscreen_controller_view_values"
|
||||||
app:iconSpaceReserved="false" />
|
app:iconSpaceReserved="false"
|
||||||
<ListPreference
|
app:key="Controller1/TouchscreenControllerView"
|
||||||
app:key="Controller1/TouchscreenControllerView"
|
app:title="@string/settings_touchscreen_controller_view"
|
||||||
app:title="@string/settings_touchscreen_controller_view"
|
app:useSimpleSummaryProvider="true" />
|
||||||
app:entries="@array/settings_touchscreen_controller_view_entries"
|
<SwitchPreferenceCompat
|
||||||
app:entryValues="@array/settings_touchscreen_controller_view_values"
|
app:defaultValue="false"
|
||||||
app:defaultValue="digital"
|
app:iconSpaceReserved="false"
|
||||||
app:useSimpleSummaryProvider="true"
|
app:key="Controller1/AutoHideTouchscreenController"
|
||||||
app:iconSpaceReserved="false" />
|
app:summary="@string/settings_summary_auto_hide_touchscreen_controller"
|
||||||
<Preference
|
app:title="@string/settings_auto_hide_touchscreen_controller" />
|
||||||
app:title="@string/settings_controller_mapping"
|
<SwitchPreferenceCompat
|
||||||
app:summary="@string/settings_controller_mapping_summary"
|
app:defaultValue="false"
|
||||||
app:iconSpaceReserved="false">
|
app:iconSpaceReserved="false"
|
||||||
<intent
|
app:key="Controller1/TouchGliding"
|
||||||
android:action="android.intent.action.VIEW"
|
app:summary="@string/settings_summary_touch_gliding"
|
||||||
android:targetClass="com.github.stenzek.duckstation.ControllerMappingActivity"
|
app:title="@string/settings_touch_gliding" />
|
||||||
android:targetPackage="com.github.stenzek.duckstation" />
|
<SwitchPreferenceCompat
|
||||||
</Preference>
|
app:defaultValue="false"
|
||||||
<SwitchPreferenceCompat
|
app:iconSpaceReserved="false"
|
||||||
app:key="Controller1/ForceAnalogOnReset"
|
app:key="Controller1/HapticFeedback"
|
||||||
app:title="@string/settings_enable_analog_mode_on_reset"
|
app:summary="@string/settings_summary_vibrate_on_press"
|
||||||
app:summary="@string/settings_summary_enable_analog_mode_on_reset"
|
app:title="@string/settings_vibrate_on_press" />
|
||||||
app:defaultValue="true"
|
<SwitchPreferenceCompat
|
||||||
app:iconSpaceReserved="false" />
|
app:defaultValue="false"
|
||||||
<SwitchPreferenceCompat
|
app:iconSpaceReserved="false"
|
||||||
app:key="Controller1/AnalogDPadInDigitalMode"
|
app:key="Controller1/Vibration"
|
||||||
app:title="@string/settings_use_analog_sticks_for_dpad"
|
app:summary="@string/settings_summary_enable_vibration"
|
||||||
app:summary="@string/settings_summary_use_analog_sticks_for_dpad"
|
app:title="@string/settings_enable_vibration" />
|
||||||
app:defaultValue="true"
|
</PreferenceCategory>
|
||||||
app:iconSpaceReserved="false" />
|
|
||||||
<SwitchPreferenceCompat
|
|
||||||
app:key="Controller1/AutoHideTouchscreenController"
|
|
||||||
app:title="@string/settings_auto_hide_touchscreen_controller"
|
|
||||||
app:defaultValue="false"
|
|
||||||
app:summary="@string/settings_summary_auto_hide_touchscreen_controller"
|
|
||||||
app:iconSpaceReserved="false" />
|
|
||||||
<SwitchPreferenceCompat
|
|
||||||
app:key="Controller1/HapticFeedback"
|
|
||||||
app:title="@string/settings_vibrate_on_press"
|
|
||||||
app:defaultValue="false"
|
|
||||||
app:summary="@string/settings_summary_vibrate_on_press"
|
|
||||||
app:iconSpaceReserved="false" />
|
|
||||||
|
|
||||||
<SwitchPreferenceCompat
|
<PreferenceCategory
|
||||||
app:key="Controller1/Vibration"
|
app:iconSpaceReserved="false"
|
||||||
app:title="@string/settings_enable_vibration"
|
app:title="@string/controller_settings_category_memory_cards">
|
||||||
app:defaultValue="false"
|
<ListPreference
|
||||||
app:summary="@string/settings_summary_enable_vibration"
|
app:defaultValue="PerGameTitle"
|
||||||
app:iconSpaceReserved="false" />
|
app:entries="@array/settings_memory_card_mode_entries"
|
||||||
|
app:entryValues="@array/settings_memory_card_mode_values"
|
||||||
<SwitchPreferenceCompat
|
app:iconSpaceReserved="false"
|
||||||
app:key="Controller1/TouchGliding"
|
app:key="MemoryCards/Card1Type"
|
||||||
app:title="@string/settings_touch_gliding"
|
app:title="@string/settings_memory_card_1_type"
|
||||||
app:defaultValue="false"
|
app:useSimpleSummaryProvider="true" />
|
||||||
app:summary="@string/settings_summary_touch_gliding"
|
<ListPreference
|
||||||
app:iconSpaceReserved="false" />
|
app:defaultValue="None"
|
||||||
|
app:entries="@array/settings_memory_card_mode_entries"
|
||||||
<ListPreference
|
app:entryValues="@array/settings_memory_card_mode_values"
|
||||||
app:key="MemoryCards/Card1Type"
|
app:iconSpaceReserved="false"
|
||||||
app:title="@string/settings_memory_card_1_type"
|
app:key="MemoryCards/Card2Type"
|
||||||
app:entries="@array/settings_memory_card_mode_entries"
|
app:title="@string/settings_memory_card_2_type"
|
||||||
app:entryValues="@array/settings_memory_card_mode_values"
|
app:useSimpleSummaryProvider="true" />
|
||||||
app:defaultValue="PerGameTitle"
|
</PreferenceCategory>
|
||||||
app:useSimpleSummaryProvider="true"
|
|
||||||
app:iconSpaceReserved="false" />
|
|
||||||
<ListPreference
|
|
||||||
app:key="MemoryCards/Card2Type"
|
|
||||||
app:title="@string/settings_memory_card_2_type"
|
|
||||||
app:entries="@array/settings_memory_card_mode_entries"
|
|
||||||
app:entryValues="@array/settings_memory_card_mode_values"
|
|
||||||
app:defaultValue="None"
|
|
||||||
app:useSimpleSummaryProvider="true"
|
|
||||||
app:iconSpaceReserved="false" />
|
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user