From 0446a58ec5db04ade03f24fdb091bc4513cf67b4 Mon Sep 17 00:00:00 2001 From: zackhow Date: Tue, 6 Nov 2018 17:05:43 -0500 Subject: [PATCH 1/2] Android: Fix crash on instant rotate Delay the creation of the emulation fragment if: the device is a phone, if emulation should be locked to landscape, and the current orientation is portrait. --- .../activities/EmulationActivity.java | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java index 1093c37a1a..9aa8955416 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java @@ -185,6 +185,10 @@ public final class EmulationActivity extends AppCompatActivity { super.onCreate(savedInstanceState); + // Find the EmulationFragment + mEmulationFragment = (EmulationFragment) getSupportFragmentManager() + .findFragmentById(R.id.frame_emulation_fragment); + if (savedInstanceState == null) { // Get params we were passed @@ -196,7 +200,9 @@ public final class EmulationActivity extends AppCompatActivity } else { - activityRecreated = true; + // Could have recreated the activity(rotate) before creating the fragment. If the fragment + // doesn't exist, treat this as a new start. + activityRecreated = mEmulationFragment != null; restoreState(savedInstanceState); } @@ -212,13 +218,6 @@ public final class EmulationActivity extends AppCompatActivity int themeId; if (mDeviceHasTouchScreen) { - BooleanSetting lockLandscape = - (BooleanSetting) mSettings.getSection(Settings.SECTION_INI_CORE) - .getSetting(SettingsFile.KEY_LOCK_LANDSCAPE); - // Force landscape if set - if (lockLandscape == null || lockLandscape.getValue()) - setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); - themeId = R.style.DolphinEmulationBase; // Get a handle to the Window containing the UI. @@ -250,10 +249,20 @@ public final class EmulationActivity extends AppCompatActivity setContentView(R.layout.activity_emulation); - // Find or create the EmulationFragment - mEmulationFragment = (EmulationFragment) getSupportFragmentManager() - .findFragmentById(R.id.frame_emulation_fragment); - if (mEmulationFragment == null) + + BooleanSetting lockLandscapeSetting = + (BooleanSetting) mSettings.getSection(Settings.SECTION_INI_CORE) + .getSetting(SettingsFile.KEY_LOCK_LANDSCAPE); + boolean lockLandscape = lockLandscapeSetting == null || lockLandscapeSetting.getValue(); + // Force landscape if set + if (mDeviceHasTouchScreen && lockLandscape) + { + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); + } + + if (!(mDeviceHasTouchScreen && lockLandscape && + getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) && + mEmulationFragment == null) { mEmulationFragment = EmulationFragment.newInstance(mPath); getSupportFragmentManager().beginTransaction() From 5f5262ad34ba618dfc66e2e2d2e1bfe6f06b0f61 Mon Sep 17 00:00:00 2001 From: zackhow Date: Wed, 7 Nov 2018 19:50:44 -0500 Subject: [PATCH 2/2] AndroidTv: don't show landscape lock setting for leanback --- .../settings/ui/SettingsFragmentPresenter.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java index f27596228f..fb44556dc4 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java @@ -3,6 +3,7 @@ package org.dolphinemu.dolphinemu.features.settings.ui; import android.os.Bundle; import android.text.TextUtils; +import org.dolphinemu.dolphinemu.DolphinApplication; import org.dolphinemu.dolphinemu.NativeLibrary; import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting; @@ -24,6 +25,7 @@ import org.dolphinemu.dolphinemu.features.settings.utils.SettingsFile; import org.dolphinemu.dolphinemu.utils.DirectoryInitialization; import org.dolphinemu.dolphinemu.utils.EGLHelper; import org.dolphinemu.dolphinemu.utils.Log; +import org.dolphinemu.dolphinemu.utils.TvUtil; import java.io.File; import java.util.ArrayList; @@ -265,9 +267,12 @@ public final class SettingsFragmentPresenter sl.add(new CheckBoxSetting(SettingsFile.KEY_ENABLE_SAVE_STATES, Settings.SECTION_INI_CORE, R.string.enable_save_states, R.string.enable_save_states_description, false, enableSaveState)); - sl.add(new CheckBoxSetting(SettingsFile.KEY_LOCK_LANDSCAPE, Settings.SECTION_INI_CORE, - R.string.lock_emulation_landscape, R.string.lock_emulation_landscape_desc, true, - lockToLandscape)); + if (!TvUtil.isLeanback(DolphinApplication.getAppContext())) + { + sl.add(new CheckBoxSetting(SettingsFile.KEY_LOCK_LANDSCAPE, Settings.SECTION_INI_CORE, + R.string.lock_emulation_landscape, R.string.lock_emulation_landscape_desc, true, + lockToLandscape)); + } sl.add(new CheckBoxSetting(SettingsFile.KEY_ANALYTICS_ENABLED, Settings.SECTION_ANALYTICS, R.string.analytics, 0, false, analytics)); }