package com.dimuthuupeksha.viewer.android.ui; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.SherlockListActivity; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuItem; import com.dimuthuupeksha.viewer.android.applib.ROClient; import com.dimuthuupeksha.viewer.android.applib.exceptions.ConnectionException; import com.dimuthuupeksha.viewer.android.applib.exceptions.InvalidCredentialException; import com.dimuthuupeksha.viewer.android.applib.exceptions.UnknownErrorException; import com.dimuthuupeksha.viewer.android.applib.representation.Homepage; import com.dimuthuupeksha.viewer.android.applib.representation.Link; import com.dimuthuupeksha.viewer.android.uimodel.Model; /* Author - Dimuthu Upeksha*/ public class HomeActivity extends SherlockListActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.list); ActionBar actionBar = getSupportActionBar(); actionBar.setTitle(getResources().getString(R.string.home_page)); new HomeTask(HomeActivity.this).execute(); } protected void onListItemClick(ListView list, View view, int position, long id) { super.onListItemClick(list, view, position, id); Homepage homePage = Model.getInstance().getHomePage(); Object selected = this.getListAdapter().getItem(position); // System.out.println("a "+homePage.getLinks().get(position).getRel()); if (selected.toString().equals("services")) { Intent intent = new Intent(HomeActivity.this, ServicesActivity.class); intent.putExtra("link", homePage.getLinkByRel("services")); startActivity(intent); } } public boolean onCreateOptionsMenu(Menu menu) { com.actionbarsherlock.view.MenuInflater inflater = getSupportMenuInflater(); inflater.inflate(R.menu.basic_menu, (com.actionbarsherlock.view.Menu) menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { Intent intent; switch (item.getItemId()) { case R.id.home: intent = new Intent(this, HomeActivity.class); startActivity(intent); break; case R.id.services: intent = new Intent(this, ServicesActivity.class); intent.putExtra("link", Model.getInstance().getHomePage().getLinkByRel("services")); startActivity(intent); break; case R.id.back: } return true; } public void render() { List<Link> links = Model.getInstance().getHomePage().getLinks(); List<String> items = new ArrayList<String>(); for (Link link : links) { items.add(link.getRel().replace("urn:org.restfulobjects:rels/", "")); } String[] values = items.toArray(new String[items.size()]); setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values)); } private class HomeTask extends AsyncTask<Void, Void, Homepage> { private final ProgressDialog pd; private final HomeActivity activity; int error = 0; private static final int INVALID_CREDENTIAL = -1; private static final int CONNECTION_ERROR = -2; private static final int UNKNOWN_ERROR = -3; private HomeTask(HomeActivity activity) { pd = new ProgressDialog(activity); pd.setMessage("Loading HomePage"); this.activity = activity; } @Override protected void onPreExecute() { pd.show(); } @Override protected Homepage doInBackground(Void... voids) { Homepage homePage = Model.getInstance().getHomePage(); if (homePage == null) { try { homePage = ROClient.getInstance().homePage(); } catch (ConnectionException e) { error = CONNECTION_ERROR; e.printStackTrace(); } catch (InvalidCredentialException e) { error = INVALID_CREDENTIAL; e.printStackTrace(); } catch (UnknownErrorException e) { error = UNKNOWN_ERROR; e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } return homePage; } @Override protected void onPostExecute(Homepage homePage) { if (homePage != null) { Model.getInstance().setHomePage(homePage); activity.render(); } if (error == INVALID_CREDENTIAL) { /* Username and password not valid show the Login */ Intent intent = new Intent(HomeActivity.this, LogInActivity.class); HomeActivity.this.startActivity(intent); } if (error == CONNECTION_ERROR) { /** Show the error Dialog */ AlertDialog alertDialog = new AlertDialog.Builder(HomeActivity.this).create(); alertDialog.setTitle("Connection Error"); alertDialog.setMessage("Please check your settings."); // Setting OK Button alertDialog.setButton("Close", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); // Showing Alert Message alertDialog.show(); } if(error == UNKNOWN_ERROR){ Intent intent = new Intent(HomeActivity.this,InitialAvtivity.class); Toast.makeText(getApplicationContext(), "Unknown error - Tryusing another url", Toast.LENGTH_SHORT).show(); startActivity(intent); } pd.hide(); } } }