From 870912722ed515e4ead17aee3aa7635abfb4f192 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sat, 15 Jun 2019 18:37:48 +0200 Subject: Revert "Android: Remove dead code and related lib " This reverts commit 593b69728d7e7813a3e3bbd1bfea2f2f56f3a38e. --- .../dolphinemu/dialogs/GameDetailsDialog.java | 83 ++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java (limited to 'Source/Android/app/src/main/java') diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java new file mode 100644 index 0000000000..be254a4b7c --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java @@ -0,0 +1,83 @@ +package org.dolphinemu.dolphinemu.dialogs; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.os.Bundle; +import android.support.design.widget.FloatingActionButton; +import android.support.v4.app.DialogFragment; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.squareup.picasso.Picasso; + +import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.activities.EmulationActivity; +import org.dolphinemu.dolphinemu.model.GameFile; +import org.dolphinemu.dolphinemu.services.GameFileCacheService; + +import de.hdodenhof.circleimageview.CircleImageView; + +public final class GameDetailsDialog extends DialogFragment +{ + private static final String ARG_GAME_PATH = "game_path"; + + public static GameDetailsDialog newInstance(String gamePath) + { + GameDetailsDialog fragment = new GameDetailsDialog(); + + Bundle arguments = new Bundle(); + arguments.putString(ARG_GAME_PATH, gamePath); + fragment.setArguments(arguments); + + return fragment; + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) + { + GameFile gameFile = GameFileCacheService.addOrGet(getArguments().getString(ARG_GAME_PATH)); + + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + ViewGroup contents = (ViewGroup) getActivity().getLayoutInflater() + .inflate(R.layout.dialog_game_details, null); + + final ImageView imageGameScreen = contents.findViewById(R.id.image_game_screen); + CircleImageView circleBanner = contents.findViewById(R.id.circle_banner); + + TextView textTitle = contents.findViewById(R.id.text_game_title); + TextView textDescription = contents.findViewById(R.id.text_description); + + TextView textCountry = contents.findViewById(R.id.text_country); + TextView textCompany = contents.findViewById(R.id.text_company); + + FloatingActionButton buttonLaunch = contents.findViewById(R.id.button_launch); + + String country = getResources().getStringArray(R.array.countryNames)[gameFile.getCountry()]; + + textTitle.setText(gameFile.getTitle()); + textDescription.setText(gameFile.getDescription()); + textCountry.setText(country); + textCompany.setText(gameFile.getCompany()); + + buttonLaunch.setOnClickListener(view -> + { + // Start the emulation activity and send the path of the clicked ROM to it. + EmulationActivity.launch(getActivity(), gameFile); + }); + + // Fill in the view contents. + Picasso.get() + .load(getArguments().getString(gameFile.getScreenshotPath())) + .fit() + .centerCrop() + .noFade() + .noPlaceholder() + .into(imageGameScreen); + + circleBanner.setImageResource(R.drawable.no_banner); + + builder.setView(contents); + return builder.create(); + } +} -- cgit v1.2.3 From 00c4dad7849e7b88c006475c961ce125a29ccb8a Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sat, 15 Jun 2019 19:08:35 +0200 Subject: Android: Bring back the game details dialog It was made inaccessible in e19922c (I'm not sure why) and then removed by 593b697. --- .../dolphinemu/dolphinemu/adapters/GameAdapter.java | 3 ++- .../dolphinemu/adapters/GameRowPresenter.java | 3 ++- .../dolphinemu/dialogs/GameDetailsDialog.java | 10 ++++++---- .../dolphinemu/dialogs/GameSettingsDialog.java | 18 +++++++++++++----- 4 files changed, 23 insertions(+), 11 deletions(-) (limited to 'Source/Android/app/src/main/java') diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java index 5cdb4d984d..7d037522ef 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java @@ -146,7 +146,8 @@ public final class GameAdapter extends RecyclerView.Adapter impl } GameSettingsDialog fragment = - GameSettingsDialog.newInstance(gameId, holder.gameFile.getPlatform()); + GameSettingsDialog. + newInstance(holder.gameFile.getPath(), gameId, holder.gameFile.getPlatform()); ((FragmentActivity) view.getContext()).getSupportFragmentManager().beginTransaction() .add(fragment, GameSettingsDialog.TAG).commit(); return true; diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java index 439c4a94d0..7db90db8aa 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java @@ -91,7 +91,8 @@ public final class GameRowPresenter extends Presenter } GameSettingsDialog fragment = - GameSettingsDialog.newInstance(gameId, holder.gameFile.getPlatform()); + GameSettingsDialog.newInstance(holder.gameFile.getPath(), gameId, + holder.gameFile.getPlatform()); ((FragmentActivity) view.getContext()).getSupportFragmentManager().beginTransaction() .add(fragment, GameSettingsDialog.TAG).commit(); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java index be254a4b7c..133b1ef635 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java @@ -1,14 +1,16 @@ package org.dolphinemu.dolphinemu.dialogs; -import android.app.AlertDialog; import android.app.Dialog; import android.os.Bundle; -import android.support.design.widget.FloatingActionButton; -import android.support.v4.app.DialogFragment; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.DialogFragment; + +import com.google.android.material.floatingactionbutton.FloatingActionButton; + import com.squareup.picasso.Picasso; import org.dolphinemu.dolphinemu.R; @@ -38,7 +40,7 @@ public final class GameDetailsDialog extends DialogFragment { GameFile gameFile = GameFileCacheService.addOrGet(getArguments().getString(ARG_GAME_PATH)); - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity()); ViewGroup contents = (ViewGroup) getActivity().getLayoutInflater() .inflate(R.layout.dialog_game_details, null); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameSettingsDialog.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameSettingsDialog.java index 9d2bf1cf76..a526723c8a 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameSettingsDialog.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameSettingsDialog.java @@ -6,6 +6,7 @@ import android.os.Bundle; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.FragmentActivity; import android.widget.Toast; @@ -20,14 +21,16 @@ import java.io.File; public class GameSettingsDialog extends DialogFragment { public static final String TAG = "GameSettingsDialog"; + public static final String ARG_PATH = "path"; public static final String ARG_GAMEID = "game_id"; public static final String ARG_PLATFORM = "platform"; - public static GameSettingsDialog newInstance(String gameId, int platform) + public static GameSettingsDialog newInstance(String path, String gameId, int platform) { GameSettingsDialog fragment = new GameSettingsDialog(); Bundle arguments = new Bundle(); + arguments.putString(ARG_PATH, path); arguments.putString(ARG_GAMEID, gameId); arguments.putInt(ARG_PLATFORM, platform); fragment.setArguments(arguments); @@ -41,6 +44,7 @@ public class GameSettingsDialog extends DialogFragment { AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); + String path = requireArguments().getString(ARG_PATH); String gameId = requireArguments().getString(ARG_GAMEID); int platform = requireArguments().getInt(ARG_PLATFORM); @@ -52,22 +56,26 @@ public class GameSettingsDialog extends DialogFragment switch (which) { case 0: - SettingsActivity.launch(getContext(), MenuTag.CONFIG, gameId); + GameDetailsDialog.newInstance(path).show((requireActivity()) + .getSupportFragmentManager(), "game_details"); break; case 1: - SettingsActivity.launch(getContext(), MenuTag.GRAPHICS, gameId); + SettingsActivity.launch(getContext(), MenuTag.CONFIG, gameId); break; case 2: - SettingsActivity.launch(getContext(), MenuTag.GCPAD_TYPE, gameId); + SettingsActivity.launch(getContext(), MenuTag.GRAPHICS, gameId); break; case 3: + SettingsActivity.launch(getContext(), MenuTag.GCPAD_TYPE, gameId); + break; + case 4: // Clear option for GC, Wii controls for else if (platform == Platform.GAMECUBE.toInt()) clearGameSettings(gameId); else SettingsActivity.launch(getActivity(), MenuTag.WIIMOTE, gameId); break; - case 4: + case 5: clearGameSettings(gameId); break; } -- cgit v1.2.3 From 5ed0cf8e0e9882896ee30b6deb24e971fda44d13 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sat, 15 Jun 2019 20:14:35 +0200 Subject: Rename GameSettingsDialog to GamePropertiesDialog Since it no longer only contains settings. --- .../dolphinemu/adapters/GameAdapter.java | 10 +- .../dolphinemu/adapters/GameRowPresenter.java | 8 +- .../dolphinemu/dialogs/GamePropertiesDialog.java | 111 +++++++++++++++++++++ .../dolphinemu/dialogs/GameSettingsDialog.java | 110 -------------------- 4 files changed, 120 insertions(+), 119 deletions(-) create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GamePropertiesDialog.java delete mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameSettingsDialog.java (limited to 'Source/Android/app/src/main/java') diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java index 7d037522ef..82d97bee21 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java @@ -13,7 +13,7 @@ import android.view.ViewGroup; import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.activities.EmulationActivity; -import org.dolphinemu.dolphinemu.dialogs.GameSettingsDialog; +import org.dolphinemu.dolphinemu.dialogs.GamePropertiesDialog; import org.dolphinemu.dolphinemu.model.GameFile; import org.dolphinemu.dolphinemu.utils.PicassoUtils; import org.dolphinemu.dolphinemu.viewholders.GameViewHolder; @@ -145,11 +145,11 @@ public final class GameAdapter extends RecyclerView.Adapter impl return true; } - GameSettingsDialog fragment = - GameSettingsDialog. - newInstance(holder.gameFile.getPath(), gameId, holder.gameFile.getPlatform()); + GamePropertiesDialog fragment = + GamePropertiesDialog + .newInstance(holder.gameFile.getPath(), gameId, holder.gameFile.getPlatform()); ((FragmentActivity) view.getContext()).getSupportFragmentManager().beginTransaction() - .add(fragment, GameSettingsDialog.TAG).commit(); + .add(fragment, GamePropertiesDialog.TAG).commit(); return true; } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java index 7db90db8aa..6fef4a941f 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java @@ -13,7 +13,7 @@ import android.view.ViewGroup; import android.widget.ImageView; import org.dolphinemu.dolphinemu.R; -import org.dolphinemu.dolphinemu.dialogs.GameSettingsDialog; +import org.dolphinemu.dolphinemu.dialogs.GamePropertiesDialog; import org.dolphinemu.dolphinemu.model.GameFile; import org.dolphinemu.dolphinemu.ui.platform.Platform; import org.dolphinemu.dolphinemu.utils.PicassoUtils; @@ -90,11 +90,11 @@ public final class GameRowPresenter extends Presenter return true; } - GameSettingsDialog fragment = - GameSettingsDialog.newInstance(holder.gameFile.getPath(), gameId, + GamePropertiesDialog fragment = + GamePropertiesDialog.newInstance(holder.gameFile.getPath(), gameId, holder.gameFile.getPlatform()); ((FragmentActivity) view.getContext()).getSupportFragmentManager().beginTransaction() - .add(fragment, GameSettingsDialog.TAG).commit(); + .add(fragment, GamePropertiesDialog.TAG).commit(); return true; }); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GamePropertiesDialog.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GamePropertiesDialog.java new file mode 100644 index 0000000000..f5f6ea5eae --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GamePropertiesDialog.java @@ -0,0 +1,111 @@ +package org.dolphinemu.dolphinemu.dialogs; + +import android.app.Dialog; +import android.os.Bundle; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.FragmentActivity; + +import android.widget.Toast; + +import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag; +import org.dolphinemu.dolphinemu.features.settings.ui.SettingsActivity; +import org.dolphinemu.dolphinemu.ui.platform.Platform; +import org.dolphinemu.dolphinemu.utils.DirectoryInitialization; + +import java.io.File; + +public class GamePropertiesDialog extends DialogFragment +{ + public static final String TAG = "GamePropertiesDialog"; + public static final String ARG_PATH = "path"; + public static final String ARG_GAMEID = "game_id"; + public static final String ARG_PLATFORM = "platform"; + + public static GamePropertiesDialog newInstance(String path, String gameId, int platform) + { + GamePropertiesDialog fragment = new GamePropertiesDialog(); + + Bundle arguments = new Bundle(); + arguments.putString(ARG_PATH, path); + arguments.putString(ARG_GAMEID, gameId); + arguments.putInt(ARG_PLATFORM, platform); + fragment.setArguments(arguments); + + return fragment; + } + + @NonNull + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) + { + AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); + + String path = requireArguments().getString(ARG_PATH); + String gameId = requireArguments().getString(ARG_GAMEID); + int platform = requireArguments().getInt(ARG_PLATFORM); + + builder.setTitle(requireContext() + .getString(R.string.preferences_game_properties) + ": " + gameId) + .setItems(platform == Platform.GAMECUBE.toInt() ? + R.array.gameSettingsMenusGC : + R.array.gameSettingsMenusWii, (dialog, which) -> + { + switch (which) + { + case 0: + GameDetailsDialog.newInstance(path).show((requireActivity()) + .getSupportFragmentManager(), "game_details"); + break; + case 1: + SettingsActivity.launch(getContext(), MenuTag.CONFIG, gameId); + break; + case 2: + SettingsActivity.launch(getContext(), MenuTag.GRAPHICS, gameId); + break; + case 3: + SettingsActivity.launch(getContext(), MenuTag.GCPAD_TYPE, gameId); + break; + case 4: + // Clear option for GC, Wii controls for else + if (platform == Platform.GAMECUBE.toInt()) + clearGameSettings(gameId); + else + SettingsActivity.launch(getActivity(), MenuTag.WIIMOTE, gameId); + break; + case 5: + clearGameSettings(gameId); + break; + } + }); + return builder.create(); + } + + + private void clearGameSettings(String gameId) + { + String path = + DirectoryInitialization.getUserDirectory() + "/GameSettings/" + gameId + ".ini"; + File gameSettingsFile = new File(path); + if (gameSettingsFile.exists()) + { + if (gameSettingsFile.delete()) + { + Toast.makeText(getContext(), "Cleared settings for " + gameId, Toast.LENGTH_SHORT) + .show(); + } + else + { + Toast.makeText(getContext(), "Unable to clear settings for " + gameId, + Toast.LENGTH_SHORT).show(); + } + } + else + { + Toast.makeText(getContext(), "No game settings to delete", Toast.LENGTH_SHORT).show(); + } + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameSettingsDialog.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameSettingsDialog.java deleted file mode 100644 index a526723c8a..0000000000 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameSettingsDialog.java +++ /dev/null @@ -1,110 +0,0 @@ -package org.dolphinemu.dolphinemu.dialogs; - -import android.app.Dialog; -import android.os.Bundle; - -import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; -import androidx.fragment.app.DialogFragment; -import androidx.fragment.app.FragmentActivity; - -import android.widget.Toast; - -import org.dolphinemu.dolphinemu.R; -import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag; -import org.dolphinemu.dolphinemu.features.settings.ui.SettingsActivity; -import org.dolphinemu.dolphinemu.ui.platform.Platform; -import org.dolphinemu.dolphinemu.utils.DirectoryInitialization; - -import java.io.File; - -public class GameSettingsDialog extends DialogFragment -{ - public static final String TAG = "GameSettingsDialog"; - public static final String ARG_PATH = "path"; - public static final String ARG_GAMEID = "game_id"; - public static final String ARG_PLATFORM = "platform"; - - public static GameSettingsDialog newInstance(String path, String gameId, int platform) - { - GameSettingsDialog fragment = new GameSettingsDialog(); - - Bundle arguments = new Bundle(); - arguments.putString(ARG_PATH, path); - arguments.putString(ARG_GAMEID, gameId); - arguments.putInt(ARG_PLATFORM, platform); - fragment.setArguments(arguments); - - return fragment; - } - - @NonNull - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) - { - AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); - - String path = requireArguments().getString(ARG_PATH); - String gameId = requireArguments().getString(ARG_GAMEID); - int platform = requireArguments().getInt(ARG_PLATFORM); - - builder.setTitle(requireContext().getString(R.string.preferences_game_settings) + ": " + gameId) - .setItems(platform == Platform.GAMECUBE.toInt() ? - R.array.gameSettingsMenusGC : - R.array.gameSettingsMenusWii, (dialog, which) -> - { - switch (which) - { - case 0: - GameDetailsDialog.newInstance(path).show((requireActivity()) - .getSupportFragmentManager(), "game_details"); - break; - case 1: - SettingsActivity.launch(getContext(), MenuTag.CONFIG, gameId); - break; - case 2: - SettingsActivity.launch(getContext(), MenuTag.GRAPHICS, gameId); - break; - case 3: - SettingsActivity.launch(getContext(), MenuTag.GCPAD_TYPE, gameId); - break; - case 4: - // Clear option for GC, Wii controls for else - if (platform == Platform.GAMECUBE.toInt()) - clearGameSettings(gameId); - else - SettingsActivity.launch(getActivity(), MenuTag.WIIMOTE, gameId); - break; - case 5: - clearGameSettings(gameId); - break; - } - }); - return builder.create(); - } - - - private void clearGameSettings(String gameId) - { - String path = - DirectoryInitialization.getUserDirectory() + "/GameSettings/" + gameId + ".ini"; - File gameSettingsFile = new File(path); - if (gameSettingsFile.exists()) - { - if (gameSettingsFile.delete()) - { - Toast.makeText(getContext(), "Cleared settings for " + gameId, Toast.LENGTH_SHORT) - .show(); - } - else - { - Toast.makeText(getContext(), "Unable to clear settings for " + gameId, - Toast.LENGTH_SHORT).show(); - } - } - else - { - Toast.makeText(getContext(), "No game settings to delete", Toast.LENGTH_SHORT).show(); - } - } -} -- cgit v1.2.3 From c2952c466f7945428d12e249a9675995de810537 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sun, 16 Jun 2019 10:00:04 +0200 Subject: Bring back game banner loading code deleted in 3f21975 --- .../dolphinemu/adapters/GameAdapter.java | 2 +- .../dolphinemu/adapters/GameRowPresenter.java | 2 +- .../dolphinemu/utils/GameBannerRequestHandler.java | 36 ++++++++++++++++++++++ .../dolphinemu/dolphinemu/utils/PicassoUtils.java | 23 +++++++++++--- 4 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/GameBannerRequestHandler.java (limited to 'Source/Android/app/src/main/java') diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java index 82d97bee21..3f463b372a 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java @@ -69,7 +69,7 @@ public final class GameAdapter extends RecyclerView.Adapter impl public void onBindViewHolder(GameViewHolder holder, int position) { GameFile gameFile = mGameFiles.get(position); - PicassoUtils.loadGameBanner(holder.imageScreenshot, gameFile); + PicassoUtils.loadGameCover(holder.imageScreenshot, gameFile); holder.textGameTitle.setText(gameFile.getTitle()); holder.textCompany.setText(gameFile.getCompany()); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java index 6fef4a941f..d2d720db53 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java @@ -49,7 +49,7 @@ public final class GameRowPresenter extends Presenter GameFile gameFile = (GameFile) item; holder.imageScreenshot.setImageDrawable(null); - PicassoUtils.loadGameBanner(holder.imageScreenshot, gameFile); + PicassoUtils.loadGameCover(holder.imageScreenshot, gameFile); holder.cardParent.setTitleText(gameFile.getTitle()); holder.cardParent.setContentText(gameFile.getCompany()); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/GameBannerRequestHandler.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/GameBannerRequestHandler.java new file mode 100644 index 0000000000..81362404d1 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/GameBannerRequestHandler.java @@ -0,0 +1,36 @@ +package org.dolphinemu.dolphinemu.utils; + +import android.graphics.Bitmap; + +import com.squareup.picasso.Picasso; +import com.squareup.picasso.Request; +import com.squareup.picasso.RequestHandler; + +import org.dolphinemu.dolphinemu.model.GameFile; + +public class GameBannerRequestHandler extends RequestHandler +{ + private GameFile mGameFile; + + public GameBannerRequestHandler(GameFile gameFile) + { + mGameFile = gameFile; + } + + @Override + public boolean canHandleRequest(Request data) + { + return true; + } + + @Override + public Result load(Request request, int networkPolicy) + { + int[] vector = mGameFile.getBanner(); + int width = mGameFile.getBannerWidth(); + int height = mGameFile.getBannerHeight(); + Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + bitmap.setPixels(vector, 0, width, 0, 0, width, height); + return new Result(bitmap, Picasso.LoadedFrom.DISK); + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/PicassoUtils.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/PicassoUtils.java index cc272e72f9..4dc0c200a6 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/PicassoUtils.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/PicassoUtils.java @@ -2,6 +2,7 @@ package org.dolphinemu.dolphinemu.utils; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; +import android.net.Uri; import android.widget.ImageView; import com.squareup.picasso.Callback; @@ -15,6 +16,22 @@ import java.io.File; public class PicassoUtils { public static void loadGameBanner(ImageView imageView, GameFile gameFile) + { + Picasso picassoInstance = new Picasso.Builder(imageView.getContext()) + .addRequestHandler(new GameBannerRequestHandler(gameFile)) + .build(); + + picassoInstance + .load(Uri.parse("iso:/" + gameFile.getPath())) + .fit() + .noFade() + .noPlaceholder() + .config(Bitmap.Config.RGB_565) + .error(R.drawable.no_banner) + .into(imageView); + } + + public static void loadGameCover(ImageView imageView, GameFile gameFile) { File cover = new File(gameFile.getCustomCoverPath()); if (cover.exists()) @@ -41,10 +58,8 @@ public class PicassoUtils .error(R.drawable.no_banner) .into(imageView); } - /** - * GameTDB has a pretty close to complete collection for US/EN covers. First pass at getting - * the cover will be by the disk's region, second will be the US cover, and third EN. - */ + // GameTDB has a pretty close to complete collection for US/EN covers. First pass at getting + // the cover will be by the disk's region, second will be the US cover, and third EN. else { Picasso.get() -- cgit v1.2.3 From fcb96a179ddcc2f49b3e8c3ed23bb2a6f61655fe Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sun, 16 Jun 2019 10:23:05 +0200 Subject: GameDetailsDialog: Actually load the banner --- .../java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'Source/Android/app/src/main/java') diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java index 133b1ef635..bceae90cbe 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java @@ -11,12 +11,11 @@ import androidx.fragment.app.DialogFragment; import com.google.android.material.floatingactionbutton.FloatingActionButton; -import com.squareup.picasso.Picasso; - import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.activities.EmulationActivity; import org.dolphinemu.dolphinemu.model.GameFile; import org.dolphinemu.dolphinemu.services.GameFileCacheService; +import org.dolphinemu.dolphinemu.utils.PicassoUtils; import de.hdodenhof.circleimageview.CircleImageView; @@ -77,7 +76,7 @@ public final class GameDetailsDialog extends DialogFragment .noPlaceholder() .into(imageGameScreen); - circleBanner.setImageResource(R.drawable.no_banner); + PicassoUtils.loadGameBanner(circleBanner, gameFile); builder.setView(contents); return builder.create(); -- cgit v1.2.3 From 100f032e2f7f7e0f6b2854b41b29d4d7f0c55b66 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sun, 16 Jun 2019 10:37:15 +0200 Subject: GameDetailsDialog: Don't use CircleImageView for banners Because trying to fit a 3:1 banner into a circle looks very awkward. Also move the banner below the title/description now that it takes up more space horizontally. --- .../java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'Source/Android/app/src/main/java') diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java index bceae90cbe..f5c355f046 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java @@ -17,8 +17,6 @@ import org.dolphinemu.dolphinemu.model.GameFile; import org.dolphinemu.dolphinemu.services.GameFileCacheService; import org.dolphinemu.dolphinemu.utils.PicassoUtils; -import de.hdodenhof.circleimageview.CircleImageView; - public final class GameDetailsDialog extends DialogFragment { private static final String ARG_GAME_PATH = "game_path"; @@ -44,7 +42,7 @@ public final class GameDetailsDialog extends DialogFragment .inflate(R.layout.dialog_game_details, null); final ImageView imageGameScreen = contents.findViewById(R.id.image_game_screen); - CircleImageView circleBanner = contents.findViewById(R.id.circle_banner); + ImageView banner = contents.findViewById(R.id.banner); TextView textTitle = contents.findViewById(R.id.text_game_title); TextView textDescription = contents.findViewById(R.id.text_description); @@ -76,7 +74,7 @@ public final class GameDetailsDialog extends DialogFragment .noPlaceholder() .into(imageGameScreen); - PicassoUtils.loadGameBanner(circleBanner, gameFile); + PicassoUtils.loadGameBanner(banner, gameFile); builder.setView(contents); return builder.create(); -- cgit v1.2.3 From 100e7e2b3d40a2329c8cd9cc1394d12fe955b2ba Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sun, 16 Jun 2019 11:06:01 +0200 Subject: GameDetailsDialog: Hide description if empty In particular, Wii games don't have descriptions. --- .../java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'Source/Android/app/src/main/java') diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java index f5c355f046..42b0224088 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java @@ -2,6 +2,7 @@ package org.dolphinemu.dolphinemu.dialogs; import android.app.Dialog; import android.os.Bundle; +import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; @@ -53,9 +54,14 @@ public final class GameDetailsDialog extends DialogFragment FloatingActionButton buttonLaunch = contents.findViewById(R.id.button_launch); String country = getResources().getStringArray(R.array.countryNames)[gameFile.getCountry()]; + String description = gameFile.getDescription(); textTitle.setText(gameFile.getTitle()); textDescription.setText(gameFile.getDescription()); + if (description.isEmpty()) + { + textDescription.setVisibility(View.GONE); + } textCountry.setText(country); textCompany.setText(gameFile.getCompany()); -- cgit v1.2.3 From 84e616337d7bee085546f7b7f1d037eea6d5312e Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sun, 16 Jun 2019 11:14:30 +0200 Subject: GameDetailsDialog: Remove the screenshot ImageView It takes up a lot of space on the screen, and the functionality for saving these screenshots isn't in Dolphin anymore as far as I can tell. --- .../org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java | 10 ---------- .../main/java/org/dolphinemu/dolphinemu/model/GameFile.java | 7 ------- 2 files changed, 17 deletions(-) (limited to 'Source/Android/app/src/main/java') diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java index 42b0224088..f991e685f3 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java @@ -42,7 +42,6 @@ public final class GameDetailsDialog extends DialogFragment ViewGroup contents = (ViewGroup) getActivity().getLayoutInflater() .inflate(R.layout.dialog_game_details, null); - final ImageView imageGameScreen = contents.findViewById(R.id.image_game_screen); ImageView banner = contents.findViewById(R.id.banner); TextView textTitle = contents.findViewById(R.id.text_game_title); @@ -71,15 +70,6 @@ public final class GameDetailsDialog extends DialogFragment EmulationActivity.launch(getActivity(), gameFile); }); - // Fill in the view contents. - Picasso.get() - .load(getArguments().getString(gameFile.getScreenshotPath())) - .fit() - .centerCrop() - .noFade() - .noPlaceholder() - .into(imageGameScreen); - PicassoUtils.loadGameBanner(banner, gameFile); builder.setView(contents); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/GameFile.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/GameFile.java index 70be6cd080..dea006f24e 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/GameFile.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/GameFile.java @@ -54,11 +54,4 @@ public class GameFile { return getPath().substring(0, getPath().lastIndexOf(".")) + ".cover.png"; } - - public String getScreenshotPath() - { - String gameId = getGameId(); - return "file://" + Environment.getExternalStorageDirectory().getPath() + - "/dolphin-emu/ScreenShots/" + gameId + "/" + gameId + "-1.png"; - } } -- cgit v1.2.3 From ec91674d07ac1006ce128d27ec033ca64ca11908 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sun, 16 Jun 2019 11:55:11 +0200 Subject: GameDetailsDialog: Show game ID and revision --- .../java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'Source/Android/app/src/main/java') diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java index f991e685f3..abd9aa367c 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java @@ -49,6 +49,8 @@ public final class GameDetailsDialog extends DialogFragment TextView textCountry = contents.findViewById(R.id.text_country); TextView textCompany = contents.findViewById(R.id.text_company); + TextView textGameId = contents.findViewById(R.id.text_game_id); + TextView textRevision = contents.findViewById(R.id.text_revision); FloatingActionButton buttonLaunch = contents.findViewById(R.id.button_launch); @@ -63,6 +65,8 @@ public final class GameDetailsDialog extends DialogFragment } textCountry.setText(country); textCompany.setText(gameFile.getCompany()); + textGameId.setText(gameFile.getGameId()); + textRevision.setText(Integer.toString(gameFile.getRevision())); buttonLaunch.setOnClickListener(view -> { -- cgit v1.2.3 From 2e13353201b0039c536f763f109c4232faf400ec Mon Sep 17 00:00:00 2001 From: JosJuice Date: Mon, 21 Oct 2019 14:42:57 +0200 Subject: GameDetailsDialog: Convert layout to ConstraintLayout This also removes the FAB from GameDetailsDialog. It was previously outside of the visible area and thus unusable. --- .../org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java | 11 ----------- 1 file changed, 11 deletions(-) (limited to 'Source/Android/app/src/main/java') diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java index abd9aa367c..a0332d2bd4 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java @@ -10,10 +10,7 @@ import android.widget.TextView; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; -import com.google.android.material.floatingactionbutton.FloatingActionButton; - import org.dolphinemu.dolphinemu.R; -import org.dolphinemu.dolphinemu.activities.EmulationActivity; import org.dolphinemu.dolphinemu.model.GameFile; import org.dolphinemu.dolphinemu.services.GameFileCacheService; import org.dolphinemu.dolphinemu.utils.PicassoUtils; @@ -52,8 +49,6 @@ public final class GameDetailsDialog extends DialogFragment TextView textGameId = contents.findViewById(R.id.text_game_id); TextView textRevision = contents.findViewById(R.id.text_revision); - FloatingActionButton buttonLaunch = contents.findViewById(R.id.button_launch); - String country = getResources().getStringArray(R.array.countryNames)[gameFile.getCountry()]; String description = gameFile.getDescription(); @@ -68,12 +63,6 @@ public final class GameDetailsDialog extends DialogFragment textGameId.setText(gameFile.getGameId()); textRevision.setText(Integer.toString(gameFile.getRevision())); - buttonLaunch.setOnClickListener(view -> - { - // Start the emulation activity and send the path of the clicked ROM to it. - EmulationActivity.launch(getActivity(), gameFile); - }); - PicassoUtils.loadGameBanner(banner, gameFile); builder.setView(contents); -- cgit v1.2.3 From 9639dde1149e2d47ec4d7c5f36c2c25e13ae6901 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Mon, 21 Oct 2019 19:12:27 +0200 Subject: Address review comments on old code --- .../java/org/dolphinemu/dolphinemu/utils/GameBannerRequestHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Source/Android/app/src/main/java') diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/GameBannerRequestHandler.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/GameBannerRequestHandler.java index 81362404d1..b8c702f205 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/GameBannerRequestHandler.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/GameBannerRequestHandler.java @@ -10,7 +10,7 @@ import org.dolphinemu.dolphinemu.model.GameFile; public class GameBannerRequestHandler extends RequestHandler { - private GameFile mGameFile; + private final GameFile mGameFile; public GameBannerRequestHandler(GameFile gameFile) { -- cgit v1.2.3