diff --git a/.idea/misc.xml b/.idea/misc.xml index a4db526..3b4f6d8 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -5,14 +5,6 @@ - - - - - - - - @@ -21,6 +13,8 @@ + + @@ -30,6 +24,9 @@ + + + diff --git a/app/src/main/java/org/ntlab/irisclient/DrawingActivity.java b/app/src/main/java/org/ntlab/irisclient/DrawingActivity.java index 1410ac5..b2c9f43 100644 --- a/app/src/main/java/org/ntlab/irisclient/DrawingActivity.java +++ b/app/src/main/java/org/ntlab/irisclient/DrawingActivity.java @@ -24,8 +24,6 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_drawing); - //drawingCanvas = (DrawingCanvas) findViewById(R.id.canvas); - //Irisから必要な情報を取得 Iris iris = (Iris) this.getApplication(); String rid = iris.getRid(); @@ -38,7 +36,10 @@ drawingStateViewModel.setNickName(nickName); findViewById(R.id.okButtton).setOnClickListener(this);//お絵描き終了ボタン + findViewById(R.id.clearButton).setOnClickListener(this);//画面クリアボタン + TextView textKeyword =(TextView)findViewById(R.id.textKeyword);//keywordのTextView + drawingCanvas = (DrawingCanvas) findViewById(R.id.drawingCanvas); //getKeywords //List keywords = drawingStateViewModel.getKeywords(rid); diff --git a/app/src/main/java/org/ntlab/irisclient/DrawingCanvas.java b/app/src/main/java/org/ntlab/irisclient/DrawingCanvas.java index 9c11905..484798d 100644 --- a/app/src/main/java/org/ntlab/irisclient/DrawingCanvas.java +++ b/app/src/main/java/org/ntlab/irisclient/DrawingCanvas.java @@ -23,7 +23,7 @@ path = new Path();//線を引いたり、図形を描いたり、要するにグラフィック paint = new Paint();//筆の種類 - paint.setColor(Color.RED);//色の指定 + paint.setColor(Color.BLACK);//色の指定 paint.setStyle(Paint.Style.STROKE);//線をひく paint.setStrokeWidth(20);//幅 } diff --git a/app/src/main/java/org/ntlab/irisclient/GameMasterActivity.java b/app/src/main/java/org/ntlab/irisclient/GameMasterActivity.java index e3b1f00..9bbf1cc 100644 --- a/app/src/main/java/org/ntlab/irisclient/GameMasterActivity.java +++ b/app/src/main/java/org/ntlab/irisclient/GameMasterActivity.java @@ -1,35 +1,71 @@ package org.ntlab.irisclient; import androidx.appcompat.app.AppCompatActivity; +import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; +import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; +import org.ntlab.irisclient.entities.TurnJson; +import org.ntlab.irisclient.models.Game; +import org.ntlab.irisclient.viewmodels.DrawingStateViewModel; import org.ntlab.irisclient.viewmodels.GameViewModel; public class GameMasterActivity extends AppCompatActivity{ - //MemberRoomActivityが一番見やすいと思う + private GameViewModel gameViewModel; + //操作可能かどうかを記録。これがfalseの時は何のボタンを押すこともできない。 + //時間があればゲームに干渉できないだけで、オフラインの動作はできるようにしたい。 + private boolean IsActive = false; + + //Irisから必要な情報を取得 + Iris iris = (Iris) this.getApplication(); + private String myTeam = iris.getTeam(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_game_master); + //Irisから必要な情報を取得 + Iris iris = (Iris) this.getApplication(); + String rid = iris.getRid(); + String nickName = iris.getNickname(); + + //viewModelに必用な情報をセット + gameViewModel= new ViewModelProvider(this).get(GameViewModel.class); + gameViewModel.setRid(rid); + //ここでカードとかメンバーを表示する - - - //↓自分のチームかつ、ヒント入力画面の場合のみボタンプロセスを読み込む。それ以外の時は何もできないようにする。if文を描きたいけどまだ確認ができない + //ボタンの情報を入力 buttonProcesses(); + //自分が赤チームマスターの場合はヒントが入力可能 + if(myTeam.equals("r")){ + IsActive = true; + } + //タイマースタート呼び出し + gameViewModel.start(500); + gameViewModel.getTurnLiveData().observe(this, new Observer() { + @Override + public void onChanged(TurnJson turnJson) { + //turnJsonから情報を貰ってきて、操作できるのかどうかとかを判断する。 + IsActive = CheckActivity(turnJson); + + //時間があれば何をしてほしいのかのアナウンスを入れる + //時間があれば背景の色を変える + + } + }); } public void buttonProcesses(){ @@ -38,6 +74,7 @@ SendHintButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { + EditText Hint = findViewById(R.id.GameHint); EditText HintMax = findViewById(R.id.GameHintMax); @@ -52,24 +89,28 @@ HintMax.setError("数字が入力されていません"); } else { //ビューモデルにhintとhintMaxを送信する。まとめて送信できるようになるかも知れないので、いったん放置 - + gameViewModel.putHint(hint,hintMax); //マスターブランチに修正が入ったらコメントアウトを外す } + } }); } - //操作可能かどうかを調べる関数(いらない?) クリックされる度にチェックするのではなく、masterとかturnをオブザーブしておいて、変更があれば反映する。 - public boolean CheckActivity(){ + //操作可能かどうかを調べる関数。masterとかturnをオブザーブしておいて、変更があれば反映する。 + public boolean CheckActivity(TurnJson turnjson){ - boolean MasterActivity = false; + IsActive = false; - //今は自分のチームのターンかどうかを確認 - //今はヒント入力時間かどうかを確認 - //ライブデータを監視する - GameViewModel gameViewModel = new ViewModelProvider(this).get(GameViewModel.class); - //String team = gameViewModel.getTurnLiveData(). + //最新のゲームの状況を取得 + String CurrentTeam = turnjson.getTeam(); + int turnState = turnjson.getTurnstate(); - return MasterActivity; + //自分のチームのターンで、かつ「ヒント入力」時間の場合は行動可能 + if(CurrentTeam.equals(myTeam) && turnState == 0){ + IsActive = true; + } + + return IsActive; } } \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/irisclient/Iris.java b/app/src/main/java/org/ntlab/irisclient/Iris.java index d482cda..5b9567b 100644 --- a/app/src/main/java/org/ntlab/irisclient/Iris.java +++ b/app/src/main/java/org/ntlab/irisclient/Iris.java @@ -4,12 +4,17 @@ import org.ntlab.irisclient.entities.RoomJson; import org.ntlab.irisclient.models.Member; +import java.util.ArrayList; +import java.util.List; + public class Iris extends Application { private String rid; private String nickname; private String team; private boolean bMaster; + private List memberList = new ArrayList<>(); + //---------------------------------------------------------- // getter public String getRid() { @@ -24,6 +29,8 @@ public boolean isMaster() { return this.bMaster; } + public List getMemberList() { return this.memberList; } + //---------------------------------------------------------- // setter public void setRid(String rid) { @@ -38,4 +45,6 @@ public void setMaster(boolean master) { bMaster = master; } + public void setMemberList(List memberList) { this.memberList = memberList; } + } diff --git a/app/src/main/java/org/ntlab/irisclient/TestDrawingActivity.java b/app/src/main/java/org/ntlab/irisclient/TestDrawingActivity.java index d5ce1d4..8cc4463 100644 --- a/app/src/main/java/org/ntlab/irisclient/TestDrawingActivity.java +++ b/app/src/main/java/org/ntlab/irisclient/TestDrawingActivity.java @@ -8,12 +8,29 @@ import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; +import org.ntlab.irisclient.resources.GameRest; +import org.ntlab.irisclient.resources.RoomsRest; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.jackson.JacksonConverterFactory; + public class TestDrawingActivity extends AppCompatActivity { + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.test_activity_draw); + //サーバーとの通信を初期化 + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/iris/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + final RoomsRest roomRest = retrofit.create(RoomsRest.class); + //上の表示を削除 ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { @@ -24,6 +41,24 @@ Button ownerButton = findViewById(R.id.ownerdraw); ownerButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { + //(ownerのみ)drawtestを更新 : は動かない + /* + final RoomsRest roomsRest = retrofit.create(RoomsRest.class); + Call call = roomsRest.putTestRoom(); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()){ + System.out.println("通信成功:createDrawTest"); + } + } + @Override + public void onFailure(Call call, Throwable t) { + System.out.println("通信失敗:createDrawTest"); + System.out.println(t); + } + }); + */ ((Iris) getApplication()).setRid("drawtest"); ((Iris) getApplication()).setNickname("owner"); Intent intent = new Intent(TestDrawingActivity.this,DrawingActivity.class); diff --git a/app/src/main/java/org/ntlab/irisclient/entities/GameJson.java b/app/src/main/java/org/ntlab/irisclient/entities/GameJson.java deleted file mode 100644 index 17f9c3d..0000000 --- a/app/src/main/java/org/ntlab/irisclient/entities/GameJson.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.ntlab.irisclient.entities; - -public class GameJson { - -} diff --git a/app/src/main/java/org/ntlab/irisclient/resources/RoomsRest.java b/app/src/main/java/org/ntlab/irisclient/resources/RoomsRest.java index 381c08f..18ee92e 100644 --- a/app/src/main/java/org/ntlab/irisclient/resources/RoomsRest.java +++ b/app/src/main/java/org/ntlab/irisclient/resources/RoomsRest.java @@ -113,4 +113,12 @@ @Field("nickname") String nickname, @Field("state") Integer state ); + + //----------------------------------------------- + //test部屋の更新(主にdrawtest) + @FormUrlEncoded + @PUT("rooms/test") + Call putTestRoom( + ); + } diff --git a/app/src/main/java/org/ntlab/irisclient/viewmodels/DrawingStateViewModel.java b/app/src/main/java/org/ntlab/irisclient/viewmodels/DrawingStateViewModel.java index fede34e..9bae5ef 100644 --- a/app/src/main/java/org/ntlab/irisclient/viewmodels/DrawingStateViewModel.java +++ b/app/src/main/java/org/ntlab/irisclient/viewmodels/DrawingStateViewModel.java @@ -3,16 +3,14 @@ import android.graphics.Bitmap; -import org.ntlab.irisclient.models.DrawingState; +import org.ntlab.irisclient.models.Member; import org.ntlab.irisclient.resources.DrawingRest; import org.ntlab.irisclient.resources.RoomsRest; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; -import java.io.ByteArrayOutputStream; - -import java.util.Base64; +import java.io.IOException; import java.util.List; import retrofit2.Retrofit; @@ -29,7 +27,7 @@ final private Retrofit retrofit; private Integer drawingStatePreData; - private Integer dnoPreData; + private Integer dnoPreData = null; private String drawingPreData; private String rid; private String nickName; @@ -84,9 +82,13 @@ public void onResponse(Call call, Response response) { if (response.isSuccessful()){ - if(response.body().equals(dnoPreData)){ + if(dnoPreData == null){ + dnoMutableLiveData.setValue(response.body()); + dnoPreData = response.body(); + } else if(response.body().equals(dnoPreData)){ + System.out.println("test"); //値が一緒なら書き換えない - }else{ + } else { //値が異なるときのみライブデータを上書き dnoMutableLiveData.setValue(response.body()); dnoPreData = response.body(); @@ -101,8 +103,21 @@ } public List getKeywords(String rid){ - return null; + final DrawingRest drawingRest = retrofit.create(DrawingRest.class); + Call> keywordsCall = drawingRest.getKeywords(rid); + try { + Response> keywords = keywordsCall.execute(); + return keywords.body(); + } catch (IOException e) { + e.printStackTrace(); + return null; + } } + +// public LiveData> getMembers(String rid){ +// RoomViewModel members = new RoomViewModel(); +// return members.getMembersLiveData(); +// } public LiveData getDno(){ return this.dnoMutableLiveData; } @@ -133,7 +148,7 @@ //System.out.println(encoded); final DrawingRest drawingRest = retrofit.create(DrawingRest.class); - int dno = dnoMutableLiveData.getValue(); + Integer dno = dnoMutableLiveData.getValue(); Call call = drawingRest.putDrawing(rid, dno, "iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAMAAAD0WI85AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3VpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM1MiwgMjAyMC8wMS8zMC0xNTo1MDozOCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiODViMDYzZC0yY2ZiLTRlMDUtYTA3YS04NTEzNDlkMDY5OTMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NkVDQTI3N0E3OTc4MTFFQUEyRkFCRDY5Q0FERDFGNzYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NkVDQTI3Nzk3OTc4MTFFQUEyRkFCRDY5Q0FERDFGNzYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NDQyNWVjOC04NzBjLTQzZTMtYmQ2MS1hMzI2MjJiNzlhNzgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Yjg1YjA2M2QtMmNmYi00ZTA1LWEwN2EtODUxMzQ5ZDA2OTkzIi8+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" ); call.enqueue(new Callback() { diff --git a/app/src/main/res/drawable/border.xml b/app/src/main/res/drawable/border.xml new file mode 100644 index 0000000..f7ee6d5 --- /dev/null +++ b/app/src/main/res/drawable/border.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_drawing.xml b/app/src/main/res/layout/activity_drawing.xml index 55763c7..8850c50 100644 --- a/app/src/main/res/layout/activity_drawing.xml +++ b/app/src/main/res/layout/activity_drawing.xml @@ -6,6 +6,18 @@ android:layout_height="match_parent" tools:context=".DrawingActivity"> + +