From cf7f5d078b3e181bd8808e10a1ac97010d42282e Mon Sep 17 00:00:00 2001 From: sigmabeta Date: Sun, 24 Jan 2016 10:04:06 -0500 Subject: Fix accessing video settings on Android TV --- .../main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'Source/Android/app/src/main/java') diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java index 95e4d04746..b1103998b3 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java @@ -25,7 +25,6 @@ import org.dolphinemu.dolphinemu.adapters.SettingsRowPresenter; import org.dolphinemu.dolphinemu.model.Game; import org.dolphinemu.dolphinemu.model.TvSettingsItem; import org.dolphinemu.dolphinemu.ui.settings.SettingsActivity; -import org.dolphinemu.dolphinemu.utils.SettingsFile; import org.dolphinemu.dolphinemu.utils.StartupHandler; import org.dolphinemu.dolphinemu.viewholders.TvGameViewHolder; @@ -115,7 +114,7 @@ public final class TvMainActivity extends Activity implements MainView @Override public void launchSettingsActivity(String menuTag) { - SettingsActivity.launch(this, SettingsFile.FILE_NAME_DOLPHIN); + SettingsActivity.launch(this, menuTag); } @Override @@ -236,7 +235,7 @@ public final class TvMainActivity extends Activity implements MainView rowItems.add(new TvSettingsItem(R.id.menu_settings_video, R.drawable.ic_settings_graphics_tv, - R.string.grid_menu_core_settings)); + R.string.grid_menu_video_settings)); rowItems.add(new TvSettingsItem(R.id.button_add_directory, R.drawable.ic_add_tv, -- cgit v1.2.3 From fb046220393a7e3a3a8fcb928945aa069b56847a Mon Sep 17 00:00:00 2001 From: sigmabeta Date: Sun, 24 Jan 2016 19:31:34 -0500 Subject: Fix bugs in Setting screen & add a way to exit without saving --- .../dolphinemu/ui/settings/SettingsActivity.java | 41 ++++++++++++++++++++++ .../ui/settings/SettingsActivityPresenter.java | 37 +++++++++++++++++-- .../ui/settings/SettingsActivityView.java | 11 ++++++ .../dolphinemu/ui/settings/SettingsAdapter.java | 3 ++ .../dolphinemu/ui/settings/SettingsFragment.java | 27 ++++++++++++++ .../ui/settings/SettingsFragmentPresenter.java | 7 +++- .../ui/settings/SettingsFragmentView.java | 11 ++++++ 7 files changed, 134 insertions(+), 3 deletions(-) (limited to 'Source/Android/app/src/main/java') diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivity.java index 9af89ae48a..c84c145f6e 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivity.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivity.java @@ -6,6 +6,9 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.widget.Toast; import org.dolphinemu.dolphinemu.BuildConfig; @@ -32,6 +35,27 @@ public final class SettingsActivity extends AppCompatActivity implements Setting mPresenter.onCreate(savedInstanceState, filename); } + @Override + public boolean onCreateOptionsMenu(Menu menu) + { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.menu_settings, menu); + + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) + { + return mPresenter.handleOptionsItem(item.getItemId()); + } + + @Override + protected void onSaveInstanceState(Bundle outState) + { + mPresenter.saveState(outState); + } + /** * If this is called, the user has left the settings screen (potentially through the * home button) and will expect their changes to be persisted. So we kick off an @@ -96,6 +120,17 @@ public final class SettingsActivity extends AppCompatActivity implements Setting } } + @Override + public void onSettingsFileNotFound() + { + SettingsFragmentView fragment = getFragment(); + + if (fragment != null) + { + fragment.loadDefaultSettings(); + } + } + @Override public void showToastMessage(String message) { @@ -108,6 +143,12 @@ public final class SettingsActivity extends AppCompatActivity implements Setting getFragmentManager().popBackStackImmediate(); } + @Override + public void onSettingChanged() + { + mPresenter.onSettingChanged(); + } + private SettingsFragment getFragment() { return (SettingsFragment) getFragmentManager().findFragmentByTag(SettingsFragment.FRAGMENT_TAG); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivityPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivityPresenter.java index 46d95e47f6..8c16443cec 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivityPresenter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivityPresenter.java @@ -3,6 +3,8 @@ package org.dolphinemu.dolphinemu.ui.settings; import android.os.Bundle; +import org.dolphinemu.dolphinemu.BuildConfig; +import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.model.settings.SettingSection; import org.dolphinemu.dolphinemu.utils.Log; import org.dolphinemu.dolphinemu.utils.SettingsFile; @@ -15,6 +17,8 @@ import rx.schedulers.Schedulers; public final class SettingsActivityPresenter { + private static final String SHOULD_SAVE = BuildConfig.APPLICATION_ID + ".should_save"; + private SettingsActivityView mView; private String mFileName; @@ -22,6 +26,8 @@ public final class SettingsActivityPresenter private int mStackCount; + private boolean mShouldSave; + public SettingsActivityPresenter(SettingsActivityView view) { mView = view; @@ -51,12 +57,16 @@ public final class SettingsActivityPresenter public void call(Throwable throwable) { Log.error("[SettingsActivityPresenter] Error reading file " + filename + ".ini: "+ throwable.getMessage()); - mView.onSettingsFileLoaded(null); + mView.onSettingsFileNotFound(); } }); mView.showSettingsFragment(mFileName, false); } + else + { + mShouldSave = savedInstanceState.getBoolean(SHOULD_SAVE); + } } public void setSettings(HashMap settings) @@ -71,7 +81,7 @@ public final class SettingsActivityPresenter public void onStop(boolean finishing) { - if (mSettingsBySection != null && finishing) + if (mSettingsBySection != null && finishing && mShouldSave) { Log.debug("[SettingsActivity] Settings activity stopping. Saving settings to INI..."); SettingsFile.saveFile(mFileName, mSettingsBySection) @@ -114,4 +124,27 @@ public final class SettingsActivityPresenter mView.finish(); } } + + public boolean handleOptionsItem(int itemId) + { + switch (itemId) + { + case R.id.menu_exit_no_save: + mShouldSave = false; + mView.finish(); + return true; + } + + return false; + } + + public void onSettingChanged() + { + mShouldSave = true; + } + + public void saveState(Bundle outState) + { + outState.putBoolean(SHOULD_SAVE, mShouldSave); + } } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivityView.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivityView.java index 84221b0220..0a14440087 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivityView.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivityView.java @@ -42,6 +42,11 @@ public interface SettingsActivityView */ void onSettingsFileLoaded(HashMap settings); + /** + * Called when an asynchronous load operation fails. + */ + void onSettingsFileNotFound(); + /** * Display a popup text message on screen. * @@ -58,4 +63,10 @@ public interface SettingsActivityView * End the activity. */ void finish(); + + /** + * Called by a containing Fragment to tell the Activity that a setting was changed; + * unless this has been called, the Activity will not save to disk. + */ + void onSettingChanged(); } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsAdapter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsAdapter.java index c83c578f06..72ff6049b1 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsAdapter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsAdapter.java @@ -128,6 +128,8 @@ public final class SettingsAdapter extends RecyclerView.Adapter settings) { - if (mSettingsList == null) + if (mSettingsList == null && settings != null) { mSettings = settings; diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentView.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentView.java index c437863c94..66ea466b54 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentView.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentView.java @@ -39,6 +39,12 @@ public interface SettingsFragmentView */ void showSettingsList(ArrayList settingsList); + /** + * Called by the containing Activity when an asynchronous load operation fails. + * Instructs the Fragment to load the settings screen with defaults selected. + */ + void loadDefaultSettings(); + /** * @return The Fragment's containing activity. */ @@ -65,4 +71,9 @@ public interface SettingsFragmentView * @param setting The (possibly previously missing) new setting. */ void putSetting(Setting setting); + + /** + * Have the fragment tell the containing Activity that a setting was modified. + */ + void onSettingChanged(); } -- cgit v1.2.3