mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-22 22:00:39 -06:00
Merge pull request #7522 from mahdihijazi/updates
Android: Bunch of cleanups & Updates
This commit is contained in:
@ -80,6 +80,7 @@ ext {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation "com.android.support:support-v13:$androidSupportVersion"
|
implementation "com.android.support:support-v13:$androidSupportVersion"
|
||||||
|
implementation "com.android.support:exifinterface:$androidSupportVersion"
|
||||||
implementation "com.android.support:cardview-v7:$androidSupportVersion"
|
implementation "com.android.support:cardview-v7:$androidSupportVersion"
|
||||||
implementation "com.android.support:recyclerview-v7:$androidSupportVersion"
|
implementation "com.android.support:recyclerview-v7:$androidSupportVersion"
|
||||||
implementation "com.android.support:design:$androidSupportVersion"
|
implementation "com.android.support:design:$androidSupportVersion"
|
||||||
@ -91,14 +92,9 @@ dependencies {
|
|||||||
// For REST calls
|
// For REST calls
|
||||||
implementation 'com.android.volley:volley:1.1.0'
|
implementation 'com.android.volley:volley:1.1.0'
|
||||||
|
|
||||||
// For showing the banner as a circle a-la Material Design Guidelines
|
|
||||||
implementation 'de.hdodenhof:circleimageview:2.1.0'
|
|
||||||
|
|
||||||
// For loading huge screenshots from the disk.
|
// For loading huge screenshots from the disk.
|
||||||
implementation 'com.squareup.picasso:picasso:2.5.2'
|
implementation 'com.squareup.picasso:picasso:2.71828'
|
||||||
|
|
||||||
// Allows FRP-style asynchronous operations in Android.
|
|
||||||
implementation 'io.reactivex:rxandroid:1.2.1'
|
|
||||||
implementation 'com.nononsenseapps:filepicker:4.1.0'
|
implementation 'com.nononsenseapps:filepicker:4.1.0'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,11 +183,7 @@ public final class EmulationActivity extends AppCompatActivity
|
|||||||
launcher.putExtra(EXTRA_SELECTED_GAMES, scanForSecondDisc(gameFile));
|
launcher.putExtra(EXTRA_SELECTED_GAMES, scanForSecondDisc(gameFile));
|
||||||
launcher.putExtra(EXTRA_SELECTED_TITLE, gameFile.getTitle());
|
launcher.putExtra(EXTRA_SELECTED_TITLE, gameFile.getTitle());
|
||||||
launcher.putExtra(EXTRA_PLATFORM, gameFile.getPlatform());
|
launcher.putExtra(EXTRA_PLATFORM, gameFile.getPlatform());
|
||||||
Bundle options = new Bundle();
|
activity.startActivityForResult(launcher, MainPresenter.REQUEST_EMULATE_GAME);
|
||||||
|
|
||||||
// I believe this warning is a bug. Activities are FragmentActivity from the support lib
|
|
||||||
//noinspection RestrictedApi
|
|
||||||
activity.startActivityForResult(launcher, MainPresenter.REQUEST_EMULATE_GAME, options);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,83 +0,0 @@
|
|||||||
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.with(imageGameScreen.getContext())
|
|
||||||
.load(getArguments().getString(gameFile.getScreenshotPath()))
|
|
||||||
.fit()
|
|
||||||
.centerCrop()
|
|
||||||
.noFade()
|
|
||||||
.noPlaceholder()
|
|
||||||
.into(imageGameScreen);
|
|
||||||
|
|
||||||
circleBanner.setImageResource(R.drawable.no_banner);
|
|
||||||
|
|
||||||
builder.setView(contents);
|
|
||||||
return builder.create();
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,6 @@
|
|||||||
|
package org.dolphinemu.dolphinemu.utils;
|
||||||
|
|
||||||
|
public interface Action1<T>
|
||||||
|
{
|
||||||
|
void call(T t);
|
||||||
|
}
|
@ -6,8 +6,6 @@ import android.content.Intent;
|
|||||||
|
|
||||||
import org.dolphinemu.dolphinemu.utils.DirectoryInitialization.DirectoryInitializationState;
|
import org.dolphinemu.dolphinemu.utils.DirectoryInitialization.DirectoryInitializationState;
|
||||||
|
|
||||||
import rx.functions.Action1;
|
|
||||||
|
|
||||||
public class DirectoryStateReceiver extends BroadcastReceiver
|
public class DirectoryStateReceiver extends BroadcastReceiver
|
||||||
{
|
{
|
||||||
Action1<DirectoryInitializationState> callback;
|
Action1<DirectoryInitializationState> callback;
|
||||||
|
@ -19,7 +19,7 @@ public class PicassoUtils
|
|||||||
File cover = new File(gameFile.getCustomCoverPath());
|
File cover = new File(gameFile.getCustomCoverPath());
|
||||||
if (cover.exists())
|
if (cover.exists())
|
||||||
{
|
{
|
||||||
Picasso.with(imageView.getContext())
|
Picasso.get()
|
||||||
.load(cover)
|
.load(cover)
|
||||||
.noFade()
|
.noFade()
|
||||||
.noPlaceholder()
|
.noPlaceholder()
|
||||||
@ -31,7 +31,7 @@ public class PicassoUtils
|
|||||||
}
|
}
|
||||||
else if ((cover = new File(gameFile.getCoverPath())).exists())
|
else if ((cover = new File(gameFile.getCoverPath())).exists())
|
||||||
{
|
{
|
||||||
Picasso.with(imageView.getContext())
|
Picasso.get()
|
||||||
.load(cover)
|
.load(cover)
|
||||||
.noFade()
|
.noFade()
|
||||||
.noPlaceholder()
|
.noPlaceholder()
|
||||||
@ -47,7 +47,7 @@ public class PicassoUtils
|
|||||||
*/
|
*/
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Picasso.with(imageView.getContext())
|
Picasso.get()
|
||||||
.load(CoverHelper.buildGameTDBUrl(gameFile, CoverHelper.getRegion(gameFile)))
|
.load(CoverHelper.buildGameTDBUrl(gameFile, CoverHelper.getRegion(gameFile)))
|
||||||
.noFade()
|
.noFade()
|
||||||
.noPlaceholder()
|
.noPlaceholder()
|
||||||
@ -65,9 +65,9 @@ public class PicassoUtils
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onError() // Second pass using US region
|
public void onError(Exception ex) // Second pass using US region
|
||||||
{
|
{
|
||||||
Picasso.with(imageView.getContext())
|
Picasso.get()
|
||||||
.load(CoverHelper.buildGameTDBUrl(gameFile, "US"))
|
.load(CoverHelper.buildGameTDBUrl(gameFile, "US"))
|
||||||
.fit()
|
.fit()
|
||||||
.noFade()
|
.noFade()
|
||||||
@ -87,9 +87,9 @@ public class PicassoUtils
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onError() // Third and last pass using EN region
|
public void onError(Exception ex) // Third and last pass using EN region
|
||||||
{
|
{
|
||||||
Picasso.with(imageView.getContext())
|
Picasso.get()
|
||||||
.load(CoverHelper.buildGameTDBUrl(gameFile, "EN"))
|
.load(CoverHelper.buildGameTDBUrl(gameFile, "EN"))
|
||||||
.fit()
|
.fit()
|
||||||
.noFade()
|
.noFade()
|
||||||
@ -110,7 +110,7 @@ public class PicassoUtils
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onError()
|
public void onError(Exception ex)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -1,130 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:transitionName="card_game">
|
|
||||||
|
|
||||||
<RelativeLayout
|
|
||||||
android:layout_width="480dp"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
|
|
||||||
<de.hdodenhof.circleimageview.CircleImageView
|
|
||||||
android:id="@+id/circle_banner"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:layout_width="48dp"
|
|
||||||
android:layout_height="48dp"
|
|
||||||
android:layout_below="@+id/image_game_screen"
|
|
||||||
android:layout_marginLeft="16dp"
|
|
||||||
android:layout_marginTop="24dp"
|
|
||||||
tools:src="@drawable/placeholder_banner"
|
|
||||||
app:civ_border_color="?android:colorAccent"
|
|
||||||
app:civ_border_width="2dp"/>
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/image_game_screen"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="320dp"
|
|
||||||
android:layout_alignParentEnd="true"
|
|
||||||
android:layout_alignParentLeft="true"
|
|
||||||
android:layout_alignParentRight="true"
|
|
||||||
android:layout_alignParentStart="true"
|
|
||||||
android:layout_alignParentTop="true"
|
|
||||||
android:transitionName="image_game_screen"
|
|
||||||
tools:scaleType="centerCrop"
|
|
||||||
tools:src="@drawable/placeholder_screenshot"/>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/text_game_title"
|
|
||||||
style="@android:style/TextAppearance.Material.Headline"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_alignParentEnd="true"
|
|
||||||
android:layout_below="@+id/image_game_screen"
|
|
||||||
android:layout_marginLeft="36dp"
|
|
||||||
android:layout_marginRight="36dp"
|
|
||||||
android:layout_marginTop="24dp"
|
|
||||||
android:layout_toEndOf="@+id/circle_banner"
|
|
||||||
android:ellipsize="end"
|
|
||||||
tools:text="Rhythm Heaven Fever"/>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/text_description"
|
|
||||||
style="@android:style/TextAppearance.Material.Caption"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_alignEnd="@+id/text_game_title"
|
|
||||||
android:layout_alignStart="@+id/text_game_title"
|
|
||||||
android:layout_below="@+id/text_game_title"
|
|
||||||
android:layout_marginTop="8dp"
|
|
||||||
tools:text="Zany rhythm action!"/>
|
|
||||||
|
|
||||||
<View
|
|
||||||
android:id="@+id/divider"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="1dp"
|
|
||||||
android:layout_alignParentLeft="true"
|
|
||||||
android:layout_alignParentRight="true"
|
|
||||||
android:layout_below="@+id/text_description"
|
|
||||||
android:layout_marginTop="16dp"
|
|
||||||
android:background="#1F000000"/>
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/icon_country"
|
|
||||||
android:layout_width="48dp"
|
|
||||||
android:layout_height="48dp"
|
|
||||||
android:layout_alignStart="@+id/circle_banner"
|
|
||||||
android:layout_alignTop="@+id/divider"
|
|
||||||
android:layout_marginTop="24dp"
|
|
||||||
android:padding="6dp"
|
|
||||||
android:src="@drawable/ic_country"/>
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/icon_company"
|
|
||||||
android:layout_width="48dp"
|
|
||||||
android:layout_height="48dp"
|
|
||||||
android:layout_alignStart="@+id/icon_country"
|
|
||||||
android:layout_below="@+id/icon_country"
|
|
||||||
android:layout_marginTop="16dp"
|
|
||||||
android:padding="6dp"
|
|
||||||
android:src="@drawable/ic_company"
|
|
||||||
android:layout_marginBottom="16dp"/>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/text_country"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_alignBottom="@+id/icon_country"
|
|
||||||
android:layout_alignStart="@+id/text_description"
|
|
||||||
android:layout_alignTop="@+id/icon_country"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
tools:text="United States"/>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/text_company"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_alignBottom="@+id/icon_company"
|
|
||||||
android:layout_alignStart="@+id/text_country"
|
|
||||||
android:layout_alignTop="@+id/icon_company"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
tools:text="Nintendo"/>
|
|
||||||
|
|
||||||
<android.support.design.widget.FloatingActionButton
|
|
||||||
android:id="@+id/button_launch"
|
|
||||||
android:layout_width="56dp"
|
|
||||||
android:layout_height="56dp"
|
|
||||||
android:layout_alignBottom="@+id/image_game_screen"
|
|
||||||
android:layout_alignEnd="@+id/text_game_title"
|
|
||||||
android:layout_marginBottom="-28dp"
|
|
||||||
android:src="@drawable/ic_play"
|
|
||||||
android:stateListAnimator="@animator/button_elevation"
|
|
||||||
app:rippleColor="?android:colorPrimaryDark"
|
|
||||||
app:borderWidth="0dp"
|
|
||||||
app:elevation="6dp"
|
|
||||||
app:pressedTranslationZ="12dp"/>
|
|
||||||
|
|
||||||
</RelativeLayout>
|
|
||||||
|
|
||||||
</FrameLayout>
|
|
@ -11,5 +11,4 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryErro
|
|||||||
# When configured, Gradle will run in incubating parallel mode.
|
# When configured, Gradle will run in incubating parallel mode.
|
||||||
# This option should only be used with decoupled projects. More details, visit
|
# This option should only be used with decoupled projects. More details, visit
|
||||||
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
|
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
|
||||||
# org.gradle.parallel=true
|
# org.gradle.parallel=true
|
||||||
android.useDeprecatedNdk=true
|
|
Reference in New Issue
Block a user