diff --git a/app/build.gradle b/app/build.gradle index e2150b3..f33f564 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,5 @@ -apply plugin: 'idea' apply plugin: 'com.android.application' +apply plugin: 'idea' ext { appName = "Abit" @@ -44,6 +44,7 @@ dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile "com.android.support:appcompat-v7:$supportVersion" + compile "com.android.support:preference-v7:$supportVersion" compile "com.android.support:support-v4:$supportVersion" compile "com.android.support:design:$supportVersion" compile "com.android.support:multidex:1.0.1" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d46c295..fb086cc 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -84,16 +84,6 @@ - - - - - - - + android:parentActivityName=".MainActivity"> + android:value=".MainActivity"/> diff --git a/app/src/main/java/ch/dissem/apps/abit/AbstractItemListFragment.java b/app/src/main/java/ch/dissem/apps/abit/AbstractItemListFragment.java index b61de46..aeaed74 100644 --- a/app/src/main/java/ch/dissem/apps/abit/AbstractItemListFragment.java +++ b/app/src/main/java/ch/dissem/apps/abit/AbstractItemListFragment.java @@ -27,7 +27,7 @@ import ch.dissem.apps.abit.listener.ListSelectionListener; /** * @author Christian Basler */ -public abstract class AbstractItemListFragment extends ListFragment implements ListHolder { +public abstract class AbstractItemListFragment extends ListFragment implements ListHolder { /** * The serialization (saved instance state) Bundle key representing the * activated item position. Only used on tablets. @@ -143,4 +143,14 @@ public abstract class AbstractItemListFragment extends ListFragment implement activatedPosition = position; } + + @Override + public L getCurrentLabel() { + return null; + } + + @Override + public boolean showPreviousList() { + return false; + } } diff --git a/app/src/main/java/ch/dissem/apps/abit/AddressListFragment.java b/app/src/main/java/ch/dissem/apps/abit/AddressListFragment.java index 9633cbe..ee220a8 100644 --- a/app/src/main/java/ch/dissem/apps/abit/AddressListFragment.java +++ b/app/src/main/java/ch/dissem/apps/abit/AddressListFragment.java @@ -47,7 +47,7 @@ import io.github.yavski.fabspeeddial.SimpleMenuListenerAdapter; /** * Fragment that shows a list of all contacts, the ones we subscribed to first. */ -public class AddressListFragment extends AbstractItemListFragment { +public class AddressListFragment extends AbstractItemListFragment { private ArrayAdapter adapter; @Override @@ -166,7 +166,7 @@ public class AddressListFragment extends AbstractItemListFragment { + void updateList(L label); void setActivateOnItemClick(boolean activateOnItemClick); + + L getCurrentLabel(); + + boolean showPreviousList(); } diff --git a/app/src/main/java/ch/dissem/apps/abit/MainActivity.java b/app/src/main/java/ch/dissem/apps/abit/MainActivity.java index d8c40bf..0b6ed77 100644 --- a/app/src/main/java/ch/dissem/apps/abit/MainActivity.java +++ b/app/src/main/java/ch/dissem/apps/abit/MainActivity.java @@ -21,6 +21,7 @@ import android.graphics.Point; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; @@ -195,11 +196,15 @@ public class MainActivity extends AppCompatActivity } private void changeList(F listFragment) { - getSupportFragmentManager() - .beginTransaction() - .replace(R.id.item_list, listFragment) - .addToBackStack(null) - .commit(); + + FragmentTransaction transaction = getSupportFragmentManager() + .beginTransaction(); + transaction.replace(R.id.item_list, listFragment); + Fragment detailFragment = getSupportFragmentManager().findFragmentById(R.id.message_detail_container); + if (detailFragment != null) { + transaction.remove(detailFragment); + } + transaction.addToBackStack(null).commit(); if (twoPane) { // In two-pane mode, list items should be given the @@ -325,15 +330,31 @@ public class MainActivity extends AppCompatActivity }.execute(); } + @Override + public void onBackPressed() { + Fragment listFragment = getSupportFragmentManager().findFragmentById(R.id.item_list); + if (listFragment instanceof ListHolder) { + ListHolder listHolder = (ListHolder) listFragment; + if (listHolder.showPreviousList()) { + IDrawerItem drawerItem = drawer.getDrawerItem(listHolder.getCurrentLabel()); + if (drawerItem != null){ + drawer.setSelection(drawerItem); + } + return; + } + } + super.onBackPressed(); + } + private class DrawerItemClickListener implements Drawer.OnDrawerItemClickListener { @Override public boolean onItemClick(View view, int position, IDrawerItem item) { + Fragment itemList = getSupportFragmentManager().findFragmentById(R.id.item_list); if (item.getTag() instanceof Label) { selectedLabel = (Label) item.getTag(); - if (getSupportFragmentManager().findFragmentById(R.id.item_list) instanceof + if (itemList instanceof MessageListFragment) { - ((MessageListFragment) getSupportFragmentManager() - .findFragmentById(R.id.item_list)).updateList(selectedLabel); + ((MessageListFragment) itemList).updateList(selectedLabel); } else { MessageListFragment listFragment = new MessageListFragment(); changeList(listFragment); @@ -344,17 +365,18 @@ public class MainActivity extends AppCompatActivity Nameable ni = (Nameable) item; switch (ni.getName().getTextRes()) { case R.string.contacts_and_subscriptions: - if (!(getSupportFragmentManager().findFragmentById(R.id - .item_list) instanceof AddressListFragment)) { + if (!(itemList instanceof AddressListFragment)) { changeList(new AddressListFragment()); } else { - ((AddressListFragment) getSupportFragmentManager() - .findFragmentById(R.id.item_list)).updateList(); + ((AddressListFragment) itemList).updateList(); } return false; case R.string.settings: - startActivity(new Intent(MainActivity.this, SettingsActivity - .class)); + getSupportFragmentManager() + .beginTransaction() + .replace(R.id.item_list, new SettingsFragment()) + .addToBackStack(null) + .commit(); return false; case R.string.full_node: return true; @@ -501,7 +523,7 @@ public class MainActivity extends AppCompatActivity Fragment fragment; if (item instanceof Plaintext) { fragment = new MessageDetailFragment(); - } else if (item instanceof String) { + } else if (item instanceof BitmessageAddress) { fragment = new AddressDetailFragment(); } else { throw new IllegalArgumentException("Plaintext or BitmessageAddress expected, but was " + item.getClass().getSimpleName()); @@ -517,7 +539,7 @@ public class MainActivity extends AppCompatActivity if (item instanceof Plaintext) { detailIntent = new Intent(this, MessageDetailActivity.class); detailIntent.putExtra(EXTRA_SHOW_LABEL, selectedLabel); - } else if (item instanceof String) { + } else if (item instanceof BitmessageAddress) { detailIntent = new Intent(this, AddressDetailActivity.class); } else { throw new IllegalArgumentException("Plaintext or BitmessageAddress expected, but " + @@ -529,6 +551,18 @@ public class MainActivity extends AppCompatActivity } } + public boolean hasDetailPane() { + return twoPane; + } + + public void setDetailView(Fragment fragment) { + if (twoPane) { + getSupportFragmentManager().beginTransaction() + .replace(R.id.message_detail_container, fragment) + .commit(); + } + } + @Override public void updateTitle(CharSequence title) { if (getSupportActionBar() != null) { diff --git a/app/src/main/java/ch/dissem/apps/abit/MessageListFragment.java b/app/src/main/java/ch/dissem/apps/abit/MessageListFragment.java index e3a187a..219436e 100644 --- a/app/src/main/java/ch/dissem/apps/abit/MessageListFragment.java +++ b/app/src/main/java/ch/dissem/apps/abit/MessageListFragment.java @@ -38,10 +38,8 @@ import com.h6ah4i.android.widget.advrecyclerview.swipeable.RecyclerViewSwipeMana import com.h6ah4i.android.widget.advrecyclerview.touchguard.RecyclerViewTouchActionGuardManager; import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils; -import java.util.Collections; -import java.util.LinkedList; import java.util.List; -import java.util.Objects; +import java.util.Stack; import ch.dissem.apps.abit.adapter.SwipeableMessageAdapter; import ch.dissem.apps.abit.listener.ActionBarListener; @@ -51,7 +49,6 @@ import ch.dissem.apps.abit.service.Singleton; import ch.dissem.bitmessage.entity.BitmessageAddress; import ch.dissem.bitmessage.entity.Plaintext; import ch.dissem.bitmessage.entity.valueobject.Label; -import ch.dissem.bitmessage.ports.MessageRepository; import io.github.yavski.fabspeeddial.FabSpeedDial; import io.github.yavski.fabspeeddial.SimpleMenuListenerAdapter; @@ -68,7 +65,7 @@ import static ch.dissem.apps.abit.MessageDetailFragment.isInTrash; * Activities containing this fragment MUST implement the {@link ListSelectionListener} * interface. */ -public class MessageListFragment extends Fragment implements ListHolder { +public class MessageListFragment extends Fragment implements ListHolder