From f1ea9dde5130325a3bb8dd8693f8c49817551b24 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Wed, 22 Jun 2011 21:04:51 +0000
Subject: [PATCH] - SusiDNS in 20 lines of code - Show the toast - First web
 page can be i2p

---
 AndroidManifest.xml                           |  4 ++
 res/layout/addressbook_header.xml             |  8 +++
 res/layout/addressbook_list_item.xml          |  7 +++
 res/layout/main.xml                           | 12 ++++
 .../router/activity/AddressbookActivity.java  | 58 +++++++++++++++++++
 .../router/activity/I2PWebViewClient.java     |  3 +
 .../android/router/activity/MainActivity.java |  8 +++
 .../android/router/activity/WebActivity.java  |  6 +-
 8 files changed, 104 insertions(+), 2 deletions(-)
 create mode 100644 res/layout/addressbook_header.xml
 create mode 100644 res/layout/addressbook_list_item.xml
 create mode 100644 src/net/i2p/android/router/activity/AddressbookActivity.java

diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index a2f172f86..6481eee1c 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -46,5 +46,9 @@
                   android.theme="@android:style/Theme.NoTitleBar"
                   android:launchMode="singleTop" >
         </activity>
+        <activity android:name=".activity.AddressbookActivity"
+                  android:label="Address Book"
+                  android.theme="@android:style/Theme.NoTitleBar" >
+        </activity>
     </application>
 </manifest> 
diff --git a/res/layout/addressbook_header.xml b/res/layout/addressbook_header.xml
new file mode 100644
index 000000000..b78764602
--- /dev/null
+++ b/res/layout/addressbook_header.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content" 
+    android:padding="8dp"
+    android:textSize="18sp"
+    android:text="Address Book" >
+</TextView>
diff --git a/res/layout/addressbook_list_item.xml b/res/layout/addressbook_list_item.xml
new file mode 100644
index 000000000..7e058a0f9
--- /dev/null
+++ b/res/layout/addressbook_list_item.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:padding="6dp"
+    android:textSize="16sp" >
+</TextView>
diff --git a/res/layout/main.xml b/res/layout/main.xml
index 63013875b..fd46fb27d 100644
--- a/res/layout/main.xml
+++ b/res/layout/main.xml
@@ -58,6 +58,18 @@
     android:text="Licenses"
     />
 </LinearLayout>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="horizontal"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content" 
+    >
+ <Button 
+    android:id="@+id/addressbook_button"
+    android:layout_width="wrap_content" 
+    android:layout_height="wrap_content" 
+    android:text="Address Book"
+    />
+</LinearLayout>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="horizontal"
     android:layout_width="fill_parent"
