From bdbc777a5277e7cfa1d631925881eb177100281a Mon Sep 17 00:00:00 2001 From: str4d <str4d@mail.i2p> Date: Sun, 18 Aug 2013 00:13:05 +0000 Subject: [PATCH] Added TunnelControllerAdapter, filled tunnel lists with names Router must be started and client tunnels built before loading the I2PTunnel Activity, or it hangs when switching tabs. --- res/layout/listitem_i2ptunnel.xml | 1 + .../adapter/TunnelControllerAdapter.java | 41 +++++++++++++++++++ .../router/fragment/I2PTunnelFragment.java | 32 +++++++++++++-- 3 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 src/net/i2p/android/router/adapter/TunnelControllerAdapter.java diff --git a/res/layout/listitem_i2ptunnel.xml b/res/layout/listitem_i2ptunnel.xml index 7e058a0f9..3a37b96d8 100644 --- a/res/layout/listitem_i2ptunnel.xml +++ b/res/layout/listitem_i2ptunnel.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/row_tunnel_name" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="6dp" diff --git a/src/net/i2p/android/router/adapter/TunnelControllerAdapter.java b/src/net/i2p/android/router/adapter/TunnelControllerAdapter.java new file mode 100644 index 000000000..dab0da5da --- /dev/null +++ b/src/net/i2p/android/router/adapter/TunnelControllerAdapter.java @@ -0,0 +1,41 @@ +package net.i2p.android.router.adapter; + +import java.util.List; + +import net.i2p.android.router.R; +import net.i2p.i2ptunnel.TunnelController; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +public class TunnelControllerAdapter extends ArrayAdapter<TunnelController> { + private final LayoutInflater mInflater; + + public TunnelControllerAdapter(Context context) { + super(context, android.R.layout.simple_list_item_2); + mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + } + + public void setData(List<TunnelController> controllers) { + clear(); + if (controllers != null) { + for (TunnelController controller : controllers) { + add(controller); + } + } + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View v = mInflater.inflate(R.layout.listitem_i2ptunnel, parent, false); + TunnelController controller = getItem(position); + + TextView name = (TextView) v.findViewById(R.id.row_tunnel_name); + name.setText(controller.getName()); + + return v; + } +} diff --git a/src/net/i2p/android/router/fragment/I2PTunnelFragment.java b/src/net/i2p/android/router/fragment/I2PTunnelFragment.java index 989842211..aa61338a0 100644 --- a/src/net/i2p/android/router/fragment/I2PTunnelFragment.java +++ b/src/net/i2p/android/router/fragment/I2PTunnelFragment.java @@ -1,6 +1,11 @@ package net.i2p.android.router.fragment; +import java.util.ArrayList; +import java.util.List; + import net.i2p.android.router.R; +import net.i2p.android.router.adapter.TunnelControllerAdapter; +import net.i2p.i2ptunnel.TunnelController; import net.i2p.i2ptunnel.TunnelControllerGroup; import android.os.Bundle; import android.support.v4.app.ListFragment; @@ -12,6 +17,7 @@ public class I2PTunnelFragment extends ListFragment { public static final String SHOW_CLIENT_TUNNELS = "show_client_tunnels"; private TunnelControllerGroup mGroup; + private TunnelControllerAdapter mAdapter; @Override public void onCreate(Bundle savedInstanceState) { @@ -22,6 +28,7 @@ public class I2PTunnelFragment extends ListFragment { @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); + mAdapter = new TunnelControllerAdapter(getActivity()); String error; try { @@ -32,17 +39,36 @@ public class I2PTunnelFragment extends ListFragment { error = iae.toString(); } + boolean clientTunnels = getArguments().getBoolean(SHOW_CLIENT_TUNNELS); if (mGroup == null) { setEmptyText(error); - setListAdapter(null); } else { - boolean clientTunnels = getArguments().getBoolean(SHOW_CLIENT_TUNNELS); if (clientTunnels) setEmptyText("No configured client tunnels."); else setEmptyText("No configured server tunnels."); - setListAdapter(null); } + mAdapter.setData(getControllers(clientTunnels)); + setListAdapter(mAdapter); + } + + private List<TunnelController> getControllers(boolean clientTunnels) { + List<TunnelController> ret = new ArrayList<TunnelController>(); + for (TunnelController controller : mGroup.getControllers()) + if ( (clientTunnels && isClient(controller.getType())) || + (!clientTunnels && !isClient(controller.getType())) ) + ret.add(controller); + return ret; + } + + private static boolean isClient(String type) { + return ( ("client".equals(type)) || + ("httpclient".equals(type)) || + ("sockstunnel".equals(type)) || + ("socksirctunnel".equals(type)) || + ("connectclient".equals(type)) || + ("streamrclient".equals(type)) || + ("ircclient".equals(type))); } @Override -- GitLab