Skip to content

Instantly share code, notes, and snippets.

@frankibem
Last active April 8, 2016 00:51
Show Gist options
  • Save frankibem/2e42c8f151cc6458b24140c5a2653d3b to your computer and use it in GitHub Desktop.
Save frankibem/2e42c8f151cc6458b24140c5a2653d3b to your computer and use it in GitHub Desktop.
package com.test.leaderboard;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.json.JSONArray;
import java.lang.reflect.Type;
import java.util.List;
public class Leaderboard extends AppCompatActivity {
private ListView listView;
private ProgressBar progressBar;
private TextView scoreText;
private TextView errorText;
private List<ScoreEntry> entries;
private LeaderboardAdapter adapter;
private ScoreEntry userEntry;
MediaPlayer applausePlayer;
MediaPlayer booPlayer;
VolleySingleton volley;
AlertDialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_leaderboard);
listView = (ListView) findViewById(R.id.listView);
progressBar = (ProgressBar) findViewById(R.id.progress);
scoreText = (TextView) findViewById(R.id.text_score);
errorText = (TextView) findViewById(R.id.text_error);
volley = VolleySingleton.getInstance(Leaderboard.this);
getLeaderboardData();
Bundle bundle = getIntent().getExtras();
String username = bundle.getString("username");
int score = bundle.getInt("score");
applausePlayer = MediaPlayer.create(Leaderboard.this, R.raw.applause);
booPlayer = MediaPlayer.create(Leaderboard.this, R.raw.boo);
userEntry = new ScoreEntry(username, score);
scoreText.setText(Integer.toString(userEntry.getScore()));
AlertDialog.Builder builder = new AlertDialog.Builder(Leaderboard.this);
builder.setMessage("Are you sure you wanat to quit?")
.setTitle("Exit")
.setPositiveButton("Exit", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Leaderboard.this.finish();
}
})
.setNegativeButton("Retry", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent newGame = new Intent(Leaderboard.this, MainActivity.class);
startActivity(newGame);
Leaderboard.this.finish();
}
});
dialog = builder.create();
}
private void getLeaderboardData() {
String url = getString(R.string.url_leaderboard);
JsonArrayRequest request = new JsonArrayRequest(
Request.Method.GET,
url,
null,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
progressBar.setVisibility(View.GONE);
parseResponse(response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
progressBar.setVisibility(View.GONE);
errorText.setVisibility(View.VISIBLE);
}
});
volley.addToRequestQueue(request);
}
/**
* Parse the JSON response and display in the listView
*
* @param response
*/
private void parseResponse(JSONArray response) {
String jsonStr = response.toString();
Type listType = new TypeToken<List<ScoreEntry>>() {
}.getType();
Gson gson = new Gson();
entries = gson.fromJson(jsonStr, listType);
adapter = new LeaderboardAdapter(Leaderboard.this, entries);
// Check if user's score is in top 10
boolean found = false;
for (ScoreEntry entry : entries) {
if (entry.equals(userEntry)) {
found = true;
break;
}
}
runOnUiThread(new Runnable() {
@Override
public void run() {
listView.setAdapter(adapter);
}
});
if (found) {
applausePlayer.start();
} else {
booPlayer.start();
}
}
@Override
protected void onStop() {
super.onStop();
// release resources and tidy up
if (applausePlayer != null) {
applausePlayer.release();
applausePlayer = null;
}
if (booPlayer != null) {
booPlayer.release();
booPlayer = null;
}
}
@Override
public void onBackPressed() {
dialog.show();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment