Skip to content
Permalink
Browse files
Merge pull request #10231 from JosJuice/android-dir-init-livedata
Android: Make DirectoryInitialization use LiveData
  • Loading branch information
lioncash committed Nov 22, 2021
2 parents d5b917a + c2aa281 commit 15ff70b
Show file tree
Hide file tree
Showing 12 changed files with 130 additions and 132 deletions.
@@ -63,7 +63,7 @@ protected void onCreate(Bundle savedInstanceState)
private void initResources()
{
mAfterDirectoryInitializationRunner = new AfterDirectoryInitializationRunner();
mAfterDirectoryInitializationRunner.run(this, true, () -> tryPlay(playAction));
mAfterDirectoryInitializationRunner.runWithLifecycle(this, true, () -> tryPlay(playAction));

GameFileCacheManager.isLoading().observe(this, (isLoading) ->
{
@@ -122,11 +122,7 @@ private void play(AppLinkHelper.PlayAction action, GameFile game)

private void startGame(GameFile game)
{
if (mAfterDirectoryInitializationRunner != null)
{
mAfterDirectoryInitializationRunner.cancel();
mAfterDirectoryInitializationRunner = null;
}
mAfterDirectoryInitializationRunner.cancel();
EmulationActivity.launch(this, GameFileCacheManager.findSecondDiscAndGetPaths(game), false);
}
}
@@ -176,7 +176,7 @@ public static void launch(FragmentActivity activity, String[] filePaths, boolean
if (sIgnoreLaunchRequests)
return;

new AfterDirectoryInitializationRunner().run(activity, true, () ->
new AfterDirectoryInitializationRunner().runWithLifecycle(activity, true, () ->
{
if (FileBrowserHelper.isPathEmptyOrValid(StringSetting.MAIN_DEFAULT_ISO) &&
FileBrowserHelper.isPathEmptyOrValid(StringSetting.MAIN_FS_PATH) &&
@@ -74,8 +74,7 @@ protected void onCreate(Bundle savedInstanceState)
MenuTag menuTag = (MenuTag) launcher.getSerializableExtra(ARG_MENU_TAG);

mPresenter = new SettingsActivityPresenter(this, getSettings());
mPresenter.onCreate(savedInstanceState, menuTag, gameID, revision, isWii,
getApplicationContext());
mPresenter.onCreate(savedInstanceState, menuTag, gameID, revision, isWii, this);
}

@Override
@@ -2,10 +2,11 @@

package org.dolphinemu.dolphinemu.features.settings.ui;

import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;

import androidx.core.app.ComponentActivity;

import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.features.settings.model.Settings;
import org.dolphinemu.dolphinemu.utils.AfterDirectoryInitializationRunner;
@@ -22,13 +23,11 @@

private boolean mShouldSave;

private AfterDirectoryInitializationRunner mAfterDirectoryInitializationRunner;

private MenuTag mMenuTag;
private String mGameId;
private int mRevision;
private boolean mIsWii;
private Context mContext;
private ComponentActivity mActivity;

SettingsActivityPresenter(SettingsActivityView view, Settings settings)
{
@@ -37,13 +36,13 @@
}

public void onCreate(Bundle savedInstanceState, MenuTag menuTag, String gameId, int revision,
boolean isWii, Context context)
boolean isWii, ComponentActivity activity)
{
this.mMenuTag = menuTag;
this.mGameId = gameId;
this.mRevision = revision;
this.mIsWii = isWii;
this.mContext = context;
this.mActivity = activity;

mShouldSave = savedInstanceState != null && savedInstanceState.getBoolean(KEY_SHOULD_SAVE);
}
@@ -95,9 +94,9 @@ private void prepareDolphinDirectoriesIfNeeded()
{
mView.showLoading();

mAfterDirectoryInitializationRunner = new AfterDirectoryInitializationRunner();
mAfterDirectoryInitializationRunner.setFinishedCallback(mView::hideLoading);
mAfterDirectoryInitializationRunner.run(mContext, true, this::loadSettingsUI);
new AfterDirectoryInitializationRunner()
.setFinishedCallback(mView::hideLoading)
.runWithLifecycle(mActivity, true, this::loadSettingsUI);
}
}

@@ -114,16 +113,10 @@ public void clearSettings()

public void onStop(boolean finishing)
{
if (mAfterDirectoryInitializationRunner != null)
{
mAfterDirectoryInitializationRunner.cancel();
mAfterDirectoryInitializationRunner = null;
}

if (mSettings != null && finishing && mShouldSave)
{
Log.debug("[SettingsActivity] Settings activity stopping. Saving settings to INI...");
mSettings.saveSettings(mView, mContext);
mSettings.saveSettings(mView, mActivity);
}
}

@@ -172,7 +165,7 @@ public void onWiimoteSettingChanged(MenuTag menuTag, int value)
break;

case 2:
mView.showToastMessage(mContext.getString(R.string.make_sure_continuous_scan_enabled));
mView.showToastMessage(mActivity.getString(R.string.make_sure_continuous_scan_enabled));
break;
}
}
@@ -26,6 +26,7 @@
private static GameFileCache gameFileCache = null;
private static final MutableLiveData<GameFile[]> gameFiles =
new MutableLiveData<>(new GameFile[]{});
private static boolean runRescanAfterLoad = false;

private static final ExecutorService executor = Executors.newFixedThreadPool(1);
private static final MutableLiveData<Boolean> loadInProgress = new MutableLiveData<>(false);
@@ -127,22 +128,23 @@ public static void startLoad(Context context)
if (!loadInProgress.getValue())
{
loadInProgress.setValue(true);
new AfterDirectoryInitializationRunner().run(context, false,
new AfterDirectoryInitializationRunner().runWithoutLifecycle(context, false,
() -> executor.execute(GameFileCacheManager::load));
}
}

/**
* Asynchronously scans for games in the user's configured folders,
* updating the game file cache with the results.
* If startLoad hasn't been called before this, this has no effect.
* If loading the game file cache hasn't started or hasn't finished,
* the execution of this will be postponed until it finishes.
*/
public static void startRescan(Context context)
{
if (!rescanInProgress.getValue())
{
rescanInProgress.setValue(true);
new AfterDirectoryInitializationRunner().run(context, false,
new AfterDirectoryInitializationRunner().runWithoutLifecycle(context, false,
() -> executor.execute(GameFileCacheManager::rescan));
}
}
@@ -190,17 +192,33 @@ private static void load()
}
}

if (runRescanAfterLoad)
{
rescanInProgress.postValue(true);
}

loadInProgress.postValue(false);

if (runRescanAfterLoad)
{
runRescanAfterLoad = false;
rescan();
}
}

