From 5425df89920d22695043c3a9a2fcd78c9bcf464d Mon Sep 17 00:00:00 2001 From: FearlessTobi Date: Sat, 28 Mar 2020 20:05:02 +0100 Subject: [PATCH] android: remove enter and exit transition Originally done by weihuoya for Dolphin-emu. --- .../org/citra/citra_emu/NativeLibrary.java | 4 +- .../activities/EmulationActivity.java | 136 ++++-------------- .../citra/citra_emu/adapters/GameAdapter.java | 11 +- .../citra_emu/dialogs/GameDetailsDialog.java | 7 +- .../citra_emu/ui/main/TvMainActivity.java | 7 +- 5 files changed, 35 insertions(+), 130 deletions(-) diff --git a/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.java b/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.java index 8befc836b..bd1d91a1b 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.java +++ b/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.java @@ -477,8 +477,8 @@ public final class NativeLibrary { AlertDialog.Builder builder = new AlertDialog.Builder(emulationActivity) .setTitle(captionId) .setMessage(Html.fromHtml("Please follow the guides to redump your game cartidges or installed titles.")) - .setPositiveButton(android.R.string.ok, (dialog, whichButton) -> emulationActivity.exitWithAnimation()) - .setOnDismissListener(dialogInterface -> emulationActivity.exitWithAnimation()); + .setPositiveButton(android.R.string.ok, (dialog, whichButton) -> emulationActivity.finish()) + .setOnDismissListener(dialogInterface -> emulationActivity.finish()); emulationActivity.runOnUiThread(() -> { AlertDialog alert = builder.create(); alert.show(); diff --git a/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.java b/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.java index 707f3584e..05aa8637a 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.java +++ b/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.java @@ -10,7 +10,6 @@ import android.os.Bundle; import android.os.Handler; import android.preference.PreferenceManager; import android.support.annotation.IntDef; -import android.support.v4.app.ActivityOptionsCompat; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; @@ -25,13 +24,9 @@ import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; -import android.widget.ImageView; import android.widget.SeekBar; import android.widget.TextView; -import com.squareup.picasso.Callback; -import com.squareup.picasso.Picasso; - import org.citra.citra_emu.NativeLibrary; import org.citra.citra_emu.R; import org.citra.citra_emu.fragments.EmulationFragment; @@ -39,7 +34,6 @@ import org.citra.citra_emu.fragments.MenuFragment; import org.citra.citra_emu.model.settings.view.InputBindingSetting; import org.citra.citra_emu.ui.main.MainPresenter; import org.citra.citra_emu.ui.settings.SettingsActivity; -import org.citra.citra_emu.utils.Animations; import org.citra.citra_emu.utils.ControllerMappingHelper; import org.citra.citra_emu.utils.EmulationMenuSettings; import org.citra.citra_emu.utils.SettingsFile; @@ -52,8 +46,6 @@ import static java.lang.annotation.RetentionPolicy.SOURCE; public final class EmulationActivity extends AppCompatActivity { public static final String EXTRA_SELECTED_GAME = "SelectedGame"; public static final String EXTRA_SELECTED_TITLE = "SelectedTitle"; - public static final String EXTRA_SCREEN_PATH = "ScreenPath"; - public static final String EXTRA_GRID_POSITION = "GridPosition"; public static final int MENU_ACTION_EDIT_CONTROLS_PLACEMENT = 0; public static final int MENU_ACTION_TOGGLE_CONTROLS = 1; public static final int MENU_ACTION_ADJUST_SCALE = 2; @@ -100,44 +92,31 @@ public final class EmulationActivity extends AppCompatActivity { } private View mDecorView; - private ImageView mImageView; private EmulationFragment mEmulationFragment; private SharedPreferences mPreferences; private ControllerMappingHelper mControllerMappingHelper; - // So that MainActivity knows which view to invalidate before the return animation. - private int mPosition; private boolean mDeviceHasTouchScreen; private boolean mMenuVisible; private boolean activityRecreated; - private String mScreenPath; private String mSelectedTitle; private String mPath; private Runnable afterShowingScreenshot = new Runnable() { @Override public void run() { - setResult(mPosition); supportFinishAfterTransition(); } }; - public static void launch(FragmentActivity activity, String path, String title, - String screenshotPath, int position, View sharedView) { + public static void launch(FragmentActivity activity, String path, String title) { Intent launcher = new Intent(activity, EmulationActivity.class); launcher.putExtra(EXTRA_SELECTED_GAME, path); launcher.putExtra(EXTRA_SELECTED_TITLE, title); - launcher.putExtra(EXTRA_SCREEN_PATH, screenshotPath); - launcher.putExtra(EXTRA_GRID_POSITION, position); - - ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation( - activity, - sharedView, - "image_game_screenshot"); + Bundle options = new Bundle(); // I believe this warning is a bug. Activities are FragmentActivity from the support lib //noinspection RestrictedApi - activity.startActivityForResult(launcher, MainPresenter.REQUEST_EMULATE_GAME, - options.toBundle()); + activity.startActivityForResult(launcher, MainPresenter.REQUEST_EMULATE_GAME, options); } private void showRunningNotification() { @@ -176,8 +155,6 @@ public final class EmulationActivity extends AppCompatActivity { Intent gameToEmulate = getIntent(); mPath = gameToEmulate.getStringExtra(EXTRA_SELECTED_GAME); mSelectedTitle = gameToEmulate.getStringExtra(EXTRA_SELECTED_TITLE); - mScreenPath = gameToEmulate.getStringExtra(EXTRA_SCREEN_PATH); - mPosition = gameToEmulate.getIntExtra(EXTRA_GRID_POSITION, -1); activityRecreated = false; } else { activityRecreated = true; @@ -211,8 +188,6 @@ public final class EmulationActivity extends AppCompatActivity { setContentView(R.layout.activity_emulation); - mImageView = findViewById(R.id.image_screenshot); - // Find or create the EmulationFragment mEmulationFragment = (EmulationFragment) getSupportFragmentManager() .findFragmentById(R.id.frame_emulation_fragment); @@ -223,34 +198,6 @@ public final class EmulationActivity extends AppCompatActivity { .commit(); } - if (savedInstanceState == null) { - // Picasso will take a while to load these big-ass screenshots. So don't run - // the animation until we say so. - postponeEnterTransition(); - - Picasso.get() - .load(mScreenPath) - .noFade() - .noPlaceholder() - .into(mImageView, new Callback() { - @Override - public void onSuccess() { - supportStartPostponedEnterTransition(); - } - @Override - public void onError(Exception ex) { - // Still have to do this, or else the app will crash. - supportStartPostponedEnterTransition(); - } - }); - - Animations.fadeViewOut(mImageView) - .setStartDelay(2000) - .withEndAction(() -> mImageView.setVisibility(View.GONE)); - } else { - mImageView.setVisibility(View.GONE); - } - if (mDeviceHasTouchScreen) { setTitle(mSelectedTitle); } @@ -261,23 +208,19 @@ public final class EmulationActivity extends AppCompatActivity { // Override Citra core INI with the one set by our in game menu NativeLibrary.SwapScreens(EmulationMenuSettings.getSwapScreens(), - getWindowManager().getDefaultDisplay().getRotation()); + getWindowManager().getDefaultDisplay().getRotation()); } @Override protected void onSaveInstanceState(Bundle outState) { outState.putString(EXTRA_SELECTED_GAME, mPath); outState.putString(EXTRA_SELECTED_TITLE, mSelectedTitle); - outState.putString(EXTRA_SCREEN_PATH, mScreenPath); - outState.putInt(EXTRA_GRID_POSITION, mPosition); super.onSaveInstanceState(outState); } protected void restoreState(Bundle savedInstanceState) { mPath = savedInstanceState.getString(EXTRA_SELECTED_GAME); mSelectedTitle = savedInstanceState.getString(EXTRA_SELECTED_TITLE); - mScreenPath = savedInstanceState.getString(EXTRA_SCREEN_PATH); - mPosition = savedInstanceState.getInt(EXTRA_GRID_POSITION); // If an alert prompt was in progress when state was restored, retry displaying it NativeLibrary.retryDisplayAlertPrompt(); @@ -299,14 +242,14 @@ public final class EmulationActivity extends AppCompatActivity { .setPositiveButton(android.R.string.yes, (dialogInterface, i) -> { mEmulationFragment.stopEmulation(); - exitWithAnimation(); + finish(); }) .setNegativeButton(android.R.string.cancel, (dialogInterface, i) -> { }).setOnDismissListener(dialogInterface -> - { - NativeLibrary.UnPauseEmulation(); - }) + { + NativeLibrary.UnPauseEmulation(); + }) .create() .show(); } @@ -348,37 +291,6 @@ public final class EmulationActivity extends AppCompatActivity { } } - public void exitWithAnimation() { - tryDismissRunningNotification(this); - - runOnUiThread(() -> - { - Picasso.get() - .invalidate(mScreenPath); - - Picasso.get() - .load(mScreenPath) - .noFade() - .noPlaceholder() - .into(mImageView, new Callback() { - @Override - public void onSuccess() { - showScreenshot(); - } - - @Override - public void onError(Exception ex) { - finish(); - } - }); - }); - } - - private void showScreenshot() { - Animations.fadeViewIn(mImageView) - .withEndAction(afterShowingScreenshot); - } - @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. @@ -462,7 +374,7 @@ public final class EmulationActivity extends AppCompatActivity { item.setChecked(isEnabled); NativeLibrary.SwapScreens(isEnabled, getWindowManager().getDefaultDisplay() - .getRotation()); + .getRotation()); break; } @@ -484,11 +396,11 @@ public final class EmulationActivity extends AppCompatActivity { case MENU_ACTION_EXIT: toggleMenu(); // Hide the menu (it will be showing since we just clicked it) mEmulationFragment.stopEmulation(); - exitWithAnimation(); + finish(); break; case MENU_ACTION_OPEN_SETTINGS: - SettingsActivity.launch(this, SettingsFile.FILE_NAME_CONFIG,""); + SettingsActivity.launch(this, SettingsFile.FILE_NAME_CONFIG, ""); break; } @@ -498,7 +410,7 @@ public final class EmulationActivity extends AppCompatActivity { private void changeScreenOrientation(int layoutOption, MenuItem item) { item.setChecked(true); NativeLibrary.NotifyOrientationChange(layoutOption, getWindowManager().getDefaultDisplay() - .getRotation()); + .getRotation()); EmulationMenuSettings.setLandscapeScreenLayout(layoutOption); } @@ -585,13 +497,15 @@ public final class EmulationActivity extends AppCompatActivity { seekbar.setMax(150); seekbar.setProgress(mPreferences.getInt("controlScale", 50)); seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { - public void onStartTrackingTouch(SeekBar seekBar) { } + public void onStartTrackingTouch(SeekBar seekBar) { + } public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { value.setText(String.valueOf(progress + 50)); } - public void onStopTrackingTouch(SeekBar seekBar) { } + public void onStopTrackingTouch(SeekBar seekBar) { + } }); value.setText(String.valueOf(seekbar.getProgress() + 50)); @@ -600,7 +514,8 @@ public final class EmulationActivity extends AppCompatActivity { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(R.string.emulation_control_scale); builder.setView(view); - builder.setNegativeButton(android.R.string.cancel, (dialogInterface, i) -> { }); + builder.setNegativeButton(android.R.string.cancel, (dialogInterface, i) -> { + }); builder.setPositiveButton(android.R.string.ok, (dialogInterface, i) -> { SharedPreferences.Editor editor = mPreferences.edit(); @@ -623,7 +538,8 @@ public final class EmulationActivity extends AppCompatActivity { new AlertDialog.Builder(this) .setTitle(getString(R.string.emulation_touch_overlay_reset)) .setPositiveButton(android.R.string.yes, (dialogInterface, i) -> mEmulationFragment.resetInputOverlay()) - .setNegativeButton(android.R.string.cancel, (dialogInterface, i) -> { }) + .setNegativeButton(android.R.string.cancel, (dialogInterface, i) -> { + }) .create() .show(); } @@ -702,20 +618,24 @@ public final class EmulationActivity extends AppCompatActivity { if (axisValuesDPad[0] == 0.f) { NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, NativeLibrary.ButtonType.DPAD_LEFT, NativeLibrary.ButtonState.RELEASED); NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, NativeLibrary.ButtonType.DPAD_RIGHT, NativeLibrary.ButtonState.RELEASED); - } if (axisValuesDPad[0] < 0.f) { + } + if (axisValuesDPad[0] < 0.f) { NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, NativeLibrary.ButtonType.DPAD_LEFT, NativeLibrary.ButtonState.PRESSED); NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, NativeLibrary.ButtonType.DPAD_RIGHT, NativeLibrary.ButtonState.RELEASED); - } if (axisValuesDPad[0] > 0.f) { + } + if (axisValuesDPad[0] > 0.f) { NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, NativeLibrary.ButtonType.DPAD_LEFT, NativeLibrary.ButtonState.RELEASED); NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, NativeLibrary.ButtonType.DPAD_RIGHT, NativeLibrary.ButtonState.PRESSED); } if (axisValuesDPad[1] == 0.f) { NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, NativeLibrary.ButtonType.DPAD_UP, NativeLibrary.ButtonState.RELEASED); NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, NativeLibrary.ButtonType.DPAD_DOWN, NativeLibrary.ButtonState.RELEASED); - } if (axisValuesDPad[1] < 0.f) { + } + if (axisValuesDPad[1] < 0.f) { NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, NativeLibrary.ButtonType.DPAD_UP, NativeLibrary.ButtonState.PRESSED); NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, NativeLibrary.ButtonType.DPAD_DOWN, NativeLibrary.ButtonState.RELEASED); - } if (axisValuesDPad[1] > 0.f) { + } + if (axisValuesDPad[1] > 0.f) { NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, NativeLibrary.ButtonType.DPAD_UP, NativeLibrary.ButtonState.RELEASED); NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, NativeLibrary.ButtonType.DPAD_DOWN, NativeLibrary.ButtonState.PRESSED); } diff --git a/src/android/app/src/main/java/org/citra/citra_emu/adapters/GameAdapter.java b/src/android/app/src/main/java/org/citra/citra_emu/adapters/GameAdapter.java index f193304cb..87b8c7341 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/adapters/GameAdapter.java +++ b/src/android/app/src/main/java/org/citra/citra_emu/adapters/GameAdapter.java @@ -79,7 +79,7 @@ public final class GameAdapter extends RecyclerView.Adapter impl PicassoUtils.loadGameBanner(holder.imageScreenshot, mCursor.getString(GameDatabase.GAME_COLUMN_PATH)); - holder.textGameTitle.setText(mCursor.getString(GameDatabase.GAME_COLUMN_TITLE).replaceAll("[\\t\\n\\r]+"," ")); + holder.textGameTitle.setText(mCursor.getString(GameDatabase.GAME_COLUMN_TITLE).replaceAll("[\\t\\n\\r]+", " ")); holder.textCompany.setText(mCursor.getString(GameDatabase.GAME_COLUMN_COMPANY)); final Path gamePath = Paths.get(mCursor.getString(GameDatabase.GAME_COLUMN_PATH)); @@ -185,19 +185,14 @@ public final class GameAdapter extends RecyclerView.Adapter impl @Override public void onClick(View view) { // Double-click prevention, using threshold of 1000 ms - if (SystemClock.elapsedRealtime() - mLastClickTime < 1000){ + if (SystemClock.elapsedRealtime() - mLastClickTime < 1000) { return; } mLastClickTime = SystemClock.elapsedRealtime(); GameViewHolder holder = (GameViewHolder) view.getTag(); - EmulationActivity.launch((FragmentActivity) view.getContext(), - holder.path, - holder.title, - holder.screenshotPath, - holder.getAdapterPosition(), - holder.imageScreenshot); + EmulationActivity.launch((FragmentActivity) view.getContext(), holder.path, holder.title); } public static class SpacesItemDecoration extends RecyclerView.ItemDecoration { diff --git a/src/android/app/src/main/java/org/citra/citra_emu/dialogs/GameDetailsDialog.java b/src/android/app/src/main/java/org/citra/citra_emu/dialogs/GameDetailsDialog.java index 74b971e68..d086e40bf 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/dialogs/GameDetailsDialog.java +++ b/src/android/app/src/main/java/org/citra/citra_emu/dialogs/GameDetailsDialog.java @@ -69,12 +69,7 @@ public final class GameDetailsDialog extends DialogFragment { buttonLaunch.setOnClickListener(view -> { // Start the emulation activity and send the path of the clicked ROM to it. - EmulationActivity.launch(getActivity(), - getArguments().getString(ARG_GAME_PATH), - getArguments().getString(ARG_GAME_TITLE), - getArguments().getString(ARG_GAME_SCREENSHOT_PATH), - -1, - imageGameScreen); + EmulationActivity.launch(getActivity(), getArguments().getString(ARG_GAME_PATH), getArguments().getString(ARG_GAME_TITLE)); }); // Fill in the view contents. diff --git a/src/android/app/src/main/java/org/citra/citra_emu/ui/main/TvMainActivity.java b/src/android/app/src/main/java/org/citra/citra_emu/ui/main/TvMainActivity.java index 352f08949..5d445f3b1 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/ui/main/TvMainActivity.java +++ b/src/android/app/src/main/java/org/citra/citra_emu/ui/main/TvMainActivity.java @@ -82,12 +82,7 @@ public final class TvMainActivity extends FragmentActivity implements MainView { TvGameViewHolder holder = (TvGameViewHolder) itemViewHolder; // Start the emulation activity and send the path of the clicked ISO to it. - EmulationActivity.launch(TvMainActivity.this, - holder.path, - holder.title, - holder.screenshotPath, - -1, - holder.imageScreenshot); + EmulationActivity.launch(TvMainActivity.this, holder.path, holder.title); } }); }