diff --git a/app/src/main/java/org/ntlab/irisclient/DrawingCardFragment.java b/app/src/main/java/org/ntlab/irisclient/DrawingCardFragment.java index a5d716e..4eb0580 100644 --- a/app/src/main/java/org/ntlab/irisclient/DrawingCardFragment.java +++ b/app/src/main/java/org/ntlab/irisclient/DrawingCardFragment.java @@ -4,6 +4,7 @@ import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; +import android.content.Intent; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; @@ -45,17 +46,18 @@ private ImageView[] backColors; private Resources resources; private GameViewModel gameViewModel; + private Boolean isMaster; + private String myTeam; + private String nowTurn; + private String rid; // ロングタップで表示させるために必要。非同期で値が格納され、順番通りに保存されないからHashMapにしている private Map bmImages = new HashMap<>(); // 下はテストが動くようになったら削除する - private Map drawingList = new HashMap<>(); // - private List map = new ArrayList<>(); //cno順にdnoを管理(要するに絵の並び) - private List colorList = new ArrayList<>(); //cno順にr,g,b,dを管理:カードごとの色 - private Boolean isMaster = false; - // 自分のチームと現在進行中のチームを仮で設定中 - private String myTeam = "r"; - private String nowTurn = "r"; + private Map drawingList; // + private List map; //cno順にdnoを管理(要するに絵の並び) + private List colorList; //cno順にr,g,b,dを管理:カードごとの色 + // コンストラクタ public static DrawingCardFragment newInstance(String str){ @@ -70,7 +72,6 @@ super.onCreateView(inflater, container, savedInstanceState); gameViewModel = new ViewModelProvider(this).get(GameViewModel.class); - resources = getResources(); View view = inflater.inflate(R.layout.fragment_card_drawing, container, false); @@ -113,31 +114,50 @@ (ImageView) view.findViewById(R.id.backColour15) }; - // Openされた画像ををObserveして、Viewに反映 - gameViewModel.getOpenLiveData().observe ( - getViewLifecycleOwner(), - openListObserver -> { - System.out.println(openListObserver); - setOpen(openListObserver); - } - ); + System.out.println("asfsafddf"); + Iris iris = (Iris) this.getActivity().getApplication(); + myTeam = iris.getTeam(); + rid = iris.getRid(); + isMaster = iris.isMaster(); + System.out.println("kota: isMasterかどうか:" + isMaster); + System.out.println("kota: getrid:" + iris.getRid()); + System.out.println("kota: getgame:" + iris.getTeam()); + System.out.println("kota: getMemberList:" + iris.getMemberList()); + System.out.println("kota: getNickName:" + iris.getNickname()); + System.out.println("kota: getImageLiveData:" + gameViewModel.getImageLiveData().getValue()); gameViewModel.getImageLiveData().observe( getViewLifecycleOwner(), gameJsonObserver -> { - System.out.println("Hello"); - System.out.println(gameJsonObserver.getDrawingList()); + System.out.println("kota: getImageLiveDataが"); setupWithViewModel(); } ); + // Openされた画像ををObserveして、Viewに反映 + gameViewModel.getOpenLiveData().observe ( + getViewLifecycleOwner(), + openListObserver -> { + System.out.println("kota: オープンされた。オープンの配列:" + openListObserver); + setOpen(openListObserver); + } + ); + + gameViewModel.getTurnsLiveData().observe ( + getViewLifecycleOwner(), + turnsObserver -> { + System.out.println("kota: ターンが変更。今のターン:" + turnsObserver); + nowTurn = turnsObserver; + } + ); + return view; } public void onClick(View v) { for(int i=0; i< imageButtons.length; i++) { if(v.getId() == imageButtons[i].getId()) { - System.out.println( "タップされたボタンの配列番号:" + i); + System.out.println( "kota: タップされたボタンの配列番号:" + i); if(nowTurn != myTeam && isMaster == true) { return; } confirmAlertMake(i); } @@ -149,7 +169,7 @@ for(int i=0; i< imageButtons.length; i++) { if(v.getId() == imageButtons[i].getId()) { - System.out.println( "ロングタップされたボタンの配列番号:" + i); + System.out.println( "kota: ロングタップされたボタンの配列番号:" + i); // 自分のターンのとき、疑い機能のあるアラート表示 // 相手のターンのとき、画像だけ確認できるアラート表示 if(nowTurn == myTeam) { @@ -161,7 +181,7 @@ // めくられた画像を長押でも確認できるようにする if(v.getId() == backColors[i].getId()) { - System.out.println( "タップされたボタンの配列番号:" + i); + System.out.println( "kota: タップされたボタンの配列番号:" + i); lookImageAlertMake(i); } } @@ -170,8 +190,17 @@ } private void setupWithViewModel() { + System.out.println("kota: setupWithViewModel呼ばれた"); Iris iris = (Iris) this.getActivity().getApplication(); myTeam = iris.getTeam(); + rid = iris.getRid(); + isMaster = iris.isMaster(); + System.out.println("kota: isMasterですかどうか:" + isMaster); + System.out.println(iris.getRid()); + System.out.println(iris.getTeam()); + System.out.println(iris.getMemberList()); + System.out.println(iris.getNickname()); + drawingList = gameViewModel.getGame().getDrawingList(); map = gameViewModel.getGame().getMap(); colorList = gameViewModel.getGame().getColorList(); @@ -188,8 +217,6 @@ String urlSt = drawingList.get(map.get(i)).getDrawing(); setImage(i, urlSt, context); - System.out.println(colorList.get(i)); - String color = colorList.get(i); // 初回だけセットする外枠の、メンバーとマスターで表示分け // メンバー:全て肌色、マスター:赤・青・黒・グレーの表示 if(isMaster == true) { @@ -201,8 +228,6 @@ backColors[i].setBackground(resources.getDrawable(R.drawable.gray_image)); } else if (colorList.get(i).contains("d")) { backColors[i].setBackground(resources.getDrawable(R.drawable.black_image)); - } else { - System.out.println("本当は...:「" + colorList.get(i) + "」"); } } else { backColors[i].setBackground(resources.getDrawable(R.drawable.skin_image)); @@ -218,10 +243,17 @@ * 非同期で書かなければならない **/ private void setImage(int cno, String urlSt, Context context) { + + System.out.println("kota: setImage呼ばれた"); + // Singleの別スレッドを立ち上げる Executors.newSingleThreadExecutor().execute(() -> { try { + // TODO: Drawingのsetが使われるまで、無理やり指定。 URL url = new URL(urlSt); + System.out.println("kota: 表示させるURL文字列 " + url); + // String urlString = "http://nitta-lab-www.is.konan-u.ac.jp/irisdata/image/" + rid + "-" + cno + ".png"; + //URL url = new URL(urlString); HttpURLConnection urlCon = (HttpURLConnection) url.openConnection(); // タイムアウト設定 @@ -353,8 +385,8 @@ } setAnime(cno); } - //TODO: gameViewModel.set〇〇(cno)が完成したら - //gameViewModel.se + + gameViewModel.setOpenList(cno); } @@ -364,7 +396,6 @@ */ private void doubtAlertMake(int cno){ String strTitle = "疑いますか?"; - String strMessage = "(ここに画像を表示させる予定)"; AlertDialog.Builder builder; builder = new AlertDialog.Builder(getContext()); @@ -442,11 +473,6 @@ * 黒いカードがひかれて、ゲームが終わったときに呼ばれるアラート */ private void finishGameAlertMake(int cno, String myTeam, String nowTurn) { - try { - Thread.sleep(2000); //3000ミリ秒Sleepする - } catch (InterruptedException e) { - } - String strTitle; String strMessage; @@ -473,6 +499,8 @@ * 画面をトップに戻る動作でも書く? **/ private void setFinish() { + Intent intent = new Intent(this.getActivity().getApplication(), MainActivity.class); + startActivity(intent); } } \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/irisclient/viewmodels/GameViewModel.java b/app/src/main/java/org/ntlab/irisclient/viewmodels/GameViewModel.java index 5f27c8f..d5309fd 100644 --- a/app/src/main/java/org/ntlab/irisclient/viewmodels/GameViewModel.java +++ b/app/src/main/java/org/ntlab/irisclient/viewmodels/GameViewModel.java @@ -1,7 +1,10 @@ package org.ntlab.irisclient.viewmodels; +import org.ntlab.irisclient.Iris; import org.ntlab.irisclient.entities.GameJson; +import org.ntlab.irisclient.entities.RoomJson; import org.ntlab.irisclient.entities.TurnJson; +import org.ntlab.irisclient.models.Room; import org.ntlab.irisclient.resources.GameRest; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; @@ -33,6 +36,7 @@ final private MutableLiveData> mapMutableLiveData; final private MutableLiveData imageMutableLiveData; private GameJson game = new GameJson(); + final private GameRest gameRest; final private Retrofit retrofit; //更新比較用フィールド @@ -56,7 +60,21 @@ .addConverterFactory(JacksonConverterFactory.create()) .build(); - testgame(); // 通信をして game に値をセットさせる関数 + this.gameRest = retrofit.create(GameRest.class); + + //RoomJson roomJson = new RoomJson(); + //System.out.println("adfasdfdsafdsa" + roomJson.getRid()); + + /** + * 追記ここから(追記2個分の1個目) + * 変更1)initが呼ばれていなかった()→ initを呼び出し + * 変更2)gameが宣言のみで値がずっとnullだった → setGameの関数で通信を行う + */ + init(); // 変更1 + setGame(rid); // 変更2 + /** + * 追記ここまで + */ } //---------------------------------------------------- @@ -65,12 +83,6 @@ this.rid = rid; } - public void putHint(String hint, int max) { - this.hint = hint; - this.max = max; - updateTurn(); - } - public void setOpenList(Integer cno) { this.cno = cno; } @@ -101,6 +113,47 @@ } + //--------------------------------------------- + // マスターのヒントを送信するメソッド + 最大回答数も送信 + public void putHint(String hint, Integer max) { + + Call call = gameRest.putHint(rid, tno, hint, max); + + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()){ + System.out.println("通信成功:changeBelongsAndMaster"); + } + } + @Override + public void onFailure(Call call, Throwable t) { + System.out.println("通信失敗:changeBelongsAndMaster"); + System.out.println(t); + } + }); + } + +// public void putTeam(String team){ +// final Iris iris = retrofit.create(Iris.class); +// Call call = iris.setTeam(team); +// +// call.enqueue(new Callback() { +// @Override +// public void onResponse(Call call, Response response) { +// if (response.isSuccessful()){ +// System.out.println("通信成功:changeBelongsAndMaster"); +// } +// } +// @Override +// public void onFailure(Call call, Throwable t) { +// System.out.println("通信失敗:changeBelongsAndMaster"); +// System.out.println(t); +// } +// }); +// } + + //----------------------------------------------------------------------------- // updates public void init() { @@ -111,46 +164,45 @@ @Override public void update() { - updateTurns(rid); - //updateTurn(rid); + //updateTurns(rid); + updateTurn(rid); updateOpens(rid); } - //r,bの取得(今どちらのチームかの判別) - public void updateTurns(String rid) { - final GameRest gameRest = retrofit.create(GameRest.class); - Call call = gameRest.getTeam(rid); +// //r,bの取得(今どちらのチームかの判別) +// public void updateTurns(String rid) { +// final GameRest gameRest = retrofit.create(GameRest.class); +// Call call = gameRest.getTeam(rid); +// +// call.enqueue(new Callback() { +// @Override +// public void onResponse(Call call, Response response) { +// if (response.isSuccessful()){ +// if(turnsPreData == null){ +// //初回代入 +// turnsMutableLiveData.setValue(response.body()); +// turnsPreData = response.body(); +// }else if(response.body().equals(turnsPreData)){ +// //値が一緒なら書き換えない +// }else{ +// //値が異なるときのみライブデータを上書き +// turnsMutableLiveData.setValue(response.body()); +// turnsPreData = response.body(); +// } +// } +// } +// +// @Override +// public void onFailure(Call call, Throwable t) { +// System.out.println("通信失敗:changeBelongsAndMaster"); +// System.out.println(t); +// } +// }); +// } - call.enqueue(new Callback() { - @Override - public void onResponse(Call call, Response response) { - if (response.isSuccessful()){ - if(turnsPreData == null){ - //初回代入 - turnsMutableLiveData.setValue(response.body()); - turnsPreData = response.body(); - }else if(response.body().equals(turnsPreData)){ - //値が一緒なら書き換えない - }else{ - //値が異なるときのみライブデータを上書き - turnsMutableLiveData.setValue(response.body()); - turnsPreData = response.body(); - } - } - } - - @Override - public void onFailure(Call call, Throwable t) { - System.out.println("通信失敗:changeBelongsAndMaster"); - System.out.println(t); - } - }); - } - - //hint,openList,maxの更新 - public void updateTurn() { - final GameRest gameRest = retrofit.create(GameRest.class); - Call call = gameRest.putHint(rid, tno, hint, max); + //hint,openList,maxの取得 + public void updateTurn(String rid) { + Call call = gameRest.getTurns(rid, tno); call.enqueue(new Callback() { @Override @@ -270,12 +322,15 @@ System.out.println(t); } }); - } - public void testgame() { + /** + * 追記ここから(追記2個分の2個目) + * 変更3) 通信をして、gameとimageMutableLiveDataに初期値を代入する + */ + public void setGame(String rid) { final GameRest gameRest = retrofit.create(GameRest.class); - Call call = gameRest.getGame("gametest"); + Call call = gameRest.getGame(rid); call.enqueue(new Callback() { @Override @@ -288,7 +343,11 @@ @Override public void onFailure(Call call, Throwable t) { + System.out.println(""); } }); } + /** + * 追記ここまで + */ } \ No newline at end of file