diff options
| author | Léo Lam <leo@leolam.fr> | 2020-10-20 13:31:01 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-20 13:31:01 +0200 |
| commit | 2e86e1a9989340a41388e48d04ca9acd31e0b0d0 (patch) | |
| tree | 8a626dd39a90bbd748d82730e363851ac8823c6f /Source/Android/app/src/main/java | |
| parent | 49b7f10b39816649dc5a5c3e0d559d96dbb6c0ba (diff) | |
| parent | 6380c65ff858c9147e5f7d7da21219db52853682 (diff) | |
Merge pull request #9146 from JosJuice/android-disable-cover-download
Android: Allow disabling cover downloading
Diffstat (limited to 'Source/Android/app/src/main/java')
17 files changed, 174 insertions, 35 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java index 5fd27ad5ab..5e813fd099 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java @@ -121,6 +121,14 @@ public final class GameAdapter extends RecyclerView.Adapter<GameViewHolder> impl } /** + * Re-fetches game metadata from the game file cache. + */ + public void refetchMetadata() + { + notifyItemRangeChanged(0, getItemCount()); + } + + /** * Launches the game that was clicked on. * * @param view The card representing the game the user wants to play. diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AdHocBooleanSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AdHocBooleanSetting.java index 0626852b5d..e3e8bacaad 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AdHocBooleanSetting.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AdHocBooleanSetting.java @@ -49,4 +49,10 @@ public class AdHocBooleanSetting implements AbstractBooleanSetting { NativeConfig.setBoolean(settings.getWriteLayer(), mFile, mSection, mKey, newValue); } + + public static boolean getBooleanGlobal(String file, String section, String key, + boolean defaultValue) + { + return NativeConfig.getBoolean(NativeConfig.LAYER_ACTIVE, file, section, key, defaultValue); + } } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AdHocStringSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AdHocStringSetting.java new file mode 100644 index 0000000000..5d69b92158 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AdHocStringSetting.java @@ -0,0 +1,57 @@ +package org.dolphinemu.dolphinemu.features.settings.model; + +public class AdHocStringSetting implements AbstractStringSetting +{ + private final String mFile; + private final String mSection; + private final String mKey; + private final String mDefaultValue; + + public AdHocStringSetting(String file, String section, String key, String defaultValue) + { + mFile = file; + mSection = section; + mKey = key; + mDefaultValue = defaultValue; + + if (!NativeConfig.isSettingSaveable(file, section, key)) + { + throw new IllegalArgumentException("File/section/key is unknown or legacy"); + } + } + + @Override + public boolean isOverridden(Settings settings) + { + return NativeConfig.isOverridden(mFile, mSection, mKey); + } + + @Override + public boolean isRuntimeEditable() + { + return true; + } + + @Override + public boolean delete(Settings settings) + { + return NativeConfig.deleteKey(settings.getWriteLayer(), mFile, mSection, mKey); + } + + @Override + public String getString(Settings settings) + { + return NativeConfig.getString(NativeConfig.LAYER_ACTIVE, mFile, mSection, mKey, mDefaultValue); + } + + @Override + public void setString(Settings settings, String newValue) + { + NativeConfig.setString(settings.getWriteLayer(), mFile, mSection, mKey, newValue); + } + + public static String getStringGlobal(String file, String section, String key, String defaultValue) + { + return NativeConfig.getString(NativeConfig.LAYER_ACTIVE, file, section, key, defaultValue); + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.java index 15d5d9069e..92085ea204 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.java @@ -38,6 +38,8 @@ public enum BooleanSetting implements AbstractBooleanSetting MAIN_RECURSIVE_ISO_PATHS(Settings.FILE_DOLPHIN, Settings.SECTION_INI_GENERAL, "RecursiveISOPaths", false), + MAIN_USE_GAME_COVERS(Settings.FILE_DOLPHIN, Settings.SECTION_INI_GENERAL, + "UseGameCovers", true), SYSCONF_SCREENSAVER(Settings.FILE_SYSCONF, "IPL", "SSV", false), SYSCONF_WIDESCREEN(Settings.FILE_SYSCONF, "IPL", "AR", true), @@ -191,4 +193,9 @@ public enum BooleanSetting implements AbstractBooleanSetting settings.getSection(mFile, mSection).setBoolean(mKey, newValue); } } + + public boolean getBooleanGlobal() + { + return NativeConfig.getBoolean(NativeConfig.LAYER_ACTIVE, mFile, mSection, mKey, mDefaultValue); + } } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/FloatSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/FloatSetting.java index d5fea9894a..d418302179 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/FloatSetting.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/FloatSetting.java @@ -73,4 +73,9 @@ public enum FloatSetting implements AbstractFloatSetting settings.getSection(mFile, mSection).setFloat(mKey, newValue); } } + + public float getFloatGlobal() + { + return NativeConfig.getFloat(NativeConfig.LAYER_ACTIVE, mFile, mSection, mKey, mDefaultValue); + } } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/IntSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/IntSetting.java index 7c2824ca1d..031f93cf0c 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/IntSetting.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/IntSetting.java @@ -130,4 +130,9 @@ public enum IntSetting implements AbstractIntSetting settings.getSection(mFile, mSection).setInt(mKey, newValue); } } + + public int getIntGlobal() + { + return NativeConfig.getInt(NativeConfig.LAYER_ACTIVE, mFile, mSection, mKey, mDefaultValue); + } } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/StringSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/StringSetting.java index 387ee3a504..3ca6f86606 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/StringSetting.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/StringSetting.java @@ -104,4 +104,9 @@ public enum StringSetting implements AbstractStringSetting settings.getSection(mFile, mSection).setString(mKey, newValue); } } + + public String getStringGlobal() + { + return NativeConfig.getString(NativeConfig.LAYER_ACTIVE, mFile, mSection, mKey, mDefaultValue); + } } 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 2e0e5a654e..711afb82a0 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 @@ -224,7 +224,6 @@ public final class SettingsFragmentPresenter sl.add(new SubmenuSetting(R.string.advanced_submenu, MenuTag.CONFIG_ADVANCED)); sl.add(new SubmenuSetting(R.string.log_submenu, MenuTag.CONFIG_LOG)); sl.add(new SubmenuSetting(R.string.debug_submenu, MenuTag.DEBUG)); - sl.add(new HeaderSetting(R.string.gametdb_thanks, 0)); } private void addGeneralSettings(ArrayList<SettingsItem> sl) @@ -247,6 +246,8 @@ public final class SettingsFragmentPresenter R.string.panic_handlers_description)); sl.add(new CheckBoxSetting(BooleanSetting.MAIN_OSD_MESSAGES, R.string.osd_messages, R.string.osd_messages_description)); + sl.add(new CheckBoxSetting(BooleanSetting.MAIN_USE_GAME_COVERS, R.string.download_game_covers, + 0)); } private void addAudioSettings(ArrayList<SettingsItem> sl) diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/MenuFragment.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/MenuFragment.java index 3badbd3e48..1da21470e8 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/MenuFragment.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/MenuFragment.java @@ -152,8 +152,7 @@ public final class MenuFragment extends Fragment implements View.OnClickListener LinearLayout options = requireView().findViewById(R.id.layout_options); - Settings settings = ((EmulationActivity) requireActivity()).getSettings(); - boolean savestatesEnabled = BooleanSetting.MAIN_ENABLE_SAVESTATES.getBoolean(settings); + boolean savestatesEnabled = BooleanSetting.MAIN_ENABLE_SAVESTATES.getBooleanGlobal(); int savestateVisibility = savestatesEnabled ? View.VISIBLE : View.GONE; options.findViewById(R.id.menu_quicksave).setVisibility(savestateVisibility); options.findViewById(R.id.menu_quickload).setVisibility(savestateVisibility); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/GameFileCache.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/GameFileCache.java index 5672553711..af417dac8f 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/GameFileCache.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/GameFileCache.java @@ -81,12 +81,7 @@ public class GameFileCache */ public boolean scanLibrary(Context context) { - boolean recursiveScan; - try (Settings settings = new Settings()) - { - settings.loadSettings(null); - recursiveScan = BooleanSetting.MAIN_RECURSIVE_ISO_PATHS.getBoolean(settings); - } + boolean recursiveScan = BooleanSetting.MAIN_RECURSIVE_ISO_PATHS.getBooleanGlobal(); removeNonExistentGameFolders(context); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java index 28a6303ac7..4d2d0a6579 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java @@ -87,6 +87,10 @@ public final class MainActivity extends AppCompatActivity implements MainView mPresenter.addDirIfNeeded(this); + // In case the user changed a setting that affects how games are displayed, + // such as system language, cover downloading... + refetchMetadata(); + if (sShouldRescanLibrary) { GameFileCacheService.startRescan(this); @@ -254,6 +258,18 @@ public final class MainActivity extends AppCompatActivity implements MainView } } + private void refetchMetadata() + { + for (Platform platform : Platform.values()) + { + PlatformGamesView fragment = getPlatformGamesView(platform); + if (fragment != null) + { + fragment.refetchMetadata(); + } + } + } + @Nullable private PlatformGamesView getPlatformGamesView(Platform platform) { @@ -289,11 +305,7 @@ public final class MainActivity extends AppCompatActivity implements MainView } }); - try (Settings settings = new Settings()) - { - settings.loadSettings(null); - mViewPager.setCurrentItem(IntSetting.MAIN_LAST_PLATFORM_TAB.getInt(settings)); - } + mViewPager.setCurrentItem(IntSetting.MAIN_LAST_PLATFORM_TAB.getIntGlobal()); showGames(); GameFileCacheService.startLoad(this); 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 930ea5a062..96cade33ff 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 @@ -32,6 +32,7 @@ import org.dolphinemu.dolphinemu.utils.StartupHandler; import org.dolphinemu.dolphinemu.utils.TvUtil; import org.dolphinemu.dolphinemu.viewholders.TvGameViewHolder; +import java.util.ArrayList; import java.util.Collection; public final class TvMainActivity extends FragmentActivity implements MainView @@ -42,6 +43,8 @@ public final class TvMainActivity extends FragmentActivity implements MainView private BrowseSupportFragment mBrowseFragment; + private ArrayList<ArrayObjectAdapter> mGameRows = new ArrayList<>(); + @Override protected void onCreate(Bundle savedInstanceState) { @@ -72,6 +75,10 @@ public final class TvMainActivity extends FragmentActivity implements MainView mPresenter.addDirIfNeeded(this); + // In case the user changed a setting that affects how games are displayed, + // such as system language, cover downloading... + refetchMetadata(); + if (sShouldRescanLibrary) { GameFileCacheService.startRescan(this); @@ -185,6 +192,14 @@ public final class TvMainActivity extends FragmentActivity implements MainView buildRowsAdapter(); } + private void refetchMetadata() + { + for (ArrayObjectAdapter row : mGameRows) + { + row.notifyArrayItemRangeChanged(0, row.size()); + } + } + /** * Callback from AddDirectoryActivity. Applies any changes necessary to the GameGridActivity. * @@ -244,6 +259,7 @@ public final class TvMainActivity extends FragmentActivity implements MainView private void buildRowsAdapter() { ArrayObjectAdapter rowsAdapter = new ArrayObjectAdapter(new ListRowPresenter()); + mGameRows.clear(); if (PermissionsHandler.hasWriteAccess(this)) { @@ -278,6 +294,9 @@ public final class TvMainActivity extends FragmentActivity implements MainView ArrayObjectAdapter row = new ArrayObjectAdapter(new GameRowPresenter()); row.addAll(0, gameFiles); + // Keep a reference to the row in case we need to refresh it. + mGameRows.add(row); + // Create a header for this row. HeaderItem header = new HeaderItem(platform.toInt(), platform.getHeaderName()); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/platform/PlatformGamesFragment.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/platform/PlatformGamesFragment.java index 83040034ae..50d2499705 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/platform/PlatformGamesFragment.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/platform/PlatformGamesFragment.java @@ -85,6 +85,12 @@ public final class PlatformGamesFragment extends Fragment implements PlatformGam } } + @Override + public void refetchMetadata() + { + mAdapter.refetchMetadata(); + } + private void findViews(View root) { mRecyclerView = root.findViewById(R.id.grid_games); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/platform/PlatformGamesView.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/platform/PlatformGamesView.java index 50b3e25ba7..918f40c6e0 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/platform/PlatformGamesView.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/platform/PlatformGamesView.java @@ -25,4 +25,9 @@ public interface PlatformGamesView * To be called when the game file cache is updated. */ void showGames(); + + /** + * Re-fetches game metadata from the game file cache. + */ + void refetchMetadata(); } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Analytics.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Analytics.java index 062f694219..b4aabebfb9 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Analytics.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Analytics.java @@ -24,44 +24,41 @@ public class Analytics { new AfterDirectoryInitializationRunner().run(context, false, () -> { - Settings settings = new Settings(); - settings.loadSettings(null); - if (!BooleanSetting.MAIN_ANALYTICS_PERMISSION_ASKED.getBoolean(settings)) - { - showMessage(context, settings); - } - else + if (!BooleanSetting.MAIN_ANALYTICS_PERMISSION_ASKED.getBooleanGlobal()) { - settings.close(); + showMessage(context); } }); } - private static void showMessage(Context context, Settings settings) + private static void showMessage(Context context) { new AlertDialog.Builder(context, R.style.DolphinDialogBase) .setTitle(context.getString(R.string.analytics)) .setMessage(context.getString(R.string.analytics_desc)) .setPositiveButton(R.string.yes, (dialogInterface, i) -> { - firstAnalyticsAdd(settings, true); + firstAnalyticsAdd(true); }) .setNegativeButton(R.string.no, (dialogInterface, i) -> { - firstAnalyticsAdd(settings, false); + firstAnalyticsAdd(false); }) .show(); } - private static void firstAnalyticsAdd(Settings settings, boolean enabled) + private static void firstAnalyticsAdd(boolean enabled) { - BooleanSetting.MAIN_ANALYTICS_ENABLED.setBoolean(settings, enabled); - BooleanSetting.MAIN_ANALYTICS_PERMISSION_ASKED.setBoolean(settings, true); + try (Settings settings = new Settings()) + { + settings.loadSettings(null); - // Context is set to null to avoid toasts - settings.saveSettings(null, null); + BooleanSetting.MAIN_ANALYTICS_ENABLED.setBoolean(settings, enabled); + BooleanSetting.MAIN_ANALYTICS_PERMISSION_ASKED.setBoolean(settings, true); - settings.close(); + // Context is set to null to avoid toasts + settings.saveSettings(null, null); + } } public static void sendReport(String endpoint, byte[] data) diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/PicassoUtils.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/PicassoUtils.java index 07d51fd466..429480e34e 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/PicassoUtils.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/PicassoUtils.java @@ -10,6 +10,7 @@ import com.squareup.picasso.Callback; import com.squareup.picasso.Picasso; import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting; import org.dolphinemu.dolphinemu.model.GameFile; import java.io.File; @@ -62,7 +63,7 @@ public class PicassoUtils } // GameTDB has a pretty close to complete collection for US/EN covers. First pass at getting // the cover will be by the disk's region, second will be the US cover, and third EN. - else + else if (BooleanSetting.MAIN_USE_GAME_COVERS.getBooleanGlobal()) { Picasso.get() .load(CoverHelper.buildGameTDBUrl(gameFile, CoverHelper.getRegion(gameFile))) @@ -136,5 +137,16 @@ public class PicassoUtils } }); } + else + { + Picasso.get() + .load(R.drawable.no_banner) + .noFade() + .noPlaceholder() + .fit() + .centerInside() + .config(Bitmap.Config.ARGB_8888) + .into(imageView); + } } } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Rumble.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Rumble.java index e7b7360537..908541d62b 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Rumble.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Rumble.java @@ -9,6 +9,7 @@ import android.util.SparseArray; import android.view.InputDevice; import org.dolphinemu.dolphinemu.activities.EmulationActivity; +import org.dolphinemu.dolphinemu.features.settings.model.AdHocStringSetting; import org.dolphinemu.dolphinemu.features.settings.model.Settings; import org.dolphinemu.dolphinemu.features.settings.utils.SettingsFile; @@ -28,9 +29,8 @@ public class Rumble for (int i = 0; i < 8; i++) { - String deviceName = activity.getSettings() - .getSection(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS) - .getString(SettingsFile.KEY_EMU_RUMBLE + i, ""); + String deviceName = AdHocStringSetting.getStringGlobal(Settings.FILE_DOLPHIN, + Settings.SECTION_BINDINGS, SettingsFile.KEY_EMU_RUMBLE + i, ""); if (!deviceName.isEmpty()) { |
