mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-11-25 22:57:22 +00:00
android: Convert SettingsActivity to Kotlin
This commit is contained in:
parent
ed83650ee4
commit
b10e13c090
2 changed files with 186 additions and 209 deletions
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue