diff --git a/app/src/main/java/com/example/citrusclient/models/Todo.java b/app/src/main/java/com/example/citrusclient/models/Todo.java index 69b4eff..ef088fb 100644 --- a/app/src/main/java/com/example/citrusclient/models/Todo.java +++ b/app/src/main/java/com/example/citrusclient/models/Todo.java @@ -19,6 +19,10 @@ todoId = tid; } + public Todo(){} + + + //セッター public void setTitle(String t) {title = t;} public void setCheck(boolean c) {check = c;} diff --git a/app/src/main/java/com/example/citrusclient/rest/TodosRest.java b/app/src/main/java/com/example/citrusclient/rest/TodosRest.java index 52f8fab..3b38e87 100644 --- a/app/src/main/java/com/example/citrusclient/rest/TodosRest.java +++ b/app/src/main/java/com/example/citrusclient/rest/TodosRest.java @@ -19,14 +19,14 @@ public interface TodosRest { - @GET("/accounts/{account_id}/books/{book_id}/todos") + @GET("accounts/{account_id}/books/{book_id}/todos") Call>>>> getAllTodos( @Path("account_id") String accountId, @Path("book_id") Integer bookId, @Query("token") String token ); - @GET("/accounts/{account_id}/books/{book_id}/todos/{year}/{month}") + @GET("accounts/{account_id}/books/{book_id}/todos/{year}/{month}") Call>> getTodosByMonth( @Path("account_id") String accountId, @Path("book_id") Integer bookId, @@ -35,7 +35,7 @@ @Query("token") String token ); - @GET("/accounts/{account_id}/books/{book_id}/todos/{year}/{month}/{day}") + @GET("accounts/{account_id}/books/{book_id}/todos/{year}/{month}/{day}") Call> getTodosByDay( @Path("account_id") String accountId, @Path("book_id") Integer bookId, @@ -45,7 +45,7 @@ @Query("token") String token ); - @GET("/accounts/{account_id}/books/{book_id}/todos/{year}/{month}/{day}/{todo_id}") + @GET("accounts/{account_id}/books/{book_id}/todos/{year}/{month}/{day}/{todo_id}") Call getTodoById( @Path("account_id") String accountId, @Path("book_id") Integer bookId, @@ -57,7 +57,7 @@ ); @FormUrlEncoded - @POST("/accounts/{account_id}/books/{book_id}/todos/{year}/{month}/{day}") + @POST("accounts/{account_id}/books/{book_id}/todos/{year}/{month}/{day}") Call createTodo( @Path("account_id") String accountId, @Path("book_id") Integer bookId, @@ -68,7 +68,7 @@ @Field("token") String token ); @FormUrlEncoded - @PUT("/accounts/{account_id}/books/{book_id}/todos/{year}/{month}/{day}/{todo_id}/check") + @PUT("accounts/{account_id}/books/{book_id}/todos/{year}/{month}/{day}/{todo_id}/check") Call setCheck( @Path("account_id") String accountId, @Path("book_id") Integer bookId, @@ -80,7 +80,7 @@ @Field("token") String token ); - @DELETE("/accounts/{account_id}/books/{book_id}/todos/{year}/{month}/{day}/{todo_id}") + @DELETE("accounts/{account_id}/books/{book_id}/todos/{year}/{month}/{day}/{todo_id}") Call deleteTodoById( @Path("account_id") String accountId, @Path("book_id") Integer bookId, diff --git a/app/src/main/java/com/example/citrusclient/views/CreateBookFragment.java b/app/src/main/java/com/example/citrusclient/views/CreateBookFragment.java index 1984939..666efc0 100644 --- a/app/src/main/java/com/example/citrusclient/views/CreateBookFragment.java +++ b/app/src/main/java/com/example/citrusclient/views/CreateBookFragment.java @@ -7,16 +7,26 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; +import android.text.Editable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; +import com.example.citrusclient.Citrus; import com.example.citrusclient.R; +import com.example.citrusclient.viewmodels.BooksViewModel; +import com.google.android.material.textfield.TextInputEditText; + import android.graphics.Color;//ボタンの色変更 import android.os.Bundle; import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; + +import org.w3c.dom.Text; /** @@ -57,6 +67,7 @@ return fragment; } + BooksViewModel booksViewModel; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -64,6 +75,8 @@ mParam1 = getArguments().getString(ARG_PARAM1); mParam2 = getArguments().getString(ARG_PARAM2); } + + booksViewModel = new ViewModelProvider(this).get(BooksViewModel.class); } @Override @@ -77,7 +90,9 @@ @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); //親クラスである Fragment の onViewCreated() メソッドを呼び出す - + Citrus citrus = (Citrus)(getActivity().getApplication()); + String token = citrus.getToken(); + String accountId = citrus.getAccountId(); //ここから書く // MainActivityにこのフラグメントを設定するした二つのどっちか //((MainActivity) getContext()).setCreateBookFragment(this);//フラグメントとアクティビティ間での情報のやり取りがあるとき @@ -85,8 +100,46 @@ view.findViewById(R.id.save_button).setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - ((MainActivity) getActivity()).showFragment(new MyBookshelfFragment()); + public void onClick(View view2) { + EditText editname = (EditText) view.findViewById(R.id.book_name); //本の名前を入力する + Editable bookeditable = editname.getText(); + TextView textbookname = (TextView) view.findViewById(R.id.set_book_name); //本の名前が無かったら入力してと表示する + if (bookeditable == null) { //本の名前がなかったら + System.out.println("本の名前を入力してください"); + + if (textbookname != null) { + textbookname.setText("本の名前を入力してください!"); + } else { + System.out.println("textbookname が null"); + } + } else { + String bookname = bookeditable.toString().trim(); +// String bookname = editname.getText().toString().trim(); + if (bookname == null || bookname.length() == 0) { //本の名前がなかったら + System.out.println("本の名前を入力してください"); + + if (textbookname != null) { + textbookname.setText("本の名前を入力してください!"); + } else { + System.out.println("textbookname が null"); + } + } else { + System.out.println(bookname); +// String textbook = textbookname.getText().toString().trim(); + //本を保存するコードを書く? + + + + + booksViewModel.createBook("bird",bookname,"#00FF00",true,"xyz"); //BooksViewModelを呼び出して本を作る + //画面が本棚に戻る + + + + + ((MainActivity) getActivity()).showFragment(new MyBookshelfFragment()); //本棚に戻る + } + } } }); diff --git a/app/src/main/java/com/example/citrusclient/views/HomeFragment.java b/app/src/main/java/com/example/citrusclient/views/HomeFragment.java new file mode 100644 index 0000000..d2f14ab --- /dev/null +++ b/app/src/main/java/com/example/citrusclient/views/HomeFragment.java @@ -0,0 +1,168 @@ +package com.example.citrusclient.views; + +import android.graphics.Color; +import android.os.Bundle; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.CheckBox; + +import com.example.citrusclient.Citrus; +import com.example.citrusclient.R; +import com.example.citrusclient.models.Book; +import com.example.citrusclient.models.Todo; +import com.example.citrusclient.viewmodels.TodosViewModel; +import com.google.android.material.floatingactionbutton.FloatingActionButton; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link HomeFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class HomeFragment extends Fragment { + + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + // TODO: Rename and change types of parameters + private String mParam1; + private String mParam2; + + public HomeFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment HomeFragment. + */ + // TODO: Rename and change types and number of parameters + public static HomeFragment newInstance(String param1, String param2) { + HomeFragment fragment = new HomeFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, param1); + args.putString(ARG_PARAM2, param2); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments() != null) { + mParam1 = getArguments().getString(ARG_PARAM1); + mParam2 = getArguments().getString(ARG_PARAM2); + } + + todosViewModel = new ViewModelProvider(this).get(TodosViewModel.class); + + } + + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + + return inflater.inflate(R.layout.fragment_home, container, false); + } + + private List todoList; + TodosViewModel todosViewModel; + + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + + Citrus citrus = (Citrus)(getActivity().getApplication()); + String token = citrus.getToken(); + String accountId = citrus.getAccountId(); + + todoList = new ArrayList<>(); + todoList.add(new Todo("a", true, 2024, 06, 27, 1)); + + RecyclerView recyclerView = view.findViewById(R.id.my_todos_list); + recyclerView.setHasFixedSize(true); + RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(view.getContext()); + recyclerView.setLayoutManager(layoutManager); + MyTodoshelfAdapter todoAdapter = new MyTodoshelfAdapter(todoList); + recyclerView.setAdapter(todoAdapter); + + todosViewModel.getTodosByDayLiveData().observe(getViewLifecycleOwner(), new Observer>() { + @Override + public void onChanged(HashMap idTodoHashMap) { + if(idTodoHashMap != null) { + todoList = new ArrayList<>(idTodoHashMap.values()); + todoAdapter.setTodos(todoList); + } + } + }); + + todosViewModel.loadTodosByDay("bird", 1, 2024, 6, 2, "xyz"); + } + +} +class MyTodoshelfAdapter extends RecyclerView.Adapter { + + private List todoList; + + MyTodoshelfAdapter(List todo) { + this.todoList = todo; + } + + public void setTodos(List todos) { + todoList = todos; + notifyDataSetChanged(); + } + + @NonNull + @Override + public MyTodoViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.a_todo, parent, false); + return new MyTodoViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull MyTodoViewHolder holder, int position) { + Todo todoData = this.todoList.get(position); + holder.todoButton.setText(todoData.getTitle()); + holder.todoCheckBox.setChecked(todoData.getCheck()); + } + + @Override + public int getItemCount() { + return todoList.size(); + } + + static class MyTodoViewHolder extends RecyclerView.ViewHolder { + Button todoButton; + CheckBox todoCheckBox; + public MyTodoViewHolder(@NonNull View itemView) { + super(itemView); + todoButton = itemView.findViewById(R.id.todo_button); + todoCheckBox = itemView.findViewById(R.id.todo_checkBox); + } + } +} diff --git a/app/src/main/res/layout/a_todo.xml b/app/src/main/res/layout/a_todo.xml new file mode 100644 index 0000000..386d570 --- /dev/null +++ b/app/src/main/res/layout/a_todo.xml @@ -0,0 +1,36 @@ + + + + + +