From e906031de4731d87518b4c87db69ead7f009a811 Mon Sep 17 00:00:00 2001 From: Alexander Doerflinger Date: Thu, 17 Aug 2017 16:17:47 +0200 Subject: [PATCH] Prepared usage of images (fully working with http-uri) --- app/build.gradle | 6 +++-- app/src/main/AndroidManifest.xml | 2 ++ .../databases/mario_kart_circuit_selector | Bin 39936 -> 39936 bytes ...ario_kart_circuit_selector_upgrade_1-2.sql | 6 +++++ .../mariokartcircuitselector/Constants.java | 7 +++++- .../adapters/AccessoryCursorAdapter.java | 19 +++++++++++++++- .../adapters/CharacterCursorAdapter.java | 20 +++++++++++++++-- .../adapters/KartCursorAdapter.java | 20 ++++++++++++++++- .../adapters/TrackCursorAdapter.java | 21 +++++++++++++++++- .../adapters/WheelsCursorAdapter.java | 20 ++++++++++++++++- app/src/main/res/layout/generic_list_item.xml | 9 ++++++++ 11 files changed, 121 insertions(+), 9 deletions(-) create mode 100644 app/src/main/assets/databases/mario_kart_circuit_selector_upgrade_1-2.sql diff --git a/app/build.gradle b/app/build.gradle index 6278395..3d6046a 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 11 - versionName "0.1.11" + versionCode 12 + versionName "0.1.12" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { @@ -27,9 +27,11 @@ dependencies { compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support.constraint:constraint-layout:1.0.2' compile 'com.afollestad.material-dialogs:core:0.9.4.3' + compile 'com.squareup.picasso:picasso:2.5.2' compile 'com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1' 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' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index dc5ccd3..9ddf72e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,8 @@ + + |tPD z$FPUFnrS&x3FFF%jVrhsvv}CW<>eWhl_%d;x+JZmkepwZS`=Sel&KKn8WEz|=pn%_ zE-A^_ls);Z!Uh3!`N_44rksIdU?Z9eC+}9=DTuB_bMibT#V6M)%S@i6B*y6| z#x5=|&)5_=d85)!R!yLRniCsUCs!*Qb2UcsfaRK*Cm&O|#HhJ>opLaTEKmh2g9rn& z5YuzUiHu1MB8(@RylvRUMMW7~DmVWxaAw?`sJoGot1(-RU0ht8vDtKTp3Y-N%}oZ3 z4jN2B46Ka&3`|js)0s3G`I+}K!~h`!7y~IF$h2h>uMMBvs4O8}T$qztlA2VMUtXMA z6kn8@mzbLxpPZjlnwvMVF`ETwmdC_Km&sF#IwrdoPo6AWtii?9%)kLMMcsC?T(Jy) lc4ARUydj8`Vqjpj+1O~o$Y$@%CLXK{vS4yyk@BJv4FGS!Tr2

