Skip to content

Commit

Permalink
Merge pull request #129 from Swordfish90/add-melonds-core
Browse files Browse the repository at this point in the history
Add melonds core
  • Loading branch information
Swordfish90 committed Nov 18, 2020
2 parents f7f9c01 + d75acd0 commit 282f83c
Show file tree
Hide file tree
Showing 39 changed files with 682 additions and 208 deletions.
2 changes: 1 addition & 1 deletion buildSrc/src/main/java/deps.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ object deps {
const val rxbindings = "3.0.0"
const val lifecycle = "2.1.0"
const val leanback = "1.1.0-alpha03"
const val libretrodroid = "0.5.0"
const val libretrodroid = "0.5.1"
const val radialgamepad = "0.1.1"
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import android.os.Build
import com.swordfish.lemuroid.common.files.safeDelete
import com.swordfish.lemuroid.common.kotlin.writeToFile
import com.swordfish.lemuroid.lib.core.CoreManager
import com.swordfish.lemuroid.lib.library.GameSystem
import com.swordfish.lemuroid.lib.library.CoreID
import com.swordfish.lemuroid.lib.storage.DirectoriesManager
import io.reactivex.Single
import retrofit2.Retrofit
Expand All @@ -52,20 +52,20 @@ class CoreManagerImpl(

override fun downloadCore(
context: Context,
gameSystem: GameSystem,
coreID: CoreID,
assetsManager: CoreManager.AssetsManager
): Single<String> {
return assetsManager.retrieveAssetsIfNeeded(api, directoriesManager)
.andThen(downloadCoreFromGithub(gameSystem).map { it.absolutePath })
.andThen(downloadCoreFromGithub(coreID).map { it.absolutePath })
}

private fun downloadCoreFromGithub(gameSystem: GameSystem): Single<File> {
private fun downloadCoreFromGithub(coreID: CoreID): Single<File> {
val mainCoresDirectory = directoriesManager.getCoresDirectory()
val coresDirectory = File(mainCoresDirectory, CORES_VERSION).apply {
mkdirs()
}

val libFileName = gameSystem.coreFileName
val libFileName = coreID.libretroFileName
val destFile = File(coresDirectory, libFileName)

if (destFile.exists()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ package com.swordfish.lemuroid.ext.feature.core

import android.content.Context
import com.swordfish.lemuroid.lib.core.CoreManager
import com.swordfish.lemuroid.lib.library.GameSystem
import com.swordfish.lemuroid.lib.library.CoreID
import com.swordfish.lemuroid.lib.storage.DirectoriesManager
import io.reactivex.Single
import retrofit2.Retrofit
Expand All @@ -35,10 +35,10 @@ class CoreManagerImpl(

override fun downloadCore(
context: Context,
gameSystem: GameSystem,
coreID: CoreID,
assetsManager: CoreManager.AssetsManager
): Single<String> {
return assetsManager.retrieveAssetsIfNeeded(api, directoriesManager)
.andThen(Single.just(gameSystem.coreFileName))
.andThen(Single.just(coreID.libretroFileName))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import com.swordfish.lemuroid.app.mobile.feature.gamemenu.GameMenuActivity
import com.swordfish.lemuroid.app.mobile.feature.main.MainActivity
import com.swordfish.lemuroid.app.mobile.feature.settings.SettingsManager
import com.swordfish.lemuroid.app.shared.settings.BiosPreferences
import com.swordfish.lemuroid.app.shared.settings.CoresSelectionPreferences
import com.swordfish.lemuroid.app.shared.settings.GamePadManager
import com.swordfish.lemuroid.app.shared.settings.GamePadSettingsPreferences
import com.swordfish.lemuroid.ext.feature.core.CoreManagerImpl
Expand All @@ -50,7 +51,9 @@ import com.swordfish.lemuroid.metadata.libretrodb.LibretroDBMetadataProvider
import com.swordfish.lemuroid.metadata.libretrodb.db.LibretroDBManager
import com.swordfish.lemuroid.app.shared.settings.StorageFrameworkPickerLauncher
import com.swordfish.lemuroid.lib.bios.BiosManager
import com.swordfish.lemuroid.lib.core.CoresSelection
import com.swordfish.lemuroid.lib.library.db.dao.Migrations
import com.swordfish.lemuroid.lib.saves.SavesCoherencyEngine
import com.swordfish.lemuroid.lib.saves.SavesManager

import dagger.Binds
Expand Down Expand Up @@ -279,10 +282,26 @@ abstract class LemuroidApplicationModule {
@JvmStatic
fun biosPreferences(biosManager: BiosManager) = BiosPreferences(biosManager)

@Provides
@PerApp
@JvmStatic
fun coresSelection(appContext: Context) = CoresSelection(appContext)

@Provides
@PerApp
@JvmStatic
fun coreSelectionPreferences() = CoresSelectionPreferences()

@Provides
@PerApp
@JvmStatic
fun gamepadSettingsPreferences(gamePadManager: GamePadManager) =
GamePadSettingsPreferences(gamePadManager)

@Provides
@PerApp
@JvmStatic
fun savesCoherencyEngine(savesManager: SavesManager, statesManager: StatesManager) =
SavesCoherencyEngine(savesManager, statesManager)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,12 @@ class GameActivity : BaseGameActivity() {
}

private fun setupVirtualPad(system: GameSystem) {
virtualGamePad = GamePadFactory.createRadialGamePad(this, system.id, settingsManager.vibrateOnTouch)
virtualGamePad = GamePadFactory.createRadialGamePad(
this,
system.id,
systemCoreConfig.coreID,
settingsManager.vibrateOnTouch
)

overlayLayout.addView(virtualGamePad)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ import androidx.navigation.fragment.findNavController
import com.google.android.material.button.MaterialButtonToggleGroup
import com.swordfish.lemuroid.R
import com.swordfish.lemuroid.app.shared.GameMenuContract
import com.swordfish.lemuroid.lib.library.GameSystem
import com.swordfish.lemuroid.lib.library.SystemCoreConfig
import com.swordfish.lemuroid.lib.library.db.entity.Game
import com.swordfish.lemuroid.lib.saves.SaveStateInfo
import com.swordfish.lemuroid.lib.saves.SaveInfo
import com.swordfish.lemuroid.lib.saves.StatesManager
import com.swordfish.lemuroid.lib.ui.setVisibleOrGone
import com.swordfish.lemuroid.lib.ui.setVisibleOrInvisible
Expand All @@ -37,7 +37,7 @@ class GameMenuFragment : Fragment() {
@Inject lateinit var statesManager: StatesManager

private lateinit var game: Game
private lateinit var system: GameSystem
private lateinit var systemCoreConfig: SystemCoreConfig

override fun onAttach(context: Context) {
AndroidSupportInjection.inject(this)
Expand All @@ -51,7 +51,10 @@ class GameMenuFragment : Fragment() {
): View? {
game = arguments?.getSerializable(GameMenuContract.EXTRA_GAME) as Game?
?: throw InvalidParameterException("Missing EXTRA_SYSTEM_ID")
system = GameSystem.findById(game.systemId)

systemCoreConfig = arguments?.getSerializable(GameMenuContract.EXTRA_SYSTEM_CORE_CONFIG) as SystemCoreConfig?
?: throw InvalidParameterException("Missing EXTRA_SYSTEM_CORE_CONFIG")

return inflater.inflate(R.layout.layout_game_menu, container, false)
}

Expand All @@ -64,14 +67,14 @@ class GameMenuFragment : Fragment() {

private fun setupViews(): Completable {
return Single.just(game)
.flatMap { statesManager.getSavedSlotsInfo(it, system.coreName) }
.flatMap { statesManager.getSavedSlotsInfo(it, systemCoreConfig.coreID) }
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSuccess { presentViews(it) }
.ignoreElement()
}

private fun presentViews(infos: List<SaveStateInfo>) {
private fun presentViews(infos: List<SaveInfo>) {
val slot1SaveView = view!!.findViewById<View>(R.id.save_entry_slot1)
val slot2SaveView = view!!.findViewById<View>(R.id.save_entry_slot2)
val slot3SaveView = view!!.findViewById<View>(R.id.save_entry_slot3)
Expand All @@ -83,7 +86,7 @@ class GameMenuFragment : Fragment() {
setupQuickSaveView(slot4SaveView, 3, infos[3])

view!!.findViewById<View>(R.id.menu_saves_not_supported)
.setVisibleOrGone(!system.statesSupported)
.setVisibleOrGone(!systemCoreConfig.statesSupported)

view!!.findViewById<Button>(R.id.menu_change_disk).apply {
val numDisks = activity?.intent?.getIntExtra(GameMenuContract.EXTRA_DISKS, 0) ?: 0
Expand All @@ -103,7 +106,7 @@ class GameMenuFragment : Fragment() {
setResultAndFinish(GameMenuContract.RESULT_RESET)
}

view!!.findViewById<Button>(R.id.save_entry_settings).isEnabled = system.exposedSettings.isNotEmpty()
view!!.findViewById<Button>(R.id.save_entry_settings).isEnabled = systemCoreConfig.exposedSettings.isNotEmpty()
view!!.findViewById<Button>(R.id.save_entry_settings).setOnClickListener {
displayAdvancedSettings()
}
Expand Down Expand Up @@ -172,7 +175,7 @@ class GameMenuFragment : Fragment() {
activity?.finish()
}

private fun setupQuickSaveView(quickSaveView: View, index: Int, saveInfo: SaveStateInfo) {
private fun setupQuickSaveView(quickSaveView: View, index: Int, saveInfo: SaveInfo) {
val title = getString(R.string.game_menu_state, (index + 1).toString())

quickSaveView.findViewById<TextView>(R.id.game_dialog_entry_subtext).apply {
Expand Down Expand Up @@ -201,7 +204,7 @@ class GameMenuFragment : Fragment() {
}
}

quickSaveView.setVisibleOrGone(system.statesSupported)
quickSaveView.setVisibleOrGone(systemCoreConfig.statesSupported)
}

private fun displayAdvancedSettings() {
Expand Down Expand Up @@ -231,7 +234,7 @@ class GameMenuFragment : Fragment() {
}

/** We still return a string even if we don't show it to ensure dialog doesn't change size.*/
private fun getDateString(saveInfo: SaveStateInfo): String {
private fun getDateString(saveInfo: SaveInfo): String {
val formatter = SimpleDateFormat.getDateTimeInstance()
val date = if (saveInfo.exists) {
saveInfo.date
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import com.swordfish.lemuroid.lib.library.db.RetrogradeDatabase
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.swordfish.lemuroid.app.mobile.feature.favorites.FavoritesFragment
import com.swordfish.lemuroid.app.mobile.feature.settings.BiosSettingsFragment
import com.swordfish.lemuroid.app.mobile.feature.settings.CoresSelectionFragment
import com.swordfish.lemuroid.app.mobile.feature.settings.GamepadSettingsFragment
import com.swordfish.lemuroid.app.shared.game.GameLauncherActivity
import com.swordfish.lemuroid.app.shared.settings.SettingsInteractor
Expand Down Expand Up @@ -130,6 +131,10 @@ class MainActivity : RetrogradeAppCompatActivity() {
@ContributesAndroidInjector(modules = [BiosSettingsFragment.Module::class])
abstract fun biosInfoFragment(): BiosSettingsFragment

@PerFragment
@ContributesAndroidInjector(modules = [CoresSelectionFragment.Module::class])
abstract fun coresSelectionFragment(): CoresSelectionFragment

@dagger.Module
companion object {

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.swordfish.lemuroid.app.mobile.feature.settings

import android.content.Context
import android.os.Bundle
import androidx.preference.PreferenceFragmentCompat
import com.swordfish.lemuroid.R
import com.swordfish.lemuroid.app.shared.settings.CoresSelectionPreferences
import dagger.android.support.AndroidSupportInjection
import javax.inject.Inject

class CoresSelectionFragment : PreferenceFragmentCompat() {

@Inject lateinit var coresSelectionPreferences: CoresSelectionPreferences

override fun onAttach(context: Context) {
AndroidSupportInjection.inject(this)
super.onAttach(context)
}

override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.empty_preference_screen, rootKey)
coresSelectionPreferences.addCoresSelectionPreferences(preferenceScreen)
}

@dagger.Module
class Module
}
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
getString(R.string.pref_key_rescan) -> rescanLibrary()
getString(R.string.pref_key_extenral_folder) -> handleChangeExternalFolder()
getString(R.string.pref_key_open_gamepad_bindings) -> handleOpenGamepadBindings()
getString(R.string.pref_key_open_cores_selection) -> handleDisplayCorePage()
getString(R.string.pref_key_display_bios_info) -> handleDisplayBiosInfo()
getString(R.string.pref_key_reset_settings) -> handleResetSettings()
}
Expand All @@ -107,6 +108,10 @@ class SettingsFragment : PreferenceFragmentCompat() {
findNavController().navigate(R.id.navigation_settings_bios_info)
}

private fun handleDisplayCorePage() {
findNavController().navigate(R.id.navigation_settings_cores_selection)
}

private fun handleOpenGamepadBindings() {
findNavController().navigate(R.id.navigation_settings_gamepad)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.swordfish.lemuroid.app.shared

object GameMenuContract {
const val EXTRA_GAME = "EXTRA_GAME"
const val EXTRA_SYSTEM_CORE_CONFIG = "EXTRA_SYSTEM_CORE_CONFIG"
const val EXTRA_CURRENT_DISK = "EXTRA_CURRENT_DISK"
const val EXTRA_DISKS = "EXTRA_DISKS"
const val EXTRA_CORE_OPTIONS = "EXTRA_CORE_OPTIONS"
Expand Down
Loading

0 comments on commit 282f83c

Please sign in to comment.