Merge pull request #6085 from hackbar/cleanup

Minor Android UI code cleanups
This commit is contained in:
Anthony 2017-09-29 14:31:43 -07:00 committed by GitHub
commit 187d443a36
16 changed files with 138 additions and 117 deletions

View File

@ -41,6 +41,7 @@ import org.dolphinemu.dolphinemu.fragments.LoadStateFragment;
import org.dolphinemu.dolphinemu.fragments.MenuFragment;
import org.dolphinemu.dolphinemu.fragments.SaveStateFragment;
import org.dolphinemu.dolphinemu.ui.main.MainPresenter;
import org.dolphinemu.dolphinemu.ui.platform.Platform;
import org.dolphinemu.dolphinemu.utils.Animations;
import org.dolphinemu.dolphinemu.utils.Java_GCAdapter;
import org.dolphinemu.dolphinemu.utils.Java_WiimoteAdapter;
@ -298,7 +299,7 @@ public final class EmulationActivity extends AppCompatActivity
mPreferences = PreferenceManager.getDefaultSharedPreferences(this);
mIsGameCubeGame = (NativeLibrary.GetPlatform(path) == 0);
mIsGameCubeGame = Platform.fromNativeInt(NativeLibrary.GetPlatform(path)) == Platform.GAMECUBE;
}
@Override

View File

@ -1,7 +1,10 @@
package org.dolphinemu.dolphinemu.adapters;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.v17.leanback.widget.ImageCardView;
import android.support.v17.leanback.widget.Presenter;
import android.support.v4.content.ContextCompat;
import android.view.ViewGroup;
import android.widget.ImageView;
@ -16,18 +19,11 @@ import org.dolphinemu.dolphinemu.viewholders.TvGameViewHolder;
*/
public final class GameRowPresenter extends Presenter
{
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent)
{
// Create a new view.
ImageCardView gameCard = new ImageCardView(parent.getContext())
{
@Override
public void setSelected(boolean selected)
{
setCardBackground(this, selected);
super.setSelected(selected);
}
};
ImageCardView gameCard = new ImageCardView(parent.getContext());
gameCard.setMainImageAdjustViewBounds(true);
gameCard.setMainImageDimensions(480, 320);
@ -36,12 +32,11 @@ public final class GameRowPresenter extends Presenter
gameCard.setFocusable(true);
gameCard.setFocusableInTouchMode(true);
setCardBackground(gameCard, false);
// Use that view to create a ViewHolder.
return new TvGameViewHolder(gameCard);
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, Object item)
{
TvGameViewHolder holder = (TvGameViewHolder) viewHolder;
@ -64,45 +59,30 @@ public final class GameRowPresenter extends Presenter
holder.company = game.getCompany();
holder.screenshotPath = game.getScreenshotPath();
// Set the platform-dependent background color of the card
int backgroundId;
switch (game.getPlatform())
{
case Game.PLATFORM_GC:
holder.cardParent.setTag(R.color.dolphin_accent_gamecube);
case GAMECUBE:
backgroundId = R.drawable.tv_card_background_gamecube;
break;
case Game.PLATFORM_WII:
holder.cardParent.setTag(R.color.dolphin_accent_wii);
case WII:
backgroundId = R.drawable.tv_card_background_wii;
break;
case Game.PLATFORM_WII_WARE:
holder.cardParent.setTag(R.color.dolphin_accent_wiiware);
case WIIWARE:
backgroundId = R.drawable.tv_card_background_wiiware;
break;
default:
holder.cardParent.setTag(android.R.color.holo_red_dark);
break;
throw new AssertionError("Not reachable.");
}
Context context = holder.cardParent.getContext();
Drawable background = ContextCompat.getDrawable(context, backgroundId);
holder.cardParent.setInfoAreaBackground(background);
}
@Override
public void onUnbindViewHolder(ViewHolder viewHolder)
{
// no op
}
public void setCardBackground(ImageCardView view, boolean selected)
{
int backgroundColor;
if (selected)
{
// TODO: 7/20/15 Try using view tag to set color
backgroundColor = (int) view.getTag();
}
else
{
backgroundColor = R.color.tv_card_unselected;
}
view.setInfoAreaBackgroundColor(view.getResources().getColor(backgroundColor));
}
}

View File

@ -10,6 +10,7 @@ import android.text.SpannableString;
import android.text.style.ImageSpan;
import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.ui.platform.Platform;
import org.dolphinemu.dolphinemu.ui.platform.PlatformGamesFragment;
public class PlatformPagerAdapter extends FragmentPagerAdapter
@ -32,7 +33,7 @@ public class PlatformPagerAdapter extends FragmentPagerAdapter
@Override
public Fragment getItem(int position)
{
return PlatformGamesFragment.newInstance(position);
return PlatformGamesFragment.newInstance(Platform.fromPosition(position));
}
@Override

