Newer
Older
RxSprout / app / src / main / java / com / example / sprout / rooms / RoomListActivity.java
package com.example.sprout.rooms;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import com.example.sprout.R;
import com.example.sprout.R.id;
import com.example.sprout.R.layout;
import com.example.sprout.Sprout;
import com.example.sprout.accounts.RegistrationActivity;

import net.arnx.jsonic.JSON;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import framework.network.CallBack;

public class RoomListActivity extends Activity {

    private RoomsConnection connection;
    private Sprout sprout;
    ArrayList<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
    SimpleAdapter adapter;
    public static String respose_copy;

    //最初に処理
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(layout.activity_room_list);
        sprout = (Sprout) getApplication();
        //初期データ代入
        data_input();
        //戻るボタン
        buck_button();
        //ルームを作成ボタン
        room_create_button();
        //更新ボタン
        update_button();
        //入室関数
        enter();
    }

    //戻るボタン
    public void buck_button() {
        Button backButton = (Button) findViewById(id.roomlist_button1);
        backButton.setOnClickListener(new View.OnClickListener() {
            //押したらタイトル画面へ戻る
            public void onClick(View v) {
                Intent intent = new Intent(RoomListActivity.this, RegistrationActivity.class);
                startActivity(intent);
            }
        });
    }

    //ルーム作成ボタン
    public void room_create_button() {
        Button roomcreateButton = (Button) findViewById(id.roomlist_button2);
        roomcreateButton.setOnClickListener(new View.OnClickListener() {
            //押したらルーム作成画面へ進む
            public void onClick(View v) {
                Intent intent = new Intent(RoomListActivity.this, RoomCreateActivity.class);
                startActivity(intent);
            }
        });
    }

    //更新ボタン
    public void update_button() {
        Button updateButton = (Button) findViewById(id.roomlist_button3);
        updateButton.setOnClickListener(new View.OnClickListener() {
            //押したらルーム一覧を更新する
            public void onClick(View v) {
                data_input();
            }
        });
    }

    //入室関数
    public void enter() {
        // ListView を取得
        ListView listView = (ListView) findViewById(id.roomlist_listView1);
        //部屋が一つもないときに表示(部屋がありません)
        listView.setEmptyView(findViewById(id.roomlist_textView2));
        listView.setAdapter(adapter);
        // アイテムクリック時ののイベントを追加
        listView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent,
                                    View view, int pos, long id) {
                // 選択アイテムを取得
                ListView listView = (ListView) parent;
                HashMap<String, String> map = (HashMap<String, String>) listView.getItemAtPosition(pos);
                String target_roomid = map.get("roomid");
                int target_roomid2 = Integer.parseInt(target_roomid);
                Rooms rooms = JSON.decode(respose_copy, Rooms.class);
                Room room = rooms.getRoomById(target_roomid2);
                if (room.getMemberCount() != 4) {
                    //鍵がかかっている場合
                    if (room.getKeyCheck() == true) {
                        sprout.setRoomName(room.getRoomName());
                        sprout.setRoomId(target_roomid2);
                        Intent intent = new Intent(RoomListActivity.this, RoomInputKeyActivity.class);
                        startActivity(intent);
                    }
                    //鍵がかかっていない場合
                    if (room.getKeyCheck() == false) {
                        sprout.setRoomName(room.getRoomName());
                        sprout.setRoomId(target_roomid2);
                        connection = sprout.getRoomsConnection();
                        connection.setCallBack(new CallBack() {
                            @Override
                            public void onResponse(String response) {
                                RoomResponse room = JSON.decode(response, RoomResponse.class);
                                ((Sprout) RoomListActivity.this.getApplication()).setMemberId(room.getMemberId());
                                //メイン画面へ飛ぶ
                                Intent intent = new Intent(RoomListActivity.this, RoomMainActivity.class);
                                startActivity(intent);
                            }
                        });
                        //サーバへ送信
                        int userId = ((Sprout) getApplication()).getUserId();
                        connection.addFormParam("userId", String.valueOf(userId));//ユーザid
                        connection.addPathParam(String.valueOf(target_roomid2));//ルームid
                        connection.doPut();
                        System.out.println("プットしました");
                        System.out.println(userId);
                        System.out.println(target_roomid2);
                        System.out.println(respose_copy);
                    }
                }
                if (room.getMemberCount() == 4) {
                    Toast.makeText(getBaseContext(), "ルームがいっぱいです!", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    //データ代入関数
    public void data_input() {
        list = new ArrayList<Map<String, Object>>();
        connection = sprout.getRoomsConnection();
        connection.setCallBack(new CallBack() {
            @Override
            public void onResponse(String response) {
                respose_copy = response;
                Rooms rooms = JSON.decode(response, Rooms.class);
                //データを代入
                for (int n = 0; n < rooms.getRoomCount(); n++) {
                    Map data = new HashMap();
                    Room room = rooms.getRoomByIndex(n);
                    data.put("roomname", "" + room.getRoomName());
                    data.put("hostname", "" + room.getHostName());
                    data.put("count", room.getMemberCount() + "/4");
                    data.put("roomid", "" + room.getRoomId());
                    if (room.getKeyCheck() == false) {
                        data.put("img", R.drawable.ic_launcher);
                    } else if (room.getKeyCheck() == true) {
                        data.put("img", R.drawable.ic_launcher);
                    }
                    list.add(data);
                }
                // ListView を取得
                ListView listView = (ListView) findViewById(id.roomlist_listView1);
                adapter = new SimpleAdapter(
                        RoomListActivity.this,
                        list,//ArrayList
                        layout.roomlist_item,//ListView内の1項目を定義したxml
                        new String[]{"roomname", "hostname", "img", "count", "roomid"},//mapのキー
                        new int[]{id.roomname, id.hostname, id.img, id.count, id.roomid});//item.xml内のid
                // アダプタをセット
                listView.setAdapter(adapter);
            }
        });
        connection.doGet();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.room_list, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}