package org.ntlab.irisclient;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.RecyclerView;
import retrofit2.Call;
import retrofit2.Retrofit;
import android.content.ClipData;
import android.content.ClipDescription;
import android.content.ClipboardManager;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import com.google.android.material.snackbar.Snackbar;
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.List;
public class MemberRoomActivity extends AppCompatActivity {
//フィールド
ArrayList<String> viewMembers = new ArrayList<>();
ArrayList<String> oldMembers = new ArrayList<>();
List<Member> allMembers = new ArrayList<>();
String roomId = "null";
String myName = "null";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_member_room);
roomId = ((Iris) getApplication()).getRid();
String nickname = ((Iris) getApplication()).getNickname();
//--------------------------------------------------------------------------
//自分の名前
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);
TextView drawTimer = (TextView) findViewById(R.id.drawTimer);
TextView dTimersec = (TextView) findViewById(R.id.dTimersec);
TextView gameTimer = (TextView) findViewById(R.id.gameTimer);
TextView gTimersec = (TextView) findViewById(R.id.gTimersec);
//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;
Member myInfo = allMembers.get(myNameIndex(allMembers,myName));
((Iris) getApplication()).setMaster(myInfo.isMaster());
((Iris) getApplication()).setTeam(myInfo.getBelongs());
BaseAdapter adapter = new MemberListAdapter(getApplicationContext(), R.layout.member_list_layout, viewMembers, allMembers);
membersList.setAdapter(adapter);
}
});
roomViewModel.getStateLiveData().observe(this, new Observer<Integer>() {
@Override
public void onChanged(Integer state) {
if(state >= 1){
Intent intent = new Intent(MemberRoomActivity.this,DrawingActivity.class);
startActivity(intent);
}
if(state == -1){
roomDeleted(roomViewModel);
}
}
});
roomViewModel.getSettingsLiveData().observe(this, new Observer<Settings>() {
@Override
public void onChanged(Settings settings) {
if(settings.isDrawingTimer()) {
drawTimer.setText("お絵描きタイマー:ON");
dTimersec.setVisibility(View.VISIBLE);
dTimersec.setText(Integer.toString(settings.getDrawingTimerTimes())+"秒");
}else {
drawTimer.setText("お絵描きタイマー:OFF");
dTimersec.setVisibility(View.GONE);
}
if(settings.isGameTimer()) {
gameTimer.setText("ゲームタイマー:ON");
gTimersec.setVisibility(View.VISIBLE);
gTimersec.setText(Integer.toString(settings.getGameTimerTimes())+"秒");
}else {
gameTimer.setText("ゲームタイマー:OFF");
gTimersec.setVisibility(View.GONE);
}
}
});
//--------------------------------------------------------------------------
//各ボタン処理
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);
//MemberRoom専用ボタン
ImageButton homeButton = (ImageButton) findViewById(R.id.homeButton);
//チームと役職の変更
//赤チーム・スパイマスター
redMasterButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
roomViewModel.changeBelongsAndMaster(roomId, myName,"r",true);
}
});
//赤チーム・諜報員
redSpyButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
roomViewModel.changeBelongsAndMaster(roomId, myName,"r",false);
}
});
//青チーム・スパイマスター
blueMasterButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
roomViewModel.changeBelongsAndMaster(roomId, myName,"b",true);
}
});
//青チーム・諜報員
blueSpyButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
roomViewModel.changeBelongsAndMaster(roomId, myName,"b",false);
}
});
//roomIDをクリップボードにコピー、他アプリに共有
copyButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CopyClipBoard();
CreateCommonIntent();
Snackbar.make(v, "コピーしました", Snackbar.LENGTH_LONG).show();
}
});
//部屋の退出、最初の画面(ホーム)に戻る
homeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
homeButton(roomViewModel);
}
});
//---------------------------------------------------------------
//部屋ID情報
TextView RoomIdText = findViewById(R.id.roomID);
RoomIdText.setText(roomId);
roomViewModel.start(500,(Iris)getApplication());
}
//---------------------------------------------------------------
//roomIDのテキストをコピーする処理
public void CopyClipBoard() {
String copyText = roomId; // 生成された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); // 共有メニューを開く
}
}
//---------------------------------------------------------------
//---------------------------------------------------------------
//ホームボタンを押したときの処理
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.deleteMember(roomId , myName);
Intent intent = new Intent(MemberRoomActivity.this,MainActivity.class);
startActivity(intent);
}
});
builder.setNegativeButton("キャンセル", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.create();
builder.show();
}
//---------------------------------------------------------------
//オーナーが部屋を退出し、強制的に部屋が削除される処理
private void roomDeleted(RoomViewModel roomViewModel){
String strTitle = "オーナーが退出しました";
String strMessage = "強制的に部屋を削除します";
AlertDialog.Builder builder;
builder = new AlertDialog.Builder(this);
builder.setMessage(strMessage);
builder.setTitle(strTitle);
builder.setNegativeButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
System.out.println("ホームへ戻される");
}
});
builder.create();
builder.show();
}
private int myNameIndex(List<Member> list, String name){
for(int i = 0; i < list.size(); i++){
if(list.get(i).getNickname().equals(name)) {
return i;
}
}
return 0;
}
}