Skip to content

Commit

Permalink
MainActivity with tabs
Browse files Browse the repository at this point in the history
  • Loading branch information
nnixaa committed Jan 9, 2012
1 parent e4c05bc commit 49aad93
Show file tree
Hide file tree
Showing 7 changed files with 203 additions and 133 deletions.
9 changes: 5 additions & 4 deletions AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,15 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application android:label="@string/app_name" android:theme="@android:style/Theme.Light" >
<activity android:name="MainActivity"
android:label="@string/app_name">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".InboxActivity"/>
<activity android:name=".SettingsActivity"/>
<activity android:name=".MessageActivity"/>
<activity android:name=".OutboxActivity"/>
</application>
</manifest>
14 changes: 8 additions & 6 deletions gen/com/example/gmail/R.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,17 @@ public static final class string {
/** Global
*/
public static final int app_name=0x7f030000;
public static final int main_list_view_load_more=0x7f030004;
public static final int app_tab_one=0x7f030001;
public static final int app_tab_two=0x7f030002;
public static final int main_list_view_load_more=0x7f030006;
/** Activities
*/
public static final int main_need_credentials=0x7f030003;
public static final int main_need_credentials=0x7f030005;
/** Menu
*/
public static final int menu_settings_item=0x7f030001;
public static final int menu_update_item=0x7f030002;
public static final int settings_save_button=0x7f030006;
public static final int settings_title=0x7f030005;
public static final int menu_settings_item=0x7f030003;
public static final int menu_update_item=0x7f030004;
public static final int settings_save_button=0x7f030008;
public static final int settings_title=0x7f030007;
}
}
2 changes: 2 additions & 0 deletions res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
<resources>
<!-- Global -->
<string name="app_name">gmail</string>
<string name="app_tab_one">Inbox</string>
<string name="app_tab_two">Sent</string>

<!-- Menu -->
<string name="menu_settings_item">Settings</string>
Expand Down
149 changes: 149 additions & 0 deletions src/com/example/gmail/InboxActivity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
package com.example.gmail;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.*;
import com.example.gmail.proxies.GmailDataProxy;
import custom.gmail.Connector;
import custom.gmail.Reader;

public class InboxActivity extends Activity {

GmailDataProxy gmailData;
ListView messagesListView;
SimpleCursorAdapter adapter;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.main);

SharedPreferences settings = InboxActivity.this.getSharedPreferences(SettingsActivity.PREF_NAME, 0);
String email = settings.getString(SettingsActivity.PREF_EMAIL_KEY, "");
String password = settings.getString(SettingsActivity.PREF_PASS_KEY, "");

if (email.length() == 0 || password.length() == 0) {
Toast.makeText(InboxActivity.this, getString(R.string.main_need_credentials), Toast.LENGTH_SHORT).show();

Intent intent = new Intent(InboxActivity.this, SettingsActivity.class);
startActivity(intent);
finish();
return;
}

// creates listview and sets adapter from gmail proxy
messagesListView = (ListView) findViewById(R.id.messages_list);
View v = getLayoutInflater().inflate(R.layout.list_view_footer, null);
messagesListView.addFooterView(v);

adapter = new SimpleCursorAdapter(InboxActivity.this,
android.R.layout.simple_list_item_1, null,
new String[] { GmailDataProxy.DatabaseHelper.FIELD_SUBJECT },
new int[] { android.R.id.text1 });
messagesListView.setAdapter(adapter);

// creates imap gmail connector
final Connector connector = new Connector(email, password);
// creates gmail adapter proxy and move cursor to the first page
gmailData = new GmailDataProxy(connector, InboxActivity.this, Reader.MESSAGE_TYPE_INBOX);

findViewById(R.id.list_view_load_more).setVisibility(View.GONE);
findViewById(R.id.list_view_progress).setVisibility(View.VISIBLE);
new GmailLoader().execute("first_page");

final Button button = (Button) findViewById(R.id.list_view_load_more);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
findViewById(R.id.list_view_load_more).setVisibility(View.GONE);
findViewById(R.id.list_view_progress).setVisibility(View.VISIBLE);
new GmailLoader().execute("next_page");
}
});

