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