Reopen episode dialog on configuration change

This commit is contained in:
daniel oeh 2014-05-12 18:55:58 +02:00
parent aa700fe4b8
commit 155774557c
7 changed files with 71 additions and 15 deletions

View File

@ -54,7 +54,16 @@ public class FeedItemDialog extends Dialog {
private ImageButton butMore;
private PopupMenu popupMenu;
public static FeedItemDialog newInstace(Context context, FeedItem item, QueueAccess queue) {
public static FeedItemDialog newInstance(Context context, FeedItemDialogSavedInstance savedInstance) {
if (savedInstance == null) throw new IllegalArgumentException("savedInstance = null");
FeedItemDialog dialog = newInstance(context, savedInstance.item, savedInstance.queueAccess);
if (savedInstance.isShowing) {
dialog.show();
}
return dialog;
}
public static FeedItemDialog newInstance(Context context, FeedItem item, QueueAccess queue) {
if (useDarkThemeWorkAround()) {
return new FeedItemDialog(context, R.style.Theme_AntennaPod_Dark, item, queue);
} else {
@ -362,4 +371,23 @@ public class FeedItemDialog extends Dialog {
public QueueAccess getQueue() {
return queue;
}
public FeedItemDialogSavedInstance save() {
return new FeedItemDialogSavedInstance(item, queue, isShowing());
}
/**
* Used to save the FeedItemDialog's state across configuration changes
* */
public static class FeedItemDialogSavedInstance {
final FeedItem item;
final QueueAccess queueAccess;
final boolean isShowing;
private FeedItemDialogSavedInstance(FeedItem item, QueueAccess queueAccess, boolean isShowing) {
this.item = item;
this.queueAccess = queueAccess;
this.isShowing = isShowing;
}
}
}

View File

@ -92,7 +92,7 @@ public class CompletedDownloadsFragment extends ListFragment {
super.onListItemClick(l, v, position, id);
FeedItem item = listAdapter.getItem(position - l.getHeaderViewsCount());
if (item != null) {
feedItemDialog = FeedItemDialog.newInstace(getActivity(), item, queue);
feedItemDialog = FeedItemDialog.newInstance(getActivity(), item, queue);
feedItemDialog.show();
}
@ -186,7 +186,7 @@ public class CompletedDownloadsFragment extends ListFragment {
protected Object[] doInBackground(Void... params) {
Context context = getActivity();
if (context != null) {
return new Object[] {DBReader.getDownloadedItems(context),
return new Object[]{DBReader.getDownloadedItems(context),
QueueAccess.IDListAccess(DBReader.getQueueIDList(context))};
}
return null;

View File

@ -36,7 +36,6 @@ import de.danoeh.antennapod.storage.DBReader;
import de.danoeh.antennapod.storage.DownloadRequestException;
import de.danoeh.antennapod.storage.DownloadRequester;
import de.danoeh.antennapod.util.QueueAccess;
import de.danoeh.antennapod.util.menuhandler.FeedItemMenuHandler;
import de.danoeh.antennapod.util.menuhandler.FeedMenuHandler;
import de.danoeh.antennapod.util.menuhandler.MenuItemUtils;
@ -70,6 +69,7 @@ public class ItemlistFragment extends ListFragment {
private List<Downloader> downloaderList;
private FeedItemDialog feedItemDialog;
private FeedItemDialog.FeedItemDialogSavedInstance feedItemDialogSavedInstance;
/**
@ -143,6 +143,9 @@ public class ItemlistFragment extends ListFragment {
if (downloadObserver != null) {
downloadObserver.onPause();
}
if (feedItemDialog != null) {
feedItemDialogSavedInstance = feedItemDialog.save();
}
feedItemDialog = null;
}
@ -236,7 +239,7 @@ public class ItemlistFragment extends ListFragment {
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
FeedItem selection = adapter.getItem(position - l.getHeaderViewsCount());
feedItemDialog = FeedItemDialog.newInstace(getActivity(), selection, queue);
feedItemDialog = FeedItemDialog.newInstance(getActivity(), selection, queue);
feedItemDialog.show();
}
@ -285,6 +288,8 @@ public class ItemlistFragment extends ListFragment {
if (feedItemDialog != null) {
feedItemDialog.updateContent(queue, feed.getItems());
} else if (feedItemDialogSavedInstance != null) {
feedItemDialog = FeedItemDialog.newInstance(getActivity(), feedItemDialogSavedInstance);
}
getActivity().supportInvalidateOptionsMenu();
}

View File

@ -6,7 +6,6 @@ import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.SearchView;
@ -72,6 +71,7 @@ public class NewEpisodesFragment extends Fragment {
private DownloadObserver downloadObserver = null;
private FeedItemDialog feedItemDialog;
private FeedItemDialog.FeedItemDialogSavedInstance feedItemDialogSavedInstance;
@Override
public void onCreate(Bundle savedInstanceState) {
@ -128,6 +128,9 @@ public class NewEpisodesFragment extends Fragment {
if (downloadObserver != null) {
downloadObserver.onPause();
}
if (feedItemDialog != null) {
feedItemDialogSavedInstance = feedItemDialog.save();
}
feedItemDialog = null;
}
@ -204,7 +207,7 @@ public class NewEpisodesFragment extends Fragment {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
FeedItem item = (FeedItem) listAdapter.getItem(position - listView.getHeaderViewsCount());
if (item != null) {
feedItemDialog = FeedItemDialog.newInstace(activity.get(), item, queueAccess);
feedItemDialog = FeedItemDialog.newInstance(activity.get(), item, queueAccess);
feedItemDialog.show();
}
@ -235,6 +238,8 @@ public class NewEpisodesFragment extends Fragment {
}
if (feedItemDialog != null) {
feedItemDialog.updateContent(queueAccess, unreadItems, recentItems);
} else if (feedItemDialogSavedInstance != null) {
feedItemDialog = FeedItemDialog.newInstance(activity.get(), feedItemDialogSavedInstance);
}
listAdapter.notifyDataSetChanged();
getActivity().supportInvalidateOptionsMenu();

View File

@ -14,7 +14,6 @@ import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.adapter.ActionButtonCallback;
import de.danoeh.antennapod.adapter.DefaultActionButtonCallback;
import de.danoeh.antennapod.adapter.InternalFeedItemlistAdapter;
import de.danoeh.antennapod.asynctask.DownloadObserver;
@ -46,6 +45,7 @@ public class PlaybackHistoryFragment extends ListFragment {
private List<Downloader> downloaderList;
private FeedItemDialog feedItemDialog;
private FeedItemDialog.FeedItemDialogSavedInstance feedItemDialogSavedInstance;
@Override
public void onCreate(Bundle savedInstanceState) {
@ -101,6 +101,9 @@ public class PlaybackHistoryFragment extends ListFragment {
if (downloadObserver != null) {
downloadObserver.onPause();
}
if (feedItemDialog != null) {
feedItemDialogSavedInstance = feedItemDialog.save();
}
feedItemDialog = null;
}
@ -118,7 +121,7 @@ public class PlaybackHistoryFragment extends ListFragment {
super.onListItemClick(l, v, position, id);
FeedItem item = adapter.getItem(position - l.getHeaderViewsCount());
if (item != null) {
feedItemDialog = FeedItemDialog.newInstace(activity.get(), item, queue);
feedItemDialog = FeedItemDialog.newInstance(activity.get(), item, queue);
feedItemDialog.show();
}
}
@ -176,6 +179,8 @@ public class PlaybackHistoryFragment extends ListFragment {
adapter.notifyDataSetChanged();
if (feedItemDialog != null && feedItemDialog.isShowing()) {
feedItemDialog.updateContent(queue, playbackHistory);
} else if (feedItemDialogSavedInstance != null) {
feedItemDialog = FeedItemDialog.newInstance(activity.get(), feedItemDialogSavedInstance);
}
getActivity().supportInvalidateOptionsMenu();
}

View File

@ -60,6 +60,7 @@ public class QueueFragment extends Fragment {
private DownloadObserver downloadObserver = null;
private FeedItemDialog feedItemDialog;
private FeedItemDialog.FeedItemDialogSavedInstance feedItemDialogSavedInstance;
/**
* Download observer updates won't result in an upate of the list adapter if this is true.
@ -117,6 +118,9 @@ public class QueueFragment extends Fragment {
if (downloadObserver != null) {
downloadObserver.onPause();
}
if (feedItemDialog != null) {
feedItemDialogSavedInstance = feedItemDialog.save();
}
feedItemDialog = null;
}
@ -202,7 +206,7 @@ public class QueueFragment extends Fragment {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
FeedItem item = (FeedItem) listAdapter.getItem(position - listView.getHeaderViewsCount());
if (item != null) {
feedItemDialog = FeedItemDialog.newInstace(activity.get(), item, QueueAccess.ItemListAccess(queue));
feedItemDialog = FeedItemDialog.newInstance(activity.get(), item, QueueAccess.ItemListAccess(queue));
feedItemDialog.show();
}
}
@ -277,6 +281,8 @@ public class QueueFragment extends Fragment {
listAdapter.notifyDataSetChanged();
if (feedItemDialog != null) {
feedItemDialog.updateContent(QueueAccess.ItemListAccess(queue), queue);
} else if (feedItemDialogSavedInstance != null) {
feedItemDialog = FeedItemDialog.newInstance(activity.get(), feedItemDialogSavedInstance);
}
}

View File

@ -41,6 +41,7 @@ public class SearchFragment extends ListFragment {
private QueueAccess queue;
private FeedItemDialog feedItemDialog;
private FeedItemDialog.FeedItemDialogSavedInstance feedItemDialogSavedInstance;
/**
* Create a new SearchFragment that searches all feeds.
@ -96,6 +97,10 @@ public class SearchFragment extends ListFragment {
super.onDestroyView();
searchAdapter = null;
viewCreated = false;
if (feedItemDialog != null) {
feedItemDialogSavedInstance = feedItemDialog.save();
}
feedItemDialog = null;
}
@Override
@ -117,7 +122,7 @@ public class SearchFragment extends ListFragment {
((MainActivity)getActivity()).loadFeedFragment(comp.getId());
} else {
if (comp.getClass() == FeedItem.class) {
feedItemDialog = FeedItemDialog.newInstace(getActivity(), (FeedItem) comp, queue);
feedItemDialog = FeedItemDialog.newInstance(getActivity(), (FeedItem) comp, queue);
feedItemDialog.show();
}
}
@ -178,6 +183,8 @@ public class SearchFragment extends ListFragment {
}
}
feedItemDialog.updateMenuAppearance();
} else if (feedItemDialogSavedInstance != null) {
feedItemDialog = FeedItemDialog.newInstance(getActivity(), feedItemDialogSavedInstance);
}
}