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