diff --git a/AndroidManifest.xml.in b/AndroidManifest.xml.in index 4b807300a0f10fa9d688106d7584bf3a3c0ebb76..62206439d2c5eb54e55828d1f6d14f95732c4da4 100644 --- a/AndroidManifest.xml.in +++ b/AndroidManifest.xml.in @@ -65,6 +65,10 @@ <meta-data android:name="android.app.searchable" android:resource="@xml/searchable_addressbook"/> </activity> + <activity android:name=".activity.I2PTunnelActivity" + android:label="I2PTunnel" + android:launchMode="singleTop" > + </activity> <activity android:name=".activity.LogActivity" android:label="I2P Logs" android:parentActivityName=".activity.MainActivity" > diff --git a/res/layout/listitem_i2ptunnel.xml b/res/layout/listitem_i2ptunnel.xml new file mode 100644 index 0000000000000000000000000000000000000000..7e058a0f98a7685a630c0a3c905840c61d29cf1e --- /dev/null +++ b/res/layout/listitem_i2ptunnel.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/menu/fragment_i2ptunnel_actions.xml b/res/menu/fragment_i2ptunnel_actions.xml new file mode 100644 index 0000000000000000000000000000000000000000..c17e84d2621071e29387a6c4d176c01995a27966 --- /dev/null +++ b/res/menu/fragment_i2ptunnel_actions.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<menu xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:i2pandroid="http://schemas.android.com/apk/res-auto" > + <item android:id="@+id/action_add_tunnel" + android:title="@string/action_add" + android:icon="@drawable/ic_content_new" + i2pandroid:showAsAction="ifRoom" /> + +</menu> diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 0fdd1d8fdc058cc0535e5a2c702c501fe29529e9..4dca6243329d0a28d090cf15c96046924db57746 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -3,6 +3,7 @@ <string-array name="navdrawer_activity_titles"> <item>@string/label_home</item> <item>@string/label_addressbook</item> + <item>@string/label_i2ptunnel</item> <item>@string/label_logs</item> <item>@string/label_error_logs</item> <item>@string/label_licenses</item> diff --git a/res/values/strings.xml b/res/values/strings.xml index adbfdb73bd4171b5a96d338f74cdbbb464ed7f97..7859366b4eeb1420c99680753c886045339306de 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -11,6 +11,7 @@ <string name="label_main_controls">Main Controls</string> <string name="label_tools">I2P Tools</string> <string name="label_addressbook">Addressbook</string> + <string name="label_i2ptunnel">I2PTunnel</string> <string name="label_logs">Logs</string> <string name="label_error_logs">Error Logs</string> <string name="label_info_and_pages">Information and pages</string> @@ -69,4 +70,5 @@ <string name="settings_label_expl_backupQuantity">Backup quantity</string> <string name="settings_desc_expl_backupQuantity">How many tunnel backups</string> + <string name="i2ptunnel_not_initialized">Tunnels are not initialized yet, please reload in two minutes.</string> </resources> \ No newline at end of file diff --git a/src/net/i2p/android/router/activity/I2PActivityBase.java b/src/net/i2p/android/router/activity/I2PActivityBase.java index 0275f14271aa38bf4f184c550e919cbff042d22d..8e396adb81e541e1d7282298e428a0cbb639d310 100644 --- a/src/net/i2p/android/router/activity/I2PActivityBase.java +++ b/src/net/i2p/android/router/activity/I2PActivityBase.java @@ -103,15 +103,19 @@ public class I2PActivityBase extends ActionBarActivity { startActivity(ab); break; case 2: + Intent itb = new Intent(I2PActivityBase.this, I2PTunnelActivity.class); + startActivity(itb); + break; + case 3: Intent log = new Intent(I2PActivityBase.this, LogActivity.class); startActivity(log); break; - case 3: + case 4: Intent err = new Intent(I2PActivityBase.this, LogActivity.class); err.putExtra(LogActivity.ERRORS_ONLY, true); startActivity(err); break; - case 4: + case 5: Intent lic = new Intent(I2PActivityBase.this, LicenseActivity.class); startActivity(lic); break; diff --git a/src/net/i2p/android/router/activity/I2PTunnelActivity.java b/src/net/i2p/android/router/activity/I2PTunnelActivity.java new file mode 100644 index 0000000000000000000000000000000000000000..567b269d539cfa4bd7c1d24a5df9b0a76e868a66 --- /dev/null +++ b/src/net/i2p/android/router/activity/I2PTunnelActivity.java @@ -0,0 +1,19 @@ +package net.i2p.android.router.activity; + +import net.i2p.android.router.R; +import net.i2p.android.router.fragment.I2PTunnelFragment; +import android.os.Bundle; + +public class I2PTunnelActivity extends I2PActivityBase { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + // Start with the base view + if (savedInstanceState == null) { + I2PTunnelFragment f = new I2PTunnelFragment(); + f.setArguments(getIntent().getExtras()); + getSupportFragmentManager().beginTransaction() + .add(R.id.main_content, f).commit(); + } + } +} diff --git a/src/net/i2p/android/router/fragment/I2PTunnelFragment.java b/src/net/i2p/android/router/fragment/I2PTunnelFragment.java new file mode 100644 index 0000000000000000000000000000000000000000..a0894a5681c32fd48877ea153369633ac5a64741 --- /dev/null +++ b/src/net/i2p/android/router/fragment/I2PTunnelFragment.java @@ -0,0 +1,57 @@ +package net.i2p.android.router.fragment; + +import net.i2p.android.router.R; +import net.i2p.i2ptunnel.TunnelControllerGroup; +import android.os.Bundle; +import android.support.v4.app.ListFragment; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; + +public class I2PTunnelFragment extends ListFragment { + private TunnelControllerGroup mGroup; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setHasOptionsMenu(true); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + TunnelControllerGroup tcg; + String error; + try { + tcg = TunnelControllerGroup.getInstance(); + error = tcg == null ? getResources().getString(R.string.i2ptunnel_not_initialized) : null; + } catch (IllegalArgumentException iae) { + tcg = null; + error = iae.toString(); + } + + if (tcg != null) { + mGroup = tcg; + setEmptyText("Win!"); + } else { + setEmptyText(error); + } + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.fragment_i2ptunnel_actions, menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle presses on the action bar items + switch (item.getItemId()) { + case R.id.action_add_tunnel: + return true; + default: + return super.onOptionsItemSelected(item); + } + } +}