// on item click
messagesListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView parent, View v, int position, long id) {

Cursor cursor = adapter.getCursor();
cursor.moveToPosition(position);

Bundle bundle = new Bundle();
bundle.putInt("id", cursor.getInt(cursor.getColumnIndex(GmailDataProxy.DatabaseHelper.FIELD_ID)));
bundle.putString("subject", cursor.getString(cursor.getColumnIndex(GmailDataProxy.DatabaseHelper.FIELD_SUBJECT)));
bundle.putString("from", cursor.getString(cursor.getColumnIndex(GmailDataProxy.DatabaseHelper.FIELD_FROM)));
bundle.putString("to", cursor.getString(cursor.getColumnIndex(GmailDataProxy.DatabaseHelper.FIELD_TO)));
bundle.putString("date", cursor.getString(cursor.getColumnIndex(GmailDataProxy.DatabaseHelper.FIELD_DATE)));
bundle.putString("message", cursor.getString(cursor.getColumnIndex(GmailDataProxy.DatabaseHelper.FIELD_MESSAGE)));

Toast.makeText(InboxActivity.this,cursor.getString(cursor.getColumnIndex(GmailDataProxy.DatabaseHelper.FIELD_FROM)) , Toast.LENGTH_SHORT).show();

Intent intent = new Intent(InboxActivity.this, MessageActivity.class);
intent.putExtras(bundle);
startActivity(intent);
}
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

// Handle item selection
switch (item.getItemId()) {
case R.id.menu_settings:
Intent intent = new Intent(InboxActivity.this, SettingsActivity.class);
startActivity(intent);
return true;
case R.id.menu_update:
new GmailLoader().execute("update");
return true;
default:
return super.onOptionsItemSelected(item);
}
}

private class GmailLoader extends AsyncTask<Object, Void, Cursor> {

@Override
protected Cursor doInBackground(Object... params) {
String type = (String) params[0];
Cursor cursor;

if (type.equals("update")) {
cursor = gmailData.update();
} else if(type.equals("next_page")) {
cursor = gmailData.nextPage();
} else {
cursor = gmailData.firstPage();
}

return cursor;
}

@Override
protected void onPostExecute(Cursor cursor) {
if (cursor != null) {
adapter.changeCursor(cursor);
adapter.notifyDataSetInvalidated();
findViewById(R.id.list_view_load_more).setVisibility(View.VISIBLE);
findViewById(R.id.list_view_progress).setVisibility(View.GONE);
}
}
}
}
146 changes: 24 additions & 122 deletions src/com/example/gmail/MainActivity.java
Original file line number Diff line number Diff line change
@@ -1,37 +1,24 @@
package com.example.gmail;

import android.app.Activity;
import android.app.TabActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.AsyncTask;
import android.content.res.Resources;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.*;
import com.example.gmail.proxies.GmailDataProxy;
import custom.gmail.Connector;
import custom.gmail.Reader;
import android.widget.TabHost;
import android.widget.Toast;

public class MainActivity extends Activity {
/**
*/
public class MainActivity extends TabActivity {

GmailDataProxy gmailData;
ListView messagesListView;
SimpleCursorAdapter adapter;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.main);

SharedPreferences settings = MainActivity.this.getSharedPreferences(SettingsActivity.PREF_NAME, 0);
String email = settings.getString(SettingsActivity.PREF_EMAIL_KEY, "");
String password = settings.getString(SettingsActivity.PREF_PASS_KEY, "");

if (email.length() == 0 || password.length() == 0) {
Toast.makeText(MainActivity.this, getString(R.string.main_need_credentials), Toast.LENGTH_SHORT).show();

Expand All @@ -41,109 +28,24 @@ public void onCreate(Bundle savedInstanceState) {
return;
}

// creates listview and sets adapter from gmail proxy
messagesListView = (ListView) findViewById(R.id.messages_list);
View v = getLayoutInflater().inflate(R.layout.list_view_footer, null);
messagesListView.addFooterView(v);

adapter = new SimpleCursorAdapter(MainActivity.this,
android.R.layout.simple_list_item_1, null,
new String[] { GmailDataProxy.DatabaseHelper.FIELD_SUBJECT },
new int[] { android.R.id.text1 });
messagesListView.setAdapter(adapter);

// creates imap gmail connector
final Connector connector = new Connector(email, password);
// creates gmail adapter proxy and move cursor to the first page
gmailData = new GmailDataProxy(connector, MainActivity.this, Reader.MESSAGE_TYPE_INBOX);

findViewById(R.id.list_view_load_more).setVisibility(View.GONE);
findViewById(R.id.list_view_progress).setVisibility(View.VISIBLE);
new GmailLoader().execute("first_page");

final Button button = (Button) findViewById(R.id.list_view_load_more);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
findViewById(R.id.list_view_load_more).setVisibility(View.GONE);
findViewById(R.id.list_view_progress).setVisibility(View.VISIBLE);
new GmailLoader().execute("next_page");
}
});

