package com.igorcrevar.goingunder.android; import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.RelativeLayout; import com.badlogic.gdx.backends.android.AndroidApplication; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.AdSize; import com.google.android.gms.ads.AdView; import com.google.android.gms.games.Games; import com.google.example.games.basegameutils.GameHelper; import com.google.example.games.basegameutils.GameHelper.GameHelperListener; import com.igorcrevar.goingunder.GameListener; import com.igorcrevar.goingunder.GameManager; import com.igorcrevar.goingunder.IActivityRequestHandler; @SuppressLint("HandlerLeak") public class UndergroundActivity extends AndroidApplication implements GameHelperListener, IActivityRequestHandler { //private static final String GooglePlayUrl = "http://www.amazon.com/gp/mas/dl/android?p=com.igorcrevar.goingunder.android"; private static final String GooglePlayUrl = "https://play.google.com/store/apps/details?id=com.igorcrevar.goingunder.android"; private static final String AdUnitId = "ca-app-pub-5576202321158199/8618910462"; private static final boolean DEBUG = false; private final boolean areAdsEnabled = true; private final boolean areServicesEnabled = true; private AdView adView; private boolean adIsVisible = false; private final int SHOW_ADS = 1; private final int HIDE_ADS = 0; private GameHelper mHelper; private GameManager gameManager; private enum SignInReason { None, Achievements, Leaderboards } private SignInReason signInReason = SignInReason.None; protected Handler handler = new Handler() { @Override public void handleMessage(Message msg) { if (!areAdsEnabled) return; switch(msg.what) { case SHOW_ADS: if (!adIsVisible) { adIsVisible = true; adView.setVisibility(View.VISIBLE); } break; case HIDE_ADS: if (adIsVisible) { adIsVisible = false; adView.setVisibility(View.GONE); } break; } } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Create the layout RelativeLayout layout = new RelativeLayout(this); // Do the stuff that initialize() would do for you requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); // Create the libgdx View View gameView = initializeForView(new GameListener(this)); // Add the libgdx view layout.addView(gameView); // ad mob if (areAdsEnabled) { // Create and setup the AdMob view adView = new AdView(this); adView.setAdUnitId(AdUnitId); adView.setAdSize(AdSize.BANNER); // adView.setAdListener(new ToastAdListener(this)); AdRequest adRequest = new AdRequest.Builder() .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) .addTestDevice("425C0AD9758E9E82898D6CDAA982B111") .build(); adView.loadAd(adRequest); // Add the AdMob view RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); adParams.addRule(RelativeLayout.ALIGN_PARENT_TOP); adParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); layout.addView(adView, adParams); adView.setVisibility(View.GONE); } // achievements and leaderboards if (areServicesEnabled) { SharedPreferences sp = getSharedPreferences("GOOGLE_PLAY", Context.MODE_PRIVATE); boolean automaticSignIn = sp.getBoolean("signed_in", false); mHelper = new GameHelper(this, GameHelper.CLIENT_GAMES); mHelper.setConnectOnStart(automaticSignIn); if (DEBUG) { mHelper.enableDebugLog(true); } mHelper.setup(this); } // Hook it all up setContentView(layout); } @Override public void showAds(boolean show) { handler.sendEmptyMessage(show ? SHOW_ADS : HIDE_ADS); } @Override protected void onPause() { if (areAdsEnabled) { adView.pause(); } super.onPause(); } @Override protected void onResume() { super.onResume(); if (areAdsEnabled) { adView.resume(); } } @Override protected void onDestroy() { if (areAdsEnabled) { adView.destroy(); } super.onDestroy(); } @Override protected void onStart() { super.onStart(); if (areServicesEnabled) { mHelper.onStart(this); } } @Override protected void onStop() { super.onStop(); if (areServicesEnabled) { mHelper.onStop(); } } @Override protected void onActivityResult(int request, int response, Intent data) { super.onActivityResult(request, response, data); if (areServicesEnabled) { mHelper.onActivityResult(request, response, data); } } @Override public void rate() { Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(GooglePlayUrl)); this.startActivity(i); } @Override public void share(int score) { Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "I just got " + Integer.toString(score) + " points in Going Under! " + GooglePlayUrl); sendIntent.setType("text/plain"); startActivity(sendIntent); } @Override public void finishGame(long score) { // not signed, just skip if (!areServicesEnabled || !getSignedInGPGS() || gameManager == null) { return; } //int bestScore = gameManager.getTopScore(); int totalPlays = gameManager.getTotalGamesPlayed(); int totalScoresEver = gameManager.getTotalScoreSum(); Games.Leaderboards.submitScore(mHelper.getApiClient(), getString(R.string.leaderboard_high_score), score); if (score >= 8) { Games.Achievements.unlock(mHelper.getApiClient(), getString(R.string.achievement_gamer_wanna_be)); } if (score >= 20) { Games.Achievements.unlock(mHelper.getApiClient(), getString(R.string.achievement_things_getting_better)); } if (totalPlays >= 50) { Games.Achievements.unlock(mHelper.getApiClient(), getString(R.string.achievement_persistence_is_key)); } if (totalScoresEver >= 400) { Games.Achievements.unlock(mHelper.getApiClient(), getString(R.string.achievement_almost_there)); } if (score >= 60) { Games.Achievements.unlock(mHelper.getApiClient(), getString(R.string.achievement_rock_star)); } if (score >= 100) { Games.Achievements.unlock(mHelper.getApiClient(), getString(R.string.achievement_master_com)); } if (score >= 150) { Games.Achievements.unlock(mHelper.getApiClient(), getString(R.string.achievement_the_king_of_kong)); } } @Override public void showAchievements() { if (!areServicesEnabled) { return; } if (getSignedInGPGS()) { startActivityForResult(Games.Achievements.getAchievementsIntent(mHelper.getApiClient()), 0x666); } else { signInReason = SignInReason.Achievements; loginGPGS(); } } @Override public void showLeaderboards() { if (!areServicesEnabled) { return; } if (getSignedInGPGS()) { startActivityForResult(Games.Leaderboards.getLeaderboardIntent(mHelper.getApiClient(), "CgkIzuC6j_4JEAIQAA"), 0x777); } else { signInReason = SignInReason.Leaderboards; loginGPGS(); } } @Override public boolean getSignedInGPGS() { return areServicesEnabled && mHelper.isSignedIn(); } @Override public void loginGPGS() { if (!areServicesEnabled) { return; } try { runOnUiThread(new Runnable(){ public void run() { mHelper.beginUserInitiatedSignIn(); } }); } catch (final Exception ex) { } } @Override public void onSignInFailed() { } @Override public void onSignInSucceeded() { // if signed in sucessifull mark that so next time sign in will be done automatically SharedPreferences sp = getSharedPreferences("GOOGLE_PLAY", Context.MODE_PRIVATE); sp.edit().putBoolean("signed_in", true).commit(); // call action which call sign in process switch (signInReason) { case Achievements: showAchievements(); break; case Leaderboards: showLeaderboards(); break; default: break; } signInReason = SignInReason.None; } @Override public void setGameManager(GameManager gameManager) { this.gameManager = gameManager; } }