/**
* 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.
* If load hasn't been called before this, the execution of this
* will be postponed until after load runs.
*/
private static void rescan()
{
if (gameFileCache != null)
if (gameFileCache == null)
{
runRescanAfterLoad = true;
}
else
{
String[] gamePaths = GameFileCache.getAllGamePaths();

@@ -73,7 +73,7 @@ protected void onCreate(Bundle savedInstanceState)
if (!DirectoryInitialization.isWaitingForWriteAccess(this))
{
new AfterDirectoryInitializationRunner()
.run(this, false, this::setPlatformTabsAndStartGameFileCacheService);
.runWithLifecycle(this, false, this::setPlatformTabsAndStartGameFileCacheService);
}
}

@@ -86,7 +86,7 @@ protected void onResume()
{
DirectoryInitialization.start(this);
new AfterDirectoryInitializationRunner()
.run(this, false, this::setPlatformTabsAndStartGameFileCacheService);
.runWithLifecycle(this, false, this::setPlatformTabsAndStartGameFileCacheService);
}

mPresenter.onResume();
@@ -254,7 +254,7 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis

DirectoryInitialization.start(this);
new AfterDirectoryInitializationRunner()
.run(this, false, this::setPlatformTabsAndStartGameFileCacheService);
.runWithLifecycle(this, false, this::setPlatformTabsAndStartGameFileCacheService);
}
}

@@ -73,7 +73,7 @@ public void onFabClick()
mView.launchFileListActivity();
}

public boolean handleOptionSelection(int itemId, Context context)
public boolean handleOptionSelection(int itemId, ComponentActivity activity)
{
switch (itemId)
{
@@ -83,7 +83,7 @@ public boolean handleOptionSelection(int itemId, Context context)

case R.id.menu_refresh:
mView.setRefreshing(true);
GameFileCacheManager.startRescan(context);
GameFileCacheManager.startRescan(activity);
return true;

case R.id.button_add_directory:
@@ -95,17 +95,17 @@ public boolean handleOptionSelection(int itemId, Context context)
return true;

case R.id.menu_install_wad:
new AfterDirectoryInitializationRunner().run(context, true,
new AfterDirectoryInitializationRunner().runWithLifecycle(activity, true,
() -> mView.launchOpenFileActivity(REQUEST_WAD_FILE));
return true;

case R.id.menu_import_wii_save:
new AfterDirectoryInitializationRunner().run(context, true,
new AfterDirectoryInitializationRunner().runWithLifecycle(activity, true,
() -> mView.launchOpenFileActivity(REQUEST_WII_SAVE_FILE));
return true;

case R.id.menu_import_nand_backup:
new AfterDirectoryInitializationRunner().run(context, true,
new AfterDirectoryInitializationRunner().runWithLifecycle(activity, true,
() -> mView.launchOpenFileActivity(REQUEST_NAND_BIN_FILE));
return true;
}
@@ -121,12 +121,9 @@ public void onResume()
mDirToAdd = null;
}

if (sShouldRescanLibrary && !GameFileCacheManager.isRescanning().getValue())
if (sShouldRescanLibrary)
{
new AfterDirectoryInitializationRunner().run(mActivity, false, () ->
{
GameFileCacheManager.startRescan(mActivity);
});
GameFileCacheManager.startRescan(mActivity);
}

sShouldRescanLibrary = true;

0 comments on commit 15ff70b

Please sign in to comment.