diff --git a/.idea/misc.xml b/.idea/misc.xml index 5d19981..ba7052b 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,8 +1,5 @@ - - - - - - - - - - - - - - + diff --git a/.idea/modules.xml b/.idea/modules.xml index 1b3ccab..3bc0ff9 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,6 +2,7 @@ + diff --git a/app/build.gradle b/app/build.gradle index b963ad0..718aaa7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,12 +3,12 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' android { - compileSdkVersion 26 + compileSdkVersion 25 buildToolsVersion "25.0.2" defaultConfig { applicationId "com.codingblocks.restapiretrofitjson" minSdkVersion 16 - targetSdkVersion 26 + targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -27,13 +27,14 @@ dependencies { exclude group: 'com.android.support', module: 'support-annotations' }) compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" - compile 'com.android.support:appcompat-v7:26.+' - compile 'com.android.support:recyclerview-v7:26.+' - compile 'com.android.support:cardview-v7:26.+' - compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha8' + compile 'com.android.support:appcompat-v7:25.+' + compile 'com.android.support:recyclerview-v7:25.+' + compile 'com.android.support:cardview-v7:25.+' + compile 'com.android.support.constraint:constraint-layout:1.0.2' compile 'com.squareup.retrofit2:retrofit:2.3.0' compile 'com.squareup.retrofit2:converter-gson:2.3.0' testCompile 'junit:junit:4.12' + implementation 'com.squareup.picasso:picasso:2.5.2' } repositories { mavenCentral() diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 363fe63..9b5a9ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -14,6 +14,9 @@ + + + diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/MainActivity.kt b/app/src/main/java/com/codingblocks/restapiretrofitjson/MainActivity.kt index f8ad985..501a262 100644 --- a/app/src/main/java/com/codingblocks/restapiretrofitjson/MainActivity.kt +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/MainActivity.kt @@ -3,30 +3,31 @@ package com.codingblocks.restapiretrofitjson import android.content.Intent import android.support.v7.app.AppCompatActivity import android.os.Bundle +import android.view.View +import com.codingblocks.restapiretrofitjson.activities.AlbumActivity import com.codingblocks.restapiretrofitjson.activities.PostsActivity import com.codingblocks.restapiretrofitjson.activities.TodosActivity import com.codingblocks.restapiretrofitjson.activities.UsersActivity import kotlinx.android.synthetic.main.activity_main.* -class MainActivity : AppCompatActivity() { +class MainActivity : AppCompatActivity(), View.OnClickListener { + override fun onClick(v: View) { + when(v.id){ + R.id.btnAlbums->startActivity(Intent(this@MainActivity,AlbumActivity::class.java)) + R.id.btnPosts->startActivity(Intent(this@MainActivity,PostsActivity::class.java)) + R.id.btnUsers->startActivity(Intent(this@MainActivity,UsersActivity::class.java)) + R.id.btnTodos->startActivity(Intent(this@MainActivity,TodosActivity::class.java)) + } + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) - btnPosts.setOnClickListener({ - startActivity(Intent(this@MainActivity, PostsActivity::class.java)) - }) - - btnUsers.setOnClickListener({ - startActivity(Intent(this@MainActivity, UsersActivity::class.java)) - }) - - btnTodos.setOnClickListener({ - startActivity(Intent(this@MainActivity, TodosActivity::class.java)) - }) - - + btnAlbums.setOnClickListener(this) + btnPosts.setOnClickListener(this) + btnUsers.setOnClickListener(this) + btnTodos.setOnClickListener(this) } } diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/AlbumActivity.kt b/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/AlbumActivity.kt new file mode 100644 index 0000000..3f2ed0d --- /dev/null +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/AlbumActivity.kt @@ -0,0 +1,55 @@ +package com.codingblocks.restapiretrofitjson.activities + +import android.content.Intent +import android.os.Bundle +import android.support.v7.app.AppCompatActivity +import android.support.v7.widget.LinearLayoutManager +import android.view.View +import com.codingblocks.restapiretrofitjson.R +import com.codingblocks.restapiretrofitjson.adapters.AlbumsAdapter +import com.codingblocks.restapiretrofitjson.api.API +import com.codingblocks.restapiretrofitjson.interfaces.OnItemClickListener +import com.codingblocks.restapiretrofitjson.models.Album +import kotlinx.android.synthetic.main.activity_album.* +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response +import java.util.* + +class AlbumActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_album) + + rvAlbumsView.layoutManager = LinearLayoutManager(this) + val albumsAdapter = AlbumsAdapter(ArrayList(), this) + rvAlbumsView.adapter = albumsAdapter + pbProgress.visibility = View.VISIBLE + btnShowAllPhotos.setOnClickListener { startActivity(Intent(this@AlbumActivity, PhotosActivity::class.java)) } + albumsAdapter.setOnItemClickListener(OnItemClickListener { itemid, view -> + val i = Intent(this@AlbumActivity, PhotosActivity::class.java) + i.putExtra("albumId", itemid) + startActivity(i) + }) + val receivedId = intent.getIntExtra("userId", -1) + supportActionBar!!.title = "Albums" + val albumsApi = API.getInstance().albumsApi + val receiveAlbums = object : Callback> { + override fun onResponse(call: Call>, response: Response>) { + albumsAdapter.updateAlbums(response.body()!!, pbProgress) + } + + override fun onFailure(call: Call>, t: Throwable) { + + } + } + + if (receivedId != -1) { + albumsApi.getAlbumsbyUserId(receivedId).enqueue(receiveAlbums) + } else { + albumsApi.getAlbumsbyUserId(null).enqueue(receiveAlbums) + } + + } +} diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/CommentsActivity.kt b/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/CommentsActivity.kt index a5607aa..9f0e7b0 100644 --- a/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/CommentsActivity.kt +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/CommentsActivity.kt @@ -1,20 +1,17 @@ package com.codingblocks.restapiretrofitjson.activities -import android.support.v7.app.AppCompatActivity import android.os.Bundle +import android.support.v7.app.AppCompatActivity import android.support.v7.widget.LinearLayoutManager - +import android.view.View import com.codingblocks.restapiretrofitjson.R import com.codingblocks.restapiretrofitjson.adapters.CommentAdapter import com.codingblocks.restapiretrofitjson.api.API import com.codingblocks.restapiretrofitjson.models.Comment import kotlinx.android.synthetic.main.activity_comments.* - -import kotlinx.android.synthetic.main.activity_comments.view.* import retrofit2.Call import retrofit2.Callback import retrofit2.Response -import retrofit2.Retrofit class CommentsActivity : AppCompatActivity() { @@ -25,6 +22,9 @@ class CommentsActivity : AppCompatActivity() { val commentAdapter = CommentAdapter(this, ArrayList()) rvCommentsList.layoutManager = LinearLayoutManager(this) rvCommentsList.adapter = commentAdapter + pbProgress.visibility= View.VISIBLE + + supportActionBar!!.title="Comments" @@ -36,7 +36,7 @@ class CommentsActivity : AppCompatActivity() { override fun onResponse(call: Call>?, response: Response>?) { // - commentAdapter.updateComments(response!!.body()!!) + commentAdapter.updateComments(response!!.body()!!,pbProgress) } }) } diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/PhotosActivity.kt b/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/PhotosActivity.kt new file mode 100644 index 0000000..cb22914 --- /dev/null +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/PhotosActivity.kt @@ -0,0 +1,58 @@ +package com.codingblocks.restapiretrofitjson.activities + +import android.content.Intent +import android.os.Bundle +import android.support.v7.app.AppCompatActivity +import android.support.v7.widget.LinearLayoutManager +import android.view.View +import com.codingblocks.restapiretrofitjson.R +import com.codingblocks.restapiretrofitjson.adapters.PhotosAdapter +import com.codingblocks.restapiretrofitjson.api.API +import com.codingblocks.restapiretrofitjson.interfaces.OnPhotoClickListener +import com.codingblocks.restapiretrofitjson.models.Photos +import kotlinx.android.synthetic.main.activity_photos.* +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response +import java.util.* + +class PhotosActivity : AppCompatActivity() { + + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_photos) + rvPhotosView.layoutManager = LinearLayoutManager(this) + val photosAdapter = PhotosAdapter(ArrayList(), this) + rvPhotosView.adapter = photosAdapter + pbProgress.visibility = View.VISIBLE + + photosAdapter.setOnPhotoClickListener(OnPhotoClickListener { url, title -> + val i = Intent(this@PhotosActivity, ViewPhotoActivity::class.java) + i.putExtra("url", url) + i.putExtra("title", title) + startActivity(i) + }) + + val receivedId = intent.getIntExtra("albumId", -1) + + supportActionBar!!.title = "Photos" + + val photosApi = API.getInstance().photosApi + + val receivePhotos = object : Callback> { + override fun onResponse(call: Call>, response: Response>) { + photosAdapter.updateAlbums(response.body()!!, pbProgress) + } + + override fun onFailure(call: Call>, t: Throwable) { + + } + } + if (receivedId != -1) { + photosApi.getPhotosOfAlbumId(receivedId).enqueue(receivePhotos) + } else { + photosApi.photos.enqueue(receivePhotos) + } + } +} diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/PostsActivity.java b/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/PostsActivity.java deleted file mode 100644 index b244f79..0000000 --- a/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/PostsActivity.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.codingblocks.restapiretrofitjson.activities; - -import android.content.Intent; -import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.util.Log; -import android.view.View; - -import com.codingblocks.restapiretrofitjson.MainActivity; -import com.codingblocks.restapiretrofitjson.R; -import com.codingblocks.restapiretrofitjson.adapters.PostAdapter; -import com.codingblocks.restapiretrofitjson.api.API; -import com.codingblocks.restapiretrofitjson.api.PostsAPI; -import com.codingblocks.restapiretrofitjson.interfaces.OnItemClickListener; -import com.codingblocks.restapiretrofitjson.models.Post; - -import java.util.ArrayList; - -import retrofit2.Call; -import retrofit2.Callback; -import retrofit2.Response; - -public class PostsActivity extends AppCompatActivity { - - public static final String TAG = "PA"; - - RecyclerView rvPostsList; - PostAdapter postAdapter; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_posts); - - rvPostsList = (RecyclerView) findViewById(R.id.rvPostsList); - rvPostsList.setLayoutManager(new LinearLayoutManager(this)); - postAdapter = new PostAdapter(this, new ArrayList()); - rvPostsList.setAdapter(postAdapter); - postAdapter.setOnItemClickListener(new OnItemClickListener() { - @Override - public void onItemClick(int itemId, View view) { - Intent i = new Intent(PostsActivity.this, CommentsActivity.class); - i.putExtra("postId", itemId); - startActivity(i); - } - }); - - - PostsAPI postsAPI = API.getInstance().getPostsAPI(); - Callback> postCallback = new Callback>() { - - @Override - public void onResponse(Call> call, Response> response) { - Log.d(TAG, "onResponse: "); - postAdapter.updatePosts(response.body()); - } - - @Override - public void onFailure(Call> call, Throwable t) { - - } - }; - int userIdReceived = getIntent().getIntExtra("userId", -1); - if (userIdReceived != -1) { - postsAPI.getPostsByUserId(userIdReceived).enqueue(postCallback); - } else { - postsAPI.getPosts().enqueue(postCallback); - } - - } -} diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/PostsActivity.kt b/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/PostsActivity.kt new file mode 100644 index 0000000..04a7628 --- /dev/null +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/PostsActivity.kt @@ -0,0 +1,65 @@ +package com.codingblocks.restapiretrofitjson.activities + +import android.content.Intent +import android.os.Bundle +import android.support.v7.app.AppCompatActivity +import android.support.v7.widget.LinearLayoutManager +import android.util.Log +import android.view.View +import com.codingblocks.restapiretrofitjson.R +import com.codingblocks.restapiretrofitjson.adapters.PostAdapter +import com.codingblocks.restapiretrofitjson.api.API +import com.codingblocks.restapiretrofitjson.interfaces.OnItemClickListener +import com.codingblocks.restapiretrofitjson.models.Post +import kotlinx.android.synthetic.main.activity_posts.* +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response +import java.util.* + +class PostsActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_posts) + + rvPostsList.layoutManager = LinearLayoutManager(this) + val postAdapter = PostAdapter(this, ArrayList()) + rvPostsList.adapter = postAdapter + pbProgress.visibility = View.VISIBLE + postAdapter.setOnItemClickListener(OnItemClickListener { itemId, view -> + val i = Intent(this@PostsActivity, CommentsActivity::class.java) + i.putExtra("postId", itemId) + startActivity(i) + }) + + + val postsAPI = API.getInstance().postsAPI + val postCallback = object : Callback> { + + override fun onResponse(call: Call>, response: Response>) { + Log.d(TAG, "onResponse: ") + postAdapter.updatePosts(response.body()!!, pbProgress) + } + + override fun onFailure(call: Call>, t: Throwable) { + + } + } + val userIdReceived = intent.getIntExtra("userId", -1) + val username = intent.getStringExtra("username") + if (userIdReceived != -1) { + postsAPI.getPostsByUserId(userIdReceived).enqueue(postCallback) + supportActionBar!!.title = "Posts by " + username + } else { + postsAPI.posts.enqueue(postCallback) + supportActionBar!!.title = "Posts" + } + + } + + companion object { + + val TAG = "PA" + } +} diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/TodosActivity.kt b/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/TodosActivity.kt index b7c7813..788afa0 100644 --- a/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/TodosActivity.kt +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/TodosActivity.kt @@ -1,16 +1,14 @@ package com.codingblocks.restapiretrofitjson.activities -import android.support.v7.app.AppCompatActivity import android.os.Bundle +import android.support.v7.app.AppCompatActivity import android.support.v7.widget.LinearLayoutManager -import android.util.Log - -import kotlinx.android.synthetic.main.activity_todos.* - +import android.view.View import com.codingblocks.restapiretrofitjson.R import com.codingblocks.restapiretrofitjson.adapters.TodoAdapter import com.codingblocks.restapiretrofitjson.api.API import com.codingblocks.restapiretrofitjson.models.Todo +import kotlinx.android.synthetic.main.activity_todos.* import retrofit2.Call import retrofit2.Callback import retrofit2.Response @@ -24,22 +22,26 @@ class TodosActivity : AppCompatActivity() { rvTodosList.layoutManager = LinearLayoutManager(this) var todoAdapter = TodoAdapter(ArrayList()) rvTodosList.adapter = todoAdapter + pbProgress.visibility = View.VISIBLE var todoCallback = object: Callback> { override fun onFailure(call: Call>?, t: Throwable?) { } override fun onResponse(call: Call>?, response: Response>?) { - todoAdapter.updateTodos(response!!.body()!!) + todoAdapter.updateTodos(response!!.body()!!,pbProgress) } } var userId = intent.getIntExtra("userId", -1) + var username=intent.getStringExtra("username") if (userId != -1) { API.getInstance().todosAPI.getTodos(userId).enqueue(todoCallback) + supportActionBar!!.title="Todos by "+username } else { API.getInstance().todosAPI.getTodos(null).enqueue(todoCallback) + supportActionBar!!.title="Todos" } diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/UsersActivity.java b/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/UsersActivity.java deleted file mode 100644 index f70648e..0000000 --- a/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/UsersActivity.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.codingblocks.restapiretrofitjson.activities; - -import android.content.Intent; -import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.View; -import android.widget.Button; - -import com.codingblocks.restapiretrofitjson.R; -import com.codingblocks.restapiretrofitjson.adapters.UserAdapter; -import com.codingblocks.restapiretrofitjson.api.API; -import com.codingblocks.restapiretrofitjson.interfaces.OnItemClickListener; -import com.codingblocks.restapiretrofitjson.models.User; - -import java.util.ArrayList; - -import retrofit2.Call; -import retrofit2.Callback; -import retrofit2.Response; - -public class UsersActivity extends AppCompatActivity { - - public static final String TAG = "USERS"; - - RecyclerView rvUserList; - UserAdapter userAdapter; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_users); - - rvUserList = (RecyclerView) findViewById(R.id.rvUserList); - rvUserList.setLayoutManager(new LinearLayoutManager(this)); - userAdapter = new UserAdapter(this, new ArrayList()); - rvUserList.setAdapter(userAdapter); - userAdapter.setOnItemClickListener(new OnItemClickListener() { - @Override - public void onItemClick(int itemId, View view) { - - switch (view.getId()) { - case R.id.btnUserComments: - Intent todosActIntent = new Intent(UsersActivity.this, - TodosActivity.class); - todosActIntent.putExtra("userId", itemId); - startActivity(todosActIntent); - break; - case R.id.btnUserPosts: - Intent postActIntent = new Intent(UsersActivity.this, - PostsActivity.class); - - postActIntent.putExtra("userId", itemId); - startActivity(postActIntent); - break; - } - - - } - }); - - ((Button) findViewById(R.id.btnAllPosts)).setOnClickListener( - new View.OnClickListener() { - @Override - public void onClick(View view) { - startActivity(new Intent( - UsersActivity.this, - PostsActivity.class - )); - } - } - ); - - - API.getInstance().getUsersAPI().getUsers().enqueue(new Callback>() { - @Override - public void onResponse(Call> call, - Response> response) { - userAdapter.updateUsers(response.body()); - } - - @Override - public void onFailure(Call> call, Throwable t) { - - } - }); - - } - - -} diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/UsersActivity.kt b/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/UsersActivity.kt new file mode 100644 index 0000000..f322c27 --- /dev/null +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/UsersActivity.kt @@ -0,0 +1,58 @@ +package com.codingblocks.restapiretrofitjson.activities + +import android.content.Intent +import android.os.Bundle +import android.support.v7.app.AppCompatActivity +import android.support.v7.widget.LinearLayoutManager +import android.view.View +import android.widget.Button +import com.codingblocks.restapiretrofitjson.R +import com.codingblocks.restapiretrofitjson.adapters.UserAdapter +import com.codingblocks.restapiretrofitjson.api.API +import com.codingblocks.restapiretrofitjson.models.User +import kotlinx.android.synthetic.main.activity_users.* +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response +import java.util.* + +class UsersActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_users) + + rvUserList.layoutManager = LinearLayoutManager(this) + val userAdapter = UserAdapter(this, ArrayList()) + rvUserList.adapter = userAdapter + pbProgress.visibility = View.VISIBLE + supportActionBar!!.title = "Users" + + (findViewById(R.id.btnAllPosts) as Button).setOnClickListener { + startActivity(Intent( + this@UsersActivity, + PostsActivity::class.java + )) + } + + + API.getInstance().usersAPI.users.enqueue(object : Callback> { + override fun onResponse(call: Call>, + response: Response>) { + userAdapter.updateUsers(response.body()!!, pbProgress) + } + + override fun onFailure(call: Call>, t: Throwable) { + + } + }) + + } + + companion object { + + val TAG = "USERS" + } + + +} diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/ViewPhotoActivity.kt b/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/ViewPhotoActivity.kt new file mode 100644 index 0000000..7708ddb --- /dev/null +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/ViewPhotoActivity.kt @@ -0,0 +1,24 @@ +package com.codingblocks.restapiretrofitjson.activities + +import android.os.Bundle +import android.support.v7.app.AppCompatActivity +import com.codingblocks.restapiretrofitjson.R +import com.squareup.picasso.Picasso +import kotlinx.android.synthetic.main.activity_view_photo.* + +class ViewPhotoActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_view_photo) + val url = intent.getStringExtra("url") + val title = intent.getStringExtra("title") + + supportActionBar!!.title = "View Photo" + + tvTitle.text = title + Picasso.with(this).load(url).error(R.drawable.loading) + .placeholder(R.drawable.loading) + .into(ivImage) + } +} diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/AlbumsAdapter.kt b/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/AlbumsAdapter.kt new file mode 100644 index 0000000..4d01049 --- /dev/null +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/AlbumsAdapter.kt @@ -0,0 +1,57 @@ +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 android.widget.ProgressBar +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.* +import java.util.* + +/** + * Created by pervy_sage on 30/6/17. + */ + +class AlbumsAdapter(internal var albums: ArrayList, internal var mContext: Context) : RecyclerView.Adapter() { + + internal var onItemClickListener: OnItemClickListener? = null + fun setOnItemClickListener(onItemClickListener: OnItemClickListener) { + this.onItemClickListener = onItemClickListener + } + + fun updateAlbums(albums: ArrayList, progressBar: ProgressBar) { + + this.albums = albums + progressBar.visibility = View.INVISIBLE + progressBar.visibility = View.GONE + notifyDataSetChanged() + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AlbumsViewHolder { + val li = mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater + val itemView = li.inflate(R.layout.list_item_album, parent, false) + return AlbumsViewHolder(itemView) + } + + override fun onBindViewHolder(holder: AlbumsViewHolder, position: Int) { + holder.bindAlbum(albums[position]) + } + + override fun getItemCount(): Int { + return albums.size + } + + inner class AlbumsViewHolder(internal var rootView: View) + : RecyclerView.ViewHolder(rootView) { + fun bindAlbum(thisAlbum : Album){ + rootView.tvTitle.text=thisAlbum.title + rootView.setOnClickListener { + onItemClickListener!!.onItemClick(thisAlbum.id,rootView) + } + } + } +} diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/CommentAdapter.kt b/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/CommentAdapter.kt index 01c70e7..edffd01 100644 --- a/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/CommentAdapter.kt +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/CommentAdapter.kt @@ -5,6 +5,7 @@ import android.support.v7.widget.RecyclerView import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ProgressBar import android.widget.TextView import com.codingblocks.restapiretrofitjson.R import com.codingblocks.restapiretrofitjson.models.Comment @@ -19,8 +20,9 @@ class CommentAdapter(private val context: Context, private var comments: ArrayList) : RecyclerView.Adapter() { - fun updateComments(comments: ArrayList) { + fun updateComments(comments: ArrayList,progressBar: ProgressBar) { this.comments = comments; + progressBar.visibility=View.INVISIBLE notifyDataSetChanged(); } diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/PhotosAdapter.kt b/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/PhotosAdapter.kt new file mode 100644 index 0000000..9869a85 --- /dev/null +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/PhotosAdapter.kt @@ -0,0 +1,63 @@ +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 android.widget.ProgressBar +import com.codingblocks.restapiretrofitjson.R +import com.codingblocks.restapiretrofitjson.interfaces.OnPhotoClickListener +import com.codingblocks.restapiretrofitjson.models.Photos +import com.squareup.picasso.Picasso +import kotlinx.android.synthetic.main.list_item_photos.view.* +import java.util.* + +/** + * Created by pervy_sage on 30/6/17. + */ + +class PhotosAdapter(internal var photos: ArrayList, internal var mContext: Context) : RecyclerView.Adapter() { + + internal var onPhotoClickListener: OnPhotoClickListener? = null + fun setOnPhotoClickListener(onPhotoClickListener: OnPhotoClickListener) { + this.onPhotoClickListener = onPhotoClickListener + } + + fun updateAlbums(photos: ArrayList, progressBar: ProgressBar) { + this.photos = photos + progressBar.visibility = View.INVISIBLE + progressBar.visibility = View.GONE + notifyDataSetChanged() + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PhotosViewHolder { + val li = mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater + val itemView = li.inflate(R.layout.list_item_photos, parent, false) + return PhotosViewHolder(itemView) + } + + override fun onBindViewHolder(holder: PhotosViewHolder, position: Int) { + holder.bindPhoto(photos[position]) + } + + override fun getItemCount(): Int { + return photos.size + } + + inner class PhotosViewHolder(internal var rootView: View) + : RecyclerView.ViewHolder(rootView) { + fun bindPhoto(thisPhoto : Photos){ + rootView.tvTitle.text=thisPhoto.title + Picasso.with(mContext) + .load(thisPhoto.thumbnailUrl) + .error(R.drawable.loading) + .placeholder(R.drawable.loading) + .into(rootView.ivThumbnail) + rootView.setOnClickListener { + onPhotoClickListener!!.onClick(thisPhoto.thumbnailUrl,thisPhoto.title) + } + } + } +} diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/PostAdapter.java b/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/PostAdapter.java deleted file mode 100644 index 5a6fdef..0000000 --- a/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/PostAdapter.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.codingblocks.restapiretrofitjson.adapters; - -import android.content.Context; -import android.support.v7.widget.RecyclerView; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import com.codingblocks.restapiretrofitjson.R; -import com.codingblocks.restapiretrofitjson.interfaces.OnItemClickListener; -import com.codingblocks.restapiretrofitjson.models.Post; - -import java.util.ArrayList; - -/** - * Created by championswimmer on 29/06/17. - */ - -public class PostAdapter - extends RecyclerView.Adapter { - - public static final String TAG = "PADPTR"; - - private Context context; - private ArrayList posts; - - private OnItemClickListener onItemClickListener; - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.onItemClickListener = onItemClickListener; - } - - public PostAdapter(Context context, ArrayList posts) { - this.context = context; - this.posts = posts; - } - - public void updatePosts(ArrayList posts) { - this.posts = posts; - notifyDataSetChanged(); - } - - @Override - public PostViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - Log.d(TAG, "onCreateViewHolder: "); - LayoutInflater li = - (LayoutInflater) context.getSystemService( - Context.LAYOUT_INFLATER_SERVICE); - View itemView = li.inflate(R.layout.list_item_post, parent, false); - - return new PostViewHolder(itemView); - } - - @Override - public void onBindViewHolder(PostViewHolder holder, int position) { - Log.d(TAG, "onBindViewHolder: "); - final Post thisPost = posts.get(position); - - holder.tvPostTitle.setText(thisPost.getTitle()); - holder.tvPostBody.setText(thisPost.getBody()); - holder.thisView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if (onItemClickListener != null) { - onItemClickListener.onItemClick(thisPost.getId(), view); - } - } - }); - } - - @Override - public int getItemCount() { - return posts.size(); - } - - class PostViewHolder extends RecyclerView.ViewHolder { - - TextView tvPostBody, tvPostTitle; - View thisView; - - public PostViewHolder(View itemView) { - super(itemView); - thisView = itemView; - tvPostBody = (TextView) itemView.findViewById(R.id.tvPostBody); - tvPostTitle = (TextView) itemView.findViewById(R.id.tvPostTitle); - } - } -} diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/PostAdapter.kt b/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/PostAdapter.kt new file mode 100644 index 0000000..23b18c9 --- /dev/null +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/PostAdapter.kt @@ -0,0 +1,68 @@ +package com.codingblocks.restapiretrofitjson.adapters + +import android.content.Context +import android.support.v7.widget.RecyclerView +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ProgressBar +import com.codingblocks.restapiretrofitjson.R +import com.codingblocks.restapiretrofitjson.interfaces.OnItemClickListener +import com.codingblocks.restapiretrofitjson.models.Post +import kotlinx.android.synthetic.main.list_item_post.view.* +import java.util.* + +/** + * Created by championswimmer on 29/06/17. + */ + +internal class PostAdapter(private val context: Context, private var posts: ArrayList?) : RecyclerView.Adapter() { + + private var onItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener) { + this.onItemClickListener = onItemClickListener + } + + fun updatePosts(posts: ArrayList, progressBar: ProgressBar) { + this.posts = posts + progressBar.visibility = View.INVISIBLE + notifyDataSetChanged() + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PostViewHolder { + Log.d(TAG, "onCreateViewHolder: ") + val li = context.getSystemService( + Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater + val itemView = li.inflate(R.layout.list_item_post, parent, false) + + return PostViewHolder(itemView) + } + + override fun onBindViewHolder(holder: PostViewHolder, position: Int) { + Log.d(TAG, "onBindViewHolder: ") + holder.bindPost(posts!![position]) + + } + + override fun getItemCount(): Int { + return posts!!.size + } + + inner class PostViewHolder(var thisView: View) + : RecyclerView.ViewHolder(thisView) { + fun bindPost(thispost : Post){ + thisView.tvPostBody.text=thispost.body + thisView.tvPostTitle.text=thispost.title + thisView.setOnClickListener { + onItemClickListener!!.onItemClick(thispost.id,thisView) + } + } + } + + companion object { + + val TAG = "PADPTR" + } +} 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..19577d4 100644 --- a/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/TodoAdapter.kt +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/TodoAdapter.kt @@ -5,6 +5,7 @@ import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ProgressBar import com.codingblocks.restapiretrofitjson.R import com.codingblocks.restapiretrofitjson.models.Todo @@ -17,8 +18,9 @@ public class TodoAdapter ( var todos: ArrayList ) : RecyclerView.Adapter() { - fun updateTodos(todos: ArrayList) { + fun updateTodos(todos: ArrayList,pbProgressBar: ProgressBar) { this.todos = todos + pbProgressBar.visibility=View.INVISIBLE notifyDataSetChanged() } @@ -48,6 +50,7 @@ public class TodoAdapter ( fun bindTodo(todo: Todo) { itemView.tvTodoTitle.text = todo.title; + if(todo.completed)itemView.cbCompleted.isChecked=true; } } } \ No newline at end of file diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/UserAdapter.kt b/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/UserAdapter.kt index f9c5e79..fba4828 100644 --- a/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/UserAdapter.kt +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/UserAdapter.kt @@ -1,11 +1,15 @@ 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 android.widget.ProgressBar import com.codingblocks.restapiretrofitjson.R +import com.codingblocks.restapiretrofitjson.activities.PostsActivity +import com.codingblocks.restapiretrofitjson.activities.TodosActivity import com.codingblocks.restapiretrofitjson.interfaces.OnItemClickListener import com.codingblocks.restapiretrofitjson.models.User import kotlinx.android.synthetic.main.list_item_user.view.* @@ -24,8 +28,9 @@ class UserAdapter(private val context: Context, this.onItemClickListener = onItemClickListener } - fun updateUsers(newUserList: ArrayList) { + fun updateUsers(newUserList: ArrayList,progressBar: ProgressBar) { this.users = newUserList + progressBar.visibility=View.INVISIBLE notifyDataSetChanged() } @@ -54,12 +59,16 @@ class UserAdapter(private val context: Context, thisView.tvUserPhone.text = user.phone thisView.tvUserEmail.text = user.email thisView.btnUserPosts.setOnClickListener { - onItemClickListener?.onItemClick(user.id, - itemView.btnUserPosts) + val i = Intent(context, PostsActivity::class.java) + i.putExtra("userId", user.id) + i.putExtra("username", user.username) + context.startActivity(i) } - thisView.btnUserComments.setOnClickListener { - onItemClickListener?.onItemClick(user.id, - itemView.btnUserComments) + thisView.btnUserTodos.setOnClickListener { + val i = Intent(context, TodosActivity::class.java) + i.putExtra("userId", user.id) + i.putExtra("username", user.username) + context.startActivity(i) } } 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..a461b05 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.Photos; + import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; @@ -15,6 +17,8 @@ public class API { private UsersAPI usersAPI; private CommentsAPI commentsAPI; private TodosAPI todosAPI; + private AlbumsApi albumsApi; + private AlbumsApi.PhotosApi photosApi; public PostsAPI getPostsAPI() { return postsAPI; @@ -32,6 +36,14 @@ public TodosAPI getTodosAPI() { return todosAPI; } + public AlbumsApi getAlbumsApi() { + return albumsApi; + } + + public AlbumsApi.PhotosApi getPhotosApi() { + return photosApi; + } + private API() { Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://jsonplaceholder.typicode.com") @@ -44,6 +56,9 @@ private API() { usersAPI = retrofit.create(UsersAPI.class); commentsAPI = retrofit.create(CommentsAPI.class); todosAPI = retrofit.create(TodosAPI.class); + albumsApi=retrofit.create(AlbumsApi.class); + photosApi=retrofit.create(AlbumsApi.PhotosApi.class); + } public static API getInstance() { diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/api/AlbumsApi.java b/app/src/main/java/com/codingblocks/restapiretrofitjson/api/AlbumsApi.java new file mode 100644 index 0000000..3353731 --- /dev/null +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/api/AlbumsApi.java @@ -0,0 +1,32 @@ +package com.codingblocks.restapiretrofitjson.api; + +import com.codingblocks.restapiretrofitjson.models.Album; +import com.codingblocks.restapiretrofitjson.models.Photos; + +import java.util.ArrayList; +import com.codingblocks.restapiretrofitjson.models.Album; +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Path; +import retrofit2.http.Query; + +/** + * Created by pervy_sage on 1/7/17. + */ + +public interface AlbumsApi { + @GET("/albums") + Call>getAlbumsbyUserId( + @Query("userId") Integer userId + ); + + interface PhotosApi{ + @GET("/photos") + Call>getPhotos(); + + @GET("/albums/{id}/photos") + Call>getPhotosOfAlbumId( + @Path("id")int id + ); + } +} diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/interfaces/OnPhotoClickListener.java b/app/src/main/java/com/codingblocks/restapiretrofitjson/interfaces/OnPhotoClickListener.java new file mode 100644 index 0000000..6bbe23e --- /dev/null +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/interfaces/OnPhotoClickListener.java @@ -0,0 +1,9 @@ +package com.codingblocks.restapiretrofitjson.interfaces; + +/** + * Created by pervy_sage on 1/7/17. + */ + +public interface OnPhotoClickListener { + void onClick(String url,String title); +} 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..e96182d --- /dev/null +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/models/Album.kt @@ -0,0 +1,11 @@ +package com.codingblocks.restapiretrofitjson.models + +/** + * Created by pervy_sage on 1/7/17. + */ + +data class Album( + val userId: Int, + val id: Int, + val title:String +) \ No newline at end of file diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/models/Photos.kt b/app/src/main/java/com/codingblocks/restapiretrofitjson/models/Photos.kt new file mode 100644 index 0000000..5d4c48e --- /dev/null +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/models/Photos.kt @@ -0,0 +1,13 @@ +package com.codingblocks.restapiretrofitjson.models + +/** + * Created by pervy_sage on 1/7/17. + */ + +data class Photos( + 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/drawable/loading.png b/app/src/main/res/drawable/loading.png new file mode 100644 index 0000000..fdb7ad2 Binary files /dev/null and b/app/src/main/res/drawable/loading.png differ diff --git a/app/src/main/res/drawable/my_button_bg.xml b/app/src/main/res/drawable/my_button_bg.xml new file mode 100644 index 0000000..03f4e4d --- /dev/null +++ b/app/src/main/res/drawable/my_button_bg.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_album.xml b/app/src/main/res/layout/activity_album.xml new file mode 100644 index 0000000..916e269 --- /dev/null +++ b/app/src/main/res/layout/activity_album.xml @@ -0,0 +1,34 @@ + + + + + + + + + +