From 656c53cf00c8abff4905871af221ff60aca9744b Mon Sep 17 00:00:00 2001
From: akwizgran <michael@briarproject.org>
Date: Wed, 27 Feb 2013 22:35:27 +0000
Subject: [PATCH] Converted the home screen into a grid view.

---
 briar-android/res/values/strings.xml          |   4 +-
 .../sf/briar/android/HomeScreenActivity.java  | 124 +++++++++++++-----
 .../android/contact/ContactListActivity.java  |   1 +
 .../android/contact/ContactListAdapter.java   |   7 +-
 4 files changed, 96 insertions(+), 40 deletions(-)

diff --git a/briar-android/res/values/strings.xml b/briar-android/res/values/strings.xml
index 468defb0a0..89c4337ab2 100644
--- a/briar-android/res/values/strings.xml
+++ b/briar-android/res/values/strings.xml
@@ -1,9 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
 	<string name="app_name">Briar</string>
-	<string name="notification_title">Syncing messages</string>
+	<string name="notification_title">Briar is running</string>
 	<string name="notification_text">Touch to quit.</string>
 	<string name="contact_list_button">Contacts</string>
+	<string name="messages_button">Messages</string>
+	<string name="settings_button">Settings</string>
 	<string name="quit_button">Quit</string>
 	<string name="contact_list_title">Contacts</string>
 	<string name="contact_connected">Connected</string>
diff --git a/briar-android/src/net/sf/briar/android/HomeScreenActivity.java b/briar-android/src/net/sf/briar/android/HomeScreenActivity.java
index ee63c84bb5..8ecd9168bb 100644
--- a/briar-android/src/net/sf/briar/android/HomeScreenActivity.java
+++ b/briar-android/src/net/sf/briar/android/HomeScreenActivity.java
@@ -2,11 +2,10 @@ package net.sf.briar.android;
 
 import static android.view.Gravity.CENTER;
 import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
-import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
-import static android.widget.LinearLayout.HORIZONTAL;
-import static android.widget.LinearLayout.VERTICAL;
 import static java.util.logging.Level.INFO;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.logging.Logger;
 
 import net.sf.briar.R;
@@ -18,62 +17,121 @@ import android.os.Bundle;
 import android.os.IBinder;
 import android.view.View;
 import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
 import android.widget.Button;
+import android.widget.GridView;
 import android.widget.LinearLayout;
-import android.widget.LinearLayout.LayoutParams;
+import android.widget.ListView;
 import android.widget.ProgressBar;
 
