From c0fcb22524b66a11d339ebb2ee110b0d9c59f481 Mon Sep 17 00:00:00 2001 From: shubham2797 Date: Thu, 6 Jul 2017 02:39:57 +0530 Subject: [PATCH] adding albums, photos and todos checkbox --- .idea/modules.xml | 2 +- app/build.gradle | 13 +-- app/src/main/AndroidManifest.xml | 4 +- .../restapiretrofitjson/MainActivity.kt | 5 +- .../activities/AlbumsActivity.java | 56 ++++++++++++ .../activities/PhotosActivity.java | 53 ++++++++++++ .../adapters/AlbumAdapter.java | 78 +++++++++++++++++ .../adapters/PhotoAdapter.java | 86 +++++++++++++++++++ .../adapters/TodoAdapter.kt | 21 +++-- .../restapiretrofitjson/api/API.java | 11 +++ .../restapiretrofitjson/api/AlbumsAPI.java | 18 ++++ .../restapiretrofitjson/api/PhotosAPI.java | 24 ++++++ .../restapiretrofitjson/models/Album.kt | 10 +++ .../restapiretrofitjson/models/Photo.kt | 12 +++ app/src/main/res/layout/activity_albums.xml | 13 +++ app/src/main/res/layout/activity_photos.xml | 14 +++ app/src/main/res/layout/list_item_album.xml | 14 +++ app/src/main/res/layout/list_item_photo.xml | 17 ++++ app/src/main/res/layout/list_item_todo.xml | 7 +- 19 files changed, 442 insertions(+), 16 deletions(-) create mode 100644 app/src/main/java/com/codingblocks/restapiretrofitjson/activities/AlbumsActivity.java create mode 100644 app/src/main/java/com/codingblocks/restapiretrofitjson/activities/PhotosActivity.java create mode 100644 app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/AlbumAdapter.java create mode 100644 app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/PhotoAdapter.java create mode 100644 app/src/main/java/com/codingblocks/restapiretrofitjson/api/AlbumsAPI.java create mode 100644 app/src/main/java/com/codingblocks/restapiretrofitjson/api/PhotosAPI.java create mode 100644 app/src/main/java/com/codingblocks/restapiretrofitjson/models/Album.kt create mode 100644 app/src/main/java/com/codingblocks/restapiretrofitjson/models/Photo.kt create mode 100644 app/src/main/res/layout/activity_albums.xml create mode 100644 app/src/main/res/layout/activity_photos.xml create mode 100644 app/src/main/res/layout/list_item_album.xml create mode 100644 app/src/main/res/layout/list_item_photo.xml 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..89dcaf0 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.3.1' + compile 'com.android.support:recyclerview-v7:25.3.1' + compile 'com.android.support:cardview-v7:25.3.1' compile 'com.squareup.retrofit2:retrofit:2.3.0' compile 'com.squareup.retrofit2:converter-gson:2.3.0' + compile 'com.android.support.constraint:constraint-layout:1.0.2' testCompile 'junit:junit:4.12' + compile '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..b9af63c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,7 +21,9 @@ - + + + \ 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..da36eb5 --- /dev/null +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/AlbumsActivity.java @@ -0,0 +1,56 @@ +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.view.View; + +import com.codingblocks.restapiretrofitjson.R; +import com.codingblocks.restapiretrofitjson.adapters.AlbumAdapter; +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 { + AlbumAdapter albumAdapter; + RecyclerView rvAlbumsList; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_albums); + rvAlbumsList = (RecyclerView) findViewById(R.id.rvAlbumsList); + rvAlbumsList.setLayoutManager(new LinearLayoutManager(this)); + albumAdapter = new AlbumAdapter(this, new ArrayList()); + rvAlbumsList.setAdapter(albumAdapter); + albumAdapter.setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(int itemId, View view) { + Intent i = new Intent(AlbumsActivity.this, PhotosActivity.class); + i.putExtra("id", itemId); + startActivity(i); + } + }); + + + API.getInstance().getAlbumsAPI().getAlbums().enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + albumAdapter.updateAlbums(response.body()); + } + + @Override + public void onFailure(Call> call, Throwable t) { + + } + }); + } +} diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/PhotosActivity.java b/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/PhotosActivity.java new file mode 100644 index 0000000..1e948ef --- /dev/null +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/activities/PhotosActivity.java @@ -0,0 +1,53 @@ +package com.codingblocks.restapiretrofitjson.activities; + +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; + +import com.codingblocks.restapiretrofitjson.R; +import com.codingblocks.restapiretrofitjson.adapters.PhotoAdapter; +import com.codingblocks.restapiretrofitjson.api.API; +import com.codingblocks.restapiretrofitjson.api.PhotosAPI; +import com.codingblocks.restapiretrofitjson.models.Photo; + +import java.util.ArrayList; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class PhotosActivity extends AppCompatActivity { + PhotoAdapter photoAdapter; + RecyclerView rvPhotosList; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_photos); + rvPhotosList = (RecyclerView) findViewById(R.id.rvPhotosList); + rvPhotosList.setLayoutManager(new LinearLayoutManager(this)); + photoAdapter = new PhotoAdapter(this, new ArrayList()); + rvPhotosList.setAdapter(photoAdapter); + + PhotosAPI photosAPI = API.getInstance().getPhotosAPI(); + Callback> postCallback = new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + photoAdapter.updatePhotos(response.body()); + } + + @Override + public void onFailure(Call> call, Throwable t) { + + } + }; + int useridreceived = getIntent().getIntExtra("id", -1); + if (useridreceived != -1) { + photosAPI.getPhotosById(useridreceived).enqueue(postCallback); + } else { + photosAPI.getPhotos().enqueue(postCallback); + } + + } +} diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/AlbumAdapter.java b/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/AlbumAdapter.java new file mode 100644 index 0000000..0baaaf4 --- /dev/null +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/AlbumAdapter.java @@ -0,0 +1,78 @@ +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.TextView; + +import com.codingblocks.restapiretrofitjson.R; +import com.codingblocks.restapiretrofitjson.interfaces.OnItemClickListener; +import com.codingblocks.restapiretrofitjson.models.Album; + +import java.util.ArrayList; + +/** + * Created by User on 06-07-2017. + */ +public class AlbumAdapter + extends RecyclerView.Adapter{ + private Context context; + private ArrayList albums; + private OnItemClickListener onItemClickListener; + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.onItemClickListener = onItemClickListener; + } + + public AlbumAdapter(Context context, ArrayList albums) { + this.context = context; + this.albums = albums; + } + public void updateAlbums(ArrayList newalbumlist){ + this.albums = newalbumlist; + notifyDataSetChanged(); + } + + @Override + public AlbumViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + LayoutInflater li = (LayoutInflater) context.getSystemService( + Context.LAYOUT_INFLATER_SERVICE); + View itemview = li.inflate(R.layout.list_item_album, parent, false); + return new AlbumViewHolder(itemview); + + } + + @Override + public void onBindViewHolder(AlbumViewHolder holder, int position) { + final Album thisalbum = albums.get(position); + holder.albumtitle.setText(thisalbum.getTitle()); + holder.thisView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (onItemClickListener != null) { + onItemClickListener.onItemClick(thisalbum.getId(), view); + } + } + }); + + } + + @Override + public int getItemCount() { + return albums.size(); + } + + class AlbumViewHolder extends RecyclerView.ViewHolder{ + TextView albumtitle; + View thisView; + public AlbumViewHolder(View itemview){ + super(itemview); + thisView = itemview; + albumtitle = (TextView) itemview.findViewById(R.id.albumtitle); + } + + } +} + diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/PhotoAdapter.java b/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/PhotoAdapter.java new file mode 100644 index 0000000..238429b --- /dev/null +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/PhotoAdapter.java @@ -0,0 +1,86 @@ +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.ImageView; +import android.widget.TextView; + +import com.codingblocks.restapiretrofitjson.R; +import com.codingblocks.restapiretrofitjson.interfaces.OnItemClickListener; +import com.codingblocks.restapiretrofitjson.models.Photo; +import com.squareup.picasso.Picasso; + +import java.util.ArrayList; + +import static com.codingblocks.restapiretrofitjson.R.id.photothumbnail; + +/** + * Created by User on 06-07-2017. + */ + +public class PhotoAdapter + extends RecyclerView.Adapter{ + private Context context; + private ArrayList photos; + private OnItemClickListener onItemClickListener; + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.onItemClickListener = onItemClickListener; + } + + public PhotoAdapter(Context context, ArrayList photos) { + this.context = context; + this.photos = photos; + } + public void updatePhotos(ArrayList newphotolist){ + this.photos = newphotolist; + notifyDataSetChanged(); + } + + @Override + public PhotoViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + LayoutInflater li = (LayoutInflater) context.getSystemService( + Context.LAYOUT_INFLATER_SERVICE); + View itemview = li.inflate(R.layout.list_item_photo, parent, false); + return new PhotoViewHolder(itemview); + + } + + @Override + public void onBindViewHolder(PhotoViewHolder holder, int position) { + final Photo thisphoto = photos.get(position); + holder.phototitle.setText(thisphoto.getTitle()); + Picasso.with(context).load(thisphoto.getThumbnailUrl()).into(holder.photothumbnail); + holder.thisView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (onItemClickListener != null) { + onItemClickListener.onItemClick(thisphoto.getId(), view); + } + } + }); + + } + + @Override + public int getItemCount() { + return photos.size(); + } + + class PhotoViewHolder extends RecyclerView.ViewHolder{ + TextView phototitle; + ImageView photothumbnail; + View thisView; + public PhotoViewHolder(View itemview){ + super(itemview); + thisView = itemview; + phototitle = (TextView) itemview.findViewById(R.id.phototitle); + photothumbnail = (ImageView) itemview.findViewById(R.id.photothumbnail); + } + + } +} + 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..61210c4 100644 --- a/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/TodoAdapter.kt +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/adapters/TodoAdapter.kt @@ -1,10 +1,13 @@ 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.CheckBox +import android.widget.TextView import com.codingblocks.restapiretrofitjson.R import com.codingblocks.restapiretrofitjson.models.Todo @@ -22,9 +25,12 @@ public class TodoAdapter ( notifyDataSetChanged() } - override fun onBindViewHolder(holder: TodoViewHolder?, position: Int) { + override fun onBindViewHolder(holder: TodoViewHolder, position: Int) { - holder?.bindTodo(todos[position]) + val (_, _, title, completed) = todos!![position] + + holder.tvTodoTitle.text = title + holder.todocheck.isChecked = completed } @@ -43,11 +49,16 @@ public class TodoAdapter ( } - inner class TodoViewHolder(itemView: View?) + inner class TodoViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + var todocheck: CheckBox + var tvTodoTitle: TextView + + init { + + tvTodoTitle = itemView.findViewById(R.id.tvTodoTitle) as TextView + todocheck = itemView.findViewById(R.id.todocheck) as CheckBox - fun bindTodo(todo: Todo) { - itemView.tvTodoTitle.text = todo.title; } } } \ 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..00775be 100644 --- a/app/src/main/java/com/codingblocks/restapiretrofitjson/api/API.java +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/api/API.java @@ -15,7 +15,16 @@ public class API { private UsersAPI usersAPI; private CommentsAPI commentsAPI; private TodosAPI todosAPI; + private AlbumsAPI albumsAPI; + private PhotosAPI photosAPI; + public PhotosAPI getPhotosAPI() { + return photosAPI; + } + + public AlbumsAPI getAlbumsAPI() { + return albumsAPI; + } public PostsAPI getPostsAPI() { return postsAPI; } @@ -44,6 +53,8 @@ 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(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..4fc5da3 --- /dev/null +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/api/AlbumsAPI.java @@ -0,0 +1,18 @@ +package com.codingblocks.restapiretrofitjson.api; + +import com.codingblocks.restapiretrofitjson.models.Album; + +import java.util.ArrayList; + +import retrofit2.Call; +import retrofit2.http.GET; + +/** + * Created by User on 06-07-2017. + */ + +public interface AlbumsAPI { + @GET("/albums") + Call> getAlbums(); + +} diff --git a/app/src/main/java/com/codingblocks/restapiretrofitjson/api/PhotosAPI.java b/app/src/main/java/com/codingblocks/restapiretrofitjson/api/PhotosAPI.java new file mode 100644 index 0000000..53ae46c --- /dev/null +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/api/PhotosAPI.java @@ -0,0 +1,24 @@ +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 User on 06-07-2017. + */ + +public interface PhotosAPI { + @GET("/photos") + Call> getPhotos(); + + @GET("/photos") + Call> getPhotosById( + @Query("postId") int id + ); + +} 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..adcafeb --- /dev/null +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/models/Album.kt @@ -0,0 +1,10 @@ +package com.codingblocks.restapiretrofitjson.models + +/** + * Created by User on 05-07-2017. + */ +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/Photo.kt b/app/src/main/java/com/codingblocks/restapiretrofitjson/models/Photo.kt new file mode 100644 index 0000000..d5f26d4 --- /dev/null +++ b/app/src/main/java/com/codingblocks/restapiretrofitjson/models/Photo.kt @@ -0,0 +1,12 @@ +package com.codingblocks.restapiretrofitjson.models + +/** + * Created by User on 06-07-2017. + */ +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..0789173 --- /dev/null +++ b/app/src/main/res/layout/activity_albums.xml @@ -0,0 +1,13 @@ + + + + + diff --git a/app/src/main/res/layout/activity_photos.xml b/app/src/main/res/layout/activity_photos.xml new file mode 100644 index 0000000..c7c210f --- /dev/null +++ b/app/src/main/res/layout/activity_photos.xml @@ -0,0 +1,14 @@ + + + + + + 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..e1e6e1c --- /dev/null +++ b/app/src/main/res/layout/list_item_album.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/list_item_photo.xml b/app/src/main/res/layout/list_item_photo.xml new file mode 100644 index 0000000..c2b000e --- /dev/null +++ b/app/src/main/res/layout/list_item_photo.xml @@ -0,0 +1,17 @@ + + + + + + + \ 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..b727161 100644 --- a/app/src/main/res/layout/list_item_todo.xml +++ b/app/src/main/res/layout/list_item_todo.xml @@ -1,8 +1,11 @@ - +