Last active
April 8, 2016 00:51
-
-
Save frankibem/2e42c8f151cc6458b24140c5a2653d3b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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