diff options
| author | JosJuice <josjuice@gmail.com> | 2019-11-25 11:31:37 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-11-25 11:31:37 +0100 |
| commit | 70ee5234ba4782ae9e16a81266f97024a96245cf (patch) | |
| tree | 39393bf4fc93c2b2e426713bfec986fcb98199a8 /Source/Android/app/src/main/java | |
| parent | ac77df9e90da825a8e05985c69623ffef2bae890 (diff) | |
| parent | 9639dde1149e2d47ec4d7c5f36c2c25e13ae6901 (diff) | |
Merge pull request #8188 from JosJuice/android-game-details
Android: Bring back and update the game details dialog
Diffstat (limited to 'Source/Android/app/src/main/java')
| -rw-r--r-- | Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java | 11 | ||||
| -rw-r--r-- | Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java | 11 | ||||
| -rw-r--r-- | Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java | 71 | ||||
| -rw-r--r-- | Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GamePropertiesDialog.java (renamed from Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameSettingsDialog.java) | 27 | ||||
| -rw-r--r-- | Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/GameFile.java | 7 | ||||
| -rw-r--r-- | Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/GameBannerRequestHandler.java | 36 | ||||
| -rw-r--r-- | Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/PicassoUtils.java | 23 |
7 files changed, 156 insertions, 30 deletions
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..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 @@ -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; @@ -69,7 +69,7 @@ public final class GameAdapter extends RecyclerView.Adapter<GameViewHolder> 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()); @@ -145,10 +145,11 @@ public final class GameAdapter extends RecyclerView.Adapter<GameViewHolder> impl return true; } - GameSettingsDialog fragment = - GameSettingsDialog.newInstance(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 439c4a94d0..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 @@ -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; @@ -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()); @@ -90,10 +90,11 @@ public final class GameRowPresenter extends Presenter return true; } - GameSettingsDialog fragment = - GameSettingsDialog.newInstance(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/dialogs/GameDetailsDialog.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java new file mode 100644 index 0000000000..a0332d2bd4 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java @@ -0,0 +1,71 @@ +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; + +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.DialogFragment; + +import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.model.GameFile; +import org.dolphinemu.dolphinemu.services.GameFileCacheService; +import org.dolphinemu.dolphinemu.utils.PicassoUtils; + +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(requireActivity()); + ViewGroup contents = (ViewGroup) getActivity().getLayoutInflater() + .inflate(R.layout.dialog_game_details, null); + + ImageView banner = contents.findViewById(R.id.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); + TextView textGameId = contents.findViewById(R.id.text_game_id); + TextView textRevision = contents.findViewById(R.id.text_revision); + + 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()); + textGameId.setText(gameFile.getGameId()); + textRevision.setText(Integer.toString(gameFile.getRevision())); + + PicassoUtils.loadGameBanner(banner, gameFile); + + builder.setView(contents); + return builder.create(); + } +} 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/GamePropertiesDialog.java index 9d2bf1cf76..f5f6ea5eae 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/GamePropertiesDialog.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; @@ -17,17 +18,19 @@ import org.dolphinemu.dolphinemu.utils.DirectoryInitialization; import java.io.File; -public class GameSettingsDialog extends DialogFragment +public class GamePropertiesDialog extends DialogFragment { - public static final String TAG = "GameSettingsDialog"; + 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 GameSettingsDialog newInstance(String gameId, int platform) + public static GamePropertiesDialog newInstance(String path, String gameId, int platform) { - GameSettingsDialog fragment = new GameSettingsDialog(); + 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); @@ -41,10 +44,12 @@ 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); - builder.setTitle(requireContext().getString(R.string.preferences_game_settings) + ": " + gameId) + builder.setTitle(requireContext() + .getString(R.string.preferences_game_properties) + ": " + gameId) .setItems(platform == Platform.GAMECUBE.toInt() ? R.array.gameSettingsMenusGC : R.array.gameSettingsMenusWii, (dialog, which) -> @@ -52,22 +57,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; } 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"; - } } 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..b8c702f205 --- /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 final 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; @@ -16,6 +17,22 @@ 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() |
