summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorMartin Fietz <marf@hadiko-99-4.hadiko.uni-karlsruhe.de>2015-04-17 19:13:33 +0200
committerMartin Fietz <marf@hadiko-99-4.hadiko.uni-karlsruhe.de>2015-04-18 22:12:40 +0200
commit3f16b4e8a2520b7b0567e40fa21874adc450c019 (patch)
treed4a936896830efd78da44dd13af01cad0c421996 /app
parent4aa68e74e099f7a18ee339a70d8a7ec0fdb6dffa (diff)
downloadAntennaPod-3f16b4e8a2520b7b0567e40fa21874adc450c019.zip
Keep index of selected navigation drawer item up to date
Diffstat (limited to 'app')
-rw-r--r--app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java20
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java72
2 files changed, 74 insertions, 18 deletions
diff --git a/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java b/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java
index b7acd1d28..fea38b8e6 100644
--- a/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java
@@ -81,6 +81,8 @@ public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActiv
public void testClickNavDrawer() throws Exception {
uiTestUtils.addLocalFeedData(false);
+ UserPreferences.setHiddenDrawerItems(getInstrumentation().getTargetContext(), new ArrayList<String>());
+
// queue
openNavDrawer();
solo.clickOnText(solo.getString(R.string.queue_label));
@@ -188,4 +190,22 @@ public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActiv
assertTrue(hidden.contains(tag));
}
}
+
+ public void testDrawerPreferencesHideCurrentElement() {
+ UserPreferences.setHiddenDrawerItems(getInstrumentation().getTargetContext(), new ArrayList<String>());
+
+ openNavDrawer();
+ String downloads = solo.getString(R.string.downloads_label);
+ solo.clickOnText(downloads);
+ solo.waitForView(android.R.id.list);
+ openNavDrawer();
+ solo.clickLongOnText(downloads);
+ solo.waitForDialogToOpen();
+ solo.clickOnText(downloads);
+ solo.clickOnText(solo.getString(R.string.confirm_label));
+ solo.waitForDialogToClose();
+ List<String> hidden = UserPreferences.getHiddenDrawerItems();
+ assertEquals(1, hidden.size());
+ assertTrue(hidden.contains(DownloadsFragment.TAG));
+ }
}
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
index 2b0bf72f1..af6deb8f3 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
@@ -5,6 +5,7 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
+import android.database.DataSetObserver;
import android.media.AudioManager;
import android.os.AsyncTask;
import android.os.Bundle;
@@ -23,6 +24,7 @@ import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
+import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.Validate;
import java.util.List;
@@ -69,7 +71,6 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity
public static final String EXTRA_FRAGMENT_ARGS = "fragment_args";
public static final String SAVE_BACKSTACK_COUNT = "backstackCount";
- public static final String SAVE_SELECTED_NAV_INDEX = "selectedNavIndex";
public static final String SAVE_TITLE = "title";
public static final String[] NAV_DRAWER_TAGS = {
@@ -153,6 +154,14 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity
navList.setOnItemClickListener(navListClickListener);
navList.setOnItemLongClickListener(newListLongClickListener);
+ navAdapter.registerDataSetObserver(new DataSetObserver() {
+ @Override
+ public void onChanged() {
+ Log.d(TAG, "NavListAdapter dataSet onChanged()");
+ selectedNavListIndex = getSelectedNavListIndex();
+ }
+ });
+
findViewById(R.id.nav_settings).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -167,13 +176,19 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity
if (mainFragment != null) {
transaction.replace(R.id.main_view, mainFragment);
} else {
- loadFragment(getLastNavFragment(), null);
+ String lastFragment = getLastNavFragment();
+ if(ArrayUtils.contains(NAV_DRAWER_TAGS, lastFragment)) {
+ loadFragment(lastFragment, null);
+ } else { // last fragment was not a list, but a feed
+ long feedId = Long.valueOf(lastFragment);
+ loadFeedFragmentById(feedId);
+ }
+
}
externalPlayerFragment = new ExternalPlayerFragment();
transaction.replace(R.id.playerFragment, externalPlayerFragment);
transaction.commit();
-
checkFirstLaunch();
}
@@ -239,7 +254,6 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity
builder.create().show();
}
-
public ActionBar getMainActivtyActionBar() {
return getSupportActionBar();
}
@@ -287,7 +301,7 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity
}
currentTitle = navAdapter.getLabel(tag);
getSupportActionBar().setTitle(currentTitle);
- selectedNavListIndex = navAdapter.getTags().indexOf(tag);
+ saveLastNavFragment(tag);
if (args != null) {
fragment.setArguments(args);
}
@@ -299,8 +313,12 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity
return;
}
Feed feed = itemAccess.getItem(relPos);
- Fragment fragment = ItemlistFragment.newInstance(feed.getId());
- selectedNavListIndex = navAdapter.getSubscriptionOffset() + relPos;
+ long feedId = feed.getId();
+ Fragment fragment = ItemlistFragment.newInstance(feedId);
+ if(args != null) {
+ fragment.setArguments(args);
+ }
+ saveLastNavFragment(String.valueOf(feed.getId()));
currentTitle = "";
getSupportActionBar().setTitle(currentTitle);
loadFragment(fragment);
@@ -309,12 +327,15 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity
public void loadFeedFragmentById(long feedId) {
if (navDrawerData != null) {
int relPos = -1;
- for (int i = 0; relPos < 0 && i < navDrawerData.feeds.size(); i++) {
- if (navDrawerData.feeds.get(i).getId() == feedId) {
+ List<Feed> feeds = navDrawerData.feeds;
+ for (int i = 0; relPos < 0 && i < feeds.size(); i++) {
+ if (feeds.get(i).getId() == feedId) {
relPos = i;
}
}
- loadFeedFragmentByPosition(relPos, null);
+ if(relPos >= 0) {
+ loadFeedFragmentByPosition(relPos, null);
+ }
}
}
@@ -333,7 +354,6 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity
}
}
-
public void loadChildFragment(Fragment fragment) {
Validate.notNull(fragment);
FragmentManager fm = getSupportFragmentManager();
@@ -351,14 +371,34 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity
return toolbar;
}
+ private int getSelectedNavListIndex() {
+ String lastFragment = getLastNavFragment();
+ int tagIndex = navAdapter.getTags().indexOf(lastFragment);
+ if(tagIndex >= 0) {
+ return tagIndex;
+ } else if(ArrayUtils.contains(NAV_DRAWER_TAGS, lastFragment)) {
+ // the fragment was just hidden
+ return -1;
+ } else { // last fragment was not a list, but a feed
+ long feedId = Long.parseLong(lastFragment);
+ List<Feed> feeds = navDrawerData.feeds;
+ for (int i = 0; i < feeds.size(); i++) {
+ if (feeds.get(i).getId() == feedId) {
+ return i + navAdapter.getSubscriptionOffset();
+ }
+ }
+ return -1;
+ }
+ }
+
private AdapterView.OnItemClickListener navListClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
int viewType = parent.getAdapter().getItemViewType(position);
if (viewType != NavListAdapter.VIEW_TYPE_SECTION_DIVIDER && position != selectedNavListIndex) {
loadFragment(position, null);
- selectedNavListIndex = position;
- navAdapter.notifyDataSetChanged();
+ // selectedNavListIndex = position;
+ // navAdapter.notifyDataSetChanged();
}
drawerLayout.closeDrawer(navDrawer);
}
@@ -386,7 +426,7 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity
if (!drawerLayout.isDrawerOpen(navDrawer)) {
getSupportActionBar().setTitle(currentTitle);
}
- selectedNavListIndex = savedInstanceState.getInt(SAVE_SELECTED_NAV_INDEX);
+ selectedNavListIndex = getSelectedNavListIndex();
}
}
@@ -400,9 +440,7 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(SAVE_TITLE, getSupportActionBar().getTitle().toString());
- outState.putInt(SAVE_SELECTED_NAV_INDEX, selectedNavListIndex);
outState.putInt(SAVE_BACKSTACK_COUNT, getSupportFragmentManager().getBackStackEntryCount());
-
}
@Override
@@ -453,7 +491,6 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity
}
}
-
private DBReader.NavDrawerData navDrawerData;
private AsyncTask<Void, Void, DBReader.NavDrawerData> loadTask;
private int selectedNavListIndex = 0;
@@ -492,7 +529,6 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity
return (navDrawerData != null) ? navDrawerData.numUnreadItems : 0;
}
-
};
private void loadData() {