summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java/org
diff options
context:
space:
mode:
authorMathew Maidment <mathew1800@gmail.com>2016-01-24 19:38:56 -0500
committerMathew Maidment <mathew1800@gmail.com>2016-01-24 19:38:56 -0500
commitc822afb2cbdc5e535c1b8b8277f0c6167ceaf895 (patch)
tree87bd12e85f8fdf866e0331b8bd6de66e03cff35b /Source/Android/app/src/main/java/org
parentbad7242c634edcee5ecbc54f31c982efffbfd367 (diff)
parentfb046220393a7e3a3a8fcb928945aa069b56847a (diff)
Merge pull request #3566 from sigmabeta/android-settings-bugfix
[Android] Settings screen bugfixes
Diffstat (limited to 'Source/Android/app/src/main/java/org')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java5
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivity.java41
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivityPresenter.java37
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivityView.java11
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsAdapter.java3
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragment.java27
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentPresenter.java7
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentView.java11
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();
}