diff options
| author | Mathew Maidment <mathew1800@gmail.com> | 2016-01-24 19:38:56 -0500 |
|---|---|---|
| committer | Mathew Maidment <mathew1800@gmail.com> | 2016-01-24 19:38:56 -0500 |
| commit | c822afb2cbdc5e535c1b8b8277f0c6167ceaf895 (patch) | |
| tree | 87bd12e85f8fdf866e0331b8bd6de66e03cff35b /Source/Android/app/src/main/java/org | |
| parent | bad7242c634edcee5ecbc54f31c982efffbfd367 (diff) | |
| parent | fb046220393a7e3a3a8fcb928945aa069b56847a (diff) | |
Merge pull request #3566 from sigmabeta/android-settings-bugfix
[Android] Settings screen bugfixes
Diffstat (limited to 'Source/Android/app/src/main/java/org')
8 files changed, 136 insertions, 6 deletions
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, 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 @@ -97,6 +121,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) { Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); @@ -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<String, SettingSection> 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 @@ -43,6 +43,11 @@ public interface SettingsActivityView void onSettingsFileLoaded(HashMap<String, SettingSection> settings); /** + * Called when an asynchronous load operation fails. + */ + void onSettingsFileNotFound(); + + /** * Display a popup text message on screen. * * @param message The contents of the onscreen message. @@ -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<SettingViewHolde { mView.putSetting(setting); } + + mView.onSettingChanged(); } public void onSingleChoiceClick(SingleChoiceSetting item) @@ -235,6 +237,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde } } + mView.onSettingChanged(); mClickedItem = null; mSeekbarProgress = -1; } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragment.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragment.java index 0f83d4b591..d265c9b824 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragment.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragment.java @@ -1,5 +1,6 @@ package org.dolphinemu.dolphinemu.ui.settings; +import android.app.Activity; import android.app.Fragment; import android.content.Context; import android.os.Bundle; @@ -36,6 +37,20 @@ public final class SettingsFragment extends Fragment implements SettingsFragment mPresenter.onAttach(); } + /** + * This version of onAttach is needed for versions below Marshmallow. + * + * @param activity + */ + @Override + public void onAttach(Activity activity) + { + super.onAttach(activity); + + mActivity = (SettingsActivityView) activity; + mPresenter.onAttach(); + } + @Override public void onCreate(Bundle savedInstanceState) { @@ -107,6 +122,12 @@ public final class SettingsFragment extends Fragment implements SettingsFragment } @Override + public void loadDefaultSettings() + { + mPresenter.loadDefaultSettings(); + } + + @Override public void loadSubMenu(String menuKey) { mActivity.showSettingsFragment(menuKey, true); @@ -124,6 +145,12 @@ public final class SettingsFragment extends Fragment implements SettingsFragment mPresenter.putSetting(setting); } + @Override + public void onSettingChanged() + { + mActivity.onSettingChanged(); + } + public static final String FRAGMENT_TAG = BuildConfig.APPLICATION_ID + ".fragment.settings"; public static final String ARGUMENT_MENU_TAG = FRAGMENT_TAG + ".menu_tag"; diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentPresenter.java index c338ec22fd..6c697bfb3d 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentPresenter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentPresenter.java @@ -59,9 +59,14 @@ public final class SettingsFragmentPresenter mSettings.get(setting.getSection()).putSetting(setting.getKey(), setting); } + public void loadDefaultSettings() + { + loadSettingsList(); + } + public void setSettings(HashMap<String, SettingSection> 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 @@ -40,6 +40,12 @@ public interface SettingsFragmentView void showSettingsList(ArrayList<SettingsItem> 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. */ Activity getActivity(); @@ -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(); } |
