From a4107e974a2daa57f0bb02f098f6eda3ba212829 Mon Sep 17 00:00:00 2001
From: str4d <str4d@mail.i2p>
Date: Mon, 11 Nov 2013 03:26:32 +0000
Subject: [PATCH] First pass at NetDB details, runs but View is not filled

---
 AndroidManifest.xml.in                        |  4 ++
 res/layout/fragment_netdb_leaseset_detail.xml | 24 +++++++
 res/layout/fragment_netdb_router_detail.xml   | 13 ++++
 .../router/activity/NetDbActivity.java        | 19 ++++++
 .../router/activity/NetDbDetailActivity.java  | 28 ++++++++
 .../router/fragment/NetDbDetailFragment.java  | 68 +++++++++++++++++++
 6 files changed, 156 insertions(+)
 create mode 100644 res/layout/fragment_netdb_leaseset_detail.xml
 create mode 100644 res/layout/fragment_netdb_router_detail.xml
 create mode 100644 src/net/i2p/android/router/activity/NetDbDetailActivity.java
 create mode 100644 src/net/i2p/android/router/fragment/NetDbDetailFragment.java

diff --git a/AndroidManifest.xml.in b/AndroidManifest.xml.in
index a0d60199b..5216c2375 100644
--- a/AndroidManifest.xml.in
+++ b/AndroidManifest.xml.in
@@ -101,5 +101,9 @@
                   android:label="NetDB"
                   android:parentActivityName=".activity.MainActivity" >
         </activity>
+        <activity android:name=".activity.NetDbDetailActivity"
+                  android:label="NetDB Detail"
+                  android:parentActivityName=".activity.NetDbActivity" >
+        </activity>
     </application>
 </manifest>
diff --git a/res/layout/fragment_netdb_leaseset_detail.xml b/res/layout/fragment_netdb_leaseset_detail.xml
new file mode 100644
index 000000000..8a3977e2d
--- /dev/null
+++ b/res/layout/fragment_netdb_leaseset_detail.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent" >
+
+    <TextView
+        android:id="@+id/ls_nickname"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentTop="true"
+        android:padding="3dp"
+        android:text="LeaseSet nickname"
+        android:textAppearance="?android:attr/textAppearanceMedium" />
+
+    <TextView
+        android:id="@+id/ls_hash"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_below="@+id/ls_nickname"
+        android:text="LeaseSet hash" />
+
+</RelativeLayout>
diff --git a/res/layout/fragment_netdb_router_detail.xml b/res/layout/fragment_netdb_router_detail.xml
new file mode 100644
index 000000000..f0eb57eb1
--- /dev/null
+++ b/res/layout/fragment_netdb_router_detail.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent" >
+
+    <TextView
+        android:id="@+id/dbentry_hash"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:text="Router hash" />
+
+</RelativeLayout>
diff --git a/src/net/i2p/android/router/activity/NetDbActivity.java b/src/net/i2p/android/router/activity/NetDbActivity.java
index d3ffde288..e52256482 100644
--- a/src/net/i2p/android/router/activity/NetDbActivity.java
+++ b/src/net/i2p/android/router/activity/NetDbActivity.java
@@ -1,9 +1,11 @@
 package net.i2p.android.router.activity;
 
 import net.i2p.android.router.R;
+import net.i2p.android.router.fragment.NetDbDetailFragment;
 import net.i2p.android.router.fragment.NetDbListFragment;
 import net.i2p.android.router.fragment.NetDbSummaryPagerFragment;
 import net.i2p.android.router.loader.NetDbEntry;
+import android.content.Intent;
 import android.os.Bundle;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentTransaction;
@@ -109,5 +111,22 @@ public class NetDbActivity extends I2PActivityBase implements
     // NetDbListFragment.OnEntrySelectedListener
 
     public void onEntrySelected(NetDbEntry entry) {
+        if (mTwoPane) {
+            // In two-pane mode, show the detail view in this activity by
+            // adding or replacing the detail fragment using a
+            // fragment transaction.
+            NetDbDetailFragment detailFrag = NetDbDetailFragment.newInstance(
+                    entry.isRouterInfo(), entry.getHash());
+            getSupportFragmentManager().beginTransaction()
+                .replace(R.id.detail_fragment, detailFrag).commit();
+        } else {
+            // In single-pane mode, simply start the detail activity
+            // for the selected item ID.
+            Intent detailIntent = new Intent(this, NetDbDetailActivity.class);
+            detailIntent.putExtra(NetDbDetailFragment.IS_RI, entry.isRouterInfo());
+            detailIntent.putExtra(NetDbDetailFragment.ENTRY_HASH,
+                    entry.getHash().toBase64());
+            startActivity(detailIntent);
+        }
     }
 }
