//------------------------------------------------------------------------------ // Copyright (c) 2012 Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ package com.microsoft.live.sample; import org.json.JSONException; import android.app.Activity; import android.app.ProgressDialog; import android.os.Bundle; import android.text.TextUtils; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import com.microsoft.live.LiveConnectClient; import com.microsoft.live.LiveOperation; import com.microsoft.live.LiveOperationException; import com.microsoft.live.LiveOperationListener; public class ExplorerActivity extends Activity { private class OperationListener implements LiveOperationListener { @Override public void onComplete(LiveOperation operation) { dismissProgressDialog(); try { mResponseBodyText.setText(operation.getResult().toString(2)); mResponseBodyText.requestFocus(); } catch (JSONException e) { makeToast(e.getMessage()); } } @Override public void onError(LiveOperationException exception, LiveOperation operation) { dismissProgressDialog(); makeToast(exception.getMessage()); } } private static final String[] HTTP_METHODS = { "GET", "DELETE", "PUT", "POST" }; private static final int GET = 0; private static final int DELETE = 1; private static final int PUT = 2; private static final int POST = 3; private LiveConnectClient mConnectClient; private EditText mResponseBodyText; private EditText mPathText; private EditText mRequestBodyText; private TextView mRequestBodyTextView; private ProgressDialog mProgressDialog; private OperationListener mOperationListener; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.explorer); LiveSdkSampleApplication app = (LiveSdkSampleApplication) getApplication(); mConnectClient = app.getConnectClient(); mOperationListener = new OperationListener(); mResponseBodyText = (EditText) findViewById(R.id.responseBodyText); mPathText = (EditText) findViewById(R.id.pathText); mRequestBodyText = (EditText) findViewById(R.id.requestBodyText); mRequestBodyTextView = (TextView) findViewById(R.id.requestBodyTextView); final Spinner httpMethodSpinner = (Spinner) findViewById(R.id.httpMethodSpinner); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, HTTP_METHODS); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); httpMethodSpinner.setAdapter(adapter); httpMethodSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { switch (position) { case GET: case DELETE: hideRequestBody(); break; case POST: case PUT: showRequestBody(); break; default: { makeToast("Unknown HTTP method selected: " + httpMethodSpinner.getSelectedItem().toString()); break; } } } @Override public void onNothingSelected(AdapterView<?> parent) { // Do nothing. } }); findViewById(R.id.submitButton).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String path = mPathText.getText().toString(); String bodyString = mRequestBodyText.getText().toString(); if (TextUtils.isEmpty(path)) { makeToast("Path must not be empty."); return; } int selectedPosition = httpMethodSpinner.getSelectedItemPosition(); boolean httpMethodRequiresBody = selectedPosition == POST || selectedPosition == PUT; if (httpMethodRequiresBody && TextUtils.isEmpty(bodyString)) { makeToast("Request body must not be empty."); return; } mProgressDialog = showProgressDialog("Loading. Please wait..."); switch (selectedPosition) { case GET: { mConnectClient.getAsync(path, mOperationListener); break; } case DELETE: { mConnectClient.deleteAsync(path, mOperationListener); break; } case POST: { mConnectClient.postAsync(path, bodyString, mOperationListener); break; } case PUT: { mConnectClient.putAsync(path, bodyString, mOperationListener); break; } default: { makeToast("Unknown HTTP method selected: " + httpMethodSpinner.getSelectedItem().toString()); break; } } } }); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // Since this activity is part of a TabView we want to send // the back button to the TabView activity. if (keyCode == KeyEvent.KEYCODE_BACK) { return false; } else { return super.onKeyDown(keyCode, event); } } private void showRequestBody() { mRequestBodyText.setVisibility(View.VISIBLE); mRequestBodyTextView.setVisibility(View.VISIBLE); } private void hideRequestBody() { mRequestBodyText.setVisibility(View.GONE); mRequestBodyTextView.setVisibility(View.GONE); } private void dismissProgressDialog() { if (mProgressDialog != null && mProgressDialog.isShowing()) { mProgressDialog.dismiss(); } } private void makeToast(String message) { Toast.makeText(this, message, Toast.LENGTH_LONG).show(); } private ProgressDialog showProgressDialog(String message) { return ProgressDialog.show(this, "", message); } }