package com.angrykings.activities;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Typeface;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.angrykings.Action;
import com.angrykings.gcm.GcmIntentService;
import com.angrykings.pregame.FacebookPlayer;
import com.angrykings.pregame.FacebookPlayerAdapter;
import com.angrykings.pregame.LobbyPlayer;
import com.angrykings.pregame.LobbyPlayerAdapter;
import com.angrykings.R;
import com.angrykings.ServerConnection;
import com.angrykings.utils.ServerJSONBuilder;
import com.angrykings.utils.ServerMessage;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class LobbyActivity extends Activity {
private ListView lobbyList;
private ListView facebookList;
private TextView title;
private String username;
private List<LobbyPlayer> lobbyPlayers;
private List<FacebookPlayer> facebookPlayers;
private void challengePlayer(final LobbyPlayer partner) {
new AlertDialog.Builder(LobbyActivity.this)
.setTitle("Challenge")
.setMessage(partner.name + " herausfordern?")
.setPositiveButton("Klar!",
new DialogInterface.OnClickListener() {
@Override
public void onClick(final DialogInterface dialog, final int which) {
Intent intent = new Intent(LobbyActivity.this, OnlineGameActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.putExtra("partnerId", String.valueOf(partner.id));
startActivity(intent);
}
})
.setNegativeButton("Lieber nicht",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
}).show();
}
private void updateFacebookList(List<FacebookPlayer> user) {
facebookList.setAdapter((new FacebookPlayerAdapter(this, R.layout.list_row_facebook, user)));
}
private void updateLobby(List<LobbyPlayer> user) {
lobbyList.setAdapter(new LobbyPlayerAdapter(this, R.layout.list_row, user));
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lobby);
ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(this));
Typeface font = Typeface.createFromAsset(getAssets(), "font/Rom_Ftl_Srif.ttf");
lobbyList = (ListView) findViewById(R.id.lobbyList);
facebookList = (ListView) findViewById(R.id.facebookList);
title = (TextView) findViewById(R.id.lobbyTitle);
title.setTypeface(font);
Bundle extras = getIntent().getExtras();
facebookPlayers = new ArrayList<FacebookPlayer>();
lobbyPlayers = new ArrayList<LobbyPlayer>();
if (extras != null) {
this.username = extras.getString("username");
}
ServerConnection
.getInstance()
.sendTextMessage(ServerMessage.gotoLobby());
facebookList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
CharSequence text = facebookPlayers.get(position).name;
Toast toast = Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT);
toast.show();
challengePlayer(facebookPlayers.get(position));
}
});
lobbyList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
challengePlayer(lobbyPlayers.get(position));
}
});
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
Set<String> friends = settings.getStringSet("facebookFriends", new HashSet<String>());
ServerConnection.getInstance().setHandler(new ServerConnection.OnMessageHandler() {
@Override
public void onMessage(String payload) {
try {
final JSONObject jObj = new JSONObject(payload);
if (jObj.getInt("action") == Action.Server.LOBBY_UPDATE) {
Log.d("AngryKings maan", "received lobby update: " + jObj.get("names"));
JSONArray userArray = new JSONArray(jObj.getString("names"));
lobbyPlayers.clear();
for (int i = 0; i < userArray.length(); i++) {
final JSONObject jsonObject = userArray.getJSONObject(i);
lobbyPlayers.add(new LobbyPlayer(jsonObject.getString("name"),
jsonObject.getInt("public_id"),
jsonObject.getString("won"),
jsonObject.getString("lost")));
}
updateLobby(lobbyPlayers);
} else if (jObj.getInt("action") == Action.Server.FRIENDS) {
JSONArray friendArray = new JSONArray(jObj.getString("friends"));
Log.d("FRIENDSLIST", friendArray.toString());
facebookPlayers.clear();
for (int i = 0; i < friendArray.length(); i++) {
JSONObject playerJson = friendArray.getJSONObject(i);
facebookPlayers.add(
new FacebookPlayer(
playerJson.getString("name"),
playerJson.getInt("public_id"),
playerJson.getString("won"),
playerJson.getString("lost"),
playerJson.getString("facebook_id")
)
);
}
updateFacebookList(facebookPlayers);
updateLobby(lobbyPlayers);
lobbyList.setTextFilterEnabled(true);
}
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
}
});
ServerConnection
.getInstance()
.sendTextMessage(ServerMessage.findFacebookFriends(friends.toString()));
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
ServerConnection
.getInstance()
.sendTextMessage(ServerMessage.leaveLobby());
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onStop() {
ServerConnection
.getInstance()
.sendTextMessage(new ServerJSONBuilder().create(Action.Client.LEAVE_LOBBY).build());
super.onStop();
}
}