Resolved dialog issues + fragment crashes

This commit is contained in:
daniel oeh 2014-04-22 13:55:20 +02:00
parent e68482e1b8
commit 1fe2a8da45
8 changed files with 82 additions and 33 deletions

View File

@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_width="match_parent" android:layout_height="match_parent">
android:layout_height="match_parent">
<LinearLayout <LinearLayout
android:id="@+id/header" android:id="@+id/header"
android:orientation="horizontal" android:orientation="horizontal"
android:layout_alignParentTop="true"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
@ -39,14 +39,17 @@
</LinearLayout> </LinearLayout>
<View <View
android:id="@+id/divider"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="3dp" android:layout_height="3dp"
android:layout_below="@id/header"
android:background="@color/bright_blue"/> android:background="@color/bright_blue"/>
<WebView <WebView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="0dp"
android:layout_below="@id/divider"
android:layout_alignParentBottom="true"
android:id="@+id/webview"/> android:id="@+id/webview"/>
</RelativeLayout>
</LinearLayout>

View File

@ -33,6 +33,7 @@ import de.danoeh.antennapod.util.QueueAccess;
import de.danoeh.antennapod.util.ShownotesProvider; import de.danoeh.antennapod.util.ShownotesProvider;
import de.danoeh.antennapod.util.menuhandler.FeedItemMenuHandler; import de.danoeh.antennapod.util.menuhandler.FeedItemMenuHandler;
import org.apache.commons.lang3.StringEscapeUtils; import org.apache.commons.lang3.StringEscapeUtils;
import org.shredzone.flattr4j.model.User;
import java.util.Collection; import java.util.Collection;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
@ -53,14 +54,35 @@ public class FeedItemDialog extends Dialog {
private ImageButton butMore; private ImageButton butMore;
private PopupMenu popupMenu; private PopupMenu popupMenu;
public FeedItemDialog(Context context, FeedItem item, QueueAccess queue) { public static FeedItemDialog newInstace(Context context, FeedItem item, QueueAccess queue) {
super(context); if (useDarkThemeWorkAround()) {
return new FeedItemDialog(context, R.style.Theme_AntennaPod_Dark, item, queue);
} else {
return new FeedItemDialog(context, item, queue);
}
}
public FeedItemDialog(Context context, int theme, FeedItem item, QueueAccess queue) {
super(context, theme);
if (item == null) throw new IllegalArgumentException("item = null"); if (item == null) throw new IllegalArgumentException("item = null");
if (queue == null) throw new IllegalArgumentException("queue = null"); if (queue == null) throw new IllegalArgumentException("queue = null");
this.item = item; this.item = item;
this.queue = queue; this.queue = queue;
} }
private FeedItemDialog(Context context, FeedItem item, QueueAccess queue) {
this(context, 0, item, queue);
}
/**
* Returns true if the dialog should use a dark theme. This has to be done on Gingerbread devices
* because dialogs are only available in a dark theme.
*/
private static boolean useDarkThemeWorkAround() {
return Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1
&& UserPreferences.getTheme() != R.style.Theme_AntennaPod_Dark;
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -170,6 +192,8 @@ public class FeedItemDialog extends Dialog {
updateMenuAppearance(); updateMenuAppearance();
} }
private final FeedItemMenuHandler.MenuInterface popupMenuInterface = new FeedItemMenuHandler.MenuInterface() { private final FeedItemMenuHandler.MenuInterface popupMenuInterface = new FeedItemMenuHandler.MenuInterface() {
@Override @Override
public void setItemVisibility(int id, boolean visible) { public void setItemVisibility(int id, boolean visible) {
@ -260,7 +284,12 @@ public class FeedItemDialog extends Dialog {
.getTheme() .getTheme()
.obtainStyledAttributes( .obtainStyledAttributes(
new int[]{android.R.attr.textColorPrimary}); new int[]{android.R.attr.textColorPrimary});
int colorResource = res.getColor(0, 0); int colorResource;
if (useDarkThemeWorkAround()) {
colorResource = getContext().getResources().getColor(R.color.black);
} else {
colorResource = res.getColor(0, 0);
}
String colorString = String.format("#%06X", String colorString = String.format("#%06X",
0xFFFFFF & colorResource); 0xFFFFFF & colorResource);
Log.i(TAG, "text color: " + colorString); Log.i(TAG, "text color: " + colorString);

View File

@ -53,6 +53,11 @@ public class CompletedDownloadsFragment extends ListFragment {
public void onDetach() { public void onDetach() {
super.onDetach(); super.onDetach();
stopItemLoader(); stopItemLoader();
}
@Override
public void onDestroyView() {
super.onDestroyView();
listAdapter = null; listAdapter = null;
viewCreated = false; viewCreated = false;
} }

View File

@ -118,7 +118,6 @@ public class ItemlistFragment extends ListFragment {
super.onStop(); super.onStop();
EventDistributor.getInstance().unregister(contentUpdate); EventDistributor.getInstance().unregister(contentUpdate);
stopItemLoader(); stopItemLoader();
resetViewState();
} }
@Override @Override
@ -131,6 +130,11 @@ public class ItemlistFragment extends ListFragment {
public void onDetach() { public void onDetach() {
super.onDetach(); super.onDetach();
stopItemLoader(); stopItemLoader();
}
@Override
public void onDestroyView() {
super.onDestroyView();
resetViewState(); resetViewState();
} }
@ -233,7 +237,7 @@ public class ItemlistFragment extends ListFragment {
@Override @Override
public void onListItemClick(ListView l, View v, int position, long id) { public void onListItemClick(ListView l, View v, int position, long id) {
FeedItem selection = adapter.getItem(position - l.getHeaderViewsCount()); FeedItem selection = adapter.getItem(position - l.getHeaderViewsCount());
feedItemDialog = new FeedItemDialog(getActivity(), selection, queue); feedItemDialog = FeedItemDialog.newInstace(getActivity(), selection, queue);
feedItemDialog.show(); feedItemDialog.show();
} }

View File

@ -100,7 +100,6 @@ public class NewEpisodesFragment extends Fragment {
super.onStop(); super.onStop();
EventDistributor.getInstance().unregister(contentUpdate); EventDistributor.getInstance().unregister(contentUpdate);
stopItemLoader(); stopItemLoader();
resetViewState();
} }
@Override @Override
@ -110,8 +109,8 @@ public class NewEpisodesFragment extends Fragment {
} }
@Override @Override
public void onDetach() { public void onDestroyView() {
super.onDetach(); super.onDestroyView();
resetViewState(); resetViewState();
} }
@ -192,7 +191,7 @@ public class NewEpisodesFragment extends Fragment {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
FeedItem item = (FeedItem) listAdapter.getItem(position - listView.getHeaderViewsCount()); FeedItem item = (FeedItem) listAdapter.getItem(position - listView.getHeaderViewsCount());
if (item != null) { if (item != null) {
feedItemDialog = new FeedItemDialog(activity.get(), item, queueAccess); feedItemDialog = FeedItemDialog.newInstace(activity.get(), item, queueAccess);
feedItemDialog.show(); feedItemDialog.show();
} }

View File

@ -73,13 +73,7 @@ public class PlaybackHistoryFragment extends ListFragment {
public void onDetach() { public void onDetach() {
super.onDetach(); super.onDetach();
stopItemLoader(); stopItemLoader();
adapter = null;
viewsCreated = false;
activity.set(null); activity.set(null);
if (downloadObserver != null) {
downloadObserver.onPause();
}
feedItemDialog = null;
} }
@Override @Override
@ -95,6 +89,17 @@ public class PlaybackHistoryFragment extends ListFragment {
} }
} }
@Override
public void onDestroyView() {
super.onDestroyView();
adapter = null;
viewsCreated = false;
if (downloadObserver != null) {
downloadObserver.onPause();
}
feedItemDialog = null;
}
@Override @Override
public void onViewCreated(View view, Bundle savedInstanceState) { public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
@ -109,7 +114,7 @@ public class PlaybackHistoryFragment extends ListFragment {
super.onListItemClick(l, v, position, id); super.onListItemClick(l, v, position, id);
FeedItem item = adapter.getItem(position - l.getHeaderViewsCount()); FeedItem item = adapter.getItem(position - l.getHeaderViewsCount());
if (item != null) { if (item != null) {
feedItemDialog = new FeedItemDialog(activity.get(), item, queue); feedItemDialog = FeedItemDialog.newInstace(activity.get(), item, queue);
feedItemDialog.show(); feedItemDialog.show();
} }
} }

View File

@ -96,7 +96,6 @@ public class QueueFragment extends Fragment {
super.onStop(); super.onStop();
EventDistributor.getInstance().unregister(contentUpdate); EventDistributor.getInstance().unregister(contentUpdate);
stopItemLoader(); stopItemLoader();
resetViewState();
} }
@Override @Override
@ -105,12 +104,6 @@ public class QueueFragment extends Fragment {
this.activity.set((MainActivity) activity); this.activity.set((MainActivity) activity);
} }
@Override
public void onDetach() {
super.onDetach();
resetViewState();
}
private void resetViewState() { private void resetViewState() {
listAdapter = null; listAdapter = null;
undoBarController = null; undoBarController = null;
@ -123,6 +116,12 @@ public class QueueFragment extends Fragment {
feedItemDialog = null; feedItemDialog = null;
} }
@Override
public void onDestroyView() {
super.onDestroyView();
resetViewState();
}
@Override @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater); super.onCreateOptionsMenu(menu, inflater);
@ -160,7 +159,7 @@ public class QueueFragment extends Fragment {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
FeedItem item = (FeedItem) listAdapter.getItem(position - listView.getHeaderViewsCount()); FeedItem item = (FeedItem) listAdapter.getItem(position - listView.getHeaderViewsCount());
if (item != null) { if (item != null) {
feedItemDialog = new FeedItemDialog(activity.get(), item, QueueAccess.ItemListAccess(queue)); feedItemDialog = FeedItemDialog.newInstace(activity.get(), item, QueueAccess.ItemListAccess(queue));
feedItemDialog.show(); feedItemDialog.show();
} }
} }

View File

@ -89,6 +89,11 @@ public class SearchFragment extends ListFragment {
public void onDetach() { public void onDetach() {
super.onDetach(); super.onDetach();
stopSearchTask(); stopSearchTask();
}
@Override
public void onDestroyView() {
super.onDestroyView();
searchAdapter = null; searchAdapter = null;
viewCreated = false; viewCreated = false;
} }
@ -112,7 +117,7 @@ public class SearchFragment extends ListFragment {
((MainActivity)getActivity()).loadFeedFragment(comp.getId()); ((MainActivity)getActivity()).loadFeedFragment(comp.getId());
} else { } else {
if (comp.getClass() == FeedItem.class) { if (comp.getClass() == FeedItem.class) {
feedItemDialog = new FeedItemDialog(getActivity(), (FeedItem) comp, queue); feedItemDialog = FeedItemDialog.newInstace(getActivity(), (FeedItem) comp, queue);
feedItemDialog.show(); feedItemDialog.show();
} }
} }