diff --git a/src/net/i2p/android/router/activity/NetDbDetailActivity.java b/src/net/i2p/android/router/activity/NetDbDetailActivity.java
new file mode 100644
index 000000000..0c9d2dc81
--- /dev/null
+++ b/src/net/i2p/android/router/activity/NetDbDetailActivity.java
@@ -0,0 +1,28 @@
+package net.i2p.android.router.activity;
+
+import net.i2p.android.router.R;
+import net.i2p.android.router.fragment.NetDbDetailFragment;
+import net.i2p.data.DataFormatException;
+import net.i2p.data.Hash;
+import android.os.Bundle;
+
+public class NetDbDetailActivity extends I2PActivityBase {
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mDrawerToggle.setDrawerIndicatorEnabled(false);
+
+        if (savedInstanceState == null) {
+            boolean isRI = getIntent().getBooleanExtra(NetDbDetailFragment.IS_RI, true);
+            Hash hash = new Hash();
+            try {
+                hash.fromBase64(getIntent().getStringExtra(NetDbDetailFragment.ENTRY_HASH));
+                NetDbDetailFragment detailFrag = NetDbDetailFragment.newInstance(isRI, hash);
+                getSupportFragmentManager().beginTransaction()
+                    .add(R.id.main_fragment, detailFrag).commit();
+            } catch (DataFormatException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}
diff --git a/src/net/i2p/android/router/fragment/NetDbDetailFragment.java b/src/net/i2p/android/router/fragment/NetDbDetailFragment.java
new file mode 100644
index 000000000..9a999498f
--- /dev/null
+++ b/src/net/i2p/android/router/fragment/NetDbDetailFragment.java
@@ -0,0 +1,68 @@
+package net.i2p.android.router.fragment;
+
+import net.i2p.android.router.R;
+import net.i2p.android.router.loader.NetDbEntry;
+import net.i2p.data.DataFormatException;
+import net.i2p.data.Hash;
+import net.i2p.data.LeaseSet;
+import net.i2p.data.RouterInfo;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+public class NetDbDetailFragment extends I2PFragmentBase {
+    public static final String IS_RI = "is_routerinfo";
+    public static final String ENTRY_HASH = "entry_hash";
+
+    private NetDbEntry mEntry;
+
+    public static NetDbDetailFragment newInstance(boolean isRI, Hash hash) {
+        NetDbDetailFragment f = new NetDbDetailFragment();
+        Bundle args = new Bundle();
+        args.putBoolean(IS_RI, isRI);
+        args.putString(ENTRY_HASH, hash.toBase64());
+        f.setArguments(args);
+        return f;
+    }
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+            Bundle savedInstanceState) {
+        View v;
+        if (getArguments().getBoolean(IS_RI)) {
+            v = inflater.inflate(R.layout.fragment_netdb_router_detail, container, false);
+        } else {
+            v = inflater.inflate(R.layout.fragment_netdb_leaseset_detail, container, false);
+        }
+        return v;
+    }
+
+    @Override
+    public void onActivityCreated(Bundle savedInstanceState) {
+        super.onActivityCreated(savedInstanceState);
+
+        if (getRouterContext() != null && getNetDb().isInitialized()) {
+            Hash hash = new Hash();
+            try {
+                hash.fromBase64(getArguments().getString(ENTRY_HASH));
+                if (getArguments().getBoolean(IS_RI)) {
+                    RouterInfo ri = getNetDb().lookupRouterInfoLocally(hash);
+                    mEntry = NetDbEntry.fromRouterInfo(getRouterContext(), ri);
+                } else {
+                    LeaseSet ls = getNetDb().lookupLeaseSetLocally(hash);
+                    mEntry = NetDbEntry.fromLeaseSet(getRouterContext(), ls);
+
+                    TextView nickname = (TextView) getView().findViewById(R.id.ls_nickname);
+                    nickname.setText(mEntry.getNickname());
+                }
+
+                TextView entryHash = (TextView) getView().findViewById(R.id.dbentry_hash);
+                entryHash.setText(hash.toBase64());
+            } catch (DataFormatException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}
-- 
GitLab