package org.urbanstew.SoundCloudBase;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.apache.http.HttpResponse;
import org.urbanstew.SoundCloudBase.ObtainAccessToken;
import org.urbanstew.SoundCloudBase.SoundCloudRequestClient;
import org.urbanstew.soundcloudapi.SoundCloudAPI;
import org.urbanstew.util.AppDataAccess;
import org.w3c.dom.Document;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.TextView;
/**
* SoundCloudDroid is the main SoundCloud Droid activity.
* <p>
* It shows
* whether SoundCloud Droid has been authorized to access a user
* account, can initiate the authorization process, and can upload
* a file to SoundCloud.
*
* @author Stjepan Rajko
*/
public class SoundCloudMainActivity extends SoundCloudBaseActivity implements SoundCloudRequestClient
{
public static float CURRENT_VERSION = 1.0f;
/**
* The method called when the Activity is created.
* <p>
* Initializes the user interface.
*/
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mAuthorized = (TextView) findViewById(R.id.authorization_status);
((ImageButton) findViewById(R.id.authorize_button))
.setOnClickListener(new OnClickListener()
{
public void onClick(View arg0)
{
authorize();
}
});
final AppDataAccess appData = new AppDataAccess(this);
if(appData.getVisitedVersion() == 0)
{
new AlertDialog.Builder(this)
.setTitle("License")
.setMessage(getString(R.string.license))
.setPositiveButton
(
getString(android.R.string.ok),
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
appData.setVisitedVersion(CURRENT_VERSION);
}
}
).show();
}
}
/**
* The method called when the Activity is resumed.
* <p>
* Updates the UI to reflect whether SoundCloud Droid has been
* authorized to access a user account.
*/
public void onResume()
{
super.onResume();
updateAuthorizationStatus();
}
public void onDestroy()
{
super.onDestroy();
getSCApplicationBase().cancel(this);
}
/**
* Sets up menu options. Currently all have to do with defect / bug reports and discussion group.
*/
public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu);
mView = menu.add("View reported defects and feature requests").setIcon(android.R.drawable.ic_dialog_info);
mReport = menu.add("Report defect or feature request").setIcon(android.R.drawable.ic_dialog_alert);
mJoinGroup = menu.add("Join discussion group").setIcon(android.R.drawable.ic_dialog_email);
//mSettingsMenuItem = menu.add("Preferences").setIcon(android.R.drawable.ic_menu_preferences);
mManualMenuItem = menu.add("Read the manual").setIcon(android.R.drawable.ic_menu_manage);
return true;
}
/**
* Processes menu options.
*/
public boolean onOptionsItemSelected(MenuItem item)
{
if(item == mView)
startActivity(new Intent(Intent.ACTION_VIEW).setData(Uri.parse(getString(R.string.SCB_issues_url))));
else if(item == mReport)
startActivity(new Intent(Intent.ACTION_VIEW).setData(Uri.parse(getString(R.string.SCB_new_issue_url))));
else if(item == mJoinGroup)
startActivity(new Intent(Intent.ACTION_VIEW).setData(Uri.parse(getString(R.string.SCB_join_mailing_list_url))));
// else if(item == mSettingsMenuItem)
// startActivity(new Intent(getApplication(), SettingsActivity.class));
else if(item == mManualMenuItem)
startActivity(new Intent(Intent.ACTION_VIEW).setData(Uri.parse(getString(R.string.SCB_manual_url))));
else
return false;
return true;
}
public void updateAuthorizationStatus()
{
int text;
if(getSoundCloudAPI().getState() == SoundCloudAPI.State.AUTHORIZED)
{
if(mUserName != null)
{
setUserName(mUserName);
return;
}
getSCApplicationBase().processRequest("me", this);
text = R.string.verifying_connection;
}
else
{
text = R.string.please_connect;
}
mAuthorized.setText(text);
}
public void authorize()
{
Intent authorizeIntent = new Intent(this, ObtainAccessToken.class);
startActivity(authorizeIntent);
}
public void setUserName(String userName)
{
mUserName = userName;
String text;
if(userName != null)
text = getString(R.string.connected_as) + " " + userName + ".";
else
text = getString(R.string.unable_to_verify_connection);
mAuthorized.setText(text);
}
public void requestCompleted(HttpResponse response)
{
String userName = null;
if(response.getStatusLine().getStatusCode() == 200)
try {
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document dom = db.parse(response.getEntity().getContent());
userName = dom.getElementsByTagName("username").item(0).getFirstChild().getNodeValue();
}catch(Exception e) {
e.printStackTrace();
}
final String finalUserName = userName;
runOnUiThread(new Runnable()
{
public void run()
{
setUserName(finalUserName);
}
});
}
public void requestFailed(Exception e)
{
runOnUiThread(new Runnable()
{
public void run()
{
mAuthorized.setText(R.string.unable_to_verify_connection);
}
});
}
// indicating whether SoundCloud Droid has been authorized
// to access a user account
TextView mAuthorized;
MenuItem mView, mReport, mJoinGroup, mSettingsMenuItem, mManualMenuItem;
static String mUserName = null;
}
|