View File

@ -4,13 +4,10 @@ import android.content.ContentValues;
import android.database.Cursor;
import android.os.Environment;
import org.dolphinemu.dolphinemu.ui.platform.Platform;
public final class Game
{
public static final int PLATFORM_GC = 0;
public static final int PLATFORM_WII = 1;
public static final int PLATFORM_WII_WARE = 2;
public static final int PLATFORM_ALL = 3;
// Copied from IVolume::ECountry. Update these if that is ever modified.
public static final int COUNTRY_EUROPE = 0;
public static final int COUNTRY_JAPAN = 1;
@ -36,10 +33,10 @@ public final class Game
private String mScreenshotPath;
private String mCompany;
private int mPlatform;
private Platform mPlatform;
private int mCountry;
public Game(int platform, String title, String description, int country, String path, String gameId, String company, String screenshotPath)
public Game(Platform platform, String title, String description, int country, String path, String gameId, String company, String screenshotPath)
{
mPlatform = platform;
mTitle = title;
@ -51,7 +48,7 @@ public final class Game
mScreenshotPath = screenshotPath;
}
public int getPlatform()
public Platform getPlatform()
{
return mPlatform;
}
@ -91,13 +88,13 @@ public final class Game
return mScreenshotPath;
}
public static ContentValues asContentValues(int platform, String title, String description, int country, String path, String gameId, String company)
public static ContentValues asContentValues(Platform platform, String title, String description, int country, String path, String gameId, String company)
{
ContentValues values = new ContentValues();
String screenPath = PATH_SCREENSHOT_FOLDER + gameId + "/" + gameId + "-1.png";
values.put(GameDatabase.KEY_GAME_PLATFORM, platform);
values.put(GameDatabase.KEY_GAME_PLATFORM, platform.toInt());
values.put(GameDatabase.KEY_GAME_TITLE, title);
values.put(GameDatabase.KEY_GAME_DESCRIPTION, description);
values.put(GameDatabase.KEY_GAME_COUNTRY, company);
@ -111,7 +108,7 @@ public final class Game
public static Game fromCursor(Cursor cursor)
{
return new Game(cursor.getInt(GameDatabase.GAME_COLUMN_PLATFORM),
return new Game(Platform.fromInt(cursor.getInt(GameDatabase.GAME_COLUMN_PLATFORM)),
cursor.getString(GameDatabase.GAME_COLUMN_TITLE),
cursor.getString(GameDatabase.GAME_COLUMN_DESCRIPTION),
cursor.getInt(GameDatabase.GAME_COLUMN_COUNTRY),

View File

@ -7,6 +7,7 @@ import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import org.dolphinemu.dolphinemu.NativeLibrary;
import org.dolphinemu.dolphinemu.ui.platform.Platform;
import org.dolphinemu.dolphinemu.utils.Log;
import java.io.File;
@ -200,12 +201,7 @@ public final class GameDatabase extends SQLiteOpenHelper
gameId = filePath.substring(filePath.lastIndexOf("/") + 1, filePath.lastIndexOf("."));
}
// If the game's platform field is empty, file under Wiiware. // TODO Something less dum
int platform = NativeLibrary.GetPlatform(filePath);
if (platform == -1)
{
platform = Game.PLATFORM_WII_WARE;
}
Platform platform = Platform.fromNativeInt(NativeLibrary.GetPlatform(filePath));
ContentValues game = Game.asContentValues(platform,
name,
@ -257,31 +253,22 @@ public final class GameDatabase extends SQLiteOpenHelper
database.close();
}
public Observable<Cursor> getGamesForPlatform(final int platform)
public Observable<Cursor> getGamesForPlatform(final Platform platform)
{
return Observable.create(new Observable.OnSubscribe<Cursor>()
{
@Override
public void call(Subscriber<? super Cursor> subscriber)
{
Log.info("[GameDatabase] [GameDatabase] Reading games list...");
Log.info("[GameDatabase] Reading games list...");
String whereClause = null;
String[] whereArgs = null;
// If -1 passed in, return all games. Else, return games for one platform only.
if (platform >= 0)
{
whereClause = KEY_GAME_PLATFORM + " = ?";
whereArgs = new String[]{Integer.toString(platform)};
}
String[] whereArgs = new String[]{Integer.toString(platform.toInt())};
SQLiteDatabase database = getReadableDatabase();
Cursor resultCursor = database.query(
TABLE_NAME_GAMES,
null,
whereClause,
KEY_GAME_PLATFORM + " = ?",
whereArgs,
null,
null,

View File

@ -20,6 +20,7 @@ import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.activities.AddDirectoryActivity;
import org.dolphinemu.dolphinemu.adapters.PlatformPagerAdapter;
import org.dolphinemu.dolphinemu.model.GameProvider;
import org.dolphinemu.dolphinemu.ui.platform.Platform;
import org.dolphinemu.dolphinemu.ui.platform.PlatformGamesView;
import org.dolphinemu.dolphinemu.ui.settings.SettingsActivity;
import org.dolphinemu.dolphinemu.utils.PermissionsHandler;
@ -114,7 +115,8 @@ public final class MainActivity extends AppCompatActivity implements MainView
public void refreshFragmentScreenshot(int fragmentPosition)
{
// Invalidate Picasso image so that the new screenshot is animated in.
PlatformGamesView fragment = getPlatformGamesView(mViewPager.getCurrentItem());
Platform platform = Platform.fromPosition(mViewPager.getCurrentItem());
PlatformGamesView fragment = getPlatformGamesView(platform);
if (fragment != null)
{
@ -135,7 +137,7 @@ public final class MainActivity extends AppCompatActivity implements MainView
}
@Override
public void showGames(int platformIndex, Cursor games)
public void showGames(Platform platform, Cursor games)
{
// no-op. Handled by PlatformGamesFragment.
}
@ -189,7 +191,9 @@ public final class MainActivity extends AppCompatActivity implements MainView
private void refreshFragment()
{
PlatformGamesView fragment = getPlatformGamesView(mViewPager.getCurrentItem());
Platform platform = Platform.fromPosition(mViewPager.getCurrentItem());
PlatformGamesView fragment = getPlatformGamesView(platform);
if (fragment != null)
{
fragment.refresh();
@ -197,7 +201,7 @@ public final class MainActivity extends AppCompatActivity implements MainView
}
@Nullable
private PlatformGamesView getPlatformGamesView(int platform)
private PlatformGamesView getPlatformGamesView(Platform platform)
{
String fragmentTag = "android:switcher:" + mViewPager.getId() + ":" + platform;

View File

@ -2,10 +2,12 @@ package org.dolphinemu.dolphinemu.ui.main;
import android.database.Cursor;
import org.dolphinemu.dolphinemu.BuildConfig;
import org.dolphinemu.dolphinemu.DolphinApplication;
import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.model.GameDatabase;
import org.dolphinemu.dolphinemu.ui.platform.Platform;
import org.dolphinemu.dolphinemu.utils.SettingsFile;
import rx.android.schedulers.AndroidSchedulers;
@ -87,11 +89,11 @@ public final class MainPresenter
}
}
public void loadGames(final int platformIndex)
public void loadGames(final Platform platform)
{
GameDatabase databaseHelper = DolphinApplication.databaseHelper;
databaseHelper.getGamesForPlatform(platformIndex)
databaseHelper.getGamesForPlatform(platform)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Cursor>()
@ -99,7 +101,7 @@ public final class MainPresenter
@Override
public void call(Cursor games)
{
mView.showGames(platformIndex, games);
mView.showGames(platform, games);
}
}
);

View File

@ -2,6 +2,8 @@ package org.dolphinemu.dolphinemu.ui.main;
import android.database.Cursor;
import org.dolphinemu.dolphinemu.ui.platform.Platform;
/**
* Abstraction for the screen that shows on application launch.
* Implementations will differ primarily to target touch-screen
@ -39,8 +41,8 @@ public interface MainView
* To be called when an asynchronous database read completes. Passes the
* result, in this case a {@link Cursor} to the view.
*
* @param platformIndex Which platform contains these games.
* @param platform Which platform to show games for.
* @param games A Cursor containing the games read from the database.
*/
void showGames(int platformIndex, Cursor games);
void showGames(Platform platform, Cursor games);
}

View File

@ -27,6 +27,7 @@ import org.dolphinemu.dolphinemu.adapters.GameRowPresenter;
import org.dolphinemu.dolphinemu.adapters.SettingsRowPresenter;
import org.dolphinemu.dolphinemu.model.Game;
import org.dolphinemu.dolphinemu.model.TvSettingsItem;
import org.dolphinemu.dolphinemu.ui.platform.Platform;
import org.dolphinemu.dolphinemu.ui.settings.SettingsActivity;
import org.dolphinemu.dolphinemu.utils.PermissionsHandler;
import org.dolphinemu.dolphinemu.utils.StartupHandler;
@ -130,9 +131,9 @@ public final class TvMainActivity extends Activity implements MainView
}
@Override
public void showGames(int platformIndex, Cursor games)
public void showGames(Platform platform, Cursor games)
{
ListRow row = buildGamesRow(platformIndex, games);
ListRow row = buildGamesRow(platform, games);
// Add row to the adapter only if it is not empty.
if (row != null)
@ -187,13 +188,12 @@ public final class TvMainActivity extends Activity implements MainView
}
private void loadGames() {
// For each platform
for (int platformIndex = 0; platformIndex <= Game.PLATFORM_ALL; ++platformIndex) {
mPresenter.loadGames(platformIndex);
for (Platform platform : Platform.values()) {
mPresenter.loadGames(platform);
}
}
private ListRow buildGamesRow(int platform, Cursor games)
private ListRow buildGamesRow(Platform platform, Cursor games)
{
// Create an adapter for this row.
CursorObjectAdapter row = new CursorObjectAdapter(new GameRowPresenter());
@ -220,32 +220,10 @@ public final class TvMainActivity extends Activity implements MainView
}
});
String headerName;
switch (platform)
{
case Game.PLATFORM_GC:
headerName = "GameCube Games";
break;
case Game.PLATFORM_WII:
headerName = "Wii Games";
break;
case Game.PLATFORM_WII_WARE:
headerName = "WiiWare";
break;
case Game.PLATFORM_ALL:
headerName = "All Games";
break;
default:
headerName = "Error";
break;
}
String headerName = platform.getHeaderName();
// Create a header for this row.
HeaderItem header = new HeaderItem(platform, headerName);
HeaderItem header = new HeaderItem(platform.toInt(), platform.getHeaderName());
// Create the row, passing it the filled adapter and the header, and give it to the master adapter.
return new ListRow(header, row);

View File

@ -0,0 +1,47 @@
package org.dolphinemu.dolphinemu.ui.platform;
/** Enum to represent platform (eg GameCube, Wii). */
public enum Platform
{
GAMECUBE(0, "GameCube Games"),
WII(1, "Wii Games"),
WIIWARE(2, "WiiWare Games");
private final int value;
private final String headerName;
Platform(int value, String headerName)
{
this.value = value;
this.headerName = headerName;
}
public static Platform fromInt(int i)
{
return values()[i];
}
public static Platform fromNativeInt(int i)
{
// If the game's platform field is empty, file under Wiiware. // TODO Something less dum
if (i == -1) {
return Platform.WIIWARE;
}
return values()[i];
}
public static Platform fromPosition(int position)
{
return values()[position];
}
public int toInt()
{
return value;
}
public String getHeaderName()
{
return headerName;
}
}

View File

@ -22,12 +22,12 @@ public final class PlatformGamesFragment extends Fragment implements PlatformGam
private GameAdapter mAdapter;
private RecyclerView mRecyclerView;
public static PlatformGamesFragment newInstance(int platform)
public static PlatformGamesFragment newInstance(Platform platform)
{
PlatformGamesFragment fragment = new PlatformGamesFragment();
Bundle args = new Bundle();
args.putInt(ARG_PLATFORM, platform);
args.putSerializable(ARG_PLATFORM, platform);
fragment.setArguments(args);
return fragment;
@ -38,7 +38,7 @@ public final class PlatformGamesFragment extends Fragment implements PlatformGam
{
super.onCreate(savedInstanceState);
mPresenter.onCreate(getArguments().getInt(ARG_PLATFORM));
mPresenter.onCreate((Platform) getArguments().getSerializable(ARG_PLATFORM));
}
@Nullable

View File

@ -15,14 +15,14 @@ public final class PlatformGamesPresenter
{
private final PlatformGamesView mView;
private int mPlatform;
private Platform mPlatform;
public PlatformGamesPresenter(PlatformGamesView view)
{
mView = view;
}
public void onCreate(int platform)
public void onCreate(Platform platform)
{
mPlatform = platform;
}

View File

@ -25,8 +25,6 @@ public final class TvGameViewHolder extends Presenter.ViewHolder
public String company;
public String screenshotPath;
public int backgroundColor;
public TvGameViewHolder(View itemView)
{
super(itemView);

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_selected="true"
android:drawable="@color/dolphin_accent_gamecube" />
<item
android:drawable="@color/tv_card_unselected" />
</selector>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_selected="true"
android:drawable="@color/dolphin_accent_wii" />
<item
android:drawable="@color/tv_card_unselected" />
</selector>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_selected="true"
android:drawable="@color/dolphin_accent_wiiware" />
<item
android:drawable="@color/tv_card_unselected" />
</selector>