Loading api/current.xml +48 −1 Original line number Diff line number Diff line Loading @@ -29871,6 +29871,36 @@ <parameter name="a" type="android.app.Activity"> </parameter> </method> <method name="setMaxVisible" return="void" abstract="false" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > <parameter name="visibleCrumbs" type="int"> </parameter> </method> <method name="setParentTitle" return="void" abstract="false" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > <parameter name="title" type="java.lang.CharSequence"> </parameter> <parameter name="shortTitle" type="java.lang.CharSequence"> </parameter> <parameter name="listener" type="android.view.View.OnClickListener"> </parameter> </method> <method name="setTitle" return="void" abstract="false" Loading Loading @@ -148256,6 +148286,23 @@ <parameter name="view" type="android.view.View"> </parameter> </method> <method name="setParentTitle" return="void" abstract="false" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > <parameter name="title" type="java.lang.CharSequence"> </parameter> <parameter name="shortTitle" type="java.lang.CharSequence"> </parameter> <parameter name="listener" type="android.view.View.OnClickListener"> </parameter> </method> <method name="setPreferenceScreen" return="void" abstract="false" Loading Loading @@ -251222,7 +251269,7 @@ deprecated="not deprecated" visibility="public" > <parameter name="arg0" type="T"> <parameter name="t" type="T"> </parameter> </method> </interface> core/java/android/app/FragmentBreadCrumbs.java +83 −24 Original line number Diff line number Diff line Loading @@ -45,6 +45,10 @@ public class FragmentBreadCrumbs extends ViewGroup // Hahah BackStackRecord mTopEntry; BackStackRecord mParentEntry; /** Listener to inform when a parent entry is clicked */ private OnClickListener mParentClickListener; public FragmentBreadCrumbs(Context context) { this(context, null); Loading Loading @@ -75,27 +79,51 @@ public class FragmentBreadCrumbs extends ViewGroup } /** * The maximum number of crumbs to show. * @hide * The maximum number of breadcrumbs to show. Older fragment headers will be hidden from view. * @param visibleCrumbs the number of visible breadcrumbs. This should be greater than zero. */ public void setMaxVisible(int visibleCrumbs) { if (visibleCrumbs < 1) { throw new IllegalArgumentException("visibleCrumbs must be greater than zero"); } mMaxVisible = visibleCrumbs; } /** * Inserts an optional parent entry at the first position in the breadcrumbs. Selecting this * entry will result in a call to the specified listener's * {@link android.view.View.OnClickListener#onClick(View)} * method. * * @param title the title for the parent entry * @param shortTitle the short title for the parent entry * @param listener the {@link android.view.View.OnClickListener} to be called when clicked. * A null will result in no action being taken when the parent entry is clicked. */ public void setParentTitle(CharSequence title, CharSequence shortTitle, OnClickListener listener) { mParentEntry = createBackStackEntry(title, shortTitle); mParentClickListener = listener; updateCrumbs(); } private BackStackRecord createBackStackEntry(CharSequence title, CharSequence shortTitle) { if (title == null) return null; final BackStackRecord entry = new BackStackRecord( (FragmentManagerImpl) mActivity.getFragmentManager()); entry.setBreadCrumbTitle(title); entry.setBreadCrumbShortTitle(shortTitle); return entry; } /** * Set a custom title for the bread crumbs. This will be the first entry * shown at the left, representing the root of the bread crumbs. If the * title is null, it will not be shown. */ public void setTitle(CharSequence title, CharSequence shortTitle) { if (title == null) { mTopEntry = null; } else { mTopEntry = new BackStackRecord((FragmentManagerImpl) mActivity.getFragmentManager()); mTopEntry.setBreadCrumbTitle(title); mTopEntry.setBreadCrumbShortTitle(shortTitle); } mTopEntry = createBackStackEntry(title, shortTitle); updateCrumbs(); } Loading Loading @@ -151,38 +179,63 @@ public class FragmentBreadCrumbs extends ViewGroup updateCrumbs(); } /** * Returns the number of entries before the backstack, including the title of the current * fragment and any custom parent title that was set. */ private int getPreEntryCount() { return (mTopEntry != null ? 1 : 0) + (mParentEntry != null ? 1 : 0); } /** * Returns the pre-entry corresponding to the index. If there is a parent and a top entry * set, parent has an index of zero and top entry has an index of 1. Returns null if the * specified index doesn't exist or is null. * @param index should not be more than {@link #getPreEntryCount()} - 1 */ private BackStackEntry getPreEntry(int index) { // If there's a parent entry, then return that for zero'th item, else top entry. if (mParentEntry != null) { return index == 0 ? mParentEntry : mTopEntry; } else { return mTopEntry; } } void updateCrumbs() { FragmentManager fm = mActivity.getFragmentManager(); int numEntries = fm.countBackStackEntries(); int numPreEntries = getPreEntryCount(); int numViews = mContainer.getChildCount(); for (int i = mTopEntry != null ? -1 : 0; i < numEntries; i++) { BackStackEntry bse = i == -1 ? mTopEntry : fm.getBackStackEntry(i); int viewI = mTopEntry != null ? i + 1 : i; if (viewI < numViews) { View v = mContainer.getChildAt(viewI); for (int i = 0; i < numEntries + numPreEntries; i++) { BackStackEntry bse = i < numPreEntries ? getPreEntry(i) : fm.getBackStackEntry(i - numPreEntries); if (i < numViews) { View v = mContainer.getChildAt(i); Object tag = v.getTag(); if (tag != bse) { for (int j = viewI; j < numViews; j++) { mContainer.removeViewAt(viewI); for (int j = i; j < numViews; j++) { mContainer.removeViewAt(i); } numViews = viewI; numViews = i; } } if (viewI >= numViews) { if (i >= numViews) { final View item = mInflater.inflate( com.android.internal.R.layout.fragment_bread_crumb_item, this, false); final TextView text = (TextView) item.findViewById(com.android.internal.R.id.title); text.setText(bse.getBreadCrumbTitle()); text.setTag(bse); if (viewI == 0) { if (i == 0) { item.findViewById(com.android.internal.R.id.left_icon).setVisibility(View.GONE); } mContainer.addView(item); text.setOnClickListener(mOnClickListener); } } int viewI = mTopEntry != null ? numEntries + 1 : numEntries; int viewI = numEntries + numPreEntries; numViews = mContainer.getChildCount(); while (numViews > viewI) { mContainer.removeViewAt(numViews - 1); Loading @@ -208,9 +261,15 @@ public class FragmentBreadCrumbs extends ViewGroup public void onClick(View v) { if (v.getTag() instanceof BackStackEntry) { BackStackEntry bse = (BackStackEntry) v.getTag(); if (bse == mParentEntry) { if (mParentClickListener != null) { mParentClickListener.onClick(v); } } else { mActivity.getFragmentManager().popBackStack(bse.getId(), bse == mTopEntry? FragmentManager.POP_BACK_STACK_INCLUSIVE : 0); } } } }; } core/java/android/preference/PreferenceActivity.java +15 −0 Original line number Diff line number Diff line Loading @@ -1005,6 +1005,21 @@ public abstract class PreferenceActivity extends ListActivity implements mFragmentBreadCrumbs.setActivity(this); } mFragmentBreadCrumbs.setTitle(title, shortTitle); mFragmentBreadCrumbs.setParentTitle(null, null, null); } /** * Should be called after onCreate to ensure that the breadcrumbs, if any, were created. * This prepends a title to the fragment breadcrumbs and attaches a listener to any clicks * on the parent entry. * @param title the title for the breadcrumb * @param shortTitle the short title for the breadcrumb */ public void setParentTitle(CharSequence title, CharSequence shortTitle, OnClickListener listener) { if (mFragmentBreadCrumbs != null) { mFragmentBreadCrumbs.setParentTitle(title, shortTitle, listener); } } void setSelectedHeader(Header header) { Loading Loading
api/current.xml +48 −1 Original line number Diff line number Diff line Loading @@ -29871,6 +29871,36 @@ <parameter name="a" type="android.app.Activity"> </parameter> </method> <method name="setMaxVisible" return="void" abstract="false" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > <parameter name="visibleCrumbs" type="int"> </parameter> </method> <method name="setParentTitle" return="void" abstract="false" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > <parameter name="title" type="java.lang.CharSequence"> </parameter> <parameter name="shortTitle" type="java.lang.CharSequence"> </parameter> <parameter name="listener" type="android.view.View.OnClickListener"> </parameter> </method> <method name="setTitle" return="void" abstract="false" Loading Loading @@ -148256,6 +148286,23 @@ <parameter name="view" type="android.view.View"> </parameter> </method> <method name="setParentTitle" return="void" abstract="false" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > <parameter name="title" type="java.lang.CharSequence"> </parameter> <parameter name="shortTitle" type="java.lang.CharSequence"> </parameter> <parameter name="listener" type="android.view.View.OnClickListener"> </parameter> </method> <method name="setPreferenceScreen" return="void" abstract="false" Loading Loading @@ -251222,7 +251269,7 @@ deprecated="not deprecated" visibility="public" > <parameter name="arg0" type="T"> <parameter name="t" type="T"> </parameter> </method> </interface>
core/java/android/app/FragmentBreadCrumbs.java +83 −24 Original line number Diff line number Diff line Loading @@ -45,6 +45,10 @@ public class FragmentBreadCrumbs extends ViewGroup // Hahah BackStackRecord mTopEntry; BackStackRecord mParentEntry; /** Listener to inform when a parent entry is clicked */ private OnClickListener mParentClickListener; public FragmentBreadCrumbs(Context context) { this(context, null); Loading Loading @@ -75,27 +79,51 @@ public class FragmentBreadCrumbs extends ViewGroup } /** * The maximum number of crumbs to show. * @hide * The maximum number of breadcrumbs to show. Older fragment headers will be hidden from view. * @param visibleCrumbs the number of visible breadcrumbs. This should be greater than zero. */ public void setMaxVisible(int visibleCrumbs) { if (visibleCrumbs < 1) { throw new IllegalArgumentException("visibleCrumbs must be greater than zero"); } mMaxVisible = visibleCrumbs; } /** * Inserts an optional parent entry at the first position in the breadcrumbs. Selecting this * entry will result in a call to the specified listener's * {@link android.view.View.OnClickListener#onClick(View)} * method. * * @param title the title for the parent entry * @param shortTitle the short title for the parent entry * @param listener the {@link android.view.View.OnClickListener} to be called when clicked. * A null will result in no action being taken when the parent entry is clicked. */ public void setParentTitle(CharSequence title, CharSequence shortTitle, OnClickListener listener) { mParentEntry = createBackStackEntry(title, shortTitle); mParentClickListener = listener; updateCrumbs(); } private BackStackRecord createBackStackEntry(CharSequence title, CharSequence shortTitle) { if (title == null) return null; final BackStackRecord entry = new BackStackRecord( (FragmentManagerImpl) mActivity.getFragmentManager()); entry.setBreadCrumbTitle(title); entry.setBreadCrumbShortTitle(shortTitle); return entry; } /** * Set a custom title for the bread crumbs. This will be the first entry * shown at the left, representing the root of the bread crumbs. If the * title is null, it will not be shown. */ public void setTitle(CharSequence title, CharSequence shortTitle) { if (title == null) { mTopEntry = null; } else { mTopEntry = new BackStackRecord((FragmentManagerImpl) mActivity.getFragmentManager()); mTopEntry.setBreadCrumbTitle(title); mTopEntry.setBreadCrumbShortTitle(shortTitle); } mTopEntry = createBackStackEntry(title, shortTitle); updateCrumbs(); } Loading Loading @@ -151,38 +179,63 @@ public class FragmentBreadCrumbs extends ViewGroup updateCrumbs(); } /** * Returns the number of entries before the backstack, including the title of the current * fragment and any custom parent title that was set. */ private int getPreEntryCount() { return (mTopEntry != null ? 1 : 0) + (mParentEntry != null ? 1 : 0); } /** * Returns the pre-entry corresponding to the index. If there is a parent and a top entry * set, parent has an index of zero and top entry has an index of 1. Returns null if the * specified index doesn't exist or is null. * @param index should not be more than {@link #getPreEntryCount()} - 1 */ private BackStackEntry getPreEntry(int index) { // If there's a parent entry, then return that for zero'th item, else top entry. if (mParentEntry != null) { return index == 0 ? mParentEntry : mTopEntry; } else { return mTopEntry; } } void updateCrumbs() { FragmentManager fm = mActivity.getFragmentManager(); int numEntries = fm.countBackStackEntries(); int numPreEntries = getPreEntryCount(); int numViews = mContainer.getChildCount(); for (int i = mTopEntry != null ? -1 : 0; i < numEntries; i++) { BackStackEntry bse = i == -1 ? mTopEntry : fm.getBackStackEntry(i); int viewI = mTopEntry != null ? i + 1 : i; if (viewI < numViews) { View v = mContainer.getChildAt(viewI); for (int i = 0; i < numEntries + numPreEntries; i++) { BackStackEntry bse = i < numPreEntries ? getPreEntry(i) : fm.getBackStackEntry(i - numPreEntries); if (i < numViews) { View v = mContainer.getChildAt(i); Object tag = v.getTag(); if (tag != bse) { for (int j = viewI; j < numViews; j++) { mContainer.removeViewAt(viewI); for (int j = i; j < numViews; j++) { mContainer.removeViewAt(i); } numViews = viewI; numViews = i; } } if (viewI >= numViews) { if (i >= numViews) { final View item = mInflater.inflate( com.android.internal.R.layout.fragment_bread_crumb_item, this, false); final TextView text = (TextView) item.findViewById(com.android.internal.R.id.title); text.setText(bse.getBreadCrumbTitle()); text.setTag(bse); if (viewI == 0) { if (i == 0) { item.findViewById(com.android.internal.R.id.left_icon).setVisibility(View.GONE); } mContainer.addView(item); text.setOnClickListener(mOnClickListener); } } int viewI = mTopEntry != null ? numEntries + 1 : numEntries; int viewI = numEntries + numPreEntries; numViews = mContainer.getChildCount(); while (numViews > viewI) { mContainer.removeViewAt(numViews - 1); Loading @@ -208,9 +261,15 @@ public class FragmentBreadCrumbs extends ViewGroup public void onClick(View v) { if (v.getTag() instanceof BackStackEntry) { BackStackEntry bse = (BackStackEntry) v.getTag(); if (bse == mParentEntry) { if (mParentClickListener != null) { mParentClickListener.onClick(v); } } else { mActivity.getFragmentManager().popBackStack(bse.getId(), bse == mTopEntry? FragmentManager.POP_BACK_STACK_INCLUSIVE : 0); } } } }; }
core/java/android/preference/PreferenceActivity.java +15 −0 Original line number Diff line number Diff line Loading @@ -1005,6 +1005,21 @@ public abstract class PreferenceActivity extends ListActivity implements mFragmentBreadCrumbs.setActivity(this); } mFragmentBreadCrumbs.setTitle(title, shortTitle); mFragmentBreadCrumbs.setParentTitle(null, null, null); } /** * Should be called after onCreate to ensure that the breadcrumbs, if any, were created. * This prepends a title to the fragment breadcrumbs and attaches a listener to any clicks * on the parent entry. * @param title the title for the breadcrumb * @param shortTitle the short title for the breadcrumb */ public void setParentTitle(CharSequence title, CharSequence shortTitle, OnClickListener listener) { if (mFragmentBreadCrumbs != null) { mFragmentBreadCrumbs.setParentTitle(title, shortTitle, listener); } } void setSelectedHeader(Header header) { Loading