diff --git a/Source/Android/app/src/main/AndroidManifest.xml b/Source/Android/app/src/main/AndroidManifest.xml index e46eaf7797..dc0b95d3ed 100644 --- a/Source/Android/app/src/main/AndroidManifest.xml +++ b/Source/Android/app/src/main/AndroidManifest.xml @@ -132,14 +132,6 @@ android:exported="false" android:theme="@style/DolphinBase" /> - - - - tryPlay(playAction)); - IntentFilter gameFileCacheIntentFilter = new IntentFilter(GameFileCacheService.DONE_LOADING); + IntentFilter gameFileCacheIntentFilter = new IntentFilter(GameFileCacheManager.DONE_LOADING); BroadcastReceiver gameFileCacheReceiver = new BroadcastReceiver() { @@ -87,7 +87,7 @@ public class AppLinkActivity extends FragmentActivity broadcastManager.registerReceiver(gameFileCacheReceiver, gameFileCacheIntentFilter); DirectoryInitialization.start(this); - GameFileCacheService.startLoad(this); + GameFileCacheManager.startLoad(this); } /** @@ -106,11 +106,11 @@ public class AppLinkActivity extends FragmentActivity // TODO: This approach of getting the game from the game file cache without rescanning the // library means that we can fail to launch games if the cache file has been deleted. - GameFile game = GameFileCacheService.getGameFileByGameId(action.getGameId()); + GameFile game = GameFileCacheManager.getGameFileByGameId(action.getGameId()); // If game == null and the load isn't done, wait for the next GameFileCacheService broadcast. // If game == null and the load is done, call play with a null game, making us exit in failure. - if (game != null || !GameFileCacheService.isLoading()) + if (game != null || !GameFileCacheManager.isLoading()) { play(action, game); } @@ -140,6 +140,6 @@ public class AppLinkActivity extends FragmentActivity mAfterDirectoryInitializationRunner.cancel(); mAfterDirectoryInitializationRunner = null; } - EmulationActivity.launch(this, GameFileCacheService.findSecondDiscAndGetPaths(game), false); + EmulationActivity.launch(this, GameFileCacheManager.findSecondDiscAndGetPaths(game), false); } } 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 15210eea2f..d481640c9b 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 @@ -9,7 +9,6 @@ import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.FragmentActivity; import androidx.recyclerview.widget.RecyclerView; @@ -17,7 +16,7 @@ import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.activities.EmulationActivity; import org.dolphinemu.dolphinemu.dialogs.GamePropertiesDialog; import org.dolphinemu.dolphinemu.model.GameFile; -import org.dolphinemu.dolphinemu.services.GameFileCacheService; +import org.dolphinemu.dolphinemu.services.GameFileCacheManager; import org.dolphinemu.dolphinemu.utils.PicassoUtils; import org.dolphinemu.dolphinemu.viewholders.GameViewHolder; @@ -77,7 +76,7 @@ public final class GameAdapter extends RecyclerView.Adapter impl holder.textGameTitle.setText(gameFile.getTitle()); - if (GameFileCacheService.findSecondDisc(gameFile) != null) + if (GameFileCacheManager.findSecondDisc(gameFile) != null) { holder.textGameCaption .setText(context.getString(R.string.disc_number, gameFile.getDiscNumber() + 1)); @@ -140,7 +139,7 @@ public final class GameAdapter extends RecyclerView.Adapter impl { GameViewHolder holder = (GameViewHolder) view.getTag(); - String[] paths = GameFileCacheService.findSecondDiscAndGetPaths(holder.gameFile); + String[] paths = GameFileCacheManager.findSecondDiscAndGetPaths(holder.gameFile); EmulationActivity.launch((FragmentActivity) view.getContext(), paths, false); } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java index e7a4c12f6a..2414f46669 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java @@ -7,7 +7,6 @@ import android.graphics.drawable.Drawable; import android.view.ViewGroup; import android.widget.ImageView; -import androidx.appcompat.app.AlertDialog; import androidx.core.content.ContextCompat; import androidx.fragment.app.FragmentActivity; import androidx.leanback.widget.ImageCardView; @@ -16,7 +15,7 @@ import androidx.leanback.widget.Presenter; import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.dialogs.GamePropertiesDialog; import org.dolphinemu.dolphinemu.model.GameFile; -import org.dolphinemu.dolphinemu.services.GameFileCacheService; +import org.dolphinemu.dolphinemu.services.GameFileCacheManager; import org.dolphinemu.dolphinemu.ui.platform.Platform; import org.dolphinemu.dolphinemu.utils.PicassoUtils; import org.dolphinemu.dolphinemu.viewholders.TvGameViewHolder; @@ -56,7 +55,7 @@ public final class GameRowPresenter extends Presenter holder.cardParent.setTitleText(gameFile.getTitle()); - if (GameFileCacheService.findSecondDisc(gameFile) != null) + if (GameFileCacheManager.findSecondDisc(gameFile) != null) { holder.cardParent .setContentText( diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java index 9ccba86cd2..4b49d76083 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java @@ -15,7 +15,7 @@ import androidx.fragment.app.DialogFragment; import org.dolphinemu.dolphinemu.NativeLibrary; import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.model.GameFile; -import org.dolphinemu.dolphinemu.services.GameFileCacheService; +import org.dolphinemu.dolphinemu.services.GameFileCacheManager; import org.dolphinemu.dolphinemu.utils.PicassoUtils; public final class GameDetailsDialog extends DialogFragment @@ -36,7 +36,7 @@ public final class GameDetailsDialog extends DialogFragment @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - GameFile gameFile = GameFileCacheService.addOrGet(getArguments().getString(ARG_GAME_PATH)); + GameFile gameFile = GameFileCacheManager.addOrGet(getArguments().getString(ARG_GAME_PATH)); AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity(), R.style.DolphinDialogBase); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.java index 15f0ac77c6..51d10ecdbc 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.java @@ -10,7 +10,7 @@ import org.dolphinemu.dolphinemu.NativeLibrary; import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.features.settings.ui.SettingsActivityView; import org.dolphinemu.dolphinemu.features.settings.utils.SettingsFile; -import org.dolphinemu.dolphinemu.services.GameFileCacheService; +import org.dolphinemu.dolphinemu.services.GameFileCacheManager; import org.dolphinemu.dolphinemu.utils.DirectoryInitialization; import org.dolphinemu.dolphinemu.utils.IniFile; @@ -233,7 +233,7 @@ public class Settings implements Closeable if (mLoadedRecursiveIsoPathsValue != BooleanSetting.MAIN_RECURSIVE_ISO_PATHS.getBoolean(this)) { // Refresh game library - GameFileCacheService.startRescan(context); + GameFileCacheManager.startRescan(context); } } else diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/ConvertFragment.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/ConvertFragment.java index d1f09bbd50..d283a39025 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/ConvertFragment.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/ConvertFragment.java @@ -20,7 +20,7 @@ import android.widget.Spinner; import org.dolphinemu.dolphinemu.NativeLibrary; import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.model.GameFile; -import org.dolphinemu.dolphinemu.services.GameFileCacheService; +import org.dolphinemu.dolphinemu.services.GameFileCacheManager; import org.dolphinemu.dolphinemu.ui.platform.Platform; import java.io.File; @@ -136,7 +136,7 @@ public class ConvertFragment extends Fragment implements View.OnClickListener public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - gameFile = GameFileCacheService.addOrGet(requireArguments().getString(ARG_GAME_PATH)); + gameFile = GameFileCacheManager.addOrGet(requireArguments().getString(ARG_GAME_PATH)); } @Override diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/GameFileCacheService.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/GameFileCacheManager.java similarity index 62% rename from Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/GameFileCacheService.java rename to Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/GameFileCacheManager.java index 3be5fb039f..f4ce251be1 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/GameFileCacheService.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/GameFileCacheManager.java @@ -2,28 +2,29 @@ package org.dolphinemu.dolphinemu.services; -import android.app.IntentService; import android.content.Context; import android.content.Intent; import androidx.localbroadcastmanager.content.LocalBroadcastManager; +import org.dolphinemu.dolphinemu.DolphinApplication; import org.dolphinemu.dolphinemu.model.GameFile; import org.dolphinemu.dolphinemu.model.GameFileCache; import org.dolphinemu.dolphinemu.ui.platform.Platform; import org.dolphinemu.dolphinemu.utils.AfterDirectoryInitializationRunner; -import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; /** - * A service that loads game list data on a separate thread. + * Loads game list data on a separate thread. */ -public final class GameFileCacheService extends IntentService +public final class GameFileCacheManager { /** * This is broadcast when the contents of the cache change. @@ -37,19 +38,16 @@ public final class GameFileCacheService extends IntentService public static final String DONE_LOADING = "org.dolphinemu.dolphinemu.GAME_FILE_CACHE_DONE_LOADING"; - private static final String ACTION_LOAD = "org.dolphinemu.dolphinemu.LOAD_GAME_FILE_CACHE"; - private static final String ACTION_RESCAN = "org.dolphinemu.dolphinemu.RESCAN_GAME_FILE_CACHE"; - private static GameFileCache gameFileCache = null; private static final AtomicReference gameFiles = new AtomicReference<>(new GameFile[]{}); - private static final AtomicInteger unhandledIntents = new AtomicInteger(0); - private static final AtomicInteger unhandledRescanIntents = new AtomicInteger(0); - public GameFileCacheService() + private static final ExecutorService executor = Executors.newFixedThreadPool(1); + private static final AtomicBoolean loadInProgress = new AtomicBoolean(false); + private static final AtomicBoolean rescanInProgress = new AtomicBoolean(false); + + private GameFileCacheManager() { - // Superclass constructor is called to name the thread on which this service executes. - super("GameFileCacheService"); } public static List getGameFilesForPlatform(Platform platform) @@ -113,7 +111,7 @@ public final class GameFileCacheService extends IntentService */ public static boolean isLoading() { - return unhandledIntents.get() != 0; + return loadInProgress.get(); } /** @@ -121,26 +119,21 @@ public final class GameFileCacheService extends IntentService */ public static boolean isRescanning() { - return unhandledRescanIntents.get() != 0; - } - - private static void startService(Context context, String action) - { - Intent intent = new Intent(context, GameFileCacheService.class); - intent.setAction(action); - context.startService(intent); + return rescanInProgress.get(); } /** - * Asynchronously loads the game file cache from disk without checking - * which games are present on the file system. + * Asynchronously loads the game file cache from disk, without checking + * if the games are still present in the user's configured folders. + * If this has already been called, calling it again has no effect. */ public static void startLoad(Context context) { - unhandledIntents.getAndIncrement(); - - new AfterDirectoryInitializationRunner().run(context, false, - () -> startService(context, ACTION_LOAD)); + if (loadInProgress.compareAndSet(false, true)) + { + new AfterDirectoryInitializationRunner().run(context, false, + () -> executor.execute(GameFileCacheManager::load)); + } } /** @@ -150,11 +143,11 @@ public final class GameFileCacheService extends IntentService */ public static void startRescan(Context context) { - unhandledIntents.getAndIncrement(); - unhandledRescanIntents.getAndIncrement(); - - new AfterDirectoryInitializationRunner().run(context, false, - () -> startService(context, ACTION_RESCAN)); + if (rescanInProgress.compareAndSet(false, true)) + { + new AfterDirectoryInitializationRunner().run(context, false, + () -> executor.execute(GameFileCacheManager::rescan)); + } } public static GameFile addOrGet(String gamePath) @@ -179,11 +172,14 @@ public final class GameFileCacheService extends IntentService } } - @Override - protected void onHandleIntent(Intent intent) + /** + * Loads the game file cache from disk, without checking if the + * games are still present in the user's configured folders. + * If this has already been called, calling it again has no effect. + */ + private static void load() { - // Load the game list cache if it isn't already loaded, otherwise do nothing - if (ACTION_LOAD.equals(intent.getAction()) && gameFileCache == null) + if (gameFileCache == null) { GameFileCache temp = new GameFileCache(); synchronized (temp) @@ -198,56 +194,61 @@ public final class GameFileCacheService extends IntentService } } - // Rescan the file system and update the game list cache with the results - if (ACTION_RESCAN.equals(intent.getAction())) - { - if (gameFileCache != null) - { - String[] gamePaths = GameFileCache.getAllGamePaths(); - - boolean changed; - synchronized (gameFileCache) - { - changed = gameFileCache.update(gamePaths); - } - if (changed) - { - updateGameFileArray(); - sendBroadcast(CACHE_UPDATED); - } - - boolean additionalMetadataChanged = gameFileCache.updateAdditionalMetadata(); - if (additionalMetadataChanged) - { - updateGameFileArray(); - sendBroadcast(CACHE_UPDATED); - } - - if (changed || additionalMetadataChanged) - { - gameFileCache.save(); - } - } - - unhandledRescanIntents.decrementAndGet(); - } - - int intentsLeft = unhandledIntents.decrementAndGet(); - if (intentsLeft == 0) - { + loadInProgress.set(false); + if (!rescanInProgress.get()) sendBroadcast(DONE_LOADING); - } } - private void updateGameFileArray() + /** + * Scans for games in the user's configured folders, + * updating the game file cache with the results. + * If load hasn't been called before this, this has no effect. + */ + private static void rescan() + { + if (gameFileCache != null) + { + String[] gamePaths = GameFileCache.getAllGamePaths(); + + boolean changed; + synchronized (gameFileCache) + { + changed = gameFileCache.update(gamePaths); + } + if (changed) + { + updateGameFileArray(); + sendBroadcast(CACHE_UPDATED); + } + + boolean additionalMetadataChanged = gameFileCache.updateAdditionalMetadata(); + if (additionalMetadataChanged) + { + updateGameFileArray(); + sendBroadcast(CACHE_UPDATED); + } + + if (changed || additionalMetadataChanged) + { + gameFileCache.save(); + } + } + + rescanInProgress.set(false); + if (!loadInProgress.get()) + sendBroadcast(DONE_LOADING); + } + + private static void updateGameFileArray() { GameFile[] gameFilesTemp = gameFileCache.getAllGames(); Arrays.sort(gameFilesTemp, (lhs, rhs) -> lhs.getTitle().compareToIgnoreCase(rhs.getTitle())); gameFiles.set(gameFilesTemp); } - private void sendBroadcast(String action) + private static void sendBroadcast(String action) { - LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent(action)); + LocalBroadcastManager.getInstance(DolphinApplication.getAppContext()) + .sendBroadcast(new Intent(action)); } } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/SyncProgramsJobService.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/SyncProgramsJobService.java index 9d75c35fc5..c789084343 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/SyncProgramsJobService.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/SyncProgramsJobService.java @@ -111,7 +111,7 @@ public class SyncProgramsJobService extends JobService private void getGamesByPlatform(Platform platform) { - updatePrograms = GameFileCacheService.getGameFilesForPlatform(platform); + updatePrograms = GameFileCacheManager.getGameFilesForPlatform(platform); } private void syncPrograms(long channelId) 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 cc17b71aae..497062aa7a 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 @@ -9,7 +9,6 @@ import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; -import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -26,10 +25,9 @@ import org.dolphinemu.dolphinemu.activities.EmulationActivity; import org.dolphinemu.dolphinemu.adapters.PlatformPagerAdapter; import org.dolphinemu.dolphinemu.features.settings.model.IntSetting; import org.dolphinemu.dolphinemu.features.settings.model.NativeConfig; -import org.dolphinemu.dolphinemu.features.settings.model.Settings; import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag; import org.dolphinemu.dolphinemu.features.settings.ui.SettingsActivity; -import org.dolphinemu.dolphinemu.services.GameFileCacheService; +import org.dolphinemu.dolphinemu.services.GameFileCacheManager; import org.dolphinemu.dolphinemu.ui.platform.Platform; import org.dolphinemu.dolphinemu.ui.platform.PlatformGamesView; import org.dolphinemu.dolphinemu.utils.Action1; @@ -279,7 +277,7 @@ public final class MainActivity extends AppCompatActivity public void onRefresh() { setRefreshing(true); - GameFileCacheService.startRescan(this); + GameFileCacheManager.startRescan(this); } /** @@ -341,6 +339,6 @@ public final class MainActivity extends AppCompatActivity mViewPager.setCurrentItem(IntSetting.MAIN_LAST_PLATFORM_TAB.getIntGlobal()); showGames(); - GameFileCacheService.startLoad(this); + GameFileCacheManager.startLoad(this); } } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java index 771925f199..9aa95f3998 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java @@ -18,7 +18,7 @@ import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting; import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag; import org.dolphinemu.dolphinemu.model.GameFileCache; -import org.dolphinemu.dolphinemu.services.GameFileCacheService; +import org.dolphinemu.dolphinemu.services.GameFileCacheManager; import org.dolphinemu.dolphinemu.utils.AfterDirectoryInitializationRunner; import org.dolphinemu.dolphinemu.utils.BooleanSupplier; import org.dolphinemu.dolphinemu.utils.CompletableFuture; @@ -58,8 +58,8 @@ public final class MainPresenter mView.setVersionString(versionName); IntentFilter filter = new IntentFilter(); - filter.addAction(GameFileCacheService.CACHE_UPDATED); - filter.addAction(GameFileCacheService.DONE_LOADING); + filter.addAction(GameFileCacheManager.CACHE_UPDATED); + filter.addAction(GameFileCacheManager.DONE_LOADING); mBroadcastReceiver = new BroadcastReceiver() { @Override @@ -67,10 +67,10 @@ public final class MainPresenter { switch (intent.getAction()) { - case GameFileCacheService.CACHE_UPDATED: + case GameFileCacheManager.CACHE_UPDATED: mView.showGames(); break; - case GameFileCacheService.DONE_LOADING: + case GameFileCacheManager.DONE_LOADING: mView.setRefreshing(false); break; } @@ -102,7 +102,7 @@ public final class MainPresenter case R.id.menu_refresh: mView.setRefreshing(true); - GameFileCacheService.startRescan(context); + GameFileCacheManager.startRescan(context); return true; case R.id.button_add_directory: @@ -140,12 +140,12 @@ public final class MainPresenter mDirToAdd = null; } - if (sShouldRescanLibrary && !GameFileCacheService.isRescanning()) + if (sShouldRescanLibrary && !GameFileCacheManager.isRescanning()) { new AfterDirectoryInitializationRunner().run(mContext, false, () -> { mView.setRefreshing(true); - GameFileCacheService.startRescan(mContext); + GameFileCacheManager.startRescan(mContext); }); } 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 f8a78c4934..15f8c866e7 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 @@ -7,7 +7,6 @@ import android.content.pm.PackageManager; import android.net.Uri; import android.os.Bundle; import android.util.TypedValue; -import android.widget.Toast; import androidx.annotation.NonNull; import androidx.core.content.ContextCompat; @@ -28,9 +27,8 @@ import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag; import org.dolphinemu.dolphinemu.features.settings.ui.SettingsActivity; import org.dolphinemu.dolphinemu.model.GameFile; import org.dolphinemu.dolphinemu.model.TvSettingsItem; -import org.dolphinemu.dolphinemu.services.GameFileCacheService; +import org.dolphinemu.dolphinemu.services.GameFileCacheManager; import org.dolphinemu.dolphinemu.ui.platform.Platform; -import org.dolphinemu.dolphinemu.utils.AfterDirectoryInitializationRunner; import org.dolphinemu.dolphinemu.utils.DirectoryInitialization; import org.dolphinemu.dolphinemu.utils.FileBrowserHelper; import org.dolphinemu.dolphinemu.utils.PermissionsHandler; @@ -77,7 +75,7 @@ public final class TvMainActivity extends FragmentActivity if (DirectoryInitialization.shouldStart(this)) { DirectoryInitialization.start(this); - GameFileCacheService.startLoad(this); + GameFileCacheManager.startLoad(this); } mPresenter.onResume(); @@ -124,7 +122,7 @@ public final class TvMainActivity extends FragmentActivity mSwipeRefresh.setOnRefreshListener(this); - setRefreshing(GameFileCacheService.isLoading()); + setRefreshing(GameFileCacheManager.isLoading()); final FragmentManager fragmentManager = getSupportFragmentManager(); mBrowseFragment = new BrowseSupportFragment(); @@ -152,7 +150,7 @@ public final class TvMainActivity extends FragmentActivity TvGameViewHolder holder = (TvGameViewHolder) itemViewHolder; // Start the emulation activity and send the path of the clicked ISO to it. - String[] paths = GameFileCacheService.findSecondDiscAndGetPaths(holder.gameFile); + String[] paths = GameFileCacheManager.findSecondDiscAndGetPaths(holder.gameFile); EmulationActivity.launch(TvMainActivity.this, paths, false); } }); @@ -294,7 +292,7 @@ public final class TvMainActivity extends FragmentActivity } DirectoryInitialization.start(this); - GameFileCacheService.startLoad(this); + GameFileCacheManager.startLoad(this); } } @@ -305,7 +303,7 @@ public final class TvMainActivity extends FragmentActivity public void onRefresh() { setRefreshing(true); - GameFileCacheService.startRescan(this); + GameFileCacheManager.startRescan(this); } private void buildRowsAdapter() @@ -315,12 +313,12 @@ public final class TvMainActivity extends FragmentActivity if (!DirectoryInitialization.isWaitingForWriteAccess(this)) { - GameFileCacheService.startLoad(this); + GameFileCacheManager.startLoad(this); } for (Platform platform : Platform.values()) { - ListRow row = buildGamesRow(platform, GameFileCacheService.getGameFilesForPlatform(platform)); + ListRow row = buildGamesRow(platform, GameFileCacheManager.getGameFilesForPlatform(platform)); // Add row to the adapter only if it is not empty. if (row != null) 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 b5c2c7fa79..641802df54 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 @@ -17,7 +17,7 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.adapters.GameAdapter; -import org.dolphinemu.dolphinemu.services.GameFileCacheService; +import org.dolphinemu.dolphinemu.services.GameFileCacheManager; public final class PlatformGamesFragment extends Fragment implements PlatformGamesView { @@ -73,7 +73,7 @@ public final class PlatformGamesFragment extends Fragment implements PlatformGam mRecyclerView.addItemDecoration(new GameAdapter.SpacesItemDecoration(8)); - setRefreshing(GameFileCacheService.isLoading()); + setRefreshing(GameFileCacheManager.isLoading()); showGames(); } @@ -96,7 +96,7 @@ public final class PlatformGamesFragment extends Fragment implements PlatformGam if (mAdapter != null) { Platform platform = (Platform) getArguments().getSerializable(ARG_PLATFORM); - mAdapter.swapDataSet(GameFileCacheService.getGameFilesForPlatform(platform)); + mAdapter.swapDataSet(GameFileCacheManager.getGameFilesForPlatform(platform)); } }