-public class HomeScreenActivity extends BriarActivity
-implements OnClickListener {
+public class HomeScreenActivity extends BriarActivity {
 
 	private static final Logger LOG =
 			Logger.getLogger(HomeScreenActivity.class.getName());
 
 	private final BriarServiceConnection serviceConnection =
 			new BriarServiceConnection();
+	private final List<Button> buttons = new ArrayList<Button>();
 
-	Button contactListButton = null, quitButton = null;
+	public HomeScreenActivity() {
+		super();
+	}
 
 	@Override
 	public void onCreate(Bundle state) {
 		super.onCreate(null);
 		if(LOG.isLoggable(INFO)) LOG.info("Created");
-		LinearLayout layout = new LinearLayout(this);
-		layout.setLayoutParams(new LayoutParams(MATCH_PARENT, MATCH_PARENT));
-		layout.setOrientation(VERTICAL);
-		layout.setGravity(CENTER);
 
 		// If this activity was launched from the notification bar, quit
 		if(getIntent().getBooleanExtra("net.sf.briar.QUIT", false)) {
+			LinearLayout layout = new LinearLayout(this);
+			layout.setLayoutParams(new LinearLayout.LayoutParams(MATCH_PARENT,
+					MATCH_PARENT));
+			layout.setGravity(CENTER);
 			ProgressBar spinner = new ProgressBar(this);
 			spinner.setIndeterminate(true);
 			layout.addView(spinner);
+			setContentView(layout);
 			quit();
 		} else {
-			LinearLayout innerLayout = new LinearLayout(this);
-			innerLayout.setOrientation(HORIZONTAL);
-			innerLayout.setGravity(CENTER);
+			ListView.LayoutParams matchParent = new ListView.LayoutParams(
+					MATCH_PARENT, MATCH_PARENT);
 
-			contactListButton = new Button(this);
-			LayoutParams lp = new LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
-			contactListButton.setLayoutParams(lp);
+			Button contactListButton = new Button(this);
+			contactListButton.setLayoutParams(matchParent);
+			contactListButton.setCompoundDrawablesWithIntrinsicBounds(0,
+					R.drawable.social_person, 0, 0);
 			contactListButton.setText(R.string.contact_list_button);
-			contactListButton.setCompoundDrawablesWithIntrinsicBounds(
-					R.drawable.social_person, 0, 0, 0);
-			contactListButton.setOnClickListener(this);
-			innerLayout.addView(contactListButton);
+			contactListButton.setOnClickListener(new OnClickListener() {
+				public void onClick(View view) {
+					startActivity(new Intent(HomeScreenActivity.this,
+							ContactListActivity.class));
+				}
+			});
+			buttons.add(contactListButton);
+
+			Button messagesButton = new Button(this);
+			messagesButton.setLayoutParams(matchParent);
+			messagesButton.setCompoundDrawablesWithIntrinsicBounds(0,
+					R.drawable.content_email, 0, 0);
+			messagesButton.setText(R.string.messages_button);
+			messagesButton.setOnClickListener(new OnClickListener() {
+				public void onClick(View view) {
+					// FIXME: Hook this button up to an activity
+				}
+			});
+			buttons.add(messagesButton);
+
+			Button settingsButton = new Button(this);
+			settingsButton.setLayoutParams(matchParent);
+			settingsButton.setCompoundDrawablesWithIntrinsicBounds(0,
+					R.drawable.action_settings, 0, 0);
+			settingsButton.setText(R.string.settings_button);
+			settingsButton.setOnClickListener(new OnClickListener() {
+				public void onClick(View view) {
+					// FIXME: Hook this button up to an activity
+				}
+			});
+			buttons.add(settingsButton);
 
-			quitButton = new Button(this);
-			quitButton.setLayoutParams(lp);
+			Button quitButton = new Button(this);
+			quitButton.setLayoutParams(matchParent);
+			quitButton.setCompoundDrawablesWithIntrinsicBounds(0,
+					R.drawable.navigation_cancel, 0, 0);
 			quitButton.setText(R.string.quit_button);
-			quitButton.setCompoundDrawablesWithIntrinsicBounds(
-					R.drawable.navigation_cancel, 0, 0, 0);
-			quitButton.setOnClickListener(this);
-			innerLayout.addView(quitButton);
-			layout.addView(innerLayout);
-		}
+			quitButton.setOnClickListener(new OnClickListener() {
+				public void onClick(View view) {
+					quit();
+				}
+			});
+			buttons.add(quitButton);
+
+			GridView grid = new GridView(this);
+			grid.setLayoutParams(matchParent);
+			grid.setGravity(CENTER);
+			grid.setNumColumns(2);
+			grid.setAdapter(new BaseAdapter() {
 
-		setContentView(layout);
+				public int getCount() {
+					return buttons.size();
+				}
+
+				public Object getItem(int position) {
+					return buttons.get(position);
+				}
+
+				public long getItemId(int position) {
+					return 0;
+				}
+
+				public View getView(int position, View convertView,
+						ViewGroup parent) {
+					return buttons.get(position);
+				}
+			});
+			setContentView(grid);
+		}
 
 		// Start the service and bind to it
 		startService(new Intent(BriarService.class.getName()));
@@ -87,12 +145,6 @@ implements OnClickListener {
 		unbindService(serviceConnection);
 	}
 
-	public void onClick(View view) {
-		if(view == contactListButton)
-			startActivity(new Intent(this, ContactListActivity.class));
-		else if(view == quitButton) quit();
-	}
-
 	private void quit() {
 		new Thread() {
 			@Override
diff --git a/briar-android/src/net/sf/briar/android/contact/ContactListActivity.java b/briar-android/src/net/sf/briar/android/contact/ContactListActivity.java
index ec57d89e0d..b12ba8db66 100644
--- a/briar-android/src/net/sf/briar/android/contact/ContactListActivity.java
+++ b/briar-android/src/net/sf/briar/android/contact/ContactListActivity.java
@@ -67,6 +67,7 @@ implements OnClickListener, DatabaseListener, ConnectionListener {
 
 		adapter = new ContactListAdapter(this);
 		ListView listView = new ListView(this);
+		// Give me all the width and all the unused height
 		listView.setLayoutParams(new LayoutParams(MATCH_PARENT, WRAP_CONTENT,
 				1f));
 		listView.setAdapter(adapter);
diff --git a/briar-android/src/net/sf/briar/android/contact/ContactListAdapter.java b/briar-android/src/net/sf/briar/android/contact/ContactListAdapter.java
index c9720ad771..69dcecfd8e 100644
--- a/briar-android/src/net/sf/briar/android/contact/ContactListAdapter.java
+++ b/briar-android/src/net/sf/briar/android/contact/ContactListAdapter.java
@@ -18,9 +18,9 @@ import android.widget.LinearLayout;
 import android.widget.LinearLayout.LayoutParams;
 import android.widget.TextView;
 
-public class ContactListAdapter extends ArrayAdapter<ContactListItem> {
+class ContactListAdapter extends ArrayAdapter<ContactListItem> {
 
-	public ContactListAdapter(Context context) {
+	ContactListAdapter(Context context) {
 		super(context, android.R.layout.simple_expandable_list_item_1,
 				new ArrayList<ContactListItem>());
 	}
@@ -36,10 +36,11 @@ public class ContactListAdapter extends ArrayAdapter<ContactListItem> {
 		ImageView bulb = new ImageView(ctx);
 		if(item.getConnected()) bulb.setImageResource(R.drawable.green_bulb);
 		else bulb.setImageResource(R.drawable.grey_bulb);
-		bulb.setPadding(5, 0, 5, 0);
+		bulb.setPadding(5, 5, 5, 5);
 		layout.addView(bulb);
 
 		TextView name = new TextView(ctx);
+		// Give me all the unused width
 		name.setLayoutParams(new LayoutParams(WRAP_CONTENT, WRAP_CONTENT, 1f));
 		name.setTextSize(18);
 		name.setText(item.getName());
-- 
GitLab