-1 && idxName > -1 && idxAvailable > -1) { final long id = cursor.getLong(idxId); final String name = cursor.getString(idxName); + String coverUri = null; + if (idxCoverUri > -1) { + coverUri = cursor.getString(idxCoverUri); + } final boolean available = cursor.getInt(idxAvailable) == Constants.TRUE; - fillViewWithData(view, id, name, available); + fillViewWithData(view, id, name, coverUri, available); } } @@ -103,6 +112,7 @@ public class AccessoryCursorAdapter extends SimpleCursorAdapter { private void fillViewWithData(final View view, final long id, final String name, + final String imageUri, final boolean available) { final CheckBox availabilityCheckBox = (CheckBox) view.findViewById(R.id.availability_checkbox); @@ -118,6 +128,13 @@ 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."); + } 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 4e45919..37dc80d 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,7 @@ package com.de.aldo_apps.aldo.mariokartcircuitselector.adapters; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; +import android.net.Uri; import android.support.v4.widget.SimpleCursorAdapter; import android.util.Log; import android.view.LayoutInflater; @@ -16,6 +17,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.Picasso; + +import de.hdodenhof.circleimageview.CircleImageView; /** * Custom CursorAdapter which populates the ListView with character data from cursor. @@ -82,15 +86,20 @@ public class CharacterCursorAdapter extends SimpleCursorAdapter { final int idxId = cursor.getColumnIndex(Constants.KEY_ID); final int idxName = cursor.getColumnIndex(Constants.KEY_NAME); final int idxWeight = cursor.getColumnIndex(Constants.KEY_WEIGHT); + final int idxCoverUri = cursor.getColumnIndex(Constants.KEY_COVER_URI); final int idxAvailable = cursor.getColumnIndex(Constants.KEY_AVAILABLE); if (idxId > -1 && idxName > -1 && idxWeight > -1 && idxAvailable > -1) { final long id = cursor.getLong(idxId); final String name = cursor.getString(idxName); final String weight = cursor.getString(idxWeight); + String coverUri = null; + if (idxCoverUri > -1) { + coverUri = cursor.getString(idxCoverUri); + } final boolean available = cursor.getInt(idxAvailable) == Constants.TRUE; - fillViewWithData(view, id, name, weight, available); + fillViewWithData(view, id, name, weight, coverUri, available); } } @@ -107,6 +116,7 @@ public class CharacterCursorAdapter extends SimpleCursorAdapter { final long id, final String name, final String weight, + final String imageUri, final boolean available) { final CheckBox availabilityCheckBox = (CheckBox) view.findViewById(R.id.availability_checkbox); @@ -125,7 +135,13 @@ 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."); + } availabilityCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override 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 5a59066..d3b08cc 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 @@ -3,6 +3,7 @@ package com.de.aldo_apps.aldo.mariokartcircuitselector.adapters; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; +import android.net.Uri; import android.support.v4.widget.SimpleCursorAdapter; import android.util.Log; import android.view.LayoutInflater; @@ -16,6 +17,9 @@ import android.widget.TextView; import com.de.aldo_apps.aldo.mariokartcircuitselector.Constants; import com.de.aldo_apps.aldo.mariokartcircuitselector.KartContentProvider; import com.de.aldo_apps.aldo.mariokartcircuitselector.R; +import com.squareup.picasso.Picasso; + +import de.hdodenhof.circleimageview.CircleImageView; /** * Custom CursorAdapter which populates the ListView with kart data from cursor. @@ -83,6 +87,7 @@ public class KartCursorAdapter extends SimpleCursorAdapter { final int idxName = cursor.getColumnIndex(Constants.KEY_NAME); final int idxWeight = cursor.getColumnIndex(Constants.KEY_WEIGHT); final int idxDedicatedDriver = cursor.getColumnIndex(Constants.KEY_DEDICATED_DRIVER); + final int idxCoverUri = cursor.getColumnIndex(Constants.KEY_COVER_URI); final int idxAvailable = cursor.getColumnIndex(Constants.KEY_AVAILABLE); if (idxId > -1 && idxName > -1 && idxDedicatedDriver > -1 && idxWeight > -1 @@ -91,9 +96,13 @@ public class KartCursorAdapter extends SimpleCursorAdapter { final String name = cursor.getString(idxName); final String weight = cursor.getString(idxDedicatedDriver); final String dedicatedDriver = cursor.getString(idxWeight); + String coverUri = null; + if (idxCoverUri > -1) { + coverUri = cursor.getString(idxCoverUri); + } final boolean available = cursor.getInt(idxAvailable) == Constants.TRUE; - fillViewWithData(view, id, name, weight, dedicatedDriver, available); + fillViewWithData(view, id, name, weight, dedicatedDriver, coverUri, available); } } @@ -112,6 +121,7 @@ public class KartCursorAdapter extends SimpleCursorAdapter { final String name, final String weight, final String dedicatedDriver, + final String imageUri, final boolean available) { final CheckBox availabilityCheckBox = (CheckBox) view.findViewById(R.id.availability_checkbox); @@ -130,6 +140,14 @@ 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."); + } + availabilityCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override 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 0c0e40d..5af619a 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 @@ -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.net.Uri; import android.support.v4.widget.SimpleCursorAdapter; import android.util.Log; import android.view.LayoutInflater; @@ -16,6 +18,9 @@ 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.TrackContentProvider; +import com.squareup.picasso.Picasso; + +import de.hdodenhof.circleimageview.CircleImageView; /** * Custom CursorAdapter which populates the ListView with track data from cursor. @@ -83,6 +88,7 @@ public class TrackCursorAdapter extends SimpleCursorAdapter { final int idxName = cursor.getColumnIndex(Constants.KEY_NAME); final int idxPackage = cursor.getColumnIndex(Constants.KEY_PACKAGE); final int idxNumber = cursor.getColumnIndex(Constants.KEY_NUMBER); + final int idxCoverUri = cursor.getColumnIndex(Constants.KEY_COVER_URI); final int idxAvailable = cursor.getColumnIndex(Constants.KEY_AVAILABLE); if (idxId > -1 && idxName > -1 && idxNumber > -1 && idxPackage > -1 && idxAvailable > -1) { @@ -90,9 +96,13 @@ public class TrackCursorAdapter extends SimpleCursorAdapter { final String name = cursor.getString(idxName); final String number = cursor.getString(idxNumber); final String packageName = cursor.getString(idxPackage); + String coverUri = null; + if (idxCoverUri > -1) { + coverUri = cursor.getString(idxCoverUri); + } final boolean available = cursor.getInt(idxAvailable) == Constants.TRUE; - fillViewWithData(view, id, name, packageName, number, available); + fillViewWithData(view, id, name, packageName, number, coverUri, available); } } @@ -104,6 +114,7 @@ public class TrackCursorAdapter extends SimpleCursorAdapter { * @param name Name of the track to be displayed. * @param packageName Name of the package where this track is available to be displayed. * @param number Number of the track to be displayed. + * @param imageUri The String (uri) pointing to the image location. * @param available Current AvailabilityState of the track. */ private void fillViewWithData(final View view, @@ -111,6 +122,7 @@ public class TrackCursorAdapter extends SimpleCursorAdapter { final String name, final String packageName, final String number, + final String imageUri, final boolean available) { final CheckBox availabilityCheckBox = (CheckBox) view.findViewById(R.id.availability_checkbox); @@ -128,6 +140,13 @@ 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."); + } 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 3fa48e2..f40c766 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 @@ -3,6 +3,7 @@ package com.de.aldo_apps.aldo.mariokartcircuitselector.adapters; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; +import android.net.Uri; import android.support.v4.widget.SimpleCursorAdapter; import android.util.Log; import android.view.LayoutInflater; @@ -16,6 +17,9 @@ 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.WheelsContentProvider; +import com.squareup.picasso.Picasso; + +import de.hdodenhof.circleimageview.CircleImageView; /** * Custom CursorAdapter which populates the ListView with wheels data from cursor. @@ -81,14 +85,19 @@ public class WheelsCursorAdapter extends SimpleCursorAdapter { 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); final int idxAvailable = cursor.getColumnIndex(Constants.KEY_AVAILABLE); if (idxId > -1 && idxName > -1 && idxAvailable > -1) { final long id = cursor.getLong(idxId); final String name = cursor.getString(idxName); + String coverUri = null; + if (idxCoverUri > -1) { + coverUri = cursor.getString(idxCoverUri); + } final boolean available = cursor.getInt(idxAvailable) == Constants.TRUE; - fillViewWithData(view, id, name, available); + fillViewWithData(view, id, name, coverUri, available); } } @@ -103,6 +112,7 @@ public class WheelsCursorAdapter extends SimpleCursorAdapter { private void fillViewWithData(final View view, final long id, final String name, + final String imageUri, final boolean available) { final CheckBox availabilityCheckBox = (CheckBox) view.findViewById(R.id.availability_checkbox); @@ -118,6 +128,14 @@ 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."); + } + availabilityCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override diff --git a/app/src/main/res/layout/generic_list_item.xml b/app/src/main/res/layout/generic_list_item.xml index 0540ff8..aa81080 100644 --- a/app/src/main/res/layout/generic_list_item.xml +++ b/app/src/main/res/layout/generic_list_item.xml @@ -83,5 +83,14 @@ android:textAppearance="@android:style/TextAppearance.Large" android:visibility="gone" /> + + \ No newline at end of file