// on item click
messagesListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView parent, View v, int position, long id) {

Cursor cursor = adapter.getCursor();
cursor.moveToPosition(position);

Bundle bundle = new Bundle();
bundle.putInt("id", cursor.getInt(cursor.getColumnIndex(GmailDataProxy.DatabaseHelper.FIELD_ID)));
bundle.putString("subject", cursor.getString(cursor.getColumnIndex(GmailDataProxy.DatabaseHelper.FIELD_SUBJECT)));
bundle.putString("from", cursor.getString(cursor.getColumnIndex(GmailDataProxy.DatabaseHelper.FIELD_FROM)));
bundle.putString("to", cursor.getString(cursor.getColumnIndex(GmailDataProxy.DatabaseHelper.FIELD_TO)));
bundle.putString("date", cursor.getString(cursor.getColumnIndex(GmailDataProxy.DatabaseHelper.FIELD_DATE)));
bundle.putString("message", cursor.getString(cursor.getColumnIndex(GmailDataProxy.DatabaseHelper.FIELD_MESSAGE)));

Toast.makeText(MainActivity.this,cursor.getString(cursor.getColumnIndex(GmailDataProxy.DatabaseHelper.FIELD_FROM)) , Toast.LENGTH_SHORT).show();

Intent intent = new Intent(MainActivity.this, MessageActivity.class);
intent.putExtras(bundle);
startActivity(intent);
}
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

// Handle item selection
switch (item.getItemId()) {
case R.id.menu_settings:
Intent intent = new Intent(MainActivity.this, SettingsActivity.class);
startActivity(intent);
return true;
case R.id.menu_update:
new GmailLoader().execute("update");
return true;
default:
return super.onOptionsItemSelected(item);
}
}

private class GmailLoader extends AsyncTask<Object, Void, Cursor> {
Resources resources = getResources();
TabHost tabHost = getTabHost();

@Override
protected Cursor doInBackground(Object... params) {
String type = (String) params[0];
Cursor cursor;
TabHost.TabSpec tabSpec;
Intent intent;

if (type.equals("update")) {
cursor = gmailData.update();
} else if(type.equals("next_page")) {
cursor = gmailData.nextPage();
} else {
cursor = gmailData.firstPage();
}
// Timeline acivity, default
intent = new Intent().setClass(this, InboxActivity.class);
tabSpec = tabHost.newTabSpec("plans").setIndicator(getString(R.string.app_tab_one))
.setContent(intent);
tabHost.addTab(tabSpec);

return cursor;
}
// Public activity
intent = new Intent().setClass(this, OutboxActivity.class);
tabSpec = tabHost.newTabSpec("explore").setIndicator(getString(R.string.app_tab_two))
.setContent(intent);
tabHost.addTab(tabSpec);

@Override
protected void onPostExecute(Cursor cursor) {
if (cursor != null) {
adapter.changeCursor(cursor);
adapter.notifyDataSetInvalidated();
findViewById(R.id.list_view_load_more).setVisibility(View.VISIBLE);
findViewById(R.id.list_view_progress).setVisibility(View.GONE);
}
}
tabHost.setCurrentTab(0);
}
}
}
14 changes: 14 additions & 0 deletions src/com/example/gmail/OutboxActivity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.example.gmail;

import android.app.Activity;
import android.os.Bundle;

/**
*/
public class OutboxActivity extends Activity {

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

}
}
Loading

0 comments on commit 49aad93

Please sign in to comment.