committed by
bunnei
2 changed files with 186 additions and 209 deletions
-
209src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.java
-
186src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt
@ -1,209 +0,0 @@ |
|||||
package org.yuzu.yuzu_emu.features.settings.ui; |
|
||||
|
|
||||
import android.app.ProgressDialog; |
|
||||
import android.content.Context; |
|
||||
import android.content.Intent; |
|
||||
import android.content.IntentFilter; |
|
||||
import android.os.Bundle; |
|
||||
import android.provider.Settings; |
|
||||
import android.view.Menu; |
|
||||
import android.view.MenuInflater; |
|
||||
import android.widget.Toast; |
|
||||
|
|
||||
import androidx.annotation.NonNull; |
|
||||
import androidx.appcompat.app.AppCompatActivity; |
|
||||
import androidx.fragment.app.FragmentTransaction; |
|
||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager; |
|
||||
|
|
||||
import org.yuzu.yuzu_emu.NativeLibrary; |
|
||||
import org.yuzu.yuzu_emu.R; |
|
||||
import org.yuzu.yuzu_emu.utils.DirectoryInitialization; |
|
||||
import org.yuzu.yuzu_emu.utils.DirectoryStateReceiver; |
|
||||
import org.yuzu.yuzu_emu.utils.EmulationMenuSettings; |
|
||||
|
|
||||
public final class SettingsActivity extends AppCompatActivity implements SettingsActivityView { |
|
||||
private static final String ARG_MENU_TAG = "menu_tag"; |
|
||||
private static final String ARG_GAME_ID = "game_id"; |
|
||||
private static final String FRAGMENT_TAG = "settings"; |
|
||||
private SettingsActivityPresenter mPresenter = new SettingsActivityPresenter(this); |
|
||||
|
|
||||
private ProgressDialog dialog; |
|
||||
|
|
||||
public static void launch(Context context, String menuTag, String gameId) { |
|
||||
Intent settings = new Intent(context, SettingsActivity.class); |
|
||||
settings.putExtra(ARG_MENU_TAG, menuTag); |
|
||||
settings.putExtra(ARG_GAME_ID, gameId); |
|
||||
context.startActivity(settings); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
protected void onCreate(Bundle savedInstanceState) { |
|
||||
super.onCreate(savedInstanceState); |
|
||||
|
|
||||
setContentView(R.layout.activity_settings); |
|
||||
|
|
||||
Intent launcher = getIntent(); |
|
||||
String gameID = launcher.getStringExtra(ARG_GAME_ID); |
|
||||
String menuTag = launcher.getStringExtra(ARG_MENU_TAG); |
|
||||
|
|
||||
mPresenter.onCreate(savedInstanceState, menuTag, gameID); |
|
||||
|
|
||||
// Show "Back" button in the action bar for navigation |
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public boolean onSupportNavigateUp() { |
|
||||
onBackPressed(); |
|
||||
|
|
||||
return true; |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public boolean onCreateOptionsMenu(Menu menu) { |
|
||||
MenuInflater inflater = getMenuInflater(); |
|
||||
inflater.inflate(R.menu.menu_settings, menu); |
|
||||
|
|
||||
return true; |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
protected void onSaveInstanceState(@NonNull Bundle outState) { |
|
||||
// Critical: If super method is not called, rotations will be busted. |
|
||||
super.onSaveInstanceState(outState); |
|
||||
mPresenter.saveState(outState); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
protected void onStart() { |
|
||||
super.onStart(); |
|
||||
mPresenter.onStart(); |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 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 |
|
||||
* IntentService which will do so on a background thread. |
|
||||
*/ |
|
||||
@Override |
|
||||
protected void onStop() { |
|
||||
super.onStop(); |
|
||||
|
|
||||
mPresenter.onStop(isFinishing()); |
|
||||
|
|
||||
// Update framebuffer layout when closing the settings |
|
||||
NativeLibrary.NotifyOrientationChange(EmulationMenuSettings.getLandscapeScreenLayout(), |
|
||||
getWindowManager().getDefaultDisplay().getRotation()); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void showSettingsFragment(String menuTag, boolean addToStack, String gameID) { |
|
||||
if (!addToStack && getFragment() != null) { |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); |
|
||||
|
|
||||
if (addToStack) { |
|
||||
if (areSystemAnimationsEnabled()) { |
|
||||
transaction.setCustomAnimations( |
|
||||
R.animator.settings_enter, |
|
||||
R.animator.settings_exit, |
|
||||
R.animator.settings_pop_enter, |
|
||||
R.animator.setttings_pop_exit); |
|
||||
} |
|
||||
|
|
||||
transaction.addToBackStack(null); |
|
||||
} |
|
||||
transaction.replace(R.id.frame_content, SettingsFragment.newInstance(menuTag, gameID), FRAGMENT_TAG); |
|
||||
|
|
||||
transaction.commit(); |
|
||||
} |
|
||||
|
|
||||
private boolean areSystemAnimationsEnabled() { |
|
||||
float duration = Settings.Global.getFloat( |
|
||||
getContentResolver(), |
|
||||
Settings.Global.ANIMATOR_DURATION_SCALE, 1); |
|
||||
float transition = Settings.Global.getFloat( |
|
||||
getContentResolver(), |
|
||||
Settings.Global.TRANSITION_ANIMATION_SCALE, 1); |
|
||||
return duration != 0 && transition != 0; |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void startDirectoryInitializationService(DirectoryStateReceiver receiver, IntentFilter filter) { |
|
||||
LocalBroadcastManager.getInstance(this).registerReceiver( |
|
||||
receiver, |
|
||||
filter); |
|
||||
DirectoryInitialization.start(this); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void stopListeningToDirectoryInitializationService(DirectoryStateReceiver receiver) { |
|
||||
LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void showLoading() { |
|
||||
if (dialog == null) { |
|
||||
dialog = new ProgressDialog(this); |
|
||||
dialog.setMessage(getString(R.string.load_settings)); |
|
||||
dialog.setIndeterminate(true); |
|
||||
} |
|
||||
|
|
||||
dialog.show(); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void hideLoading() { |
|
||||
dialog.dismiss(); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void showExternalStorageNotMountedHint() { |
|
||||
Toast.makeText(this, R.string.external_storage_not_mounted, Toast.LENGTH_SHORT) |
|
||||
.show(); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public org.yuzu.yuzu_emu.features.settings.model.Settings getSettings() { |
|
||||
return mPresenter.getSettings(); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void setSettings(org.yuzu.yuzu_emu.features.settings.model.Settings settings) { |
|
||||
mPresenter.setSettings(settings); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void onSettingsFileLoaded(org.yuzu.yuzu_emu.features.settings.model.Settings settings) { |
|
||||
SettingsFragmentView fragment = getFragment(); |
|
||||
|
|
||||
if (fragment != null) { |
|
||||
fragment.onSettingsFileLoaded(settings); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void onSettingsFileNotFound() { |
|
||||
SettingsFragmentView fragment = getFragment(); |
|
||||
|
|
||||
if (fragment != null) { |
|
||||
fragment.loadDefaultSettings(); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void showToastMessage(String message, boolean is_long) { |
|
||||
Toast.makeText(this, message, is_long ? Toast.LENGTH_LONG : Toast.LENGTH_SHORT).show(); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void onSettingChanged() { |
|
||||
mPresenter.onSettingChanged(); |
|
||||
} |
|
||||
|
|
||||
private SettingsFragment getFragment() { |
|
||||
return (SettingsFragment) getSupportFragmentManager().findFragmentByTag(FRAGMENT_TAG); |
|
||||
} |
|
||||
} |
|
||||
@ -0,0 +1,186 @@ |
|||||
|
package org.yuzu.yuzu_emu.features.settings.ui |
||||
|
|
||||
|
import android.app.ProgressDialog |
||||
|
import android.content.Context |
||||
|
import android.content.Intent |
||||
|
import android.content.IntentFilter |
||||
|
import android.os.Bundle |
||||
|
import android.view.Menu |
||||
|
import android.widget.Toast |
||||
|
import androidx.appcompat.app.AppCompatActivity |
||||
|
import androidx.localbroadcastmanager.content.LocalBroadcastManager |
||||
|
import org.yuzu.yuzu_emu.NativeLibrary |
||||
|
import org.yuzu.yuzu_emu.R |
||||
|
import org.yuzu.yuzu_emu.features.settings.model.Settings |
||||
|
import org.yuzu.yuzu_emu.features.settings.ui.SettingsFragment.Companion.newInstance |
||||
|
import org.yuzu.yuzu_emu.utils.DirectoryInitialization |
||||
|
import org.yuzu.yuzu_emu.utils.DirectoryStateReceiver |
||||
|
import org.yuzu.yuzu_emu.utils.EmulationMenuSettings |
||||
|
|
||||
|
class SettingsActivity : AppCompatActivity(), SettingsActivityView { |
||||
|
private val presenter = SettingsActivityPresenter(this) |
||||
|
private var dialog: ProgressDialog? = null |
||||
|
|
||||
|
override fun onCreate(savedInstanceState: Bundle?) { |
||||
|
super.onCreate(savedInstanceState) |
||||
|
setContentView(R.layout.activity_settings) |
||||
|
val launcher = intent |
||||
|
val gameID = launcher.getStringExtra(ARG_GAME_ID) |
||||
|
val menuTag = launcher.getStringExtra(ARG_MENU_TAG) |
||||
|
presenter.onCreate(savedInstanceState, menuTag!!, gameID!!) |
||||
|
|
||||
|
// Show "Back" button in the action bar for navigation |
||||
|
supportActionBar!!.setDisplayHomeAsUpEnabled(true) |
||||
|
} |
||||
|
|
||||
|
override fun onSupportNavigateUp(): Boolean { |
||||
|
onBackPressed() |
||||
|
return true |
||||
|
} |
||||
|
|
||||
|
override fun onCreateOptionsMenu(menu: Menu): Boolean { |
||||
|
val inflater = menuInflater |
||||
|
inflater.inflate(R.menu.menu_settings, menu) |
||||
|
return true |
||||
|
} |
||||
|
|
||||
|
override fun onSaveInstanceState(outState: Bundle) { |
||||
|
// Critical: If super method is not called, rotations will be busted. |
||||
|
super.onSaveInstanceState(outState) |
||||
|
presenter.saveState(outState) |
||||
|
} |
||||
|
|
||||
|
override fun onStart() { |
||||
|
super.onStart() |
||||
|
presenter.onStart() |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 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 |
||||
|
* IntentService which will do so on a background thread. |
||||
|
*/ |
||||
|
override fun onStop() { |
||||
|
super.onStop() |
||||
|
presenter.onStop(isFinishing) |
||||
|
|
||||
|
// Update framebuffer layout when closing the settings |
||||
|
NativeLibrary.NotifyOrientationChange( |
||||
|
EmulationMenuSettings.landscapeScreenLayout, |
||||
|
windowManager.defaultDisplay.rotation |
||||
|
) |
||||
|
} |
||||
|
|
||||
|
override fun showSettingsFragment(menuTag: String, addToStack: Boolean, gameId: String) { |
||||
|
if (!addToStack && fragment != null) { |
||||
|
return |
||||
|
} |
||||
|
val transaction = supportFragmentManager.beginTransaction() |
||||
|
if (addToStack) { |
||||
|
if (areSystemAnimationsEnabled()) { |
||||
|
transaction.setCustomAnimations( |
||||
|
R.animator.settings_enter, |
||||
|
R.animator.settings_exit, |
||||
|
R.animator.settings_pop_enter, |
||||
|
R.animator.setttings_pop_exit |
||||
|
) |
||||
|
} |
||||
|
transaction.addToBackStack(null) |
||||
|
} |
||||
|
transaction.replace(R.id.frame_content, newInstance(menuTag, gameId), FRAGMENT_TAG) |
||||
|
transaction.commit() |
||||
|
} |
||||
|
|
||||
|
private fun areSystemAnimationsEnabled(): Boolean { |
||||
|
val duration = android.provider.Settings.Global.getFloat( |
||||
|
contentResolver, |
||||
|
android.provider.Settings.Global.ANIMATOR_DURATION_SCALE, 1f |
||||
|
) |
||||
|
val transition = android.provider.Settings.Global.getFloat( |
||||
|
contentResolver, |
||||
|
android.provider.Settings.Global.TRANSITION_ANIMATION_SCALE, 1f |
||||
|
) |
||||
|
return duration != 0f && transition != 0f |
||||
|
} |
||||
|
|
||||
|
override fun startDirectoryInitializationService( |
||||
|
receiver: DirectoryStateReceiver?, |
||||
|
filter: IntentFilter |
||||
|
) { |
||||
|
LocalBroadcastManager.getInstance(this).registerReceiver( |
||||
|
receiver!!, |
||||
|
filter |
||||
|
) |
||||
|
DirectoryInitialization.start(this) |
||||
|
} |
||||
|
|
||||
|
override fun stopListeningToDirectoryInitializationService(receiver: DirectoryStateReceiver) { |
||||
|
LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver) |
||||
|
} |
||||
|
|
||||
|
override fun showLoading() { |
||||
|
if (dialog == null) { |
||||
|
dialog = ProgressDialog(this) |
||||
|
dialog!!.setMessage(getString(R.string.load_settings)) |
||||
|
dialog!!.isIndeterminate = true |
||||
|
} |
||||
|
dialog!!.show() |
||||
|
} |
||||
|
|
||||
|
override fun hideLoading() { |
||||
|
dialog!!.dismiss() |
||||
|
} |
||||
|
|
||||
|
override fun showExternalStorageNotMountedHint() { |
||||
|
Toast.makeText( |
||||
|
this, |
||||
|
R.string.external_storage_not_mounted, |
||||
|
Toast.LENGTH_SHORT |
||||
|
).show() |
||||
|
} |
||||
|
|
||||
|
override var settings: Settings? |
||||
|
get() = presenter.settings |
||||
|
set(settings) { |
||||
|
presenter.settings = settings |
||||
|
} |
||||
|
|
||||
|
override fun onSettingsFileLoaded(settings: Settings?) { |
||||
|
val fragment: SettingsFragmentView? = fragment |
||||
|
fragment?.onSettingsFileLoaded(settings) |
||||
|
} |
||||
|
|
||||
|
override fun onSettingsFileNotFound() { |
||||
|
val fragment: SettingsFragmentView? = fragment |
||||
|
fragment?.loadDefaultSettings() |
||||
|
} |
||||
|
|
||||
|
override fun showToastMessage(message: String, is_long: Boolean) { |
||||
|
Toast.makeText( |
||||
|
this, |
||||
|
message, |
||||
|
if (is_long) Toast.LENGTH_LONG else Toast.LENGTH_SHORT |
||||
|
).show() |
||||
|
} |
||||
|
|
||||
|
override fun onSettingChanged() { |
||||
|
presenter.onSettingChanged() |
||||
|
} |
||||
|
|
||||
|
private val fragment: SettingsFragment? |
||||
|
get() = supportFragmentManager.findFragmentByTag(FRAGMENT_TAG) as SettingsFragment? |
||||
|
|
||||
|
companion object { |
||||
|
private const val ARG_MENU_TAG = "menu_tag" |
||||
|
private const val ARG_GAME_ID = "game_id" |
||||
|
private const val FRAGMENT_TAG = "settings" |
||||
|
|
||||
|
@JvmStatic |
||||
|
fun launch(context: Context, menuTag: String?, gameId: String?) { |
||||
|
val settings = Intent(context, SettingsActivity::class.java) |
||||
|
settings.putExtra(ARG_MENU_TAG, menuTag) |
||||
|
settings.putExtra(ARG_GAME_ID, gameId) |
||||
|
context.startActivity(settings) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue