diff --git a/.idea/misc.xml b/.idea/misc.xml
index 5d19981..fbb6828 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -37,7 +37,7 @@
-
+
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 1b3ccab..c8978b2 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -2,7 +2,7 @@
-
+
diff --git a/app/build.gradle b/app/build.gradle
index b963ad0..e09adf6 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -33,6 +33,7 @@ dependencies {
compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha8'
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
+ compile 'com.squareup.picasso:picasso:2.5.2'
testCompile 'junit:junit:4.12'
}
repositories {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 363fe63..b33fed4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -21,7 +21,10 @@
-
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/MainActivity.kt b/app/src/main/java/com/codingblocks/restapiretrofitjson/MainActivity.kt
index f8ad985..b90a22b 100644
--- a/app/src/main/java/com/codingblocks/restapiretrofitjson/MainActivity.kt
+++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/MainActivity.kt
@@ -3,6 +3,7 @@ package com.codingblocks.restapiretrofitjson
import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
+import com.codingblocks.restapiretrofitjson.activities.AlbumsActivity
import com.codingblocks.restapiretrofitjson.activities.PostsActivity
import com.codingblocks.restapiretrofitjson.activities.TodosActivity
import com.codingblocks.restapiretrofitjson.activities.UsersActivity
@@ -27,6 +28,8 @@ class MainActivity : AppCompatActivity() {
startActivity(Intent(this@MainActivity, TodosActivity::class.java))
})
-
+ btnAlbums.setOnClickListener({
+ startActivity(Intent(this@MainActivity, AlbumsActivity::class.java))
+ })
}
}
diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/AlbumsActivity.java b/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/AlbumsActivity.java
new file mode 100644
index 0000000..b1feeb6
--- /dev/null
+++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/AlbumsActivity.java
@@ -0,0 +1,59 @@
+package com.codingblocks.restapiretrofitjson.activities;
+
+import android.content.Intent;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.util.Log;
+import android.view.View;
+
+import com.codingblocks.restapiretrofitjson.R;
+import com.codingblocks.restapiretrofitjson.adapters.AlbumAdapter;
+import com.codingblocks.restapiretrofitjson.adapters.UserAdapter;
+import com.codingblocks.restapiretrofitjson.api.API;
+import com.codingblocks.restapiretrofitjson.interfaces.OnItemClickListener;
+import com.codingblocks.restapiretrofitjson.models.Album;
+
+import java.util.ArrayList;
+
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
+
+public class AlbumsActivity extends AppCompatActivity {
+ final String TAG = "AlbumAct";
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_albums);
+
+ RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rvAlbumList);
+ final AlbumAdapter albumAdapter = new AlbumAdapter(this, new ArrayList());
+ recyclerView.setLayoutManager(new LinearLayoutManager(this));
+ recyclerView.setAdapter(albumAdapter);
+
+ albumAdapter.setOnItemClickListener(new OnItemClickListener() {
+ @Override
+ public void onItemClick(int itemId, View view) {
+ Intent albumIntent = new Intent(AlbumsActivity.this, PhotosListActivity.class);
+ albumIntent.putExtra("albumId", itemId);
+ startActivity(albumIntent);
+ }
+ });
+
+ API.getInstance().getAlbumsAPI().getAllAlbums().enqueue(new Callback>() {
+ @Override
+ public void onResponse(Call> call, Response> response) {
+ Log.d(TAG, "onResponse: ");
+ albumAdapter.updateAdapter(response.body());
+ }
+
+ @Override
+ public void onFailure(Call> call, Throwable t) {
+ Log.d(TAG, "onFailure: ");
+ }
+ });
+
+ }
+}
diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/PhotoViewActivity.java b/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/PhotoViewActivity.java
new file mode 100644
index 0000000..0096d51
--- /dev/null
+++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/PhotoViewActivity.java
@@ -0,0 +1,22 @@
+package com.codingblocks.restapiretrofitjson.activities;
+
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.codingblocks.restapiretrofitjson.R;
+import com.squareup.picasso.Picasso;
+
+public class PhotoViewActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_photo_view);
+
+ Picasso.with(this).load(getIntent().getStringExtra("url")).placeholder(R.mipmap.loading_image_2_icon)
+ .into((ImageView) findViewById(R.id.ivPhoto));
+ ((TextView)findViewById(R.id.tvPhotoViewTitle)).setText(getIntent().getStringExtra("title"));
+ }
+}
diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/PhotosListActivity.kt b/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/PhotosListActivity.kt
new file mode 100644
index 0000000..ffe4c2b
--- /dev/null
+++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/PhotosListActivity.kt
@@ -0,0 +1,44 @@
+package com.codingblocks.restapiretrofitjson.activities
+
+import android.content.Intent
+import android.support.v7.app.AppCompatActivity
+import android.os.Bundle
+import android.support.v7.widget.LinearLayoutManager
+import android.support.v7.widget.RecyclerView
+import android.widget.Toast
+import kotlinx.android.synthetic.main.activity_photos_list.*
+
+import com.codingblocks.restapiretrofitjson.R
+import com.codingblocks.restapiretrofitjson.adapters.PhotoListAdapter
+import com.codingblocks.restapiretrofitjson.api.API
+import com.codingblocks.restapiretrofitjson.interfaces.OnItemClickListener
+import com.codingblocks.restapiretrofitjson.models.Photo
+import retrofit2.Call
+import retrofit2.Callback
+import retrofit2.Response
+
+class PhotosListActivity : AppCompatActivity() {
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_photos_list)
+
+ var photoListAdapter : PhotoListAdapter = PhotoListAdapter(this, ArrayList())
+
+ rvPhotosList.layoutManager = LinearLayoutManager(this)
+ rvPhotosList.adapter = photoListAdapter
+
+ var photoListCallback = object: Callback> {
+ override fun onResponse(call: Call>?, response: Response>?) {
+ photoListAdapter.updatePhotos(response?.body())
+ }
+
+ override fun onFailure(call: Call>?, t: Throwable?) {
+ TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+ }
+ }
+
+ API.getInstance().photoAPI.getPhotosOfAlbumId(intent.getIntExtra("albumId",-1))
+ .enqueue(photoListCallback)
+ }
+}
diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/AlbumAdapter.kt b/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/AlbumAdapter.kt
new file mode 100644
index 0000000..6719fb6
--- /dev/null
+++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/AlbumAdapter.kt
@@ -0,0 +1,58 @@
+package com.codingblocks.restapiretrofitjson.adapters
+
+import android.content.Context
+import android.support.v7.widget.RecyclerView
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import com.codingblocks.restapiretrofitjson.R
+import com.codingblocks.restapiretrofitjson.interfaces.OnItemClickListener
+import com.codingblocks.restapiretrofitjson.models.Album
+import kotlinx.android.synthetic.main.list_item_album.view.*
+
+/**
+ * Created by abheisenberg on 2/7/17.
+ */
+
+class AlbumAdapter (private val context: Context,
+ private var albumsList: ArrayList?)
+ : RecyclerView.Adapter() {
+
+ internal var onItemClickListener : OnItemClickListener? = null
+
+ fun setOnItemClickListener(onItemClickListener: OnItemClickListener) {
+ this.onItemClickListener = onItemClickListener
+ }
+
+ fun updateAdapter(newAlbumList: ArrayList) {
+ this.albumsList = newAlbumList
+ notifyDataSetChanged()
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): AlbumHolder {
+ val itemView = LayoutInflater.from(parent?.context)
+ .inflate(R.layout.list_item_album, parent, false)
+ return AlbumHolder(itemView)
+ }
+
+ override fun onBindViewHolder(holder: AlbumHolder?, position: Int) {
+ holder?.BindAlbum(albumsList!![position])
+ }
+
+ override fun getItemCount(): Int {
+ return albumsList!!.size
+ }
+
+ inner class AlbumHolder (public var thisView: View)
+ : RecyclerView.ViewHolder(thisView) {
+
+ fun BindAlbum(album: Album) {
+ thisView.tvAlbumTitle.text = album.title
+ thisView.setOnClickListener {
+ onItemClickListener?.onItemClick(album.id
+ , thisView)
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/PhotoListAdapter.kt b/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/PhotoListAdapter.kt
new file mode 100644
index 0000000..52766e1
--- /dev/null
+++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/PhotoListAdapter.kt
@@ -0,0 +1,56 @@
+package com.codingblocks.restapiretrofitjson.adapters
+
+import android.content.Context
+import android.content.Intent
+import android.support.v7.widget.RecyclerView
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import com.codingblocks.restapiretrofitjson.R
+import com.codingblocks.restapiretrofitjson.activities.PhotoViewActivity
+import com.codingblocks.restapiretrofitjson.interfaces.OnItemClickListener
+import com.codingblocks.restapiretrofitjson.models.Photo
+import com.squareup.picasso.Picasso
+import kotlinx.android.synthetic.main.list_item_photos.view.*
+
+/**
+ * Created by abheisenberg on 2/7/17.
+ */
+class PhotoListAdapter (private val context: Context,
+ private var photosList: ArrayList?
+) : RecyclerView.Adapter() {
+
+ fun updatePhotos(newPhotoList: ArrayList?) {
+ this.photosList = newPhotoList
+ notifyDataSetChanged()
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): photoHolder {
+ val itemView : View = LayoutInflater.from(parent?.context).inflate(R.layout.list_item_photos, parent, false)
+ return photoHolder(itemView)
+ }
+
+ override fun onBindViewHolder(holder: photoHolder?, position: Int) {
+ holder?.BindPhotoHolder(photosList!![position])
+ holder?.thisView?.setOnClickListener {
+ context.startActivity(Intent(context, PhotoViewActivity::class.java)
+ .putExtra("title",photosList!![position].title)
+ .putExtra("url",photosList!![position].url))
+ }
+ }
+
+ override fun getItemCount(): Int {
+ return photosList!!.size
+ }
+
+ inner class photoHolder (public var thisView: View) : RecyclerView.ViewHolder(thisView)
+ {
+ fun BindPhotoHolder(photo: Photo) {
+ Picasso.with(context).load(photo.thumbnailUrl)
+ .placeholder(R.mipmap.loading_image_2_icon)
+ .into(thisView.ivThumbnail)
+ thisView.tvPhotoTitle.text = photo.title
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/TodoAdapter.kt b/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/TodoAdapter.kt
index c0bb9b6..6f8de18 100644
--- a/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/TodoAdapter.kt
+++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/TodoAdapter.kt
@@ -47,7 +47,8 @@ public class TodoAdapter (
: RecyclerView.ViewHolder(itemView) {
fun bindTodo(todo: Todo) {
- itemView.tvTodoTitle.text = todo.title;
+ itemView.tvTodoTitle.text = todo.title
+ itemView.cbCompleted.isChecked = todo.completed
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/api/API.java b/app/src/main/java/com/codingblocks/restapiretrofitjson/api/API.java
index 771fdc2..538db1b 100644
--- a/app/src/main/java/com/codingblocks/restapiretrofitjson/api/API.java
+++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/api/API.java
@@ -1,5 +1,7 @@
package com.codingblocks.restapiretrofitjson.api;
+import com.codingblocks.restapiretrofitjson.models.Photo;
+
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
@@ -15,6 +17,16 @@ public class API {
private UsersAPI usersAPI;
private CommentsAPI commentsAPI;
private TodosAPI todosAPI;
+ private AlbumAPI albumsAPI;
+ private PhotoAPI photoAPI;
+
+ public PhotoAPI getPhotoAPI() {
+ return photoAPI;
+ }
+
+ public AlbumAPI getAlbumsAPI() {
+ return albumsAPI;
+ }
public PostsAPI getPostsAPI() {
return postsAPI;
@@ -44,6 +56,8 @@ private API() {
usersAPI = retrofit.create(UsersAPI.class);
commentsAPI = retrofit.create(CommentsAPI.class);
todosAPI = retrofit.create(TodosAPI.class);
+ albumsAPI = retrofit.create(AlbumAPI.class);
+ photoAPI = retrofit.create(PhotoAPI.class);
}
public static API getInstance() {
diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/api/AlbumAPI.java b/app/src/main/java/com/codingblocks/restapiretrofitjson/api/AlbumAPI.java
new file mode 100644
index 0000000..6e97d69
--- /dev/null
+++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/api/AlbumAPI.java
@@ -0,0 +1,17 @@
+package com.codingblocks.restapiretrofitjson.api;
+
+import com.codingblocks.restapiretrofitjson.models.Album;
+
+import java.util.ArrayList;
+
+import retrofit2.Call;
+import retrofit2.http.GET;
+
+/**
+ * Created by abheisenberg on 2/7/17.
+ */
+
+public interface AlbumAPI {
+ @GET("/albums")
+ Call> getAllAlbums();
+}
diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/api/PhotoAPI.java b/app/src/main/java/com/codingblocks/restapiretrofitjson/api/PhotoAPI.java
new file mode 100644
index 0000000..c0c02b9
--- /dev/null
+++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/api/PhotoAPI.java
@@ -0,0 +1,20 @@
+package com.codingblocks.restapiretrofitjson.api;
+
+import com.codingblocks.restapiretrofitjson.models.Photo;
+
+import java.util.ArrayList;
+
+import retrofit2.Call;
+import retrofit2.http.GET;
+import retrofit2.http.Query;
+
+/**
+ * Created by abheisenberg on 2/7/17.
+ */
+
+public interface PhotoAPI {
+
+ @GET("/photos")
+ Call> getPhotosOfAlbumId(@Query("albumId") int albumId);
+
+}
diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/models/Album.kt b/app/src/main/java/com/codingblocks/restapiretrofitjson/models/Album.kt
new file mode 100644
index 0000000..5aa53b0
--- /dev/null
+++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/models/Album.kt
@@ -0,0 +1,11 @@
+package com.codingblocks.restapiretrofitjson.models
+
+/**
+ * Created by abheisenberg on 2/7/17.
+ */
+
+data class Album (
+ val userId: Int,
+ val id: Int,
+ val title: String
+)
diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/models/Photo.kt b/app/src/main/java/com/codingblocks/restapiretrofitjson/models/Photo.kt
new file mode 100644
index 0000000..985ab90
--- /dev/null
+++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/models/Photo.kt
@@ -0,0 +1,12 @@
+package com.codingblocks.restapiretrofitjson.models
+
+/**
+ * Created by abheisenberg on 2/7/17.
+ */
+data class Photo(
+ val albumId : Int,
+ val id: Int,
+ val title: String,
+ val url: String,
+ val thumbnailUrl: String
+)
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_albums.xml b/app/src/main/res/layout/activity_albums.xml
new file mode 100644
index 0000000..c8cf955
--- /dev/null
+++ b/app/src/main/res/layout/activity_albums.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_photo_view.xml b/app/src/main/res/layout/activity_photo_view.xml
new file mode 100644
index 0000000..a5c8ea3
--- /dev/null
+++ b/app/src/main/res/layout/activity_photo_view.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_photos_list.xml b/app/src/main/res/layout/activity_photos_list.xml
new file mode 100644
index 0000000..7e84a98
--- /dev/null
+++ b/app/src/main/res/layout/activity_photos_list.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/list_item_album.xml b/app/src/main/res/layout/list_item_album.xml
new file mode 100644
index 0000000..4fda29e
--- /dev/null
+++ b/app/src/main/res/layout/list_item_album.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/list_item_comment.xml b/app/src/main/res/layout/list_item_comment.xml
index f4df93b..74f5a30 100644
--- a/app/src/main/res/layout/list_item_comment.xml
+++ b/app/src/main/res/layout/list_item_comment.xml
@@ -1,34 +1,46 @@
-
-
+
-
+
+
+
+
+
-
\ No newline at end of file
+
diff --git a/app/src/main/res/layout/list_item_photos.xml b/app/src/main/res/layout/list_item_photos.xml
new file mode 100644
index 0000000..6296d57
--- /dev/null
+++ b/app/src/main/res/layout/list_item_photos.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/list_item_post.xml b/app/src/main/res/layout/list_item_post.xml
index e6f9cce..0f7ec49 100644
--- a/app/src/main/res/layout/list_item_post.xml
+++ b/app/src/main/res/layout/list_item_post.xml
@@ -1,21 +1,32 @@
-
-
-
+ android:layout_height="wrap_content">
+
+
+
+
+
+
-
\ No newline at end of file
+
diff --git a/app/src/main/res/layout/list_item_todo.xml b/app/src/main/res/layout/list_item_todo.xml
index 7dd7af1..6f93be5 100644
--- a/app/src/main/res/layout/list_item_todo.xml
+++ b/app/src/main/res/layout/list_item_todo.xml
@@ -1,12 +1,37 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/loading_image_2_icon.png b/app/src/main/res/mipmap-hdpi/loading_image_2_icon.png
new file mode 100644
index 0000000..fd67221
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/loading_image_2_icon.png differ