From b742dd8ee8447f5c05b51e1a9079d934c12b64a0 Mon Sep 17 00:00:00 2001
From: str4d <str4d@mail.i2p>
Date: Sun, 17 Nov 2013 10:27:05 +0000
Subject: [PATCH] Use callback for TunnelListFragment

---
 .../fragment/TunnelListFragment.java          | 52 ++++++++++++++++---
 1 file changed, 44 insertions(+), 8 deletions(-)

diff --git a/src/net/i2p/android/i2ptunnel/fragment/TunnelListFragment.java b/src/net/i2p/android/i2ptunnel/fragment/TunnelListFragment.java
index 60f4e40b0..170e05387 100644
--- a/src/net/i2p/android/i2ptunnel/fragment/TunnelListFragment.java
+++ b/src/net/i2p/android/i2ptunnel/fragment/TunnelListFragment.java
@@ -9,7 +9,10 @@ import net.i2p.android.i2ptunnel.loader.TunnelEntryLoader;
 import net.i2p.android.i2ptunnel.util.TunnelConfig;
 import net.i2p.android.router.R;
 import net.i2p.android.router.activity.HelpActivity;
+import net.i2p.android.router.fragment.I2PFragmentBase;
+import net.i2p.android.router.fragment.I2PFragmentBase.RouterContextProvider;
 import net.i2p.i2ptunnel.TunnelControllerGroup;
+import net.i2p.router.RouterContext;
 import android.app.Activity;
 import android.content.Intent;
 import android.os.Bundle;
@@ -23,8 +26,9 @@ import android.view.View;
 import android.widget.ListView;
 import android.widget.Toast;
 
-public class TunnelListFragment extends ListFragment
-        implements LoaderManager.LoaderCallbacks<List<TunnelEntry>> {
+public class TunnelListFragment extends ListFragment implements
+        I2PFragmentBase.RouterContextUser,
+        LoaderManager.LoaderCallbacks<List<TunnelEntry>> {
     public static final String SHOW_CLIENT_TUNNELS = "show_client_tunnels";
     public static final String TUNNEL_WIZARD_DATA = "tunnel_wizard_data";
 
@@ -38,6 +42,8 @@ public class TunnelListFragment extends ListFragment
      */
     private static final String STATE_ACTIVATED_POSITION = "activated_position";
 
+    private boolean mOnActivityCreated;
+    RouterContextProvider mRouterContextProvider;
     OnTunnelSelectedListener mCallback;
     private TunnelControllerGroup mGroup;
     private TunnelEntryAdapter mAdapter;
@@ -57,6 +63,15 @@ public class TunnelListFragment extends ListFragment
     public void onAttach(Activity activity) {
         super.onAttach(activity);
 
+        // This makes sure that the container activity has implemented
+        // the callback interface. If not, it throws an exception
+        try {
+            mRouterContextProvider = (RouterContextProvider) activity;
+        } catch (ClassCastException e) {
+            throw new ClassCastException(activity.toString()
+                    + " must implement RouterContextProvider");
+        }
+
         // This makes sure that the container activity has implemented
         // the callback interface. If not, it throws an exception
         try {
@@ -98,6 +113,17 @@ public class TunnelListFragment extends ListFragment
         mAdapter = new TunnelEntryAdapter(getActivity());
         mClientTunnels = getArguments().getBoolean(SHOW_CLIENT_TUNNELS);
 
+        setListAdapter(mAdapter);
+
+        mOnActivityCreated = true;
+        if (getRouterContext() != null)
+            onRouterConnectionReady();
+        else
+            setEmptyText(getResources().getString(
+                    R.string.router_not_running));
+    }
+
+    public void onRouterConnectionReady() {
         String error;
         try {
             mGroup = TunnelControllerGroup.getInstance();
@@ -114,13 +140,11 @@ public class TunnelListFragment extends ListFragment
                 setEmptyText("No configured client tunnels.");
             else
                 setEmptyText("No configured server tunnels.");
-        }
 
-        setListAdapter(mAdapter);
-        setListShown(false);
-
-        getLoaderManager().initLoader(mClientTunnels ? CLIENT_LOADER_ID
-                : SERVER_LOADER_ID, null, this);
+            setListShown(false);
+            getLoaderManager().initLoader(mClientTunnels ? CLIENT_LOADER_ID
+                    : SERVER_LOADER_ID, null, this);
+        }
     }
 
     @Override
@@ -206,6 +230,18 @@ public class TunnelListFragment extends ListFragment
         mActivatedPosition = position;
     }
 
+    // Duplicated from I2PFragmentBase because this extends ListFragment
+    private RouterContext getRouterContext() {
+        return mRouterContextProvider.getRouterContext();
+    }
+
+    // I2PFragmentBase.RouterContextUser
+
+    public void onRouterBind() {
+        if (mOnActivityCreated)
+            onRouterConnectionReady();
+    }
+
     // LoaderManager.LoaderCallbacks<List<TunnelEntry>>
 
     public Loader<List<TunnelEntry>> onCreateLoader(int id, Bundle args) {
-- 
GitLab