/* * Copyright 2014-2015 GameUp * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package io.gameup.android.test; import android.app.Activity; import android.app.AlertDialog; import android.app.PendingIntent; import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.ServiceConnection; import android.content.SharedPreferences; import android.os.Bundle; import android.os.IBinder; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import com.android.vending.billing.IInAppBillingService; import org.json.JSONException; import org.json.JSONObject; import io.gameup.android.GameUpException; import io.gameup.android.GameUpLoginListener; import io.gameup.android.push.Push; import io.gameup.android.test.entity.AchievementUpdate; import io.gameup.android.test.entity.LeaderboardAndRankGet; import io.gameup.android.test.entity.LeaderboardUpdate; import io.gameup.android.test.entity.MatchIdGet; import io.gameup.android.test.entity.MatchIdPost; import io.gameup.android.test.entity.MatchIdTurnGet; import io.gameup.android.test.entity.MatchIdTurnIdGet; import io.gameup.android.test.entity.MatchIdTurnPost; import io.gameup.android.test.entity.MatchPost; import io.gameup.android.test.entity.PurchaseVerifyProduct; import io.gameup.android.test.entity.PurchaseVerifySubscription; import io.gameup.android.test.tasks.AchievementGetTask; import io.gameup.android.test.tasks.AchievementUpdateTask; import io.gameup.android.test.tasks.GameGetTask; import io.gameup.android.test.tasks.GamerGetTask; import io.gameup.android.test.tasks.LeaderboardAndRankGetTask; import io.gameup.android.test.tasks.LeaderboardGetTask; import io.gameup.android.test.tasks.LeaderboardUpdateTask; import io.gameup.android.test.tasks.MatchGetTask; import io.gameup.android.test.tasks.MatchIdEndTask; import io.gameup.android.test.tasks.MatchIdGetTask; import io.gameup.android.test.tasks.MatchIdLeaveTask; import io.gameup.android.test.tasks.MatchIdTurnGetTask; import io.gameup.android.test.tasks.MatchIdTurnIdGetTask; import io.gameup.android.test.tasks.MatchIdTurnPostTask; import io.gameup.android.test.tasks.MatchPostTask; import io.gameup.android.test.tasks.PingTask; import io.gameup.android.test.tasks.PurchaseVerifyProductTask; import io.gameup.android.test.tasks.PurchaseVerifySubscriptionTask; import io.gameup.android.test.tasks.PushTask; import io.gameup.android.test.tasks.ServerTask; import io.gameup.android.test.tasks.StorageDeleteTask; import io.gameup.android.test.tasks.StorageGetTask; import io.gameup.android.test.tasks.StoragePutTask; import io.gameup.android.GameUp; import io.gameup.android.GameUpSession; public class MainActivity extends Activity implements GameUpLoginListener { private GameUpSession session; IInAppBillingService iapService; ServiceConnection iapServiceConn = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { iapService = null; } @Override public void onServiceConnected(ComponentName name, IBinder service) { iapService = IInAppBillingService.Stub.asInterface(service); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND"); serviceIntent.setPackage("com.android.vending"); bindService(serviceIntent, iapServiceConn, Context.BIND_AUTO_CREATE); GameUp.init(this, getString(R.string.api_key), new Push.NotificationOpenedHandler() { @Override public void notificationOpened(final String message, final JSONObject additionalData) { Toast.makeText(getApplicationContext(), "HANDLER, message=" + message + ", data=" + additionalData.toString(), Toast.LENGTH_LONG).show(); } }); final SharedPreferences sharedPreferences = getSharedPreferences("io.gameup.android.test", MODE_PRIVATE); final String sessionOverride = getString(R.string.session_override); if(!sessionOverride.isEmpty()) { sharedPreferences.edit() .putString("gameUpSession", "{\"api_key\":\"" + getString(R.string.api_key) + "\",\"token\":\"" + sessionOverride + "\",\"created_at\":0}") .commit(); } if(sharedPreferences.contains("gameUpSession")) { try { session = GameUpSession.fromString( sharedPreferences.getString("gameUpSession", null)); ((Button) findViewById(R.id.sessionButton)).setText( R.string.sessionButtonLabelViewSession); findViewById(R.id.pingSessionButton).setEnabled(true); findViewById(R.id.gamerGetButton).setEnabled(true); findViewById(R.id.pushPutButton).setEnabled(true); findViewById(R.id.storageGetButton).setEnabled(true); findViewById(R.id.storagePutButton).setEnabled(true); findViewById(R.id.storageDeleteButton).setEnabled(true); findViewById(R.id.achievementGetSessionButton).setEnabled(true); findViewById(R.id.achievementUpdateButton).setEnabled(true); findViewById(R.id.leaderboardGetSessionButton).setEnabled(true); findViewById(R.id.leaderboardUpdateButton).setEnabled(true); findViewById(R.id.matchGetButton).setEnabled(true); findViewById(R.id.matchPostButton).setEnabled(true); findViewById(R.id.matchIdGetButton).setEnabled(true); findViewById(R.id.matchIdLeaveButton).setEnabled(true); findViewById(R.id.matchIdEndButton).setEnabled(true); findViewById(R.id.matchIdTurnGetButton).setEnabled(true); findViewById(R.id.matchIdTurnIdGetButton).setEnabled(true); findViewById(R.id.matchIdTurnPostButton).setEnabled(true); findViewById(R.id.purchaseVerifyProductPostButton).setEnabled(true); findViewById(R.id.purchaseVerifySubscriptionPostButton).setEnabled(true); } catch (final GameUpException e) { e.printStackTrace(); sharedPreferences.edit().remove("gameUpSession").commit(); } } final Activity context = this; final GameUpLoginListener listener = this; findViewById(R.id.sessionButton).requestFocus(); findViewById(R.id.sessionButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { if (session == null) { final View view = context.getLayoutInflater().inflate(R.layout.login_dialog, null); final AlertDialog loginDialog = new AlertDialog.Builder(context) .setView(view) .setNegativeButton("Cancel", null).create(); // view.findViewById(R.id.loginAnonymous).setOnClickListener(new View.OnClickListener() { // @Override // public void onClick(final View v) { // loginDialog.dismiss(); // GameUp.loginAnonymous("TODO"); // } // }); view.findViewById(R.id.loginFacebook).setOnClickListener(new View.OnClickListener() { @Override public void onClick(final View v) { loginDialog.dismiss(); GameUp.loginFacebook(context, listener); } }); view.findViewById(R.id.loginGoogle).setOnClickListener(new View.OnClickListener() { @Override public void onClick(final View v) { loginDialog.dismiss(); GameUp.loginGoogle(context, listener); } }); view.findViewById(R.id.loginTwitter).setOnClickListener(new View.OnClickListener() { @Override public void onClick(final View v) { loginDialog.dismiss(); GameUp.loginTwitter(context, listener); } }); view.findViewById(R.id.loginGameUp).setOnClickListener(new View.OnClickListener() { @Override public void onClick(final View v) { loginDialog.dismiss(); GameUp.loginGameUp(context, listener); } }); loginDialog.show(); } else { new AlertDialog.Builder(context).setMessage(session.toString()).show(); } } }); findViewById(R.id.clearButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { session = null; sharedPreferences.edit().remove("gameUpSession").commit(); ((Button) findViewById(R.id.sessionButton)).setText( R.string.sessionButtonLabelLogin); findViewById(R.id.pingSessionButton).setEnabled(false); findViewById(R.id.gamerGetButton).setEnabled(false); findViewById(R.id.pushPutButton).setEnabled(false); findViewById(R.id.storageGetButton).setEnabled(false); findViewById(R.id.storagePutButton).setEnabled(false); findViewById(R.id.storageDeleteButton).setEnabled(false); findViewById(R.id.achievementGetSessionButton).setEnabled(false); findViewById(R.id.achievementUpdateButton).setEnabled(false); findViewById(R.id.leaderboardGetSessionButton).setEnabled(false); findViewById(R.id.leaderboardUpdateButton).setEnabled(false); findViewById(R.id.matchGetButton).setEnabled(false); findViewById(R.id.matchPostButton).setEnabled(false); findViewById(R.id.matchIdGetButton).setEnabled(false); findViewById(R.id.matchIdLeaveButton).setEnabled(false); findViewById(R.id.matchIdEndButton).setEnabled(false); findViewById(R.id.matchIdTurnGetButton).setEnabled(false); findViewById(R.id.matchIdTurnIdGetButton).setEnabled(false); findViewById(R.id.matchIdTurnPostButton).setEnabled(false); findViewById(R.id.purchaseVerifyProductPostButton).setEnabled(false); findViewById(R.id.purchaseVerifySubscriptionPostButton).setEnabled(false); } }); findViewById(R.id.pingServiceButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { new PingTask(context).execute(); } }); findViewById(R.id.serverButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { new ServerTask(context).execute(); } }); findViewById(R.id.achievementGetServiceButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { new AchievementGetTask(context).execute(); } }); findViewById(R.id.leaderboardGetServiceButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { final View view = context.getLayoutInflater().inflate(R.layout.leaderboard_get_dialog, null); new AlertDialog.Builder(context) .setView(view) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(final DialogInterface dialog, final int which) { final String leaderboardId = ((EditText) view.findViewById(R.id.leaderboardId)).getText().toString(); dialog.dismiss(); new LeaderboardGetTask(context).execute(leaderboardId); } }) .setNegativeButton("Cancel", null) .show(); } }); findViewById(R.id.gameGetButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { new GameGetTask(context).execute(); } }); findViewById(R.id.pingSessionButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { new PingTask(context).execute(session); } }); findViewById(R.id.gamerGetButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { new GamerGetTask(context).execute(session); } }); findViewById(R.id.pushPutButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { new PushTask(context).execute(session); } }); findViewById(R.id.storagePutButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { new StoragePutTask(context).execute(session); } }); findViewById(R.id.storageGetButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { new StorageGetTask(context).execute(session); } }); findViewById(R.id.storageDeleteButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { new StorageDeleteTask(context).execute(session); } }); findViewById(R.id.achievementGetSessionButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { new AchievementGetTask(context).execute(session); } }); findViewById(R.id.achievementUpdateButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { final View view = context.getLayoutInflater().inflate(R.layout.achievement_update_dialog, null); new AlertDialog.Builder(context) .setView(view) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(final DialogInterface dialog, final int which) { final String achievementId = ((EditText) view.findViewById(R.id.achievementId)).getText().toString(); final String countInput = ((EditText) view.findViewById(R.id.achievementCount)).getText().toString(); final Integer count = countInput.isEmpty() ? null : Integer.valueOf(countInput); dialog.dismiss(); new AchievementUpdateTask(context).execute(new AchievementUpdate(session, achievementId, count)); } }) .setNegativeButton("Cancel", null) .show(); } }); findViewById(R.id.leaderboardGetSessionButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { final View view = context.getLayoutInflater().inflate(R.layout.leaderboard_get_dialog, null); new AlertDialog.Builder(context) .setView(view) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(final DialogInterface dialog, final int which) { final String leaderboardId = ((EditText) view.findViewById(R.id.leaderboardId)).getText().toString(); dialog.dismiss(); new LeaderboardAndRankGetTask(context).execute(new LeaderboardAndRankGet(session, leaderboardId)); } }) .setNegativeButton("Cancel", null) .show(); } }); findViewById(R.id.leaderboardUpdateButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { final View view = context.getLayoutInflater().inflate(R.layout.leaderboard_update_dialog, null); new AlertDialog.Builder(context) .setView(view) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(final DialogInterface dialog, final int which) { final String leaderboardId = ((EditText) view.findViewById(R.id.leaderboardId)).getText().toString(); final String scoreInput = ((EditText) view.findViewById(R.id.leaderboardScore)).getText().toString(); final long score = scoreInput.isEmpty() ? 0l : Long.valueOf(scoreInput); dialog.dismiss(); new LeaderboardUpdateTask(context).execute(new LeaderboardUpdate(session, leaderboardId, score)); } }) .setNegativeButton("Cancel", null) .show(); } }); findViewById(R.id.matchGetButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { new MatchGetTask(context).execute(session); } }); findViewById(R.id.matchPostButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { final View view = context.getLayoutInflater().inflate(R.layout.match_post_dialog, null); new AlertDialog.Builder(context) .setView(view) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(final DialogInterface dialog, final int which) { final String playersInput = ((EditText) view.findViewById(R.id.matchPlayers)).getText().toString(); final int players = playersInput.isEmpty() ? 0 : Integer.valueOf(playersInput); dialog.dismiss(); new MatchPostTask(context).execute(new MatchPost(session, players)); } }) .setNegativeButton("Cancel", null) .show(); } }); findViewById(R.id.matchIdGetButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { final View view = context.getLayoutInflater().inflate(R.layout.match_id_get_dialog, null); new AlertDialog.Builder(context) .setView(view) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(final DialogInterface dialog, final int which) { final String matchId = ((EditText) view.findViewById(R.id.matchId)).getText().toString(); dialog.dismiss(); new MatchIdGetTask(context).execute(new MatchIdGet(session, matchId)); } }) .setNegativeButton("Cancel", null) .show(); } }); findViewById(R.id.matchIdLeaveButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { final View view = context.getLayoutInflater().inflate(R.layout.match_id_post_dialog, null); new AlertDialog.Builder(context) .setView(view) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(final DialogInterface dialog, final int which) { final String matchId = ((EditText) view.findViewById(R.id.matchId)).getText().toString(); dialog.dismiss(); new MatchIdLeaveTask(context).execute(new MatchIdPost(session, matchId)); } }) .setNegativeButton("Cancel", null) .show(); } }); findViewById(R.id.matchIdEndButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { final View view = context.getLayoutInflater().inflate(R.layout.match_id_post_dialog, null); new AlertDialog.Builder(context) .setView(view) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(final DialogInterface dialog, final int which) { final String matchId = ((EditText) view.findViewById(R.id.matchId)).getText().toString(); dialog.dismiss(); new MatchIdEndTask(context).execute(new MatchIdPost(session, matchId)); } }) .setNegativeButton("Cancel", null) .show(); } }); findViewById(R.id.matchIdTurnGetButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { final View view = context.getLayoutInflater().inflate(R.layout.match_id_turn_get_dialog, null); new AlertDialog.Builder(context) .setView(view) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(final DialogInterface dialog, final int which) { final String matchId = ((EditText) view.findViewById(R.id.matchId)).getText().toString(); dialog.dismiss(); new MatchIdTurnGetTask(context).execute(new MatchIdTurnGet(session, matchId)); } }) .setNegativeButton("Cancel", null) .show(); } }); findViewById(R.id.matchIdTurnIdGetButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { final View view = context.getLayoutInflater().inflate(R.layout.match_id_turn_id_get_dialog, null); new AlertDialog.Builder(context) .setView(view) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(final DialogInterface dialog, final int which) { final String matchId = ((EditText) view.findViewById(R.id.matchId)).getText().toString(); final String turnInput = ((EditText) view.findViewById(R.id.matchTurnCount)).getText().toString(); final int turn = turnInput.isEmpty() ? 0 : Integer.valueOf(turnInput); dialog.dismiss(); new MatchIdTurnIdGetTask(context).execute(new MatchIdTurnIdGet(session, matchId, turn)); } }) .setNegativeButton("Cancel", null) .show(); } }); findViewById(R.id.matchIdTurnPostButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { final View view = context.getLayoutInflater().inflate(R.layout.match_id_turn_post_dialog, null); new AlertDialog.Builder(context) .setView(view) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(final DialogInterface dialog, final int which) { final String matchId = ((EditText) view.findViewById(R.id.matchId)).getText().toString(); final String turnInput = ((EditText) view.findViewById(R.id.matchTurnCount)).getText().toString(); final int turn = turnInput.isEmpty() ? 0 : Integer.valueOf(turnInput); final String nextGamer = ((EditText) view.findViewById(R.id.matchTurnNextGamer)).getText().toString(); final String data = ((EditText) view.findViewById(R.id.matchTurnData)).getText().toString(); dialog.dismiss(); new MatchIdTurnPostTask(context).execute(new MatchIdTurnPost(session, matchId, turn, nextGamer, data)); } }) .setNegativeButton("Cancel", null) .show(); } }); findViewById(R.id.purchaseVerifyProductPostButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { try { Bundle buyIntentBundle = iapService.getBuyIntent(3, getPackageName(), "io.gameup.android.test.product1", "inapp", "io.gameup.android.test.developer_payload.p"); PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT"); startIntentSenderForResult(pendingIntent.getIntentSender(), 1001, new Intent(), Integer.valueOf(0), Integer.valueOf(0), Integer.valueOf(0)); } catch (final Exception e) { Log.e("GU IAP", "e", e); e.printStackTrace(); } } }); findViewById(R.id.purchaseVerifySubscriptionPostButton).setOnClickListener( new View.OnClickListener() { @Override public void onClick(final View v) { try { Bundle buyIntentBundle = iapService.getBuyIntent(3, getPackageName(), "io.gameup.android.test.subscription1", "subs", "io.gameup.android.test.developer_payload.s"); PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT"); startIntentSenderForResult(pendingIntent.getIntentSender(), 1002, new Intent(), Integer.valueOf(0), Integer.valueOf(0), Integer.valueOf(0)); } catch (final Exception e) { Log.e("GU IAP", "e", e); e.printStackTrace(); } } }); } @Override public void onLoginComplete(final GameUpSession newSession) { session = newSession; final SharedPreferences sharedPreferences = getSharedPreferences("io.gameup.android.test", MODE_PRIVATE); sharedPreferences.edit() .putString("gameUpSession", newSession.toString()) .commit(); runOnUiThread(new Runnable() { @Override public void run() { ((Button) findViewById(R.id.sessionButton)).setText( R.string.sessionButtonLabelViewSession); findViewById(R.id.pingSessionButton).setEnabled(true); findViewById(R.id.gamerGetButton).setEnabled(true); findViewById(R.id.pushPutButton).setEnabled(true); findViewById(R.id.storageGetButton).setEnabled(true); findViewById(R.id.storagePutButton).setEnabled(true); findViewById(R.id.storageDeleteButton).setEnabled(true); findViewById(R.id.achievementGetSessionButton).setEnabled(true); findViewById(R.id.achievementUpdateButton).setEnabled(true); findViewById(R.id.leaderboardGetSessionButton).setEnabled(true); findViewById(R.id.leaderboardUpdateButton).setEnabled(true); findViewById(R.id.matchGetButton).setEnabled(true); findViewById(R.id.matchPostButton).setEnabled(true); findViewById(R.id.matchIdGetButton).setEnabled(true); findViewById(R.id.matchIdLeaveButton).setEnabled(true); findViewById(R.id.matchIdEndButton).setEnabled(true); findViewById(R.id.matchIdTurnGetButton).setEnabled(true); findViewById(R.id.matchIdTurnIdGetButton).setEnabled(true); findViewById(R.id.matchIdTurnPostButton).setEnabled(true); findViewById(R.id.purchaseVerifyProductPostButton).setEnabled(true); findViewById(R.id.purchaseVerifySubscriptionPostButton).setEnabled(true); } }); } @Override public void onLoginCancelled() { new AlertDialog.Builder(this).setMessage("Login cancelled.").show(); } @Override public void onLoginError(final GameUpException error) { new AlertDialog.Builder(this).setMessage("Login error!").show(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1001) { int responseCode = data.getIntExtra("RESPONSE_CODE", 0); String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA"); Log.e("GU IAP", purchaseData); if (resultCode == RESULT_OK) { try { JSONObject jo = new JSONObject(purchaseData); String productId = jo.getString("productId"); String token = jo.getString("purchaseToken"); new PurchaseVerifyProductTask(this).execute(new PurchaseVerifyProduct(session, token, productId)); } catch (JSONException e) { e.printStackTrace(); } } } else if (requestCode == 1002) { int responseCode = data.getIntExtra("RESPONSE_CODE", 0); String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA"); Log.e("GU IAP", purchaseData); if (resultCode == RESULT_OK) { try { JSONObject jo = new JSONObject(purchaseData); String subscriptionId = jo.getString("productId"); String token = jo.getString("purchaseToken"); new PurchaseVerifySubscriptionTask(this).execute(new PurchaseVerifySubscription(session, token, subscriptionId)); } catch (JSONException e) { e.printStackTrace(); } } } } @Override public void onDestroy() { super.onDestroy(); if (iapService != null) { unbindService(iapServiceConn); } } }