diff --git a/app/src/main/java/com/example/citrusclient/models/Account.java b/app/src/main/java/com/example/citrusclient/models/Account.java new file mode 100644 index 0000000..4e07e63 --- /dev/null +++ b/app/src/main/java/com/example/citrusclient/models/Account.java @@ -0,0 +1,46 @@ +package com.example.citrusclient.models; + +public class Account { + + private String accountId; + private String accountColor; + + public Account(){} + + public Account(String aid, String color) { + accountId = aid; + accountColor = color; + } + + public void setAccountId(String accountId) { + this.accountId = accountId; + } + + public void setAccountColor(String accountColor) { + this.accountColor = accountColor; + } + + public String getAccountId() { + return accountId; + } + + public String getAccountColor() { + return accountColor; + } + + @Override + public boolean equals(Object obj) { + if(obj instanceof Account) { + if(((Account) obj).getAccountId().equals(this.accountId)) { + return true; + } + } + return false; + } + + @Override + public int hashCode(){ + return this.accountId.hashCode(); + } + +} diff --git a/app/src/main/java/com/example/citrusclient/models/BookModel.java b/app/src/main/java/com/example/citrusclient/models/BookModel.java new file mode 100644 index 0000000..862a0d1 --- /dev/null +++ b/app/src/main/java/com/example/citrusclient/models/BookModel.java @@ -0,0 +1,77 @@ +package com.example.citrusclient.models; + +public class BookModel { + + private int bookId; + private String title; + private boolean publicity; + private String color; + private String time; + private String accountId; + private String accountColor; + private int favoriteCount; + + public int getBookId() { + return bookId; + } + + public void setBookId(int bookId) { + this.bookId = bookId; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public boolean isPublicity() { + return publicity; + } + + public void setPublicity(boolean publicity) { + this.publicity = publicity; + } + + public String getColor() { + return color; + } + + public void setColor(String color) { + this.color = color; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public String getAccountColor() { + return accountColor; + } + + public void setAccountColor(String accountColor) { + this.accountColor = accountColor; + } + + public int getFavoriteCount() { + return favoriteCount; + } + + public void setFavoriteCount(int favoriteCount) { + this.favoriteCount = favoriteCount; + } + + public String getAccountId() { + return accountId; + } + + public void setAccountId(String accountId) { + this.accountId = accountId; + } +} diff --git a/app/src/main/java/com/example/citrusclient/rest/AccountsRest.java b/app/src/main/java/com/example/citrusclient/rest/AccountsRest.java index 592ecd2..7f52b2b 100644 --- a/app/src/main/java/com/example/citrusclient/rest/AccountsRest.java +++ b/app/src/main/java/com/example/citrusclient/rest/AccountsRest.java @@ -55,7 +55,6 @@ ); //仮 //アカウントの色を返す - @FormUrlEncoded @GET("accounts/{account_id}/accountColor") Call getAccountColor( @Path("account_id") String account_id 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 5cd45fd..2b4313c 100644 --- a/app/src/main/java/com/example/citrusclient/rest/FavoritesRest.java +++ b/app/src/main/java/com/example/citrusclient/rest/FavoritesRest.java @@ -1,8 +1,10 @@ package com.example.citrusclient.rest; import com.example.citrusclient.models.Book; +import com.example.citrusclient.models.BookModel; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import retrofit2.Call; @@ -18,7 +20,7 @@ //主{account_id}がいいねした本の一覧 @GET("accounts/{account_id}/favorites") - Call>> getFavoritesBooks( + Call> getFavoritesBooks( @Path("account_id") String accountId, @Query("token") String token ); 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 bdae58c..825dbdd 100644 --- a/app/src/main/java/com/example/citrusclient/viewmodels/FavoritesViewModel.java +++ b/app/src/main/java/com/example/citrusclient/viewmodels/FavoritesViewModel.java @@ -1,9 +1,13 @@ package com.example.citrusclient.viewmodels; import com.example.citrusclient.models.Book; +import com.example.citrusclient.models.BookModel; import com.example.citrusclient.rest.FavoritesRest; +import java.lang.reflect.Array; +import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import androidx.lifecycle.MutableLiveData; @@ -18,10 +22,11 @@ private final Retrofit retrofit; private final FavoritesRest favoritesRest; - private final MutableLiveData>> favoritesBooksLiveData; + private final MutableLiveData> favoritesBooksLiveData; private final MutableLiveData> favoritesBookIdLiveData; private final MutableLiveData> favoritedAccountsLiveData; + public FavoritesViewModel(){ this.retrofit = new Retrofit.Builder() .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/citrus/") @@ -32,15 +37,15 @@ this.favoritesBookIdLiveData = new MutableLiveData<>(); this.favoritedAccountsLiveData = new MutableLiveData<>(); } - public MutableLiveData>> getFavoritesBooksLiveData(){return favoritesBooksLiveData;} + public MutableLiveData> getFavoritesBooksLiveData(){return favoritesBooksLiveData;} public MutableLiveData> getFavoritesBookIdLiveData(){return favoritesBookIdLiveData;} - public MutableLiveData> getFavoritedAccountsLiveData(){return favoritedAccountsLiveData;} + public MutableLiveData> getFavoritedAccountsLiveData(){return favoritedAccountsLiveData;} public void loadFavoritesBooks(String accountId, String token){ - Call>> call = favoritesRest.getFavoritesBooks(accountId,token); - call.enqueue(new Callback>>() { + Call> call = favoritesRest.getFavoritesBooks(accountId,token); + call.enqueue(new Callback>() { @Override - public void onResponse(Call>> call, Response>> response) { + public void onResponse(Call> call, Response> response) { if(response.isSuccessful()){ System.out.println("success : getFavoritesBooks"); favoritesBooksLiveData.setValue(response.body()); @@ -48,7 +53,7 @@ } @Override - public void onFailure(Call>> call, Throwable t) { + public void onFailure(Call> call, Throwable t) { System.out.println("NetworkError : getFavoritesBooks" + t); } }); diff --git a/app/src/main/java/com/example/citrusclient/views/FavoritesBooksFragment.java b/app/src/main/java/com/example/citrusclient/views/FavoritesBooksFragment.java index 31261d8..160d860 100644 --- a/app/src/main/java/com/example/citrusclient/views/FavoritesBooksFragment.java +++ b/app/src/main/java/com/example/citrusclient/views/FavoritesBooksFragment.java @@ -21,7 +21,10 @@ import com.example.citrusclient.Citrus; import com.example.citrusclient.R; +import com.example.citrusclient.models.Account; import com.example.citrusclient.models.Book; +import com.example.citrusclient.models.BookModel; +import com.example.citrusclient.viewmodels.BooksViewModel; import com.example.citrusclient.viewmodels.FavoritesViewModel; import java.util.ArrayList; @@ -75,7 +78,6 @@ } favoritesViewModel = new ViewModelProvider(this).get(FavoritesViewModel.class); - } @Override @@ -86,17 +88,19 @@ } - private HashMap> bookList; - HashMap books; - HashMap integerBookHashMap; - HashMap> data; + private List bookList; +// HashMap books; +// HashMap integerBookHashMap; +// HashMap> data; FavoritesViewModel favoritesViewModel; + //BooksViewModel booksViewModel; + @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); Citrus citrus = (Citrus) (getActivity().getApplication()); - bookList = new HashMap<>(); + bookList = new ArrayList<>(); // いいねした本の一覧を返すのに必要 RecyclerView recyclerView = view.findViewById(R.id.my_favorites_list); //いいねした本の一覧 @@ -116,30 +120,31 @@ } } - +//① class FavoritesBooksAdapter extends RecyclerView.Adapter { - private List books = new ArrayList<>(); + private List books = new ArrayList<>(); //private HashMap integerBookHashMap; //private HashMap> data; - FavoritesBooksAdapter(HashMap> favoritesBooksList) { //初期化 - - for (String account: favoritesBooksList.keySet()){ - for (int number: favoritesBooksList.get(account).keySet()){ - books.add(favoritesBooksList.get(account).get(number)); - } - } - // this.data = data; - // this.integerBookHashMap = new HashMap<>(); + FavoritesBooksAdapter(List favoritesBooksList) { //初期化 + books = favoritesBooksList; +// for (String account: favoritesBooksList.keySet()){ +// for (int number: favoritesBooksList.get(account).keySet()){ +// books.add(favoritesBooksList.get(account).get(number)); +// } +// } + // this.data = data; + // this.integerBookHashMap = new HashMap<>(); } - public void setFavoritesBooks(HashMap> favoritesBooksList) { - for (String account: favoritesBooksList.keySet()){ - for (int number: favoritesBooksList.get(account).keySet()){ - books.add(favoritesBooksList.get(account).get(number)); - } - } + public void setFavoritesBooks(List favoritesBooksList) { + books = favoritesBooksList; +// for (String account: favoritesBooksList.keySet()){ +// for (int number: favoritesBooksList.get(account).keySet()){ +// books.add(favoritesBooksList.get(account).get(number)); +// } +// } notifyDataSetChanged(); } @@ -165,10 +170,18 @@ // for (Integer bookId : bookMap.keySet()) { // Book book = bookMap.get(bookId); // if (count == position){ + +// } +// } +// } +// + // 他の人のid名を表示するのに必要 holder.other_id.setText(books.get(position).getAccountId()); + // 本の名前を表示 holder.favorites_book.setText(books.get(position).getTitle()); int parsedColor = Color.parseColor(books.get(position).getColor()); holder.favorites_book.setBackgroundTintList(ColorStateList.valueOf(parsedColor)); + Context context = holder.itemView.getContext(); holder.favorites_book.setOnClickListener(v -> { Activity activity = (Activity) context; @@ -178,6 +191,10 @@ ((MainActivity) activity).showFragment(new OtherHomeFragment()); }); + //ここにアイコンの色 + int other_iconColor = Color.parseColor(books.get(position).getAccountColor()); + holder.other_icon.setBackgroundTintList(ColorStateList.valueOf(other_iconColor)); + } @@ -185,16 +202,20 @@ TextView other_id; Button favorites_book; + Button other_icon; + public FavoritesBooksViewHolder(@NonNull View itemView) { super(itemView); favorites_book = itemView.findViewById(R.id.favorites_book); other_id = itemView.findViewById(R.id.other_id); + other_icon = itemView.findViewById(R.id.other_icon); } } + // これがないとclassにエラー @Override public int getItemCount() { return books.size(); - } // これがないとclassにエラー + } } diff --git a/app/src/main/java/com/example/citrusclient/views/SettingsFragment.java b/app/src/main/java/com/example/citrusclient/views/SettingsFragment.java index d9d5500..901211e 100644 --- a/app/src/main/java/com/example/citrusclient/views/SettingsFragment.java +++ b/app/src/main/java/com/example/citrusclient/views/SettingsFragment.java @@ -1,5 +1,6 @@ package com.example.citrusclient.views; +import android.content.Intent; import android.content.res.ColorStateList; import android.graphics.Color; import android.os.Bundle; @@ -18,14 +19,18 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Button; +import android.widget.CompoundButton; import android.widget.EditText; +import android.widget.Switch; import android.widget.TextView; import com.example.citrusclient.Citrus; import com.example.citrusclient.R; import com.example.citrusclient.models.Book; +import com.example.citrusclient.rest.AccountsRest; import com.example.citrusclient.viewmodels.SettingsViewModel; import com.example.citrusclient.viewmodels.TodosViewModel; +import com.google.android.material.floatingactionbutton.FloatingActionButton; import java.util.ArrayList; import java.util.HashMap; @@ -71,6 +76,9 @@ SettingsViewModel settingsViewModel; + private String strAccountColor; //色 + + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -78,6 +86,7 @@ mParam1 = getArguments().getString(ARG_PARAM1); mParam2 = getArguments().getString(ARG_PARAM2); } + settingsViewModel = new ViewModelProvider(this).get(SettingsViewModel.class); } @Override @@ -87,72 +96,97 @@ return inflater.inflate(R.layout.fragment_settings, container, false); } - private String accountColor; //色 + @Override 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(); - SettingsViewModel settingsViewModel = new ViewModelProvider(this).get(SettingsViewModel.class); + MutableLiveData accountColor = settingsViewModel.getAccountColorLiveData(); MutableLiveData error_changePw_LiveData = settingsViewModel.getError_changePw_LiveData(); MutableLiveData error_changeAccount_LiveData = settingsViewModel.getError_changeAccount_LiveData(); + MutableLiveData error_deleteAccount_LiveData = settingsViewModel.getError_deleteAccount_LiveData(); - //いいねした本の一覧を返すのに必要 -// -// RecyclerView recyclerView = view.findViewById(R.id.my_favorites_list); //いいねした本の一覧 -// recyclerView.setHasFixedSize(true); -// RecyclerView.LayoutManager layoutManager = new GridLayoutManager(view.getContext(), 2); //何列にするか -// recyclerView.setLayoutManager(layoutManager); -// SettingsAdapter settingsAdapter = new SettingsAdapter(, getActivity()); -// recyclerView.setAdapter(settingsAdapter); - error_changePw_LiveData.observe(getViewLifecycleOwner(), new Observer() { + //いいね一覧へ変異 + Button FavoriteButton = view.findViewById((R.id.goFavoriteList)); + FavoriteButton.setOnClickListener(v -> { + ((MainActivity) getActivity()).showFragment(new FavoritesBooksFragment()); + }); + + //観察部 + //色 + accountColor.observe(getViewLifecycleOwner(), new Observer() { @Override - public void onChanged(Integer error_changePw_LiveData) { - if (error_changePw_LiveData == 204) { - System.out.println("成功"); - } else if (error_changePw_LiveData == 404) { - System.out.println("失敗"); + public void onChanged(String strAccountcolor) { + if (strAccountcolor!=null){ + returnAccountColor(strAccountColor); } } }); + settingsViewModel.loadAccountColor(accountId); + //アカウント error_changeAccount_LiveData.observe(getViewLifecycleOwner(), new Observer() { @Override public void onChanged(Integer error_changeAccount_LiveData) { if (error_changeAccount_LiveData == 204) { System.out.println("成功"); + TextView textNotes1 = (TextView) view.findViewById(R.id.textNotes1); + textNotes1.setText("アカウント名が変更されました"); + } else if (error_changeAccount_LiveData == 404) { System.out.println("失敗"); + TextView textNotes1 = (TextView) view.findViewById(R.id.textNotes1); + textNotes1.setText("アカウント名が変更されませんでした"); + } } }); - accountColor.observe(getViewLifecycleOwner(), new Observer() { + //パスワード変更 + error_changePw_LiveData.observe(getViewLifecycleOwner(), new Observer() { @Override - public void onChanged(String accountColor) { - if (accountColor != null) { - settingsViewModel.loadAccountColor(accountId); //accountの色を追加 + public void onChanged(Integer error_changePw_LiveData) { + if (error_changePw_LiveData == 204) { + System.out.println("成功"); + TextView textNotes2 = (TextView) view.findViewById(R.id.textNotes2); + textNotes2.setText("パスワードが変更されました"); + + } else if (error_changePw_LiveData == 404) { + System.out.println("失敗"); + TextView textNotes2 = (TextView) view.findViewById(R.id.textNotes2); + textNotes2.setText("パスワードが変更されました"); } } }); - //accountの色の変更 - - view.findViewById(R.id.icon).setOnClickListener(new View.OnClickListener() { + //アカウント削除 + error_deleteAccount_LiveData.observe(getViewLifecycleOwner(), new Observer() { @Override - public void onClick(View view) { - AccountColorDialogFragment accountColorDialogFragment = new AccountColorDialogFragment(SettingsFragment.this); - accountColorDialogFragment.show(getActivity().getSupportFragmentManager(), "simple2"); + public void onChanged(Integer integer) { + if (integer == 204){ + TextView textNotes3 = (TextView) view.findViewById(R.id.textNotes3); + textNotes3.setText("アカウントが削除されました"); + //画面遷移処理 + }else if(integer == 404){ + TextView textNotes3 = (TextView) view.findViewById(R.id.textNotes3); + textNotes3.setText("アカウントが削除されませんでした"); + } } }); + + + + //ユーザネーム変更 view.findViewById(R.id.UpdateName).setOnClickListener(new View.OnClickListener() { @Override @@ -166,11 +200,11 @@ TextView textNote1 = (TextView) view.findViewById(R.id.textNotes1); //ユーザネーム変更でパスワードやユーザーネームなどの入力が無かったら入力してと表示する - if (NowPassEditable == null) { //現在のパスワードの入力がなかったら + if (NowPassEditable.length() == 0) { //現在のパスワードの入力がなかったら System.out.println("現在のパスワードを正しく入力してください"); textNote1.setText("現在のパスワードを正しく入力してください!");//画面に表示 - } else if (NewIdEditable == null) { //新しいユーザーネームの入力が無かったら + } else if (NewIdEditable.length() == 0) { //新しいユーザーネームの入力が無かったら System.out.println("新しいユーザネームを正しく入力してください"); textNote1.setText("新しいユーザネームを正しく入力してください!"); //画面に表示 @@ -179,23 +213,25 @@ System.out.println(NewUsername); String nowpass = NowPassEditable.toString().trim(); + String newUsername = NewIdEditable.toString().trim(); //String nowpass = NowPass.getText().toString().trim(); //こっちでもよき - if (nowpass == null || nowpass.length() == 0) { //現在のパスワードの入力がなかったら + /* if (nowpass == null || nowpass.length() == 0) { //現在のパスワードの入力がなかったら System.out.println("現在のパスワードを正しく入力してください"); + textNote1.setText("現在のパスワードを正しく入力してください!"); } - String newUsername = NewIdEditable.toString().trim(); + // String newUsername = newUsername.getText().toString().trim(); //こっちでもよき if (newUsername == null || newUsername.length() == 0) { //新しいユーザネームの入力がなかったら System.out.println("新しいユーザネームを正しく入力してください"); + textNote1.setText("新しいユーザネームを正しく入力してください"); } - String accountId = ((Citrus) getActivity().getApplication()).getAccountId(); - String token = ((Citrus) getActivity().getApplication()).getToken(); + //String accountId = ((Citrus) getActivity().getApplication()).getAccountId(); + //String token = ((Citrus) getActivity().getApplication()).getToken(); + */ settingsViewModel.changeAccount(accountId, newUsername, nowpass, token); //SettingsViewModelを呼ぶ - - textNote1.setText("ユーザーネームの変更完了!"); } } }); @@ -214,11 +250,11 @@ TextView textNote2 = (TextView) view.findViewById(R.id.textNotes2); //パスワード変更で入力が足りないとき - if (NowPassEditable == null) { //現在のパスワードの入力がなかったら + if (NowPassEditable.length() == 0) { //現在のパスワードの入力がなかったら System.out.println("現在のパスワードを正しく入力してください"); textNote2.setText("現在のパスワードを正しく入力してください!");//画面に表示 - } else if (NewPassEditable == null) { //新しいパスワードの入力が無かったら + } else if (NewPassEditable.length() == 0) { //新しいパスワードの入力が無かったら System.out.println("新しいパスワードを正しく入力してください"); textNote2.setText("新しいパスワードを正しく入力してください!"); //画面に表示 @@ -227,8 +263,10 @@ System.out.println(NewPass); String nowpass = NowPassEditable.toString().trim(); + String newPassword = NewPassEditable.toString().trim(); + //String nowpass = NowPass.getText().toString().trim(); //こっちでもよき - if (nowpass == null || nowpass.length() == 0) { //現在のパスワードの入力がなかったら + /*if (nowpass == null || nowpass.length() == 0) { //現在のパスワードの入力がなかったら System.out.println("現在のパスワードを正しく入力してください"); return; } @@ -238,33 +276,67 @@ if (newPassword == null || newPassword.length() == 0) { //新しいユーザネームの入力がなかったら System.out.println("新しいパスワードを正しく入力してください"); return; - } + }*/ - String accountId = ((Citrus) getActivity().getApplication()).getAccountId(); - String token = ((Citrus) getActivity().getApplication()).getToken(); + //String accountId = ((Citrus) getActivity().getApplication()).getAccountId(); + //String token = ((Citrus) getActivity().getApplication()).getToken(); settingsViewModel.changePW(accountId, newPassword, nowpass, token); //SettingsViewModelを呼ぶ - - textNote2.setText("パスワードの変更完了!"); //画面に表示 } } }); + + + //アカウント削除 + view.findViewById(R.id.UpdatePass3).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + EditText enter_nowPassword = (EditText) view.findViewById(R.id.EnterNowPassword3); + Editable editable_nowPasswrd = enter_nowPassword.getText(); + + + TextView textNotes3 = (TextView) view.findViewById(R.id.textNotes3); + + if (editable_nowPasswrd.length() == 0){ + textNotes3.setText("現在のパスワードを入力してください"); + }else{ + String nowPassword = editable_nowPasswrd.toString().trim(); + settingsViewModel.deleteId(accountId, token, nowPassword); + } + } + }); // + //textLikes.setText(); + + //アイコンボタンが押されたら + view.findViewById(R.id.icon).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + //フラグメント表示 + AccountColorDialogFragment accountColorDialogFragment = new AccountColorDialogFragment(SettingsFragment.this); + accountColorDialogFragment.show(getActivity().getSupportFragmentManager(), "simple2"); + + } + }); + + + } //accountの色を持ってくる public void returnAccountColor(String iconColor) { - accountColor = iconColor;//SettingsFragmentの変数accountColorに入る + strAccountColor = iconColor;//SettingsFragmentの変数accountColorに入る View view = getView(); // FragmentのView if (view != null) { Button iconButton = view.findViewById(R.id.icon); - int parsedColor = Color.parseColor(accountColor); + int parsedColor = Color.parseColor(strAccountColor); iconButton.setBackgroundTintList(ColorStateList.valueOf(parsedColor)); } + } } diff --git a/app/src/main/res/layout/a_favorites_book.xml b/app/src/main/res/layout/a_favorites_book.xml index 89d0cc1..b036845 100644 --- a/app/src/main/res/layout/a_favorites_book.xml +++ b/app/src/main/res/layout/a_favorites_book.xml @@ -7,28 +7,44 @@ android:layout_margin="12dp" tools:ignore="ExtraText"> -