diff --git a/app/src/main/java/com/example/citrusclient/Citrus.java b/app/src/main/java/com/example/citrusclient/Citrus.java index f5577bb..b07f936 100644 --- a/app/src/main/java/com/example/citrusclient/Citrus.java +++ b/app/src/main/java/com/example/citrusclient/Citrus.java @@ -3,4 +3,17 @@ import android.app.Application; public class Citrus extends Application { + + //データ保存 + private String token; + + //getter + private String getToken(){ + return token; + } + + //setter + private void setToken(String token){ + this.token=token; + } } diff --git a/app/src/main/java/com/example/citrusclient/models/Book.java b/app/src/main/java/com/example/citrusclient/models/Book.java index f69ff74..19140a2 100644 --- a/app/src/main/java/com/example/citrusclient/models/Book.java +++ b/app/src/main/java/com/example/citrusclient/models/Book.java @@ -1,4 +1,33 @@ package com.example.citrusclient.models; public class Book { + + private int bookId; + private String title; + private boolean publicity; + private String color; + private String accountId; + + + public Book(String accountId, Integer bookId, String title, boolean publicity, String color, String time) { + this.accountId = accountId; + this.bookId = bookId; + this.title = title; + this.publicity = publicity; + this.color = color; + } + + //Setter + public void setTitle(String t) {title = t;} + public void setPublicity(boolean p) {publicity = p;} + public void setColor(String c) {color = c;} + public void setBookId(int id) {bookId = id;} + public void setAccountId(String a) {accountId = a;} + + //Getter + public String getTitle() {return title;} + public boolean getPublicity() {return publicity;} + public String getColor() {return color;} + public int getBookId() {return bookId;} + public String getAccountId() {return accountId;} } diff --git a/app/src/main/java/com/example/citrusclient/rest/BooksRest.java b/app/src/main/java/com/example/citrusclient/rest/BooksRest.java index 53727ae..13cbfcd 100644 --- a/app/src/main/java/com/example/citrusclient/rest/BooksRest.java +++ b/app/src/main/java/com/example/citrusclient/rest/BooksRest.java @@ -1,7 +1,7 @@ package com.example.citrusclient.rest; -import java.util.Collection; -import java.util.HashMap; +import com.example.citrusclient.models.Book; + import retrofit2.Call; import retrofit2.Response; @@ -12,18 +12,84 @@ import retrofit2.http.POST; import retrofit2.http.PUT; import retrofit2.http.Path; +import retrofit2.http.Query; public interface BooksRest { + //本の一覧を返す @GET("accounts/{account_id}/books") - Call getBooks( - @Path("account_id") String account_id + Call getBooks( + @Path("account_id") String account_id, + @Query("token") String token ); + //本の新規作成 @FormUrlEncoded @POST("accounts/{account_id}/books") - Call createBook( - @Path("account_id") String account_id + Call createBook( + @Path("account_id") String account_id, + @Field("title") String title, + @Field("color") String color, + @Field("publicity") boolean publicity, + @Field("token") String token + ); + //本の情報を取得 + @GET("accounts/{account_id}/books/{book_id}") + Call getBook( + @Path("account_id") String account_id, + @Path("book_id") Integer book_id, + @Query("token") String token + ); + + //本の削除 + @DELETE("accounts/{account_id}/books/{book_id}") + Call deleteBook( + @Path("account_id") String account_id, + @Path("book_id") Integer book_id, + @Query("token") String token + ); + + //本のタイトルを返す(指定したbook_idの本のタイトルを返す) + @GET("accounts/{account_id}/books/{book_id}/title") + Call getTitle( + @Path("account_id") String account_id, + @Path("book_id") Integer book_id, + @Query("token") String token + ); + + //本のタイトルを変更(指定したbook_idの本のタイトルを変更する) + @PUT("accounts/{account_id}/books/{book_id}/title") + Call putTitle( + @Path("account_id") String account_id, + @Path("book_id") Integer book_id, + @Field("title") String title, + @Field("token") String token + ); + + //本の公開情報を返す(指定したbook_idの本の公開状態を返す) + @GET("accounts/{account_id}/books/{book_id}/public") + Call getPublicity( + @Path("account_id") String account_id, + @Path("book_id") Integer book_id, + @Query("token") String token + ); + + //公開状態を変更する(指定された本の公開状態を変更する) + @PUT("accounts/{account_id}/books/{book_id}/public") + Call putPublicity( + @Path("account_id") String account_id, + @Path("book_id") Integer book_id, + @Field("publicity") Boolean publicity, + @Field("token") String token + ); + + //本の色を変更する(book_idを指定して本の色を変更する) + @PUT("accounts/{account_id}/books/{book_id}/color") + Call putColor( + @Path("account_id") String account_id, + @Path("book_id") Integer book_id, + @Field("color") String color, + @Field("token") String token ); } diff --git a/app/src/main/java/com/example/citrusclient/views/MyBookshelfAdapter.java b/app/src/main/java/com/example/citrusclient/views/MyBookshelfAdapter.java new file mode 100644 index 0000000..145a274 --- /dev/null +++ b/app/src/main/java/com/example/citrusclient/views/MyBookshelfAdapter.java @@ -0,0 +1,52 @@ +package com.example.citrusclient.views; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.example.citrusclient.R; + +import java.util.List; + +public class MyBookshelfAdapter extends RecyclerView.Adapter{ + + private List bookList; + + MyBookshelfAdapter(List book){ + this.bookList = book; + } + + @NonNull + @Override + public MyBookViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.a_book, parent, false); + return new MyBookViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull MyBookViewHolder holder, int position) { + MyBookshelfFragment.RowBook bookData = this.bookList.get(position); + holder.bookButton.setText(bookData.hogeTitle); + holder.bookButton.setBackgroundColor(bookData.color); + } + + @Override + public int getItemCount() { + return bookList.size(); + } + + static class MyBookViewHolder extends RecyclerView.ViewHolder{ + Button bookButton; + public MyBookViewHolder(@NonNull View itemView) { + super(itemView); + bookButton = itemView.findViewById(R.id.book_button); + } + } + +} diff --git a/app/src/main/java/com/example/citrusclient/views/MyBookshelfFragment.java b/app/src/main/java/com/example/citrusclient/views/MyBookshelfFragment.java index 36d1f65..1875d4c 100644 --- a/app/src/main/java/com/example/citrusclient/views/MyBookshelfFragment.java +++ b/app/src/main/java/com/example/citrusclient/views/MyBookshelfFragment.java @@ -1,14 +1,28 @@ package com.example.citrusclient.views; +import android.graphics.Color; +import android.media.Image; import android.os.Bundle; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.GridLayout; import com.example.citrusclient.R; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.google.android.material.snackbar.Snackbar; + +import java.util.ArrayList; +import java.util.List; /** * A simple {@link Fragment} subclass. @@ -48,6 +62,9 @@ return fragment; } + + private List bookList; + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -63,4 +80,47 @@ // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_my_bookshelf_fragment, container, false); } + + + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + bookList = createBooks(); + + RecyclerView recyclerView = view.findViewById(R.id.my_books_list); + recyclerView.setHasFixedSize(true); + RecyclerView.LayoutManager layoutManager = new GridLayoutManager(view.getContext(), 2); + //new LinearLayoutManager(view.getContext()); + recyclerView.setLayoutManager(layoutManager); + RecyclerView.Adapter bookAdapter = new MyBookshelfAdapter(bookList); + recyclerView.setAdapter(bookAdapter); + + FloatingActionButton addButton = view.findViewById(R.id.book_add_button); + addButton.setOnClickListener(v -> { +// RowBook b = new RowBook(); +// b.hogeTitle = "hoge"; +// bookList.add(b); +// bookAdapter.notifyItemInserted(bookList.size()-1); + }); + + } + + private List createBooks(){ + List books = new ArrayList<>(); + for(int i = 0; i < 5; i++){ + RowBook book = new RowBook(); + book.hogeTitle = "hoge"; + book.color = Color.RED; + books.add(book); + } + return books; + } + + class RowBook{ + String hogeTitle; + int color; + } + } \ No newline at end of file diff --git a/app/src/main/res/drawable/baseline_add_24.xml b/app/src/main/res/drawable/baseline_add_24.xml new file mode 100644 index 0000000..9f83b8f --- /dev/null +++ b/app/src/main/res/drawable/baseline_add_24.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/layout/a_book.xml b/app/src/main/res/layout/a_book.xml new file mode 100644 index 0000000..b0f7823 --- /dev/null +++ b/app/src/main/res/layout/a_book.xml @@ -0,0 +1,18 @@ + + + +