package org.ntlab.irisclient; import android.annotation.SuppressLint; import android.content.DialogInterface; import android.content.ClipData; import android.content.ClipDescription; import android.content.ClipboardManager; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ListView; import android.widget.Switch; import android.widget.TextView; import com.google.android.material.snackbar.Snackbar; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import org.ntlab.irisclient.entities.RoomJson; import org.ntlab.irisclient.models.Member; import org.ntlab.irisclient.models.Settings; import org.ntlab.irisclient.resources.RoomsRest; import org.ntlab.irisclient.viewmodels.RoomViewModel; import java.util.ArrayList; import java.util.Collections; import java.util.List; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; import retrofit2.Retrofit; import retrofit2.converter.jackson.JacksonConverterFactory; public class OwnerRoomActivity extends AppCompatActivity { //フィールド ArrayList<String> viewMembers = new ArrayList<>(); ArrayList<String> oldMembers = new ArrayList<>(); List<Member> allMembers = new ArrayList<>(); List<Integer> Mteam = new ArrayList<>(); List<Integer> Steam = new ArrayList<>(); List<Integer> Rteam = new ArrayList<>(); List<Integer> Bteam = new ArrayList<>(); String roomId = "null"; String myName = "null"; //String nickname; String belongs; Boolean isMaster; boolean drawingTimer = true; int drawingTimes = 50; boolean gameTimer = true; int gameTimes = 30; int gameFirstTimes = 10; private void homeButton(RoomViewModel roomViewModel){ String strTitle = "ホーム画面に戻ってもよろしいですか?"; String strMessage = "退出すると部屋は削除されます"; AlertDialog.Builder builder; builder = new AlertDialog.Builder(this); builder.setMessage(strMessage); builder.setTitle(strTitle); builder.setPositiveButton("ok", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { roomViewModel.ownerLeaving(roomId , myName); Intent i = new Intent(OwnerRoomActivity.this, MainActivity.class); startActivity(i); } }); builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); builder.create(); builder.show(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_owner_room); myName = ((Iris) getApplication()).getNickname(); roomId = ((Iris) getApplication()).getRid(); //自分のなまえ //Intent intentMain = getIntent(); //myName = intentMain.getStringExtra("nickname"); //-------------------------------------------------------------------------- //メンバー表示 Member mn = new Member(myName); mn.setBelongs("g"); mn.setMaster(false); viewMembers.add(mn.getNickname()); //RoomViewModelへのアクセス RoomViewModel roomViewModel = new ViewModelProvider(this).get(RoomViewModel.class); roomViewModel.setRid(roomId); ListView membersList = (ListView) findViewById(R.id.MembersList); BaseAdapter adapter = new MemberListAdapter(this.getApplicationContext(), R.layout.member_list_layout, viewMembers, allMembers); membersList.setAdapter(adapter); //LiveData(List<Member>)への購読 roomViewModel.getMembersLiveData().observe(this, new Observer<List<Member>>() { private List<Member> members; @Override public void onChanged(List<Member> irisMembers) { viewMembers.clear(); irisMembers.forEach(m -> viewMembers.add(m.getNickname())); allMembers = irisMembers; BaseAdapter adapter = new MemberListAdapter(getApplicationContext(), R.layout.member_list_layout, viewMembers, allMembers); membersList.setAdapter(adapter); } }); //各ボタン処理 ArrayList<String> members = new ArrayList<>(); Button redMasterButton = (Button) findViewById(R.id.beRedMaster); Button redSpyButton = (Button) findViewById(R.id.beRedSpy); Button blueMasterButton = (Button) findViewById(R.id.beBlueMaster); Button blueSpyButton = (Button) findViewById(R.id.beBlueSpy); ImageButton copyButton = (ImageButton) findViewById(R.id.copyButton); ImageButton homeButton = (ImageButton) findViewById(R.id.homeButton); @SuppressLint("UseSwitchCompatOrMaterialCode") Switch dTimer = findViewById(R.id.dTimer); @SuppressLint("UseSwitchCompatOrMaterialCode") Switch gTimer = findViewById(R.id.gTimer); Switch switch4 = findViewById(R.id.switch4); Switch switch5 = findViewById(R.id.switch5); Switch switch6 = findViewById(R.id.switch6); Switch switch7 = findViewById(R.id.switch7); Switch switch8 = findViewById(R.id.switch8); Switch switch9 = findViewById(R.id.switch9); //OwnerRoom専用ボタン Button randomButton = (Button) findViewById(R.id.random); Button startButton = (Button) findViewById(R.id.start); //チームと役職の変更 //赤チーム・スパイマスター redMasterButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ((Iris) getApplication()).setMaster(true); ((Iris) getApplication()).setTeam("r"); roomViewModel.changeBelongsAndMaster(roomId, myName,"r",true); } }); //赤チーム・諜報員 redSpyButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ((Iris) getApplication()).setMaster(false); ((Iris) getApplication()).setTeam("r"); roomViewModel.changeBelongsAndMaster(roomId, myName,"r",false); } }); //青チーム・スパイマスター blueMasterButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ((Iris) getApplication()).setMaster(true); ((Iris) getApplication()).setTeam("b"); roomViewModel.changeBelongsAndMaster(roomId, myName,"b",true); } }); //青チーム・諜報員 blueSpyButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ((Iris) getApplication()).setMaster(false); ((Iris) getApplication()).setTeam("b"); roomViewModel.changeBelongsAndMaster(roomId, myName,"b",false); } }); //コピーボタン copyButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Snackbar.make(v, "コピーしました", Snackbar.LENGTH_LONG).show(); CopyClipBoard(); CreateCommonIntent(); } }); //設定ボタン dTimer.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { drawingTimer = isChecked; if(drawingTimer == false){ switch4.setVisibility(View.GONE); switch5.setVisibility(View.GONE); switch6.setVisibility(View.GONE); }else { switch4.setVisibility(View.VISIBLE); switch5.setVisibility(View.VISIBLE); switch6.setVisibility(View.VISIBLE); } roomViewModel.changeSettings(roomId, drawingTimer, drawingTimes, gameTimer, gameTimes, gameFirstTimes); } }); switch4.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { switch5.setChecked(false); switch6.setChecked(false); } }); switch5.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { switch4.setChecked(false); switch6.setChecked(false); } }); switch6.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { switch4.setChecked(false); switch5.setChecked(false); } }); gTimer.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { gameTimer = isChecked; if(gameTimer == false){ switch7.setVisibility(View.GONE); switch8.setVisibility(View.GONE); switch9.setVisibility(View.GONE); }else { switch7.setVisibility(View.VISIBLE); switch8.setVisibility(View.VISIBLE); switch9.setVisibility(View.VISIBLE); } roomViewModel.changeSettings(roomId, drawingTimer, drawingTimes, gameTimer, gameTimes, gameFirstTimes); } }); switch7.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { switch8.setChecked(false); switch9.setChecked(false); } }); switch8.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { switch7.setChecked(false); switch9.setChecked(false); } }); switch9.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { switch7.setChecked(false); switch8.setChecked(false); } }); //ランダムボタン randomButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { roomViewModel.randomTeam(roomId,myName); } }); //スタートボタン startButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(ConditionStart()){ roomViewModel.startDrawing(roomId, myName); Intent intent = new Intent(OwnerRoomActivity.this,DrawingActivity.class); startActivity(intent); }else{ Snackbar.make(v, "スタート条件を満たしていません", Snackbar.LENGTH_LONG).show(); } } }); //ホームボタン homeButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { homeButton(roomViewModel); } }); //--------------------------------------------------------------- //settings情報 //--------------------------------------------------------------- //部屋ID情報 TextView RoomIdText = findViewById(R.id.roomID); RoomIdText.setText(roomId); roomViewModel.start(500,(Iris)getApplication()); } public void CopyClipBoard() { String copyText = roomId; // 作成したレース結果を取得 // クリップボードへの格納成功時は成功メッセージをトーストで表示 boolean result = SetClipData(copyText); if(result) { } else { } } private boolean SetClipData(String copyText) { try { //クリップボードに格納するItemを作成 ClipData.Item item = new ClipData.Item(copyText); //MIMETYPEの作成 String[] mimeType = new String[1]; mimeType[0] = ClipDescription.MIMETYPE_TEXT_URILIST; //クリップボードに格納するClipDataオブジェクトの作成 ClipData cd = new ClipData(new ClipDescription("text_data", mimeType), item); //クリップボードにデータを格納 ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); cm.setPrimaryClip(cd); return true; } catch (Exception e) { return false; } } private void CreateCommonIntent() { //システムのクリップボードを取得 ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); //クリップボードからClipDataを取得 ClipData cd = cm.getPrimaryClip(); if(cd != null) { // クリップボードにコピーがある場合 ClipData.Item item = cd.getItemAt(0); Intent sendIntent =new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.setType("text/plain"); sendIntent.putExtra(sendIntent.EXTRA_TEXT, item.getText()); // メモ帳のテキスト欄、メールアプリの本文にテキストをセット startActivity(sendIntent); // 共有メニューを開く } } public boolean ConditionStart() { for(int i=0; i< allMembers.size(); i++){ if(allMembers.get(i).getMaster()){ Mteam.add(i); }else{ Steam.add(i); } if(allMembers.get(i).getBelongs().equals("r")){ Rteam.add(i); }else if(allMembers.get(i).getBelongs().equals("b")) { Bteam.add(i); } } if(Mteam.size() != 2){ return false; } if(Rteam.size() < 2){ return false; } if(Bteam.size() < 2){ return false; } return true; } }