I2P Address: [http://git.idk.i2p]

Skip to content
Snippets Groups Projects
Commit 6a2d4949 authored by str4d's avatar str4d
Browse files

Show full Log entry in a detail page

parent be14d658
No related branches found
No related tags found
No related merge requests found
......@@ -92,6 +92,10 @@
android:label="I2P Logs"
android:parentActivityName=".activity.MainActivity" >
</activity>
<activity android:name=".activity.LogDetailActivity"
android:label="Log Entry"
android:parentActivityName=".activity.LogActivity" >
</activity>
<activity android:name=".activity.RateGraphActivity"
android:label="Rate Graph"
android:parentActivityName=".activity.MainActivity" >
......
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/log_entry"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical" >
</TextView>
package net.i2p.android.router.activity;
import net.i2p.android.router.R;
import net.i2p.android.router.fragment.LogDetailFragment;
import net.i2p.android.router.fragment.LogFragment;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.widget.ArrayAdapter;
import android.widget.SpinnerAdapter;
public class LogActivity extends I2PActivityBase {
public class LogActivity extends I2PActivityBase implements
LogFragment.OnEntrySelectedListener {
/**
* Whether or not the activity is in two-pane mode, i.e. running on a tablet
* device.
*/
private boolean mTwoPane;
private static final String SELECTED_LEVEL = "selected_level";
@Override
protected boolean canUseTwoPanes() {
return true;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......@@ -20,6 +34,14 @@ public class LogActivity extends I2PActivityBase {
mDrawerToggle.setDrawerIndicatorEnabled(false);
if (findViewById(R.id.detail_fragment) != null) {
// The detail container view will be present only in the
// large-screen layouts (res/values-large and
// res/values-sw600dp). If this view is present, then the
// activity should be in two-pane mode.
mTwoPane = true;
}
SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this,
R.array.log_level_list, android.R.layout.simple_spinner_dropdown_item);
......@@ -29,6 +51,10 @@ public class LogActivity extends I2PActivityBase {
public boolean onNavigationItemSelected(int position, long itemId) {
String level = levels[position];
LogFragment f = LogFragment.newInstance(level);
// In two-pane mode, list items should be given the
// 'activated' state when touched.
if (mTwoPane)
f.setActivateOnItemClick(true);
getSupportFragmentManager().beginTransaction()
.replace(R.id.main_fragment, f, levels[position]).commit();
return true;
......@@ -49,4 +75,23 @@ public class LogActivity extends I2PActivityBase {
outState.putInt(SELECTED_LEVEL,
getSupportActionBar().getSelectedNavigationIndex());
}
// LogFragment.OnEntrySelectedListener
public void onEntrySelected(String 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.
LogDetailFragment detailFrag = LogDetailFragment.newInstance(entry);
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, LogDetailActivity.class);
detailIntent.putExtra(LogDetailFragment.LOG_ENTRY, entry);
startActivity(detailIntent);
}
}
}
package net.i2p.android.router.activity;
import android.os.Bundle;
import net.i2p.android.router.R;
import net.i2p.android.router.fragment.LogDetailFragment;
public class LogDetailActivity extends I2PActivityBase {
LogDetailFragment mDetailFrag;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDrawerToggle.setDrawerIndicatorEnabled(false);
if (savedInstanceState == null) {
String entry = getIntent().getStringExtra(LogDetailFragment.LOG_ENTRY);
mDetailFrag = LogDetailFragment.newInstance(entry);
getSupportFragmentManager().beginTransaction()
.add(R.id.main_fragment, mDetailFrag).commit();
}
}
}
package net.i2p.android.router.fragment;
import net.i2p.android.router.R;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class LogDetailFragment extends I2PFragmentBase {
public static final String LOG_ENTRY = "log_entry";
private String mEntry;
public static LogDetailFragment newInstance (String entry) {
LogDetailFragment f = new LogDetailFragment();
Bundle args = new Bundle();
args.putString(LOG_ENTRY, entry);
f.setArguments(args);
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_log_entry, container, false);
mEntry = getArguments().getString(LOG_ENTRY);
TextView tv = (TextView) v.findViewById(R.id.log_entry);
tv.setText(mEntry);
return v;
}
}
package net.i2p.android.router.fragment;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.support.v4.app.LoaderManager;
......@@ -25,6 +26,7 @@ public class LogFragment extends ListFragment implements
private static final int LEVEL_ERROR = 1;
private static final int LEVEL_ALL = 2;
OnEntrySelectedListener mEntrySelectedCallback;
private LogAdapter mAdapter;
private TextView mHeaderView;
private String mLogLevel;
......@@ -34,6 +36,11 @@ public class LogFragment extends ListFragment implements
private int mActivatedPosition = ListView.INVALID_POSITION;
private boolean mActivateOnItemClick = false;
// Container Activity must implement this interface
public interface OnEntrySelectedListener {
public void onEntrySelected(String entry);
}
public static LogFragment newInstance(String level) {
LogFragment f = new LogFragment();
Bundle args = new Bundle();
......@@ -42,6 +49,21 @@ public class LogFragment extends ListFragment implements
return f;
}
@Override
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 {
mEntrySelectedCallback = (OnEntrySelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnEntrySelectedListener");
}
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
......@@ -86,6 +108,13 @@ public class LogFragment extends ListFragment implements
R.string.router_not_running));
}
@Override
public void onListItemClick(ListView parent, View view, int pos, long id) {
super.onListItemClick(parent, view, pos, id);
String entry = mAdapter.getItem(pos);
mEntrySelectedCallback.onEntrySelected(entry);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment