diff --git a/MemeProject/.idea/misc.xml b/MemeProject/.idea/misc.xml
index d415385..58ff01f 100644
--- a/MemeProject/.idea/misc.xml
+++ b/MemeProject/.idea/misc.xml
@@ -3,22 +3,9 @@
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
diff --git a/MemeProject/MemeProject.iml b/MemeProject/MemeProject.iml
index 29deca7..0bb6048 100644
--- a/MemeProject/MemeProject.iml
+++ b/MemeProject/MemeProject.iml
@@ -1,5 +1,5 @@
-
+
diff --git a/MemeProject/app/app.iml b/MemeProject/app/app.iml
index eb0313a..444cb2a 100644
--- a/MemeProject/app/app.iml
+++ b/MemeProject/app/app.iml
@@ -1,5 +1,5 @@
-
+
@@ -83,9 +83,12 @@
-
+
+
+
+
diff --git a/MemeProject/app/build.gradle b/MemeProject/app/build.gradle
index 77da775..7c52543 100644
--- a/MemeProject/app/build.gradle
+++ b/MemeProject/app/build.gradle
@@ -22,4 +22,6 @@ android {
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.1.1'
+ compile 'com.squareup.picasso:picasso:2.5.2'
+ compile 'com.squareup.retrofit:retrofit:1.9.0'
}
diff --git a/MemeProject/app/src/main/AndroidManifest.xml b/MemeProject/app/src/main/AndroidManifest.xml
index 1f734f0..cffe8a5 100644
--- a/MemeProject/app/src/main/AndroidManifest.xml
+++ b/MemeProject/app/src/main/AndroidManifest.xml
@@ -3,6 +3,7 @@
package="madelyntav.c4q.nyc.memeproject" >
+
{
List memeNames= null;
List memeImages = null;
+ List memeUrls = null;
private static LayoutInflater inflater = null;
+ private Context context;
CustomArrayAdapter(Context context, List names, List images) {
super(context, R.layout.list_item, names);
memeNames = names;
memeImages = images;
+ this.context = context.getApplicationContext();
+
+ inflater = (LayoutInflater) context.
+ getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+
+ }
+
+ CustomArrayAdapter(Context context, List names, List imageUrls, boolean api) {
+ super(context, R.layout.list_item, names);
+ memeNames = names;
+ memeUrls = imageUrls;
+ this.context = context.getApplicationContext();
inflater = (LayoutInflater) context.
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
+
@Override
public View getView(int position, View convertView,
ViewGroup parent) {
@@ -47,12 +67,14 @@ private View newView(ViewGroup parent) {
private void bindView(int position, View row) {
TextView label=(TextView)row.findViewById(R.id.memeName);
-
- label.setText(memeNames.get(position));
-
ImageView icon=(ImageView)row.findViewById(R.id.memeImage);
+ label.setText(memeNames.get(position));
- icon.setImageResource(memeImages.get(position));
+ if(memeUrls == null) {
+ Picasso.with(context).load(memeImages.get(position)).resize(250, 250).centerCrop().into(icon);
+ }else{
+ Picasso.with(context).load(memeUrls.get(position)).resize(250, 250).centerCrop().into(icon);
+ }
}
diff --git a/MemeProject/app/src/main/java/madelyntav/c4q/nyc/memeproject/MemeList.java b/MemeProject/app/src/main/java/madelyntav/c4q/nyc/memeproject/MemeList.java
index 4cff6ef..44dd6db 100644
--- a/MemeProject/app/src/main/java/madelyntav/c4q/nyc/memeproject/MemeList.java
+++ b/MemeProject/app/src/main/java/madelyntav/c4q/nyc/memeproject/MemeList.java
@@ -1,27 +1,40 @@
package madelyntav.c4q.nyc.memeproject;
import android.app.Activity;
-import android.content.ContentResolver;
import android.content.Intent;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteException;
import android.net.Uri;
+import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
-import java.io.InputStream;
import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.List;
+
+import madelyntav.c4q.nyc.memeproject.Meme_API.Meme;
+import madelyntav.c4q.nyc.memeproject.Meme_API.MemeTemplate;
+import madelyntav.c4q.nyc.memeproject.Meme_API.MemeTemplateAPI;
+import madelyntav.c4q.nyc.memeproject.Meme_DB.MySQLiteOpenHelper;
+import retrofit.Callback;
+import retrofit.RestAdapter;
+import retrofit.RetrofitError;
+import retrofit.client.Response;
/**
* Created by kadeemmaragh on 6/5/15.
*/
public class MemeList extends Activity {
+ private static final String DB_FULL_PATH = "//data/data/madelyntav.c4q.nyc.memeproject/databases/myDb";
ListView listView;
- HashMap memePairs;
private Uri uri;
+ List memeList;
+ List imageUrls;
+ List imageTitles;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -30,60 +43,115 @@ public void onCreate(Bundle savedInstanceState) {
listView = (ListView) findViewById(R.id.listView);
- memePairs = new HashMap<>();
- memePairs.put(R.drawable.actual_advice_mallard, "Actual Advice Mallard");
- memePairs.put(R.drawable.but_thats_none_of_my_business, "But That's None Of My Business");
- memePairs.put(R.drawable.creepy_condescending_wonka, "Creepy Condescending Wonka");
- memePairs.put(R.drawable.futurama_fry, "Skeptical Fry");
- memePairs.put(R.drawable.good_guy_greg, "Good Guy Greg");
- memePairs.put(R.drawable.liam_neeson_taken, "Liam Neeson Taken");
- memePairs.put(R.drawable.one_does_not_simply, "One Does Not Simply");
- memePairs.put(R.drawable.scumbag_steve, "Scumbag Steve");
- memePairs.put(R.drawable.shut_up_and_take_my_money_fry, "Shut Up And Take My Money");
- memePairs.put(R.drawable.ten_guy, "Ten Guy");
- memePairs.put(R.drawable.the_most_interesting_man_in_the_world, "The Most Interesting Man In The World");
- memePairs.put(R.drawable.third_world_skeptical_kid, "Third World Skeptical Kid");
- memePairs.put(R.drawable.unhelpful_high_school_teacher, "Unhelpful High School Teacher");
- memePairs.put(R.drawable.yao_ming, "Yao Ming");
- memePairs.put(R.drawable.you_the_real_mvp, "You The Real MVP");
+ if(dataBaseExists()){
+ memeList = loadData();
- final ArrayList memeImages = new ArrayList();
- ArrayList memeNames = new ArrayList();
- addItemsToArrays(memeImages, memeNames);
+ imageUrls = new ArrayList();
+ imageTitles = new ArrayList();
+ for(Meme meme : memeList){
+ imageUrls.add(meme.getUrl());
+ imageTitles.add(meme.getName());
+ }
- CustomArrayAdapter memeAdapter = new CustomArrayAdapter(getApplicationContext(), memeNames, memeImages);
+ listView.setAdapter(new CustomArrayAdapter(getApplicationContext(), imageTitles, imageUrls, true));
+ }else{
- listView.setAdapter(memeAdapter);
+ retrofitGetMemeTemplates();
+ }
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
Intent intent = new Intent(MemeList.this, EditPhoto.class);
- uri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + getResources().getResourcePackageName(memeImages.get(position)) + '/' + getResources().getResourceTypeName(memeImages.get(position)) + '/' + getResources().getResourceEntryName(memeImages.get(position)));
+ //uri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + getResources().getResourcePackageName(memeImages.get(position)) + '/' + getResources().getResourceTypeName(memeImages.get(position)) + '/' + getResources().getResourceEntryName(memeImages.get(position)));
intent.putExtra("image", uri);
startActivity(intent);
Toast.makeText(getApplicationContext(), "Please select VANILLA or DEMO layout to begin", Toast.LENGTH_SHORT).show();
-
}
});
+ }
+
+ private List loadData() {
+
+ MySQLiteOpenHelper db = MySQLiteOpenHelper.getInstance(this);
+ return db.loadData();
+ }
+ private void insertData(Meme meme) {
+ MySQLiteOpenHelper db = MySQLiteOpenHelper.getInstance(this);
+ db.insertRow(meme);
+ }
+
+ private void retrofitGetMemeTemplates(){
+
+ RestAdapter restAdapter = new RestAdapter.Builder()
+ .setEndpoint("https://api.imgflip.com")
+ .setLogLevel(RestAdapter.LogLevel.FULL)
+ .build();
+
+ MemeTemplateAPI memeTemplateAPI = restAdapter.create(MemeTemplateAPI.class);
+
+ memeTemplateAPI.getTemplates(new Callback() {
+ @Override
+ public void success(MemeTemplate memeTemplate, Response response) {
+ memeList = memeTemplate.getData().getMemes();
+ imageUrls = new ArrayList();
+ imageTitles = new ArrayList();
+ for(Meme meme : memeList){
+ imageUrls.add(meme.getUrl());
+ imageTitles.add(meme.getName());
+ }
+
+ loadDBSetAdapter();
+ }
+ @Override
+ public void failure(RetrofitError error) {
+ (Toast.makeText(MemeList.this,"Couldn't load popular Memes",Toast.LENGTH_LONG)).show();
+ }
+ });
}
- public void addItemsToArrays(ArrayList images, ArrayList titles) {
- int position = 0;
- for (Integer image : memePairs.keySet()) {
+ private void loadDBSetAdapter(){
+
+ (new AsyncTask>() {
+ @Override
+ protected List doInBackground(Void... voids) {
+
+ for(Meme meme : memeList) {
+ insertData(meme);
+ }
+
+ return loadData();
+ }
- images.add(position, image);
- titles.add(position, memePairs.get(image));
- position++;
+ @Override
+ protected void onPostExecute(List memes) {
+ super.onPostExecute(memes);
+
+ listView.setAdapter(new CustomArrayAdapter(getApplicationContext(), imageTitles, imageUrls, true));
+ }
+ }).execute();
+
+ }
+
+ private boolean dataBaseExists() {
+ SQLiteDatabase checkDB = null;
+ try {
+ checkDB = SQLiteDatabase.openDatabase(DB_FULL_PATH, null,
+ SQLiteDatabase.OPEN_READONLY);
+ checkDB.close();
+ } catch (SQLiteException e) {
+ // database doesn't exist yet.
}
+ return checkDB != null;
}
+
}
diff --git a/MemeProject/app/src/main/java/madelyntav/c4q/nyc/memeproject/Meme_API/Data.java b/MemeProject/app/src/main/java/madelyntav/c4q/nyc/memeproject/Meme_API/Data.java
new file mode 100644
index 0000000..2d2216c
--- /dev/null
+++ b/MemeProject/app/src/main/java/madelyntav/c4q/nyc/memeproject/Meme_API/Data.java
@@ -0,0 +1,30 @@
+package madelyntav.c4q.nyc.memeproject.Meme_API;
+
+import java.util.ArrayList;
+import java.util.List;
+import com.google.gson.annotations.Expose;
+
+public class Data {
+
+ @Expose
+ private List memes = new ArrayList();
+
+ /**
+ *
+ * @return
+ * The memes
+ */
+ public List getMemes() {
+ return memes;
+ }
+
+ /**
+ *
+ * @param memes
+ * The memes
+ */
+ public void setMemes(List memes) {
+ this.memes = memes;
+ }
+
+}
\ No newline at end of file
diff --git a/MemeProject/app/src/main/java/madelyntav/c4q/nyc/memeproject/Meme_API/Meme.java b/MemeProject/app/src/main/java/madelyntav/c4q/nyc/memeproject/Meme_API/Meme.java
new file mode 100644
index 0000000..61d9f40
--- /dev/null
+++ b/MemeProject/app/src/main/java/madelyntav/c4q/nyc/memeproject/Meme_API/Meme.java
@@ -0,0 +1,114 @@
+package madelyntav.c4q.nyc.memeproject.Meme_API;
+
+import com.google.gson.annotations.Expose;
+
+public class Meme {
+
+ @Expose
+ private String id;
+ @Expose
+ private String name;
+ @Expose
+ private String url;
+ @Expose
+ private Integer width;
+ @Expose
+ private Integer height;
+
+ //used for the database
+ public Meme(String name, String url) {
+ this.name = name;
+ this.url = url;
+ }
+
+ /**
+ *
+ * @return
+ * The id
+ */
+ public String getId() {
+ return id;
+ }
+
+ /**
+ *
+ * @param id
+ * The id
+ */
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ /**
+ *
+ * @return
+ * The name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ *
+ * @param name
+ * The name
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ /**
+ *
+ * @return
+ * The url
+ */
+ public String getUrl() {
+ return url;
+ }
+
+ /**
+ *
+ * @param url
+ * The url
+ */
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ /**
+ *
+ * @return
+ * The width
+ */
+ public Integer getWidth() {
+ return width;
+ }
+
+ /**
+ *
+ * @param width
+ * The width
+ */
+ public void setWidth(Integer width) {
+ this.width = width;
+ }
+
+ /**
+ *
+ * @return
+ * The height
+ */
+ public Integer getHeight() {
+ return height;
+ }
+
+ /**
+ *
+ * @param height
+ * The height
+ */
+ public void setHeight(Integer height) {
+ this.height = height;
+ }
+
+}
\ No newline at end of file
diff --git a/MemeProject/app/src/main/java/madelyntav/c4q/nyc/memeproject/Meme_API/MemeTemplate.java b/MemeProject/app/src/main/java/madelyntav/c4q/nyc/memeproject/Meme_API/MemeTemplate.java
new file mode 100644
index 0000000..983b429
--- /dev/null
+++ b/MemeProject/app/src/main/java/madelyntav/c4q/nyc/memeproject/Meme_API/MemeTemplate.java
@@ -0,0 +1,48 @@
+package madelyntav.c4q.nyc.memeproject.Meme_API;
+
+import com.google.gson.annotations.Expose;
+
+public class MemeTemplate {
+
+ @Expose
+ private Boolean success;
+ @Expose
+ private Data data;
+
+ /**
+ *
+ * @return
+ * The success
+ */
+ public Boolean getSuccess() {
+ return success;
+ }
+
+ /**
+ *
+ * @param success
+ * The success
+ */
+ public void setSuccess(Boolean success) {
+ this.success = success;
+ }
+
+ /**
+ *
+ * @return
+ * The data
+ */
+ public Data getData() {
+ return data;
+ }
+
+ /**
+ *
+ * @param data
+ * The data
+ */
+ public void setData(Data data) {
+ this.data = data;
+ }
+
+}
\ No newline at end of file
diff --git a/MemeProject/app/src/main/java/madelyntav/c4q/nyc/memeproject/Meme_API/MemeTemplateAPI.java b/MemeProject/app/src/main/java/madelyntav/c4q/nyc/memeproject/Meme_API/MemeTemplateAPI.java
new file mode 100644
index 0000000..700dcab
--- /dev/null
+++ b/MemeProject/app/src/main/java/madelyntav/c4q/nyc/memeproject/Meme_API/MemeTemplateAPI.java
@@ -0,0 +1,14 @@
+package madelyntav.c4q.nyc.memeproject.Meme_API;
+
+import retrofit.Callback;
+import retrofit.http.GET;
+
+/**
+ * Created by c4q-anthonyf on 7/17/15.
+ */
+public interface MemeTemplateAPI {
+
+ @GET("/get_memes")
+ public void getTemplates(Callback response);
+
+}
diff --git a/MemeProject/app/src/main/java/madelyntav/c4q/nyc/memeproject/Meme_DB/MySQLiteOpenHelper.java b/MemeProject/app/src/main/java/madelyntav/c4q/nyc/memeproject/Meme_DB/MySQLiteOpenHelper.java
new file mode 100644
index 0000000..7031add
--- /dev/null
+++ b/MemeProject/app/src/main/java/madelyntav/c4q/nyc/memeproject/Meme_DB/MySQLiteOpenHelper.java
@@ -0,0 +1,113 @@
+package madelyntav.c4q.nyc.memeproject.Meme_DB;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.provider.BaseColumns;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import madelyntav.c4q.nyc.memeproject.Meme_API.Meme;
+
+/**
+ * Created by c4q-anthonyf on 7/17/15.
+ */
+public class MySQLiteOpenHelper extends android.database.sqlite.SQLiteOpenHelper {
+
+ final static String MYDB = "myDb";
+ final static int VERSION = 1;
+
+ public static MySQLiteOpenHelper INSTANCE;
+
+ public static synchronized MySQLiteOpenHelper getInstance(Context context)
+ {
+ if(INSTANCE == null)
+ {
+ INSTANCE = new MySQLiteOpenHelper(context.getApplicationContext());
+ }
+
+ return INSTANCE;
+ }
+
+ public MySQLiteOpenHelper(Context context) {
+ super(context, MYDB, null, VERSION);
+ }
+
+ @Override
+ public void onCreate(SQLiteDatabase sqLiteDatabase) {
+ sqLiteDatabase.execSQL(SQL_CREATE_ENTRIES);
+ }
+
+ @Override
+ public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i2) {
+ sqLiteDatabase.execSQL(SQL_DELETE_ENTRIES);
+ onCreate(sqLiteDatabase);
+ }
+
+ public void insertRow(Meme meme){
+
+ SQLiteDatabase db = getWritableDatabase();
+
+ ContentValues values = new ContentValues();
+ values.put(MemeTemplateDB.COLUMN_NAME_MEME_ID, meme.getId());
+ values.put(MemeTemplateDB.COLUMN_NAME_NAMES, meme.getName());
+ values.put(MemeTemplateDB.COLUMN_NAME_URLS, meme.getUrl());
+
+ db.insertOrThrow(
+ MemeTemplateDB.TABLE_NAME,
+ null,
+ values);
+ }
+
+ public List loadData()
+ {
+ String[] projection = {
+ MemeTemplateDB._ID,
+ MemeTemplateDB.COLUMN_NAME_NAMES,
+ MemeTemplateDB.COLUMN_NAME_URLS
+ };
+
+ SQLiteDatabase db = getWritableDatabase();
+
+ List memes = new ArrayList<>();
+
+ Cursor cursor = db.query(
+ MemeTemplateDB.TABLE_NAME,
+ projection,
+ null, //where
+ null, //where args
+ null, //group by (ignore)
+ null, //having (ignore)
+ MemeTemplateDB._ID + " desc");//order by
+ while(cursor.moveToNext())
+ {
+ memes.add(new Meme(cursor.getString(
+ cursor.getColumnIndex(MemeTemplateDB.COLUMN_NAME_NAMES)),
+ cursor.getString(
+ cursor.getColumnIndex(MemeTemplateDB.COLUMN_NAME_URLS))));
+ }
+
+ cursor.close();
+
+ return memes;
+ }
+
+ public static abstract class MemeTemplateDB implements BaseColumns {
+ public static final String TABLE_NAME = "popular_memes";
+ public static final String COLUMN_NAME_MEME_ID = "meme_id";
+ public static final String COLUMN_NAME_NAMES = "names";
+ public static final String COLUMN_NAME_URLS = "urls";
+ }
+
+ private static final String SQL_CREATE_ENTRIES = "CREATE TABLE " + MemeTemplateDB.TABLE_NAME + " (" +
+ MemeTemplateDB._ID + " INTEGER PRIMARY KEY," +
+ MemeTemplateDB.COLUMN_NAME_MEME_ID + " TEXT NOT NULL UNIQUE, " +
+ MemeTemplateDB.COLUMN_NAME_NAMES + " TEXT," +
+ MemeTemplateDB.COLUMN_NAME_URLS + " TEXT" +
+ " )";
+
+ private static final String SQL_DELETE_ENTRIES = "DROP TABLE IF EXISTS " + MemeTemplateDB.TABLE_NAME;
+
+}