diff --git a/src/net/i2p/android/router/activity/AddressbookActivity.java b/src/net/i2p/android/router/activity/AddressbookActivity.java
new file mode 100644
index 000000000..6eee259bd
--- /dev/null
+++ b/src/net/i2p/android/router/activity/AddressbookActivity.java
@@ -0,0 +1,58 @@
+package net.i2p.android.router.activity;
+
+import android.app.ListActivity;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+import android.widget.TextView;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+import net.i2p.android.router.R;
+import net.i2p.I2PAppContext;
+import net.i2p.client.naming.NamingService;
+
+public class AddressbookActivity extends ListActivity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        // Fixme problems if started before router -
+        // wrong dir, dup contexts, locking, ...
+        I2PAppContext ctx = I2PAppContext.getGlobalContext();
+
+        // get the names
+        NamingService ns = ctx.namingService();
+        Set<String> names = ns.getNames();
+
+        // set the header
+        TextView tv = (TextView) getLayoutInflater().inflate(R.layout.addressbook_header, null);
+        tv.setText(names.size() + " hosts in address book. Start typing to filter");
+        ListView lv = getListView();
+        lv.addHeaderView(tv);
+        lv.setTextFilterEnabled(true);
+
+        // set the list
+        List<String> nameList = new ArrayList(names);
+        Collections.sort(nameList);
+        setListAdapter(new ArrayAdapter<String>(this, R.layout.addressbook_list_item, nameList));
+
+        // set the callback
+        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+            public void onItemClick(AdapterView parent, View view, int pos, long id) {
+                CharSequence host = ((TextView) view).getText();
+                Intent intent = new Intent(view.getContext(), WebActivity.class);
+                intent.setData(Uri.parse("http://" + host + '/'));
+                startActivity(intent);
+            }
+        });
+    }
+}
diff --git a/src/net/i2p/android/router/activity/I2PWebViewClient.java b/src/net/i2p/android/router/activity/I2PWebViewClient.java
index c0ce67936..dacfacc3c 100644
--- a/src/net/i2p/android/router/activity/I2PWebViewClient.java
+++ b/src/net/i2p/android/router/activity/I2PWebViewClient.java
@@ -32,6 +32,7 @@ class I2PWebViewClient extends WebViewClient {
             String s = uri.getScheme();
             if (s == null) {
                 Toast toast = Toast.makeText(view.getContext(), "Bad URL " + url, Toast.LENGTH_SHORT);
+                toast.show();
                 return true;
             }
             s = s.toLowerCase();
@@ -40,6 +41,7 @@ class I2PWebViewClient extends WebViewClient {
             String h = uri.getHost();
             if (h == null) {
                 Toast toast = Toast.makeText(view.getContext(), "Bad URL " + url, Toast.LENGTH_SHORT);
+                toast.show();
                 return true;
             }
 
@@ -47,6 +49,7 @@ class I2PWebViewClient extends WebViewClient {
             if (h.endsWith(".i2p")) {
                 if (!s.equals("http")) {
                     Toast toast = Toast.makeText(view.getContext(), "Bad URL " + url, Toast.LENGTH_SHORT);
+                    toast.show();
                     return true;
                 }
                 // strip trailing junk
diff --git a/src/net/i2p/android/router/activity/MainActivity.java b/src/net/i2p/android/router/activity/MainActivity.java
index 25cb6fd9c..922d9668c 100644
--- a/src/net/i2p/android/router/activity/MainActivity.java
+++ b/src/net/i2p/android/router/activity/MainActivity.java
@@ -92,6 +92,14 @@ public class MainActivity extends I2PActivityBase {
             }
         });
 
+        Button addressbook = (Button) findViewById(R.id.addressbook_button);
+        addressbook.setOnClickListener(new View.OnClickListener() {
+            public void onClick(View view) {
+                Intent intent = new Intent(view.getContext(), AddressbookActivity.class);
+                startActivity(intent);
+            }
+        });
+
         Button start = (Button) findViewById(R.id.router_start_button);
         start.setOnClickListener(new View.OnClickListener() {
             public void onClick(View view) {
diff --git a/src/net/i2p/android/router/activity/WebActivity.java b/src/net/i2p/android/router/activity/WebActivity.java
index 8d263f373..bab2d202a 100644
--- a/src/net/i2p/android/router/activity/WebActivity.java
+++ b/src/net/i2p/android/router/activity/WebActivity.java
@@ -41,8 +41,10 @@ public class WebActivity extends I2PActivityBase {
         Intent intent = getIntent();
         Uri uri = intent.getData();
         if (uri != null) {
-            wv.getSettings().setLoadsImagesAutomatically(true);
-            wv.loadUrl(uri.toString());
+            //wv.getSettings().setLoadsImagesAutomatically(true);
+            //wv.loadUrl(uri.toString());
+            // go thru the client so .i2p will work too
+            _wvClient.shouldOverrideUrlLoading(wv, uri.toString());
         } else {
             wv.getSettings().setLoadsImagesAutomatically(false);
             int id = intent.getIntExtra(HTML_RESOURCE_ID, R.raw.welcome_html);
-- 
GitLab