1 package com.koushikdutta.widgets;
3 import junit.framework.Assert;
4 import android.annotation.SuppressLint;
5 import android.app.Activity;
6 import android.content.res.Configuration;
7 import android.os.Bundle;
8 import android.support.v4.app.Fragment;
9 import android.support.v4.app.FragmentActivity;
10 import android.support.v4.app.FragmentManager;
11 import android.support.v4.app.FragmentManager.OnBackStackChangedListener;
12 import android.support.v4.app.FragmentTransaction;
13 import android.view.View;
14 import android.view.ViewGroup;
15 import android.widget.ListView;
17 public class ListContentFragmentInternal extends BetterListFragmentInternal {
21 public ViewGroup getContainer() {
25 public ListContentFragmentInternal(FragmentInterfaceWrapper fragment) {
30 protected int getListHeaderResource() {
31 return R.layout.list_content_header;
35 protected void setPadding() {
37 float hor = getResources().getDimension(R.dimen.list_horizontal_margin);
38 float ver = getResources().getDimension(R.dimen.list_vertical_margin);
39 getListView().setPadding(0, 0, 0, 0);
41 mContainer.setPadding((int)hor, (int)ver, (int)hor, (int)ver);
44 FragmentInterfaceWrapper mCurrentContent;
47 protected void onCreate(Bundle savedInstanceState, View ret) {
48 mContent = (ViewGroup)ret.findViewById(R.id.content);
49 mContainer = (ViewGroup)ret.findViewById(R.id.list_content_container);
51 getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
53 super.onCreate(savedInstanceState, ret);
56 public boolean isPaged() {
57 return mContent == null;
62 return R.id.list_content_container;
66 static Object backstackListener;
67 static Object pendingFragment;
70 @SuppressLint("InlinedApi")
71 private void onDetachNative() {
72 Activity fa = getActivity();
73 fa.getFragmentManager().popBackStack("content", android.app.FragmentManager.POP_BACK_STACK_INCLUSIVE);
77 public void onDetach() {
80 if (getActivity() == null || getActivity().isFinishing() || getActivity().isChangingConfigurations())
86 if (getActivity() instanceof FragmentActivity) {
87 FragmentActivity fa = (FragmentActivity)getActivity();
88 fa.getSupportFragmentManager().popBackStack("content", FragmentManager.POP_BACK_STACK_INCLUSIVE);
96 @SuppressLint("InlinedApi")
97 void setContentNative(final String breadcrumb) {
98 android.app.Fragment f = (android.app.Fragment)mCurrentContent;
99 Activity fa = getActivity();
100 final android.app.FragmentManager fm = fa.getFragmentManager();
102 android.app.FragmentTransaction ft = fm.beginTransaction();
104 if (listener == null) {
105 fm.addOnBackStackChangedListener(new android.app.FragmentManager.OnBackStackChangedListener() {
110 public void onBackStackChanged() {
111 android.app.Fragment f = (android.app.Fragment)getFragment();
112 if (f.isDetached() || f.isRemoving()) {
113 fm.removeOnBackStackChangedListener(this);
116 View v = getFragment().getView();
119 final View l = v.findViewById(R.id.list_fragment);
122 if (fm.getBackStackEntryCount() > 0 && "content".equals(fm.getBackStackEntryAt(fm.getBackStackEntryCount() - 1).getName())) {
123 l.setVisibility(View.GONE);
126 l.setVisibility(View.VISIBLE);
132 fm.popBackStack("content", android.app.FragmentManager.POP_BACK_STACK_INCLUSIVE);
133 ft.setBreadCrumbTitle(breadcrumb);
134 ft.setBreadCrumbShortTitle(breadcrumb);
135 ft.addToBackStack("content");
137 ft.replace(getContentId(), f, "content");
138 ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
142 public void setContent(FragmentInterfaceWrapper content, boolean clearChoices, String breadcrumb) {
143 mCurrentContent = content;
144 if (getActivity() instanceof FragmentActivity) {
145 Fragment f = (Fragment)mCurrentContent;
146 FragmentActivity fa = (FragmentActivity)getActivity();
147 final FragmentManager fm = fa.getSupportFragmentManager();
148 FragmentTransaction ft = fa.getSupportFragmentManager().beginTransaction();
150 final int curSize = fm.getBackStackEntryCount();
151 View v = getFragment().getView();
152 Assert.assertNotNull(v);
153 final View l = v.findViewById(R.id.list_fragment);
154 Assert.assertNotNull(l);
155 l.setVisibility(View.GONE);
156 fm.addOnBackStackChangedListener(new OnBackStackChangedListener() {
158 public void onBackStackChanged() {
159 if (curSize != fm.getBackStackEntryCount())
161 l.setVisibility(View.VISIBLE);
162 fm.removeOnBackStackChangedListener(this);
165 ft.addToBackStack("content");
167 ft.replace(getContentId(), f, "content");
168 ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
172 setContentNative(breadcrumb);
176 getListView().clearChoices();
180 protected int getListItemResource() {
181 return R.layout.list_item_selectable;
185 protected int getListFragmentResource() {
186 return R.layout.list_content;
190 public void onConfigurationChanged(Configuration newConfig) {
191 super.onConfigurationChanged(newConfig);