diff options
author | Martin Fietz <marf@hadiko-99-4.hadiko.uni-karlsruhe.de> | 2015-04-17 19:13:33 +0200 |
---|---|---|
committer | Martin Fietz <marf@hadiko-99-4.hadiko.uni-karlsruhe.de> | 2015-04-18 22:12:40 +0200 |
commit | 3f16b4e8a2520b7b0567e40fa21874adc450c019 (patch) | |
tree | d4a936896830efd78da44dd13af01cad0c421996 /app | |
parent | 4aa68e74e099f7a18ee339a70d8a7ec0fdb6dffa (diff) | |
download | AntennaPod-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.java | 20 | ||||
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java | 72 |
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() { |