diff options
| author | JosJuice <josjuice@gmail.com> | 2022-08-14 21:11:00 +0200 |
|---|---|---|
| committer | JosJuice <josjuice@gmail.com> | 2023-03-03 22:28:25 +0100 |
| commit | 7ef229d9082f72795e71db58ed13824bdd3d3e2c (patch) | |
| tree | 62747f0a434dd2bd2eb3e8e1e357172476084fd0 /Source/Android | |
| parent | 8b78f73e80dbd7c98b778aa33d0e04d71987ba3c (diff) | |
Android: Show warning when using old pre-defined controller INIs
Co-authored-by: Charles Lombardo <clombardo169@gmail.com>
Diffstat (limited to 'Source/Android')
7 files changed, 76 insertions, 3 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivity.java index f10a915bcc..d4ec285681 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivity.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivity.java @@ -9,6 +9,7 @@ import android.os.Bundle; import android.provider.Settings; import android.view.Menu; import android.view.MenuInflater; +import android.view.View; import android.widget.Toast; import androidx.annotation.NonNull; @@ -339,7 +340,7 @@ public final class SettingsActivity extends AppCompatActivity implements Setting public void setToolbarTitle(String title) { - mToolbarLayout.setTitle(title); + mBinding.toolbarSettingsLayout.setTitle(title); } @Override @@ -354,6 +355,14 @@ public final class SettingsActivity extends AppCompatActivity implements Setting return mMappingAllDevices; } + @Override + public int setOldControllerSettingsWarningVisibility(boolean visible) + { + // We use INVISIBLE instead of GONE to avoid getting a stale height for the return value + mBinding.oldControllerSettingsWarning.setVisibility(visible ? View.VISIBLE : View.INVISIBLE); + return visible ? mBinding.oldControllerSettingsWarning.getHeight() : 0; + } + private void setInsets() { ViewCompat.setOnApplyWindowInsetsListener(mBinding.appbarSettings, (v, windowInsets) -> @@ -364,6 +373,10 @@ public final class SettingsActivity extends AppCompatActivity implements Setting mBinding.frameContentSettings.setPadding(insets.left, 0, insets.right, 0); + int textPadding = getResources().getDimensionPixelSize(R.dimen.spacing_large); + mBinding.oldControllerSettingsWarning.setPadding(textPadding + insets.left, textPadding, + textPadding + insets.right, textPadding + insets.bottom); + InsetsHelper.applyNavbarWorkaround(insets.bottom, mBinding.workaroundView); ThemeHelper.setNavigationBarColor(this, MaterialColors.getColor(mBinding.appbarSettings, R.attr.colorSurface)); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivityView.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivityView.java index d71d729af8..203b14ca4b 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivityView.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivityView.java @@ -109,4 +109,13 @@ public interface SettingsActivityView * not just the device configured for the controller. */ boolean isMappingAllDevices(); + + /** + * Shows or hides a warning telling the user that they're using incompatible controller settings. + * The warning is hidden by default. + * + * @param visible Whether the warning should be visible. + * @return The height of the warning view, or 0 if the view is now invisible. + */ + int setOldControllerSettingsWarningVisibility(boolean visible); } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragment.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragment.java index 7a3f7b6db8..fcc27c4e5d 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragment.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragment.java @@ -38,6 +38,8 @@ public final class SettingsFragment extends Fragment implements SettingsFragment private SettingsAdapter mAdapter; + private int mOldControllerSettingsWarningHeight = 0; + private static final Map<MenuTag, Integer> titles = new HashMap<>(); static @@ -260,13 +262,23 @@ public final class SettingsFragment extends Fragment implements SettingsFragment return mActivity.isMappingAllDevices(); } + @Override + public void setOldControllerSettingsWarningVisibility(boolean visible) + { + mOldControllerSettingsWarningHeight = + mActivity.setOldControllerSettingsWarningVisibility(visible); + + // Trigger the insets listener we've registered + mBinding.listSettings.requestApplyInsets(); + } + private void setInsets() { ViewCompat.setOnApplyWindowInsetsListener(mBinding.listSettings, (v, windowInsets) -> { Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); - v.setPadding(0, 0, 0, - insets.bottom + getResources().getDimensionPixelSize(R.dimen.spacing_list)); + int listSpacing = getResources().getDimensionPixelSize(R.dimen.spacing_list); + v.setPadding(0, 0, 0, insets.bottom + listSpacing + mOldControllerSettingsWarningHeight); return windowInsets; }); } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java index 8d9a34c252..6cce1361ec 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java @@ -80,6 +80,7 @@ public final class SettingsFragmentPresenter private Settings mSettings; private ArrayList<SettingsItem> mSettingsList; + private boolean mHasOldControllerSettings = false; private int mSerialPort1Type; private int mControllerNumber; @@ -144,6 +145,7 @@ public final class SettingsFragmentPresenter else { mView.showSettingsList(mSettingsList); + mView.setOldControllerSettingsWarningVisibility(mHasOldControllerSettings); } } @@ -1220,6 +1222,8 @@ public final class SettingsFragmentPresenter sl.add(new RunRunnable(mContext, R.string.input_clear, R.string.input_clear_description, R.string.input_reset_warning, 0, true, () -> clearControllerSettings(controller))); + + updateOldControllerSettingsWarningVisibility(controller); } /** @@ -1232,6 +1236,8 @@ public final class SettingsFragmentPresenter private void addControllerMappingSettings(ArrayList<SettingsItem> sl, EmulatedController controller, Set<Integer> groupTypeFilter) { + updateOldControllerSettingsWarningVisibility(controller); + int groupCount = controller.getGroupCount(); for (int i = 0; i < groupCount; i++) { @@ -1287,16 +1293,28 @@ public final class SettingsFragmentPresenter } } + private void updateOldControllerSettingsWarningVisibility(EmulatedController controller) + { + String defaultDevice = controller.getDefaultDevice(); + + mHasOldControllerSettings = defaultDevice.startsWith("Android/") && + defaultDevice.endsWith("/Touchscreen"); + + mView.setOldControllerSettingsWarningVisibility(mHasOldControllerSettings); + } + private void loadDefaultControllerSettings(EmulatedController controller) { controller.loadDefaultSettings(); mView.getAdapter().notifyAllSettingsChanged(); + updateOldControllerSettingsWarningVisibility(controller); } private void clearControllerSettings(EmulatedController controller) { controller.clearSettings(); mView.getAdapter().notifyAllSettingsChanged(); + updateOldControllerSettingsWarningVisibility(controller); } private static int getLogVerbosityEntries() diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentView.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentView.java index 280657158f..53a3010962 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentView.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentView.java @@ -101,4 +101,12 @@ public interface SettingsFragmentView * not just the device configured for the controller. */ boolean isMappingAllDevices(); + + /** + * Shows or hides a warning telling the user that they're using incompatible controller settings. + * The warning is hidden by default. + * + * @param visible Whether the warning should be visible. + */ + void setOldControllerSettingsWarningVisibility(boolean visible); } diff --git a/Source/Android/app/src/main/res/layout/activity_settings.xml b/Source/Android/app/src/main/res/layout/activity_settings.xml index 4b2d96dfb6..533893df12 100644 --- a/Source/Android/app/src/main/res/layout/activity_settings.xml +++ b/Source/Android/app/src/main/res/layout/activity_settings.xml @@ -39,6 +39,18 @@ android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"/> + <TextView + android:id="@+id/old_controller_settings_warning" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:background="?attr/colorErrorContainer" + android:text="@string/old_controller_settings" + android:textColor="?attr/colorOnErrorContainer" + android:visibility="invisible" + android:clickable="true" + android:focusable="false" /> + <View android:id="@+id/workaround_view" android:layout_width="match_parent" diff --git a/Source/Android/app/src/main/res/values/strings.xml b/Source/Android/app/src/main/res/values/strings.xml index 16252e6b84..f01ebd28f1 100644 --- a/Source/Android/app/src/main/res/values/strings.xml +++ b/Source/Android/app/src/main/res/values/strings.xml @@ -35,6 +35,7 @@ <string name="input_clear">Clear</string> <string name="input_clear_description">Clear settings for this controller.</string> <string name="input_reset_warning">Are you sure? Your current controller settings will be deleted.</string> + <string name="old_controller_settings">Your controller settings are from an old version of Dolphin and won\'t work in this version. Press \"Default\" to start over with new settings.</string> <string name="input_binding">Input Binding</string> <string name="input_binding_description">Press or move an input to bind it to %1$s.</string> |
