diff --git a/app/src/main/java/com/example/citrusclient/rest/FavoritesRest.java b/app/src/main/java/com/example/citrusclient/rest/FavoritesRest.java index 0e3dd95..4848018 100644 --- a/app/src/main/java/com/example/citrusclient/rest/FavoritesRest.java +++ b/app/src/main/java/com/example/citrusclient/rest/FavoritesRest.java @@ -50,7 +50,6 @@ ); //主{account_id}のある本{book_id}を他の人{other_account_id}がいいねを解除する - @FormUrlEncoded @DELETE("accounts/{account_id}/books/{book_id}/favorited/{other_account_id}") Call removeFavorite( @Path("account_id") String accountId, diff --git a/app/src/main/java/com/example/citrusclient/viewmodels/FavoritesViewModel.java b/app/src/main/java/com/example/citrusclient/viewmodels/FavoritesViewModel.java index e183844..5887c1f 100644 --- a/app/src/main/java/com/example/citrusclient/viewmodels/FavoritesViewModel.java +++ b/app/src/main/java/com/example/citrusclient/viewmodels/FavoritesViewModel.java @@ -89,7 +89,7 @@ }); } - public void setFavorite(String accountId,Integer bookId,String otherAccountId,String token){ + public void setFavorite(String accountId,Integer bookId,String otherAccountId,String token){//される側ac_id,されるbo_id, するac_id, するtoken Call call = favoritesRest.putFavorite(accountId, bookId, otherAccountId, token); call.enqueue(new Callback() { @Override diff --git a/app/src/main/java/com/example/citrusclient/views/MyAdapter.java b/app/src/main/java/com/example/citrusclient/views/MyAdapter.java index 05b6063..6b72b78 100644 --- a/app/src/main/java/com/example/citrusclient/views/MyAdapter.java +++ b/app/src/main/java/com/example/citrusclient/views/MyAdapter.java @@ -6,26 +6,28 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.widget.ImageButton; import android.widget.TextView; import com.example.citrusclient.Citrus; import com.example.citrusclient.R; import com.example.citrusclient.models.Book; +import com.example.citrusclient.viewmodels.FavoritesViewModel; import java.util.ArrayList; import java.util.List; import androidx.annotation.NonNull; +import androidx.fragment.app.FragmentActivity; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.RecyclerView; public class MyAdapter extends RecyclerView.Adapter { private List originalList; // 元のデータリスト private List filteredList; // フィルタリングされたリスト - private Object context; -// private List publicList; -// private List accountIdList; -// private Context context; public MyAdapter(List originalList) { this.originalList = originalList; @@ -63,6 +65,25 @@ citrus.setCurLookingBookId(currentBook.getBookId()); ((MainActivity) activity).showFragment(new OtherHomeFragment()); }); + holder.LikeTextView.setOnClickListener(view -> { + Activity activity = (Activity) context; + Citrus citrus = (Citrus) activity.getApplication(); + FavoritesViewModel favoritesViewModel = new ViewModelProvider((FragmentActivity)context).get(FavoritesViewModel.class); + System.out.println(holder.LikeTextView.getTag()); + if(holder.LikeTextView.getTag().equals("unliked")){ + System.out.println(citrus.getAccountId()+"が"+currentBook.getAccountId()+"の"+currentBook.getBookId()+"を登録しました"); + favoritesViewModel.setFavorite(currentBook.getAccountId(), currentBook.getBookId(), citrus.getAccountId(), citrus.getToken()); + holder.LikeTextView.setImageResource(R.drawable.baseline_favorite_24); + Animation animation = AnimationUtils.loadAnimation(holder.itemView.getContext(),R.anim.touch); + view.startAnimation(animation); + holder.LikeTextView.setTag("liked"); + }else if(holder.LikeTextView.getTag().equals("liked")){ + System.out.println(citrus.getAccountId()+"が"+currentBook.getAccountId()+"の"+currentBook.getBookId()+"を解除しました"); + favoritesViewModel.deletefavorite(currentBook.getAccountId(), currentBook.getBookId(), citrus.getAccountId(), citrus.getToken()); + holder.LikeTextView.setImageResource(R.drawable.baseline_favorite_border_24); + holder.LikeTextView.setTag("unliked"); + } + }); } @Override @@ -98,12 +119,14 @@ static class ViewHolder extends RecyclerView.ViewHolder { TextView titleTextView; TextView authorTextView; + ImageButton LikeTextView; ViewHolder(View itemView) { super(itemView); titleTextView = itemView.findViewById(R.id.public_button); authorTextView = itemView.findViewById(R.id.public_id); + LikeTextView = itemView.findViewById(R.id.public_favorite); } diff --git a/app/src/main/java/com/example/citrusclient/views/SearchFragment.java b/app/src/main/java/com/example/citrusclient/views/SearchFragment.java index 9ed7156..928bd04 100644 --- a/app/src/main/java/com/example/citrusclient/views/SearchFragment.java +++ b/app/src/main/java/com/example/citrusclient/views/SearchFragment.java @@ -1,8 +1,6 @@ package com.example.citrusclient.views; import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Color; import android.os.Bundle; import androidx.annotation.NonNull; @@ -18,19 +16,19 @@ import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; -import android.widget.Button; import android.widget.EditText; -import android.widget.LinearLayout; import android.widget.SearchView; import android.widget.Spinner; -import android.widget.TextView; import com.example.citrusclient.R; -import com.example.citrusclient.models.Book; import com.example.citrusclient.viewmodels.PublicBooksViewModel; +import com.example.citrusclient.viewmodels.FavoritesViewModel; import java.util.ArrayList; + + + /** * A simple {@link Fragment} subclass. * Use the {@link SearchFragment#newInstance} factory method to @@ -60,6 +58,7 @@ private RecyclerView recyclerView; private RecyclerView recyclerView1; // sort_by用のRecyclerView private PublicBooksViewModel publicBooksViewModel; + private FavoritesViewModel favoritesViewModel; private Integer sortBy = 0; @@ -95,6 +94,7 @@ } publicBooksViewModel = new ViewModelProvider(this).get(PublicBooksViewModel.class); + favoritesViewModel = new ViewModelProvider(this).get(FavoritesViewModel.class); } // @Override @@ -109,48 +109,6 @@ return inflater.inflate(R.layout.fragment_search, container, false); } @SuppressLint("WrongViewCast") -// public void onViewCreated(@NonNull View view, @NonNull Bundle saveInstanceState){ -// super.onViewCreated(view, saveInstanceState); -// -// adapter = new MyAdapter(new ArrayList<>()); -// RecyclerView recyclerView = view.findViewById(R.id.public_list); -// recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext())); -// recyclerView.setAdapter(adapter); -// RecyclerView recyclerView1 = view.findViewById(R.id.sort_by); -// recyclerView1.setLayoutManager(new LinearLayoutManager(view.getContext())); -// recyclerView1.setAdapter(adapter); -// -// publicBooksViewModel.getAllBooksLiveData().observe(getViewLifecycleOwner(), new Observer>() { -// @Override -// public void onChanged(ArrayList books) { -// if (books != null) { -// publicList = new ArrayList<>(books); -// adapter.setBooks(publicList); // アダプターに新しいリストを渡す -// } -// } -// }); -// -// publicBooksViewModel.loadAllBooks(); -// -// view.findViewById(R.id.rbLike).setOnClickListener(view1 -> sortBy = 0);// -// view.findViewById(R.id.rbOld).setOnClickListener(view1 -> sortBy = 1);// -// //view.findViewById(R.id.rbNew).setOnClickListener(view1 -> sortBy = 2);//favorite -// -// SearchView searchView = view.findViewById(R.id.search_word); -// searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { -// @Override -// public boolean onQueryTextSubmit(String query) { -// loadSearchResults(query, sortBy); -// Log.d(TAG, "Search query: " + query); -// return true; -// } -// public boolean onQueryTextChange(String newText) { -// adapter.filter(newText); // フィルタリングを実行 -// return true; -// } -// -// }); -// } public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { adapter = new MyAdapter(new ArrayList<>()); RecyclerView recyclerView = view.findViewById(R.id.public_list); @@ -225,12 +183,7 @@ if (accountId != "") { publicBooksViewModel.loadSearchBooks(title, accountId, sortBy);//title,accountidでの検索 System.out.println("title: "+title+" accountId: "+accountId+" sortBy: "+sortBy); - }/* else { - publicBooksViewModel.loadSearchTitleBooks(title, sortBy);//titleのみの検索 - } - if (accountId != null) { - publicBooksViewModel.loadSearchAccountIdBooks(accountId, sortBy);//accountidでの検索 - } */else { + }else { publicBooksViewModel.loadAllBooks(); } // titleとaccountIdを使って検索 diff --git a/app/src/main/res/anim/touch.xml b/app/src/main/res/anim/touch.xml new file mode 100644 index 0000000..9afb370 --- /dev/null +++ b/app/src/main/res/anim/touch.xml @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/baseline_favorite_24.xml b/app/src/main/res/drawable/baseline_favorite_24.xml new file mode 100644 index 0000000..18f8235 --- /dev/null +++ b/app/src/main/res/drawable/baseline_favorite_24.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/baseline_favorite_border_24.xml b/app/src/main/res/drawable/baseline_favorite_border_24.xml new file mode 100644 index 0000000..2acceab --- /dev/null +++ b/app/src/main/res/drawable/baseline_favorite_border_24.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/layout/a_public_book.xml b/app/src/main/res/layout/a_public_book.xml index 513c9af..cb1c9bd 100644 --- a/app/src/main/res/layout/a_public_book.xml +++ b/app/src/main/res/layout/a_public_book.xml @@ -5,7 +5,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="12dp" - > + tools:ignore="ExtraText">