diff --git a/.idea/misc.xml b/.idea/misc.xml index 406ac20..738edfe 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -56,7 +56,7 @@ - + diff --git a/app/build.gradle b/app/build.gradle index 3d6046a..e704de1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -7,8 +7,8 @@ android { applicationId "com.de.aldo_apps.aldo.mariokartcircuitselector" minSdkVersion 16 targetSdkVersion 25 - versionCode 12 - versionName "0.1.12" + versionCode 16 + versionName "0.1.16" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { @@ -32,6 +32,6 @@ dependencies { compile 'devlight.io:navigationtabbar:1.2.5' compile 'com.android.support:cardview-v7:25.3.1' compile 'de.hdodenhof:circleimageview:2.1.0' - testCompile 'junit:junit:4.12' compile 'com.android.support:design:25.3.1' + testCompile 'junit:junit:4.12' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9ddf72e..97de587 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,7 +2,7 @@ - + - + @@ -19,31 +22,34 @@ - + + - + - + - + - + + android:exported="true" /> + \ No newline at end of file diff --git a/app/src/main/assets/databases/mario_kart_circuit_selector b/app/src/main/assets/databases/mario_kart_circuit_selector index 35d74ee..8a31e91 100644 Binary files a/app/src/main/assets/databases/mario_kart_circuit_selector and b/app/src/main/assets/databases/mario_kart_circuit_selector differ diff --git a/app/src/main/assets/databases/mario_kart_circuit_selector_upgrade_2-3.sql b/app/src/main/assets/databases/mario_kart_circuit_selector_upgrade_2-3.sql new file mode 100644 index 0000000..56c8358 --- /dev/null +++ b/app/src/main/assets/databases/mario_kart_circuit_selector_upgrade_2-3.sql @@ -0,0 +1,60 @@ +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:SMK_Sprite_Peach.png" WHERE `_rowid_`='1'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:SMK_Sprite_Mario.png" WHERE `_rowid_`='2'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:SMK_Sprite_Luigi.png" WHERE `_rowid_`='3'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:SMK_Sprite_Toad.png" WHERE `_rowid_`='4'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:SMK_Sprite_Koopa.png" WHERE `_rowid_`='5'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:SMK_Sprite_Bowser.png" WHERE `_rowid_`='6'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:SMK_Sprite_Yoshi.png" WHERE `_rowid_`='7'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:SMK_Sprite_Donkey_Kong_Jr..png" WHERE `_rowid_`='8'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MK64_Artwork_Mario.gif" WHERE `_rowid_`='9'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MK64_Artwork_Luigi.gif" WHERE `_rowid_`='10'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MK64_Artwork_Peach.jpg" WHERE `_rowid_`='11'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MK64_Artwork_Toad.jpg" WHERE `_rowid_`='12'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MK64_Artwork_Yoshi.gif" WHERE `_rowid_`='13'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MK64_Artwork_DK.gif" WHERE `_rowid_`='14'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MK64_Artwork_Wario.jpg" WHERE `_rowid_`='15'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MK64_Artwork_Bowser.gif" WHERE `_rowid_`='16'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKSC_Sprite_Mario.png" WHERE `_rowid_`='17'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKSC_Sprite_Luigi.png" WHERE `_rowid_`='18'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKSC_Sprite_Peach.png" WHERE `_rowid_`='19'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKSC_Sprite_Toad.png" WHERE `_rowid_`='20'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKSC_Sprite_Yoshi.png" WHERE `_rowid_`='21'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKSC_Sprite_Donkey_Kong.png" WHERE `_rowid_`='22'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKSC_Sprite_Wario.png" WHERE `_rowid_`='23'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKSC_Sprite_Bowser.png" WHERE `_rowid_`='24'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKDD_Sprite_Mario.png" WHERE `_rowid_`='25'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKDD_Sprite_Luigi.png" WHERE `_rowid_`='26'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKDD_Sprite_Peach.png" WHERE `_rowid_`='27'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKDD_Sprite_Daisy.png" WHERE `_rowid_`='28'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKDD_Sprite_Yoshi.png" WHERE `_rowid_`='29'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKDD_Sprite_Birdo.png" WHERE `_rowid_`='30'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKDD_Sprite_Baby_Mario.png" WHERE `_rowid_`='31'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKDD_Sprite_Baby_Luigi.png" WHERE `_rowid_`='32'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKDD_Sprite_Toad.png" WHERE `_rowid_`='33'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKDD_Sprite_Toadette.png" WHERE `_rowid_`='34'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKDD_Sprite_Koopa.png" WHERE `_rowid_`='35'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKDD_Sprite_Parakoopa.png" WHERE `_rowid_`='36'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKDD_Sprite_Donkey_Kong.png" WHERE `_rowid_`='37'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKDD_Sprite_Diddy_Kong.png" WHERE `_rowid_`='38'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKDD_Sprite_Bowser.png" WHERE `_rowid_`='39'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKDD_Sprite_Bowser_Jr.png" WHERE `_rowid_`='40'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKDD_Sprite_Wario.png" WHERE `_rowid_`='41'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKDD_Sprite_Waluigi.png" WHERE `_rowid_`='42'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKDD_Sprite_Mutant-Tyranha.png" WHERE `_rowid_`='43'; +UPDATE `character` SET `cover_uri`="http://mariowiki.net/wiki/Datei:MKDD_Sprite_König_Buu_Huu.png" WHERE `_rowid_`='44'; +UPDATE `character` SET `cover_uri`="https://www.mariowiki.com/File:MKDS-Mario_Artwork.png" WHERE `_rowid_`='45'; +UPDATE `character` SET `cover_uri`="https://www.mariowiki.com/File:MKDS-Luigi_Artwork.png" WHERE `_rowid_`='46'; +UPDATE `character` SET `cover_uri`="https://www.mariowiki.com/File:MKDS-Peach_Artwork.png" WHERE `_rowid_`='47'; +UPDATE `character` SET `cover_uri`="https://www.mariowiki.com/File:MKDS-Yoshi_Artwork.png" WHERE `_rowid_`='48'; +UPDATE `character` SET `cover_uri`="https://www.mariowiki.com/File:MKDS-Toad_Artwork.png" WHERE `_rowid_`='49'; +UPDATE `character` SET `cover_uri`="https://www.mariowiki.com/File:MKDS-Donkey_Kong_Artwork.png" WHERE `_rowid_`='50'; +UPDATE `character` SET `cover_uri`="https://www.mariowiki.com/File:MKDS-Wario_Artwork.png" WHERE `_rowid_`='51'; +UPDATE `character` SET `cover_uri`="https://www.mariowiki.com/File:MKDS-Bowser_Artwork.png" WHERE `_rowid_`='52'; +UPDATE `character` SET `cover_uri`="https://www.mariowiki.com/images/thumb/2/2d/PrincessDaisyMKDS.png/120px-PrincessDaisyMKDS.png" WHERE `_rowid_`='53'; +UPDATE `character` SET `cover_uri`="https://www.mariowiki.com/images/thumb/5/53/MKDS-Dry_Bones_Artwork.png/120px-MKDS-Dry_Bones_Artwork.png" WHERE `_rowid_`='54'; +UPDATE `character` SET `cover_uri`="https://www.mariowiki.com/images/thumb/b/bb/MKDS-Waluigi_Artwork.png/103px-MKDS-Waluigi_Artwork.png" WHERE `_rowid_`='55'; +UPDATE `character` SET `cover_uri`="https://www.mariowiki.com/images/thumb/b/b5/MKDS-ROB_Artwork.png/120px-MKDS-ROB_Artwork.png" WHERE `_rowid_`='56'; +UPDATE `character` SET `cover_uri`="https://www.mariowiki.com/images/thumb/6/6b/Shy_Guy_-_MKDS.png/120px-Shy_Guy_-_MKDS.png" WHERE `_rowid_`='57'; + + + diff --git a/app/src/main/assets/databases/mario_kart_circuit_selector_upgrade_3-4.sql b/app/src/main/assets/databases/mario_kart_circuit_selector_upgrade_3-4.sql new file mode 100644 index 0000000..a6d28ff --- /dev/null +++ b/app/src/main/assets/databases/mario_kart_circuit_selector_upgrade_3-4.sql @@ -0,0 +1,2 @@ +UPDATE `character` SET `cover_uri`=""; + diff --git a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/AccessoryContentProvider.java b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/AccessoryContentProvider.java index 902a5c4..691b1c6 100644 --- a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/AccessoryContentProvider.java +++ b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/AccessoryContentProvider.java @@ -41,6 +41,8 @@ public class AccessoryContentProvider extends ContentProvider { static { uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); + uriMatcher.addURI(PROVIDER_NAME, "games", Constants.GAME_LOADER_ID); + uriMatcher.addURI(PROVIDER_NAME, "ruleset", Constants.RULESET_LOADER_ID); uriMatcher.addURI(PROVIDER_NAME, "characters", Constants.CHARACTER_LOADER_ID); uriMatcher.addURI(PROVIDER_NAME, "tracks", Constants.TRACK_LOADER_ID); uriMatcher.addURI(PROVIDER_NAME, "karts", Constants.KART_LOADER_ID); @@ -84,19 +86,30 @@ public class AccessoryContentProvider extends ContentProvider { switch (resId) { case Constants.CHARACTER_LOADER_ID: Log.d(TAG, "query: Getting all Characters."); - return mHandler.getAllCharacters(Constants.PROJECTION_CHARACTER, null, null); + return mHandler.getAllCharacters(Constants.PROJECTION_CHARACTER, + selection, selectionArgs); case Constants.KART_LOADER_ID: Log.d(TAG, "query: Getting all Karts."); - return mHandler.getAllKarts(Constants.PROJECTION_KART, null, null); + return mHandler.getAllKarts(Constants.PROJECTION_KART, + selection, selectionArgs); case Constants.ACCESSORY_LOADER_ID: - Log.d(TAG, "query: Getting all Accessories."); - return mHandler.getAllAccessories(Constants.PROJECTION_ACCESSORY, null, null); + Log.d(TAG, "query: Getting all Acessories."); + return mHandler.getAllAccessories(Constants.PROJECTION_ACCESSORY, + selection, selectionArgs); case Constants.TRACK_LOADER_ID: Log.d(TAG, "query: Getting all Tracks."); - return mHandler.getAllTracks(Constants.PROJECTION_TRACK, null, null); + return mHandler.getAllTracks(Constants.PROJECTION_TRACK, + selection, selectionArgs); case Constants.WHEELS_LOADER_ID: Log.d(TAG, "query: Getting all Wheels."); - return mHandler.getAllWheels(Constants.PROJECTION_WHEELS, null, null); + return mHandler.getAllWheels(Constants.PROJECTION_WHEELS, + selection, selectionArgs); + case Constants.GAME_LOADER_ID: + Log.d(TAG, "query: Getting all Games."); + return mHandler.getAllGames(Constants.PROJECTION_GAME, null, null); + case Constants.RULESET_LOADER_ID: + Log.d(TAG, "query: Getting all Rulesets."); + return mHandler.getAllRulesets(Constants.PROJECTION_RULESET, null, null); default: Log.d(TAG, "query: UriMatcher returned: " + uriMatcher.match(uri)); return null; diff --git a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/CharacterContentProvider.java b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/CharacterContentProvider.java index 0568e7e..7e124d4 100644 --- a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/CharacterContentProvider.java +++ b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/CharacterContentProvider.java @@ -41,6 +41,8 @@ public class CharacterContentProvider extends ContentProvider { static { uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); + uriMatcher.addURI(PROVIDER_NAME, "games", Constants.GAME_LOADER_ID); + uriMatcher.addURI(PROVIDER_NAME, "ruleset", Constants.RULESET_LOADER_ID); uriMatcher.addURI(PROVIDER_NAME, "characters", Constants.CHARACTER_LOADER_ID); uriMatcher.addURI(PROVIDER_NAME, "tracks", Constants.TRACK_LOADER_ID); uriMatcher.addURI(PROVIDER_NAME, "karts", Constants.KART_LOADER_ID); @@ -83,19 +85,30 @@ public class CharacterContentProvider extends ContentProvider { switch (resId) { case Constants.CHARACTER_LOADER_ID: Log.d(TAG, "query: Getting all Characters."); - return mHandler.getAllCharacters(Constants.PROJECTION_CHARACTER, null, null); + return mHandler.getAllCharacters(Constants.PROJECTION_CHARACTER, + selection, selectionArgs); case Constants.KART_LOADER_ID: Log.d(TAG, "query: Getting all Karts."); - return mHandler.getAllKarts(Constants.PROJECTION_KART, null, null); + return mHandler.getAllKarts(Constants.PROJECTION_KART, + selection, selectionArgs); case Constants.ACCESSORY_LOADER_ID: Log.d(TAG, "query: Getting all Acessories."); - return mHandler.getAllAccessories(Constants.PROJECTION_ACCESSORY, null, null); + return mHandler.getAllAccessories(Constants.PROJECTION_ACCESSORY, + selection, selectionArgs); case Constants.TRACK_LOADER_ID: Log.d(TAG, "query: Getting all Tracks."); - return mHandler.getAllTracks(Constants.PROJECTION_TRACK, null, null); + return mHandler.getAllTracks(Constants.PROJECTION_TRACK, + selection, selectionArgs); case Constants.WHEELS_LOADER_ID: Log.d(TAG, "query: Getting all Wheels."); - return mHandler.getAllWheels(Constants.PROJECTION_WHEELS, null, null); + return mHandler.getAllWheels(Constants.PROJECTION_WHEELS, + selection, selectionArgs); + case Constants.GAME_LOADER_ID: + Log.d(TAG, "query: Getting all Games."); + return mHandler.getAllGames(Constants.PROJECTION_GAME, null, null); + case Constants.RULESET_LOADER_ID: + Log.d(TAG, "query: Getting all Rulesets."); + return mHandler.getAllRulesets(Constants.PROJECTION_RULESET, null, null); default: Log.d(TAG, "query: UriMatcher returned: " + uriMatcher.match(uri)); return null; diff --git a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/Constants.java b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/Constants.java index bf50207..638fc5e 100644 --- a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/Constants.java +++ b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/Constants.java @@ -13,7 +13,7 @@ public final class Constants { /** * The Version Code of the Database. */ - static final Integer DATABASE_VERSION = 2; + static final Integer DATABASE_VERSION = 4; /** * As SQLite does not have a native boolean value, we use integers to represent true and false. @@ -57,6 +57,16 @@ public final class Constants { */ public static final int WHEELS_LOADER_ID = BASE_LOADER_ID + 4; + /** + * LoaderID of the game loader. + */ + public static final int GAME_LOADER_ID = BASE_LOADER_ID + 5; + + /** + * LoaderID of the ruleset loader. + */ + public static final int RULESET_LOADER_ID = BASE_LOADER_ID + 6; + /** * The Key for the projection being provided via a bundle. */ @@ -202,10 +212,15 @@ public final class Constants { */ public static final String KEY_NUMBER = "number"; + /** + * Global constant defining the where game is clause. + */ + public static final String SELECT_WHERE_GAME = " game = ?"; + /** * The Projection to retrieve all Information of a game object from database. */ - static final String[] PROJECTION_GAME = { + public static final String[] PROJECTION_GAME = { KEY_ID, KEY_NAME, KEY_COVER_URI @@ -236,10 +251,6 @@ public final class Constants { KEY_AVAILABLE }; - public static final String[] PROJECTION_TEST = { - KEY_NAME - }; - /** * The Projection to retrieve all Information of a kart object from database. */ diff --git a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/DatabaseHandler.java b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/DatabaseHandler.java index b22ad32..ae7aee3 100644 --- a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/DatabaseHandler.java +++ b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/DatabaseHandler.java @@ -214,6 +214,7 @@ public class DatabaseHandler extends SQLiteAssetHelper { final String[] selectionArgs) { final SQLiteDatabase database = this.getReadableDatabase(); + Log.d(TAG, "getAllAccessories: Creating Cursor for Accessories."); final Cursor cursor = database.query(Constants.TABLE_ACCESSORY, projection, selection, selectionArgs, null, null, null, null); @@ -231,6 +232,7 @@ public class DatabaseHandler extends SQLiteAssetHelper { final String[] selectionArgs) { final SQLiteDatabase database = this.getReadableDatabase(); + Log.d(TAG, "getAllWheels: Creating Cursor for Wheels."); final Cursor cursor = database.query(Constants.TABLE_WHEELS, projection, selection, selectionArgs, null, null, null, null); @@ -243,61 +245,16 @@ public class DatabaseHandler extends SQLiteAssetHelper { * * @return List containing all Game Objects retrieved from Database. */ - public ArrayList getAllGames() { + public Cursor getAllGames(final String[] projection, + final String selection, + final String[] selectionArgs) { final SQLiteDatabase database = this.getReadableDatabase(); - final Cursor cursor = database.query(Constants.TABLE_GAME, Constants.PROJECTION_GAME, null, - null, null, null, null, null); - if (cursor != null && cursor.moveToFirst()) { - Log.d(TAG, "getAllGames: Moving cursor to first."); - } else { - Log.d(TAG, "getAllGames: cursor is null or cannot be moved to first."); - return null; - } + Log.d(TAG, "getAllGames: Greating Cursor for Games."); + final Cursor cursor = database.query(Constants.TABLE_GAME, projection, selection, + selectionArgs, null, null, null, null); - final ArrayList allAvailableGames = new ArrayList<>(); - - do { - final int idIdx = cursor.getColumnIndex(Constants.KEY_ID); - final int nameIdx = cursor.getColumnIndex(Constants.KEY_NAME); - final int coverUriIdx = cursor.getColumnIndex(Constants.KEY_COVER_URI); - - final Game game = new Game(); - boolean isValid = true; - if (idIdx >= 0) { - game.setId(cursor.getInt(idIdx)); - } else { - Log.d(TAG, "getAllGames: No such column [" + Constants.KEY_ID + "]"); - isValid = false; - } - - if (nameIdx >= 0) { - game.setName(cursor.getString(nameIdx)); - } else { - Log.d(TAG, "getAllGames: No such column [" + Constants.KEY_NAME + "]"); - isValid = false; - } - - if (coverUriIdx >= 0) { - game.setCoverUri(cursor.getString(coverUriIdx)); - } else { - Log.d(TAG, "getAllGames: No such column [" + Constants.KEY_COVER_URI + "]"); - isValid = false; - } - - if (isValid) { - allAvailableGames.add(game); - } else { - Log.d(TAG, "getAllGames: Do not add Game as one or more arguments are invalid."); - } - - } while (cursor.moveToNext()); - - cursor.close(); - database.close(); - - // return contact - return allAvailableGames; + return cursor; } // ------------------------------------------------------------------------------------------- diff --git a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/GameContentProvider.java b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/GameContentProvider.java new file mode 100644 index 0000000..7e7958d --- /dev/null +++ b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/GameContentProvider.java @@ -0,0 +1,151 @@ +package com.de.aldo_apps.aldo.mariokartcircuitselector; + +import android.content.ContentProvider; +import android.content.ContentValues; +import android.content.UriMatcher; +import android.database.Cursor; +import android.net.Uri; +import android.support.annotation.NonNull; +import android.util.Log; + +/** + * Created by aldo7224 on 18.08.17. + */ + +public class GameContentProvider extends ContentProvider { + + /** + * Tag for debugging output. + */ + private static final String TAG = "GameProvider"; + + /** + * The Provider Name to find the correct Provider and register it in the Android Lifecycle. + */ + public static final String PROVIDER_NAME + = "com.de.aldo_apps.aldo.mariokartcircuitselector"; + + /** + * A uri to do operations on. A content provider is identified by its uri + */ + public static final Uri CONTENT_URI = Uri.parse("content://" + PROVIDER_NAME + "/games"); + + /** + * UriMatcher to check which callback needs to be handled. + * TODO: Check whether this is really needed. + */ + private static final UriMatcher uriMatcher; + + static { + uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); + uriMatcher.addURI(PROVIDER_NAME, "games", Constants.GAME_LOADER_ID); + uriMatcher.addURI(PROVIDER_NAME, "ruleset", Constants.RULESET_LOADER_ID); + uriMatcher.addURI(PROVIDER_NAME, "characters", Constants.CHARACTER_LOADER_ID); + uriMatcher.addURI(PROVIDER_NAME, "tracks", Constants.TRACK_LOADER_ID); + uriMatcher.addURI(PROVIDER_NAME, "karts", Constants.KART_LOADER_ID); + uriMatcher.addURI(PROVIDER_NAME, "wheels", Constants.WHEELS_LOADER_ID); + uriMatcher.addURI(PROVIDER_NAME, "accessories", Constants.ACCESSORY_LOADER_ID); + } + + /** + * This content provider does the database operations by this object + */ + DatabaseHandler mHandler; + + /** + * A callback method which is invoked when the content provider is starting up + */ + @Override + public boolean onCreate() { + mHandler = new DatabaseHandler(getContext()); + return true; + } + + @Override + public String getType(@NonNull final Uri uri) { + return null; + } + + /** + * A callback method which is by the default content uri + */ + @Override + public Cursor query(@NonNull final Uri uri, + final String[] projection, + final String selection, + final String[] selectionArgs, + final String sortOrder) { + Log.d(TAG, "query: Perform Query for [" + uri + "]"); + + final int resId = uriMatcher.match(uri); + + switch (resId) { + case Constants.CHARACTER_LOADER_ID: + Log.d(TAG, "query: Getting all Characters."); + return mHandler.getAllCharacters(Constants.PROJECTION_CHARACTER, + selection, selectionArgs); + case Constants.KART_LOADER_ID: + Log.d(TAG, "query: Getting all Karts."); + return mHandler.getAllKarts(Constants.PROJECTION_KART, + selection, selectionArgs); + case Constants.ACCESSORY_LOADER_ID: + Log.d(TAG, "query: Getting all Acessories."); + return mHandler.getAllAccessories(Constants.PROJECTION_ACCESSORY, + selection, selectionArgs); + case Constants.TRACK_LOADER_ID: + Log.d(TAG, "query: Getting all Tracks."); + return mHandler.getAllTracks(Constants.PROJECTION_TRACK, + selection, selectionArgs); + case Constants.WHEELS_LOADER_ID: + Log.d(TAG, "query: Getting all Wheels."); + return mHandler.getAllWheels(Constants.PROJECTION_WHEELS, + selection, selectionArgs); + case Constants.GAME_LOADER_ID: + Log.d(TAG, "query: Getting all Games."); + return mHandler.getAllGames(Constants.PROJECTION_GAME, null, null); + case Constants.RULESET_LOADER_ID: + Log.d(TAG, "query: Getting all Rulesets."); + return mHandler.getAllRulesets(Constants.PROJECTION_RULESET, null, null); + default: + Log.d(TAG, "query: UriMatcher returned: " + uriMatcher.match(uri)); + return null; + } + } + + @Override + public int delete(@NonNull final Uri uri, final String selection, final String[] selectionArgs) { + return 0; + } + + @Override + public Uri insert(@NonNull final Uri uri, final ContentValues values) { + return null; + } + + @Override + public int update(@NonNull final Uri uri, final ContentValues values, final String selection, + final String[] selectionArgs) { + final int resId = uriMatcher.match(uri); + + switch (resId) { + case Constants.CHARACTER_LOADER_ID: + Log.d(TAG, "query: Toggling Characters availability."); + return mHandler.changeCharacterAvailability(values, selection, selectionArgs); + case Constants.KART_LOADER_ID: + Log.d(TAG, "query: Toggling Karts availability."); + return mHandler.changeKartAvailability(values, selection, selectionArgs); + case Constants.ACCESSORY_LOADER_ID: + Log.d(TAG, "query: Toggling Accessories availability."); + return mHandler.changeAccessoryAvailability(values, selection, selectionArgs); + case Constants.TRACK_LOADER_ID: + Log.d(TAG, "query: Toggling Tracks availability."); + return mHandler.changeTrackAvailability(values, selection, selectionArgs); + case Constants.WHEELS_LOADER_ID: + Log.d(TAG, "query: Toggling Wheels availability."); + return mHandler.changeWheelsAvailability(values, selection, selectionArgs); + default: + Log.d(TAG, "query: UriMatcher returned: " + uriMatcher.match(uri)); + return 0; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/KartContentProvider.java b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/KartContentProvider.java index 3d3ab6c..8aacc29 100644 --- a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/KartContentProvider.java +++ b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/KartContentProvider.java @@ -41,6 +41,8 @@ public class KartContentProvider extends ContentProvider { static { uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); + uriMatcher.addURI(PROVIDER_NAME, "games", Constants.GAME_LOADER_ID); + uriMatcher.addURI(PROVIDER_NAME, "ruleset", Constants.RULESET_LOADER_ID); uriMatcher.addURI(PROVIDER_NAME, "characters", Constants.CHARACTER_LOADER_ID); uriMatcher.addURI(PROVIDER_NAME, "tracks", Constants.TRACK_LOADER_ID); uriMatcher.addURI(PROVIDER_NAME, "karts", Constants.KART_LOADER_ID); @@ -83,19 +85,30 @@ public class KartContentProvider extends ContentProvider { switch (resId) { case Constants.CHARACTER_LOADER_ID: Log.d(TAG, "query: Getting all Characters."); - return mHandler.getAllCharacters(Constants.PROJECTION_CHARACTER, null, null); + return mHandler.getAllCharacters(Constants.PROJECTION_CHARACTER, + selection, selectionArgs); case Constants.KART_LOADER_ID: Log.d(TAG, "query: Getting all Karts."); - return mHandler.getAllKarts(Constants.PROJECTION_KART, null, null); + return mHandler.getAllKarts(Constants.PROJECTION_KART, + selection, selectionArgs); case Constants.ACCESSORY_LOADER_ID: - Log.d(TAG, "query: Getting all Accessories."); - return mHandler.getAllAccessories(Constants.PROJECTION_ACCESSORY, null, null); + Log.d(TAG, "query: Getting all Acessories."); + return mHandler.getAllAccessories(Constants.PROJECTION_ACCESSORY, + selection, selectionArgs); case Constants.TRACK_LOADER_ID: Log.d(TAG, "query: Getting all Tracks."); - return mHandler.getAllTracks(Constants.PROJECTION_TRACK, null, null); + return mHandler.getAllTracks(Constants.PROJECTION_TRACK, + selection, selectionArgs); case Constants.WHEELS_LOADER_ID: Log.d(TAG, "query: Getting all Wheels."); - return mHandler.getAllWheels(Constants.PROJECTION_WHEELS, null, null); + return mHandler.getAllWheels(Constants.PROJECTION_WHEELS, + selection, selectionArgs); + case Constants.GAME_LOADER_ID: + Log.d(TAG, "query: Getting all Games."); + return mHandler.getAllGames(Constants.PROJECTION_GAME, null, null); + case Constants.RULESET_LOADER_ID: + Log.d(TAG, "query: Getting all Rulesets."); + return mHandler.getAllRulesets(Constants.PROJECTION_RULESET, null, null); default: Log.d(TAG, "query: UriMatcher returned: " + uriMatcher.match(uri)); return null; diff --git a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/RulesetContentProvider.java b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/RulesetContentProvider.java new file mode 100644 index 0000000..a825f2e --- /dev/null +++ b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/RulesetContentProvider.java @@ -0,0 +1,151 @@ +package com.de.aldo_apps.aldo.mariokartcircuitselector; + +import android.content.ContentProvider; +import android.content.ContentValues; +import android.content.UriMatcher; +import android.database.Cursor; +import android.net.Uri; +import android.support.annotation.NonNull; +import android.util.Log; + +/** + * Created by aldo7224 on 18.08.17. + */ + +public class RulesetContentProvider extends ContentProvider { + + /** + * Tag for debugging output. + */ + private static final String TAG = "RulesetProvider"; + + /** + * The Provider Name to find the correct Provider and register it in the Android Lifecycle. + */ + public static final String PROVIDER_NAME + = "com.de.aldo_apps.aldo.mariokartcircuitselector"; + + /** + * A uri to do operations on. A content provider is identified by its uri + */ + public static final Uri CONTENT_URI = Uri.parse("content://" + PROVIDER_NAME + "/ruleset"); + + /** + * UriMatcher to check which callback needs to be handled. + * TODO: Check whether this is really needed. + */ + private static final UriMatcher uriMatcher; + + static { + uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); + uriMatcher.addURI(PROVIDER_NAME, "games", Constants.GAME_LOADER_ID); + uriMatcher.addURI(PROVIDER_NAME, "ruleset", Constants.RULESET_LOADER_ID); + uriMatcher.addURI(PROVIDER_NAME, "characters", Constants.CHARACTER_LOADER_ID); + uriMatcher.addURI(PROVIDER_NAME, "tracks", Constants.TRACK_LOADER_ID); + uriMatcher.addURI(PROVIDER_NAME, "karts", Constants.KART_LOADER_ID); + uriMatcher.addURI(PROVIDER_NAME, "wheels", Constants.WHEELS_LOADER_ID); + uriMatcher.addURI(PROVIDER_NAME, "accessories", Constants.ACCESSORY_LOADER_ID); + } + + /** + * This content provider does the database operations by this object + */ + DatabaseHandler mHandler; + + /** + * A callback method which is invoked when the content provider is starting up + */ + @Override + public boolean onCreate() { + mHandler = new DatabaseHandler(getContext()); + return true; + } + + @Override + public String getType(@NonNull final Uri uri) { + return null; + } + + /** + * A callback method which is by the default content uri + */ + @Override + public Cursor query(@NonNull final Uri uri, + final String[] projection, + final String selection, + final String[] selectionArgs, + final String sortOrder) { + Log.d(TAG, "query: Perform Query for [" + uri + "]"); + + final int resId = uriMatcher.match(uri); + + switch (resId) { + case Constants.CHARACTER_LOADER_ID: + Log.d(TAG, "query: Getting all Characters."); + return mHandler.getAllCharacters(Constants.PROJECTION_CHARACTER, + selection, selectionArgs); + case Constants.KART_LOADER_ID: + Log.d(TAG, "query: Getting all Karts."); + return mHandler.getAllKarts(Constants.PROJECTION_KART, + selection, selectionArgs); + case Constants.ACCESSORY_LOADER_ID: + Log.d(TAG, "query: Getting all Acessories."); + return mHandler.getAllAccessories(Constants.PROJECTION_ACCESSORY, + selection, selectionArgs); + case Constants.TRACK_LOADER_ID: + Log.d(TAG, "query: Getting all Tracks."); + return mHandler.getAllTracks(Constants.PROJECTION_TRACK, + selection, selectionArgs); + case Constants.WHEELS_LOADER_ID: + Log.d(TAG, "query: Getting all Wheels."); + return mHandler.getAllWheels(Constants.PROJECTION_WHEELS, + selection, selectionArgs); + case Constants.GAME_LOADER_ID: + Log.d(TAG, "query: Getting all Games."); + return mHandler.getAllGames(Constants.PROJECTION_GAME, null, null); + case Constants.RULESET_LOADER_ID: + Log.d(TAG, "query: Getting all Rulesets."); + return mHandler.getAllRulesets(Constants.PROJECTION_RULESET, null, null); + default: + Log.d(TAG, "query: UriMatcher returned: " + uriMatcher.match(uri)); + return null; + } + } + + @Override + public int delete(@NonNull final Uri uri, final String selection, final String[] selectionArgs) { + return 0; + } + + @Override + public Uri insert(@NonNull final Uri uri, final ContentValues values) { + return null; + } + + @Override + public int update(@NonNull final Uri uri, final ContentValues values, final String selection, + final String[] selectionArgs) { + final int resId = uriMatcher.match(uri); + + switch (resId) { + case Constants.CHARACTER_LOADER_ID: + Log.d(TAG, "query: Toggling Characters availability."); + return mHandler.changeCharacterAvailability(values, selection, selectionArgs); + case Constants.KART_LOADER_ID: + Log.d(TAG, "query: Toggling Karts availability."); + return mHandler.changeKartAvailability(values, selection, selectionArgs); + case Constants.ACCESSORY_LOADER_ID: + Log.d(TAG, "query: Toggling Accessories availability."); + return mHandler.changeAccessoryAvailability(values, selection, selectionArgs); + case Constants.TRACK_LOADER_ID: + Log.d(TAG, "query: Toggling Tracks availability."); + return mHandler.changeTrackAvailability(values, selection, selectionArgs); + case Constants.WHEELS_LOADER_ID: + Log.d(TAG, "query: Toggling Wheels availability."); + return mHandler.changeWheelsAvailability(values, selection, selectionArgs); + default: + Log.d(TAG, "query: UriMatcher returned: " + uriMatcher.match(uri)); + return 0; + } + } +} diff --git a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/TrackContentProvider.java b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/TrackContentProvider.java index 29dd435..a9514f4 100644 --- a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/TrackContentProvider.java +++ b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/TrackContentProvider.java @@ -41,6 +41,8 @@ public class TrackContentProvider extends ContentProvider { static { uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); + uriMatcher.addURI(PROVIDER_NAME, "games", Constants.GAME_LOADER_ID); + uriMatcher.addURI(PROVIDER_NAME, "ruleset", Constants.RULESET_LOADER_ID); uriMatcher.addURI(PROVIDER_NAME, "characters", Constants.CHARACTER_LOADER_ID); uriMatcher.addURI(PROVIDER_NAME, "tracks", Constants.TRACK_LOADER_ID); uriMatcher.addURI(PROVIDER_NAME, "karts", Constants.KART_LOADER_ID); @@ -83,19 +85,30 @@ public class TrackContentProvider extends ContentProvider { switch (resId) { case Constants.CHARACTER_LOADER_ID: Log.d(TAG, "query: Getting all Characters."); - return mHandler.getAllCharacters(Constants.PROJECTION_CHARACTER, null, null); + return mHandler.getAllCharacters(Constants.PROJECTION_CHARACTER, + selection, selectionArgs); case Constants.KART_LOADER_ID: Log.d(TAG, "query: Getting all Karts."); - return mHandler.getAllKarts(Constants.PROJECTION_KART, null, null); + return mHandler.getAllKarts(Constants.PROJECTION_KART, + selection, selectionArgs); case Constants.ACCESSORY_LOADER_ID: - Log.d(TAG, "query: Getting all Accessories."); - return mHandler.getAllAccessories(Constants.PROJECTION_ACCESSORY, null, null); + Log.d(TAG, "query: Getting all Acessories."); + return mHandler.getAllAccessories(Constants.PROJECTION_ACCESSORY, + selection, selectionArgs); case Constants.TRACK_LOADER_ID: Log.d(TAG, "query: Getting all Tracks."); - return mHandler.getAllTracks(Constants.PROJECTION_TRACK, null, null); + return mHandler.getAllTracks(Constants.PROJECTION_TRACK, + selection, selectionArgs); case Constants.WHEELS_LOADER_ID: Log.d(TAG, "query: Getting all Wheels."); - return mHandler.getAllWheels(Constants.PROJECTION_WHEELS, null, null); + return mHandler.getAllWheels(Constants.PROJECTION_WHEELS, + selection, selectionArgs); + case Constants.GAME_LOADER_ID: + Log.d(TAG, "query: Getting all Games."); + return mHandler.getAllGames(Constants.PROJECTION_GAME, null, null); + case Constants.RULESET_LOADER_ID: + Log.d(TAG, "query: Getting all Rulesets."); + return mHandler.getAllRulesets(Constants.PROJECTION_RULESET, null, null); default: Log.d(TAG, "query: UriMatcher returned: " + uriMatcher.match(uri)); return null; diff --git a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/WheelsContentProvider.java b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/WheelsContentProvider.java index 7485f03..69ad2be 100644 --- a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/WheelsContentProvider.java +++ b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/WheelsContentProvider.java @@ -41,6 +41,8 @@ public class WheelsContentProvider extends ContentProvider { static { uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); + uriMatcher.addURI(PROVIDER_NAME, "games", Constants.GAME_LOADER_ID); + uriMatcher.addURI(PROVIDER_NAME, "ruleset", Constants.RULESET_LOADER_ID); uriMatcher.addURI(PROVIDER_NAME, "characters", Constants.CHARACTER_LOADER_ID); uriMatcher.addURI(PROVIDER_NAME, "tracks", Constants.TRACK_LOADER_ID); uriMatcher.addURI(PROVIDER_NAME, "karts", Constants.KART_LOADER_ID); @@ -83,19 +85,30 @@ public class WheelsContentProvider extends ContentProvider { switch (resId) { case Constants.CHARACTER_LOADER_ID: Log.d(TAG, "query: Getting all Characters."); - return mHandler.getAllCharacters(Constants.PROJECTION_CHARACTER, null, null); + return mHandler.getAllCharacters(Constants.PROJECTION_CHARACTER, + selection, selectionArgs); case Constants.KART_LOADER_ID: Log.d(TAG, "query: Getting all Karts."); - return mHandler.getAllKarts(Constants.PROJECTION_KART, null, null); + return mHandler.getAllKarts(Constants.PROJECTION_KART, + selection, selectionArgs); case Constants.ACCESSORY_LOADER_ID: - Log.d(TAG, "query: Getting all Accessories."); - return mHandler.getAllAccessories(Constants.PROJECTION_ACCESSORY, null, null); + Log.d(TAG, "query: Getting all Acessories."); + return mHandler.getAllAccessories(Constants.PROJECTION_ACCESSORY, + selection, selectionArgs); case Constants.TRACK_LOADER_ID: Log.d(TAG, "query: Getting all Tracks."); - return mHandler.getAllTracks(Constants.PROJECTION_TRACK, null, null); + return mHandler.getAllTracks(Constants.PROJECTION_TRACK, + selection, selectionArgs); case Constants.WHEELS_LOADER_ID: Log.d(TAG, "query: Getting all Wheels."); - return mHandler.getAllWheels(Constants.PROJECTION_WHEELS, null, null); + return mHandler.getAllWheels(Constants.PROJECTION_WHEELS, + selection, selectionArgs); + case Constants.GAME_LOADER_ID: + Log.d(TAG, "query: Getting all Games."); + return mHandler.getAllGames(Constants.PROJECTION_GAME, null, null); + case Constants.RULESET_LOADER_ID: + Log.d(TAG, "query: Getting all Rulesets."); + return mHandler.getAllRulesets(Constants.PROJECTION_RULESET, null, null); default: Log.d(TAG, "query: UriMatcher returned: " + uriMatcher.match(uri)); return null; diff --git a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/activities/GameSelectionActivity.java b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/activities/GameSelectionActivity.java new file mode 100644 index 0000000..48eb22f --- /dev/null +++ b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/activities/GameSelectionActivity.java @@ -0,0 +1,64 @@ +package com.de.aldo_apps.aldo.mariokartcircuitselector.activities; + +import android.database.Cursor; +import android.os.Bundle; +import android.support.v4.app.LoaderManager; +import android.support.v4.content.CursorLoader; +import android.support.v4.content.Loader; +import android.support.v4.widget.SimpleCursorAdapter; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.widget.ListView; + +import com.de.aldo_apps.aldo.mariokartcircuitselector.Constants; +import com.de.aldo_apps.aldo.mariokartcircuitselector.GameContentProvider; +import com.de.aldo_apps.aldo.mariokartcircuitselector.R; +import com.de.aldo_apps.aldo.mariokartcircuitselector.adapters.GameCursorAdapter; + +public class GameSelectionActivity extends AppCompatActivity + implements LoaderManager.LoaderCallbacks { + + private static final String TAG = "GameSelectionActivity"; + + private ListView mListView; + + private SimpleCursorAdapter mCursorAdapter; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_game_selection); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + mListView = (ListView) findViewById(R.id.all_games_list); + + mCursorAdapter = new GameCursorAdapter(this, R.layout.game_list_item, + null, Constants.PROJECTION_GAME, new int[] {}, 0); + + mListView.setAdapter(mCursorAdapter); + + getSupportLoaderManager().initLoader(Constants.GAME_LOADER_ID, null, this); + } + + @Override + public CursorLoader onCreateLoader(int id, Bundle args) { + return new CursorLoader(GameSelectionActivity.this, + GameContentProvider.CONTENT_URI, + Constants.PROJECTION_GAME, null, null, null); + } + + @Override + public void onLoadFinished(Loader loader, Cursor cursor) { + + Log.d(TAG, "onLoadFinished: Finished Loading for " + loader.getId()); + // Swapping the cursor makes the Data visible in the corresponding ListView. + mCursorAdapter.swapCursor(cursor); + } + + @Override + public void onLoaderReset(final Loader loader) { + mCursorAdapter.swapCursor(null); + } +} diff --git a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/activities/GameSelection.java b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/activities/GameSettingsActivity.java similarity index 94% rename from app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/activities/GameSelection.java rename to app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/activities/GameSettingsActivity.java index c534048..6e13c09 100644 --- a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/activities/GameSelection.java +++ b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/activities/GameSettingsActivity.java @@ -7,6 +7,7 @@ import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.util.Log; +import com.de.aldo_apps.aldo.mariokartcircuitselector.Constants; import com.de.aldo_apps.aldo.mariokartcircuitselector.R; import com.de.aldo_apps.aldo.mariokartcircuitselector.adapters.CursorPagerAdapter; @@ -22,12 +23,12 @@ import devlight.io.library.ntb.NavigationTabBar; * @version 0.2 * @since 17.08.2017 */ -public class GameSelection extends AppCompatActivity { +public class GameSettingsActivity extends AppCompatActivity { /** * Tag for debugging purpose. */ - private static final String TAG = "GameSelection"; + private static final String TAG = "GameSettingsActivity"; /** * The Custom CursorPagerAdapter which fills the ViewPager with data. @@ -37,10 +38,12 @@ public class GameSelection extends AppCompatActivity { @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_game_selection); + setContentView(R.layout.activity_game_settings); + + final String gameSelected = getIntent().getStringExtra(Constants.KEY_GAME); // Initialize the Adapter. - mAdapter = new CursorPagerAdapter(getSupportFragmentManager()); + mAdapter = new CursorPagerAdapter(getSupportFragmentManager(), gameSelected); // Fill the UI. updateUI(); } diff --git a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/AccessoryCursorAdapter.java b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/AccessoryCursorAdapter.java index bc0c25f..5970d2b 100644 --- a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/AccessoryCursorAdapter.java +++ b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/AccessoryCursorAdapter.java @@ -128,13 +128,17 @@ public class AccessoryCursorAdapter extends SimpleCursorAdapter { nameTextView.setText(name); nameTextView.setVisibility(View.VISIBLE); - final CircleImageView imageView = (CircleImageView) view.findViewById(R.id.image_view); - if (imageUri != null && !imageUri.isEmpty()) { - Picasso.with(mContext).load(imageUri).into(imageView); - imageView.setVisibility(View.VISIBLE); - } else { - Log.d(TAG, "fillViewWithData: No image uri provided. ImageView will not be visible."); - } +// // Uncomment this if CoverUris are present for accessories and are allowed to be shown. +// final CircleImageView imageView = (CircleImageView) view.findViewById(R.id.image_view); +// if (imageUri != null && !imageUri.isEmpty()) { +// Log.d(TAG, "fillViewWithData: Loading Image for [" + imageUri + "]"); +// Picasso.with(mContext).load(imageUri).error(R.drawable.unknown_character) +// .placeholder(R.drawable.animation_progress).into(imageView); +// imageView.setVisibility(View.VISIBLE); +// } else { +// Log.d(TAG, "fillViewWithData: No image uri provided. ImageView will not be visible."); +// imageView.setVisibility(View.GONE); +// } availabilityCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override diff --git a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/CharacterCursorAdapter.java b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/CharacterCursorAdapter.java index 37dc80d..77d8231 100644 --- a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/CharacterCursorAdapter.java +++ b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/CharacterCursorAdapter.java @@ -3,6 +3,8 @@ package com.de.aldo_apps.aldo.mariokartcircuitselector.adapters; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.drawable.Drawable; import android.net.Uri; import android.support.v4.widget.SimpleCursorAdapter; import android.util.Log; @@ -17,7 +19,9 @@ import android.widget.TextView; import com.de.aldo_apps.aldo.mariokartcircuitselector.CharacterContentProvider; import com.de.aldo_apps.aldo.mariokartcircuitselector.Constants; import com.de.aldo_apps.aldo.mariokartcircuitselector.R; +import com.squareup.picasso.Callback; import com.squareup.picasso.Picasso; +import com.squareup.picasso.Target; import de.hdodenhof.circleimageview.CircleImageView; @@ -135,13 +139,17 @@ public class CharacterCursorAdapter extends SimpleCursorAdapter { = (TextView) view.findViewById(R.id.additional_information_separator); separator.setVisibility(View.GONE); - final CircleImageView imageView = (CircleImageView) view.findViewById(R.id.image_view); - if (imageUri != null && !imageUri.isEmpty()) { - Picasso.with(mContext).load(imageUri).into(imageView); - imageView.setVisibility(View.VISIBLE); - } else { - Log.d(TAG, "fillViewWithData: No image uri provided. ImageView will not be visible."); - } +// // Uncomment this if CoverUris are present for characters and are allowed to be shown. +// final CircleImageView imageView = (CircleImageView) view.findViewById(R.id.image_view); +// if (imageUri != null && !imageUri.isEmpty()) { +// Log.d(TAG, "fillViewWithData: Loading Image for [" + imageUri + "]"); +// Picasso.with(mContext).load(imageUri).error(R.drawable.unknown_character) +// .placeholder(R.drawable.animation_progress).into(imageView); +// imageView.setVisibility(View.VISIBLE); +// } else { +// Log.d(TAG, "fillViewWithData: No image uri provided. ImageView will not be visible."); +// imageView.setVisibility(View.GONE); +// } availabilityCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override diff --git a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/CursorPagerAdapter.java b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/CursorPagerAdapter.java index 9598bae..c1c0a27 100644 --- a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/CursorPagerAdapter.java +++ b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/CursorPagerAdapter.java @@ -27,11 +27,14 @@ public class CursorPagerAdapter extends FragmentPagerAdapter { */ private static final String TAG = "CursorPagerAdapter"; + private String mGame; + /** * Default constructor. */ - public CursorPagerAdapter(final FragmentManager fm) { + public CursorPagerAdapter(final FragmentManager fm, final String game) { super(fm); + mGame = game; } @Override @@ -69,6 +72,7 @@ public class CursorPagerAdapter extends FragmentPagerAdapter { // Provide Projection and LoaderId via a Bundle. bundle.putStringArray(Constants.PROJECTION_KEY, projection); bundle.putInt(Constants.LOADER_ID_KEY, loaderId); + bundle.putString(Constants.KEY_GAME, mGame); Log.d(TAG, "getItem: New GenericListFragment with loaderId = [" + loaderId + "] and projection = [" + Arrays.toString(projection) + "] on position [" diff --git a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/GameCursorAdapter.java b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/GameCursorAdapter.java new file mode 100644 index 0000000..00e24d6 --- /dev/null +++ b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/GameCursorAdapter.java @@ -0,0 +1,133 @@ +package com.de.aldo_apps.aldo.mariokartcircuitselector.adapters; + +import android.content.Context; +import android.content.Intent; +import android.database.Cursor; +import android.os.Bundle; +import android.support.v4.widget.SimpleCursorAdapter; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.de.aldo_apps.aldo.mariokartcircuitselector.Constants; +import com.de.aldo_apps.aldo.mariokartcircuitselector.R; +import com.de.aldo_apps.aldo.mariokartcircuitselector.activities.GameSettingsActivity; + +/** + * Created by aldo7224 on 18.08.17. + */ + +public class GameCursorAdapter extends SimpleCursorAdapter { + + /** + * Tag for debugging purpose. + */ + private static final String TAG = "GameAdapter"; + + /** + * The Context where this adapter was assigned. + */ + private final Context mContext; + + /** + * The LayoutInflater used to inflate a new ListItem. + */ + private final LayoutInflater mInflater; + + /** + * The LayoutId of the Layout to be inflated. + */ + private final int mLayout; + + /** + * Default constructor. + * + * @param context The Context from which this class was called. + * @param layout The LayoutId to be inflated. + * @param cursor The cursor which holds all the data. + * @param from The Array Containing all Texts to be added to the view + * (not used in custom adapter). + * @param to The Array holding all LayoutIds where the texts need to be displayed + * (not used in custom adapter). + * @param flags Some flags (not used in custom adapter). + */ + public GameCursorAdapter(final Context context, + final int layout, + final Cursor cursor, + final String[] from, + final int[] to, + final int flags) { + super(context, layout, cursor, from, to, flags); + mContext = context; + mLayout = layout; + mInflater = LayoutInflater.from(context); + } + + @Override + public View newView(final Context context, final Cursor cursor, final ViewGroup parent) { + return mInflater.inflate(mLayout, null); + } + + @Override + public void bindView(final View view, final Context context, final Cursor cursor) { + super.bindView(view, context, cursor); + + final int idxId = cursor.getColumnIndex(Constants.KEY_ID); + final int idxName = cursor.getColumnIndex(Constants.KEY_NAME); + final int idxCoverUri = cursor.getColumnIndex(Constants.KEY_COVER_URI); + + if (idxId > -1 && idxName > -1 ) { + final long id = cursor.getLong(idxId); + final String name = cursor.getString(idxName); + String coverUri = null; + if (idxCoverUri > -1) { + coverUri = cursor.getString(idxCoverUri); + } + + fillViewWithData(view, id, name, coverUri); + } + + } + + /** + * Helper method to fill the UI-Element with information from retrieved from cursor. + * + * @param view The view to be filled. + * @param id Id to be displayed as a backup into TextView (TextView is INVISIBLE) + * @param name Name of the accessory to be displayed. + */ + private void fillViewWithData(final View view, + final long id, + final String name, + final String imageUri) { + + final TextView idView = (TextView) view.findViewById(R.id.id_view); + idView.setText(String.valueOf(id)); + + final TextView nameView = (TextView) view.findViewById(R.id.game_name_view); + nameView.setText(name); + +// // Uncomment this if CoverUris are present for games and are allowed to be shown. +// final ImageView imageView = (ImageView) view.findViewById(R.id.cover_view); +// if (imageUri != null && !imageUri.isEmpty()) { +// Log.d(TAG, "fillViewWithData: Loading Image for [" + imageUri + "]"); +// Picasso.with(mContext).load(imageUri).error(R.drawable.unknown_character) +// .placeholder(R.drawable.animation_progress).into(imageView); +// imageView.setVisibility(View.VISIBLE); +// } else { +// Log.d(TAG, "fillViewWithData: No image uri provided. ImageView will not be visible."); +// imageView.setVisibility(View.GONE); +// } + + view.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(final View view) { + final Intent intent = new Intent(mContext, GameSettingsActivity.class); + intent.putExtra(Constants.KEY_GAME, name); + mContext.startActivity(intent); + } + }); + + } +} diff --git a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/KartCursorAdapter.java b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/KartCursorAdapter.java index d3b08cc..4533997 100644 --- a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/KartCursorAdapter.java +++ b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/KartCursorAdapter.java @@ -140,13 +140,17 @@ public class KartCursorAdapter extends SimpleCursorAdapter { = (TextView) view.findViewById(R.id.additional_info_second); dedicatedDriverTextView.setText(dedicatedDriver); - final CircleImageView imageView = (CircleImageView) view.findViewById(R.id.image_view); - if (imageUri != null && !imageUri.isEmpty()) { - Picasso.with(mContext).load(imageUri).into(imageView); - imageView.setVisibility(View.VISIBLE); - } else { - Log.d(TAG, "fillViewWithData: No image uri provided. ImageView will not be visible."); - } +// // Uncomment this if CoverUris are present for karts and are allowed to be shown. +// final CircleImageView imageView = (CircleImageView) view.findViewById(R.id.image_view); +// if (imageUri != null && !imageUri.isEmpty()) { +// Log.d(TAG, "fillViewWithData: Loading Image for [" + imageUri + "]"); +// Picasso.with(mContext).load(imageUri).error(R.drawable.unknown_character) +// .placeholder(R.drawable.animation_progress).into(imageView); +// imageView.setVisibility(View.VISIBLE); +// } else { +// Log.d(TAG, "fillViewWithData: No image uri provided. ImageView will not be visible."); +// imageView.setVisibility(View.GONE); +// } availabilityCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { diff --git a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/TrackCursorAdapter.java b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/TrackCursorAdapter.java index 5af619a..a0b64d8 100644 --- a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/TrackCursorAdapter.java +++ b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/TrackCursorAdapter.java @@ -140,13 +140,17 @@ public class TrackCursorAdapter extends SimpleCursorAdapter { final TextView numberTextView = (TextView) view.findViewById(R.id.additional_info_second); numberTextView.setText(number); - final CircleImageView imageView = (CircleImageView) view.findViewById(R.id.image_view); - if (imageUri != null && !imageUri.isEmpty()) { - Picasso.with(mContext).load(imageUri).into(imageView); - imageView.setVisibility(View.VISIBLE); - } else { - Log.d(TAG, "fillViewWithData: No image uri provided. ImageView will not be visible."); - } +// // Uncomment this if CoverUris are present for tracks and are allowed to be shown. +// final CircleImageView imageView = (CircleImageView) view.findViewById(R.id.image_view); +// if (imageUri != null && !imageUri.isEmpty()) { +// Log.d(TAG, "fillViewWithData: Loading Image for [" + imageUri + "]"); +// Picasso.with(mContext).load(imageUri).error(R.drawable.unknown_character) +// .placeholder(R.drawable.animation_progress).into(imageView); +// imageView.setVisibility(View.VISIBLE); +// } else { +// Log.d(TAG, "fillViewWithData: No image uri provided. ImageView will not be visible."); +// imageView.setVisibility(View.GONE); +// } availabilityCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override diff --git a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/WheelsCursorAdapter.java b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/WheelsCursorAdapter.java index f40c766..c7a34f0 100644 --- a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/WheelsCursorAdapter.java +++ b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/adapters/WheelsCursorAdapter.java @@ -128,13 +128,17 @@ public class WheelsCursorAdapter extends SimpleCursorAdapter { nameTextView.setText(name); nameTextView.setVisibility(View.VISIBLE); - final CircleImageView imageView = (CircleImageView) view.findViewById(R.id.image_view); - if (imageUri != null && !imageUri.isEmpty()) { - Picasso.with(mContext).load(imageUri).into(imageView); - imageView.setVisibility(View.VISIBLE); - } else { - Log.d(TAG, "fillViewWithData: No image uri provided. ImageView will not be visible."); - } +// // Uncomment this if CoverUris are present for wheels and are allowed to be shown. +// final CircleImageView imageView = (CircleImageView) view.findViewById(R.id.image_view); +// if (imageUri != null && !imageUri.isEmpty()) { +// Log.d(TAG, "fillViewWithData: Loading Image for [" + imageUri + "]"); +// Picasso.with(mContext).load(imageUri).error(R.drawable.unknown_character) +// .placeholder(R.drawable.animation_progress).into(imageView); +// imageView.setVisibility(View.VISIBLE); +// } else { +// Log.d(TAG, "fillViewWithData: No image uri provided. ImageView will not be visible."); +// imageView.setVisibility(View.GONE); +// } availabilityCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { diff --git a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/fragments/GenericListFragment.java b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/fragments/GenericListFragment.java index 9705e82..0b6d4a4 100644 --- a/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/fragments/GenericListFragment.java +++ b/app/src/main/java/com/de/aldo_apps/aldo/mariokartcircuitselector/fragments/GenericListFragment.java @@ -45,6 +45,10 @@ public class GenericListFragment extends ListFragment */ private SimpleCursorAdapter mCursorAdapter; + private String mGame; + + private String[] mSelectionArgs; + @Override public void onCreate(final Bundle bundle) { super.onCreate(bundle); @@ -55,6 +59,10 @@ public class GenericListFragment extends ListFragment // Get Projection and LoaderId from arguments. final String[] projection = arguments.getStringArray(Constants.PROJECTION_KEY); final int loaderId = arguments.getInt(Constants.LOADER_ID_KEY); + mGame = arguments.getString(Constants.KEY_GAME); + if (mGame != null) { + mSelectionArgs = new String[]{mGame}; + } final int[] to = new int[]{}; Log.d(TAG, "onCreate: New GenericListFragment with loaderId = [" + loaderId + "] and projection = [" + Arrays.toString(projection) + "]"); @@ -112,27 +120,32 @@ public class GenericListFragment extends ListFragment Log.d(TAG, "onCreateLoader: Creating character loader"); return new CursorLoader(getContext(), CharacterContentProvider.CONTENT_URI, - Constants.PROJECTION_CHARACTER, null, null, null); + Constants.PROJECTION_CHARACTER, + Constants.SELECT_WHERE_GAME, mSelectionArgs, null); case Constants.KART_LOADER_ID: Log.d(TAG, "onCreateLoader: Creating kart loader"); return new CursorLoader(getContext(), KartContentProvider.CONTENT_URI, - Constants.PROJECTION_KART, null, null, null); + Constants.PROJECTION_KART, + Constants.SELECT_WHERE_GAME, mSelectionArgs, null); case Constants.WHEELS_LOADER_ID: Log.d(TAG, "onCreateLoader: Creating kart loader"); return new CursorLoader(getContext(), WheelsContentProvider.CONTENT_URI, - Constants.PROJECTION_WHEELS, null, null, null); + Constants.PROJECTION_WHEELS, + Constants.SELECT_WHERE_GAME, mSelectionArgs, null); case Constants.ACCESSORY_LOADER_ID: Log.d(TAG, "onCreateLoader: Creating kart loader"); return new CursorLoader(getContext(), AccessoryContentProvider.CONTENT_URI, - Constants.PROJECTION_ACCESSORY, null, null, null); + Constants.PROJECTION_ACCESSORY, + Constants.SELECT_WHERE_GAME, mSelectionArgs, null); case Constants.TRACK_LOADER_ID: Log.d(TAG, "onCreateLoader: Creating kart loader"); return new CursorLoader(getContext(), TrackContentProvider.CONTENT_URI, - Constants.PROJECTION_TRACK, null, null, null); + Constants.PROJECTION_TRACK, + Constants.SELECT_WHERE_GAME, mSelectionArgs, null); } return null; } diff --git a/app/src/main/res/drawable/animation_progress.xml b/app/src/main/res/drawable/animation_progress.xml new file mode 100644 index 0000000..0072cbf --- /dev/null +++ b/app/src/main/res/drawable/animation_progress.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/drawable/progress_image.png b/app/src/main/res/drawable/progress_image.png new file mode 100644 index 0000000..468190e Binary files /dev/null and b/app/src/main/res/drawable/progress_image.png differ diff --git a/app/src/main/res/drawable/unknown_character.png b/app/src/main/res/drawable/unknown_character.png new file mode 100644 index 0000000..3df0699 Binary files /dev/null and b/app/src/main/res/drawable/unknown_character.png differ diff --git a/app/src/main/res/layout/activity_game_selection.xml b/app/src/main/res/layout/activity_game_selection.xml index 02f324a..a04d57c 100644 --- a/app/src/main/res/layout/activity_game_selection.xml +++ b/app/src/main/res/layout/activity_game_selection.xml @@ -1,26 +1,25 @@ - + tools:context="com.de.aldo_apps.aldo.mariokartcircuitselector.activities.GameSelectionActivity"> - + android:layout_height="wrap_content" + android:theme="@style/AppTheme.AppBarOverlay"> - + - + + + + + diff --git a/app/src/main/res/layout/activity_game_settings.xml b/app/src/main/res/layout/activity_game_settings.xml new file mode 100644 index 0000000..559a854 --- /dev/null +++ b/app/src/main/res/layout/activity_game_settings.xml @@ -0,0 +1,26 @@ + + + + + + + + diff --git a/app/src/main/res/layout/content_game_selection.xml b/app/src/main/res/layout/content_game_selection.xml new file mode 100644 index 0000000..c159c97 --- /dev/null +++ b/app/src/main/res/layout/content_game_selection.xml @@ -0,0 +1,16 @@ + + + + + + diff --git a/app/src/main/res/layout/game_list_item.xml b/app/src/main/res/layout/game_list_item.xml new file mode 100644 index 0000000..f4e3373 --- /dev/null +++ b/app/src/main/res/layout/game_list_item.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index e14eb0c..2f51e26 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -1,6 +1,7 @@ 10dp + 16dp \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1f2128f..df17fce 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -8,5 +8,6 @@ Karts Sonstiges Reifen + GameSelectionActivity diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 5885930..545b9c6 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -8,4 +8,13 @@ @color/colorAccent + + +