hides title and menu items when hiding action bar in search fragment
This commit is contained in:
parent
4b32455fa2
commit
c2dae75dec
|
@ -47,6 +47,7 @@ import org.mariotaku.twidere.adapter.support.SupportTabsAdapter;
|
|||
import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowsInsetsCallback;
|
||||
import org.mariotaku.twidere.fragment.iface.RefreshScrollTopInterface;
|
||||
import org.mariotaku.twidere.fragment.iface.SupportFragmentCallback;
|
||||
import org.mariotaku.twidere.graphic.EmptyDrawable;
|
||||
import org.mariotaku.twidere.provider.RecentSearchProvider;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.SearchHistory;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
|
@ -59,6 +60,7 @@ public class SearchFragment extends BaseSupportFragment implements RefreshScroll
|
|||
OnPageChangeListener {
|
||||
|
||||
private ViewPager mViewPager;
|
||||
private View mPagerWindowOverlay;
|
||||
|
||||
private SupportTabsAdapter mAdapter;
|
||||
private TabPagerIndicator mPagerIndicator;
|
||||
|
@ -111,8 +113,14 @@ public class SearchFragment extends BaseSupportFragment implements RefreshScroll
|
|||
}
|
||||
|
||||
private void updateTabOffset() {
|
||||
int controlBarHeight = getControlBarHeight();
|
||||
mPagerIndicator.setTranslationY(controlBarHeight - mControlBarOffsetPixels);
|
||||
final int controlBarHeight = getControlBarHeight();
|
||||
final int translationY = controlBarHeight - mControlBarOffsetPixels;
|
||||
final View view = getActivity().getWindow().findViewById(android.support.v7.appcompat.R.id.action_bar);
|
||||
if (view != null && controlBarHeight != 0) {
|
||||
view.setAlpha(translationY / (float) controlBarHeight);
|
||||
}
|
||||
mPagerIndicator.setTranslationY(translationY);
|
||||
mPagerWindowOverlay.setTranslationY(translationY);
|
||||
}
|
||||
|
||||
private int getControlBarHeight() {
|
||||
|
@ -163,7 +171,8 @@ public class SearchFragment extends BaseSupportFragment implements RefreshScroll
|
|||
mPagerIndicator.setViewPager(mViewPager);
|
||||
mPagerIndicator.setTabDisplayOption(TabPagerIndicator.LABEL);
|
||||
mPagerIndicator.setOnPageChangeListener(this);
|
||||
ThemeUtils.initPagerIndicatorAsActionBarTab(activity,mPagerIndicator);
|
||||
ThemeUtils.initPagerIndicatorAsActionBarTab(activity, mPagerIndicator);
|
||||
ThemeUtils.setCompatToolbarOverlay(activity, new EmptyDrawable());
|
||||
if (savedInstanceState == null && args != null && args.containsKey(EXTRA_QUERY)) {
|
||||
final String query = args.getString(EXTRA_QUERY);
|
||||
final SearchRecentSuggestions suggestions = new SearchRecentSuggestions(getActivity(),
|
||||
|
@ -246,6 +255,7 @@ public class SearchFragment extends BaseSupportFragment implements RefreshScroll
|
|||
public void onBaseViewCreated(final View view, final Bundle savedInstanceState) {
|
||||
super.onBaseViewCreated(view, savedInstanceState);
|
||||
mViewPager = (ViewPager) view.findViewById(R.id.view_pager);
|
||||
mPagerWindowOverlay = view.findViewById(R.id.pager_window_overlay);
|
||||
mPagerIndicator = (TabPagerIndicator) view.findViewById(R.id.view_pager_tabs);
|
||||
}
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@ import android.nfc.NdefRecord;
|
|||
import android.nfc.NfcAdapter.CreateNdefMessageCallback;
|
||||
import android.nfc.NfcEvent;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.Fragment;
|
||||
|
@ -1207,50 +1208,52 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
timeSourceView.setTextSize(defaultTextSize * 0.85f);
|
||||
|
||||
textView.setMovementMethod(StatusContentMovementMethod.getInstance());
|
||||
textView.setCustomSelectionActionModeCallback(new Callback() {
|
||||
@Override
|
||||
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
|
||||
final FragmentActivity activity = fragment.getActivity();
|
||||
if (activity instanceof IThemedActivity) {
|
||||
final int themeRes = ((IThemedActivity) activity).getCurrentThemeResourceId();
|
||||
final int accentColor = ((IThemedActivity) activity).getCurrentThemeColor();
|
||||
ThemeUtils.applySupportActionModeBackground(mode, fragment.getActivity(), themeRes, accentColor, true);
|
||||
}
|
||||
mode.getMenuInflater().inflate(R.menu.action_status_text_selection, menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
|
||||
final int start = textView.getSelectionStart(), end = textView.getSelectionEnd();
|
||||
final SpannableString string = SpannableString.valueOf(textView.getText());
|
||||
final URLSpan[] spans = string.getSpans(start, end, URLSpan.class);
|
||||
final boolean avail = spans.length == 1 && URLUtil.isValidUrl(spans[0].getURL());
|
||||
Utils.setMenuItemAvailability(menu, android.R.id.copyUrl, avail);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.copyUrl: {
|
||||
final int start = textView.getSelectionStart(), end = textView.getSelectionEnd();
|
||||
final SpannableString string = SpannableString.valueOf(textView.getText());
|
||||
final URLSpan[] spans = string.getSpans(start, end, URLSpan.class);
|
||||
if (spans.length != 1) return true;
|
||||
ClipboardUtils.setText(activity, spans[0].getURL());
|
||||
mode.finish();
|
||||
return true;
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
textView.setCustomSelectionActionModeCallback(new Callback() {
|
||||
@Override
|
||||
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
|
||||
final FragmentActivity activity = fragment.getActivity();
|
||||
if (activity instanceof IThemedActivity) {
|
||||
final int themeRes = ((IThemedActivity) activity).getCurrentThemeResourceId();
|
||||
final int accentColor = ((IThemedActivity) activity).getCurrentThemeColor();
|
||||
ThemeUtils.applySupportActionModeBackground(mode, fragment.getActivity(), themeRes, accentColor, true);
|
||||
}
|
||||
mode.getMenuInflater().inflate(R.menu.action_status_text_selection, menu);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroyActionMode(ActionMode mode) {
|
||||
@Override
|
||||
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
|
||||
final int start = textView.getSelectionStart(), end = textView.getSelectionEnd();
|
||||
final SpannableString string = SpannableString.valueOf(textView.getText());
|
||||
final URLSpan[] spans = string.getSpans(start, end, URLSpan.class);
|
||||
final boolean avail = spans.length == 1 && URLUtil.isValidUrl(spans[0].getURL());
|
||||
Utils.setMenuItemAvailability(menu, android.R.id.copyUrl, avail);
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
@Override
|
||||
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.copyUrl: {
|
||||
final int start = textView.getSelectionStart(), end = textView.getSelectionEnd();
|
||||
final SpannableString string = SpannableString.valueOf(textView.getText());
|
||||
final URLSpan[] spans = string.getSpans(start, end, URLSpan.class);
|
||||
if (spans.length != 1) return true;
|
||||
ClipboardUtils.setText(activity, spans[0].getURL());
|
||||
mode.finish();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroyActionMode(ActionMode mode) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -61,7 +61,6 @@ import android.support.v4.content.res.ResourcesCompat;
|
|||
import android.support.v4.view.ViewCompat;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.support.v7.internal.widget.ActionBarOverlayLayout;
|
||||
import android.text.Html;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.Spanned;
|
||||
|
@ -133,7 +132,6 @@ import org.mariotaku.twidere.view.TabPagerIndicator;
|
|||
import org.mariotaku.twidere.view.TintedStatusFrameLayout;
|
||||
import org.mariotaku.twidere.view.iface.IExtendedView.OnSizeChangedListener;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
|
@ -1376,18 +1374,11 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
updateTitleColor();
|
||||
}
|
||||
|
||||
private void setCompatToolbarOverlayAlpha(FragmentActivity activity, float alpha) {
|
||||
private static void setCompatToolbarOverlayAlpha(FragmentActivity activity, float alpha) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) return;
|
||||
final View view = activity.getWindow().findViewById(android.support.v7.appcompat.R.id.decor_content_parent);
|
||||
if (!(view instanceof ActionBarOverlayLayout)) return;
|
||||
try {
|
||||
final Field field = ActionBarOverlayLayout.class.getDeclaredField("mWindowContentOverlay");
|
||||
field.setAccessible(true);
|
||||
final Drawable drawable = (Drawable) field.get(view);
|
||||
if (drawable == null) return;
|
||||
drawable.setAlpha(Math.round(alpha * 255));
|
||||
} catch (Exception ignore) {
|
||||
}
|
||||
final Drawable drawable = ThemeUtils.getCompatToolbarOverlay(activity);
|
||||
if (drawable == null) return;
|
||||
drawable.setAlpha(Math.round(alpha * 255));
|
||||
}
|
||||
|
||||
private void updateTitleColor() {
|
||||
|
|
|
@ -29,11 +29,11 @@ import android.view.View;
|
|||
import android.view.ViewGroup;
|
||||
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.iface.IThemedActivity;
|
||||
import org.mariotaku.twidere.adapter.support.SupportTabsAdapter;
|
||||
import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowsInsetsCallback;
|
||||
import org.mariotaku.twidere.fragment.iface.RefreshScrollTopInterface;
|
||||
import org.mariotaku.twidere.fragment.iface.SupportFragmentCallback;
|
||||
import org.mariotaku.twidere.graphic.EmptyDrawable;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.view.TabPagerIndicator;
|
||||
|
||||
|
@ -68,6 +68,7 @@ public class UserListsFragment extends BaseSupportFragment implements RefreshScr
|
|||
mPagerIndicator.setViewPager(mViewPager);
|
||||
mPagerIndicator.setTabDisplayOption(TabPagerIndicator.LABEL);
|
||||
ThemeUtils.initPagerIndicatorAsActionBarTab(activity, mPagerIndicator);
|
||||
ThemeUtils.setCompatToolbarOverlay(activity, new EmptyDrawable());
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -41,6 +41,7 @@ import android.support.v7.internal.app.WindowDecorActionBar.ActionModeImpl;
|
|||
import android.support.v7.internal.view.SupportActionModeWrapper;
|
||||
import android.support.v7.internal.view.SupportActionModeWrapperTrojan;
|
||||
import android.support.v7.internal.view.menu.ActionMenuItemView;
|
||||
import android.support.v7.internal.widget.ActionBarOverlayLayout;
|
||||
import android.support.v7.widget.ActionMenuView;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.Spanned;
|
||||
|
@ -162,6 +163,19 @@ public class ThemeUtils implements Constants {
|
|||
}
|
||||
}
|
||||
|
||||
public static Drawable getCompatToolbarOverlay(Activity activity) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) return null;
|
||||
final View view = activity.getWindow().findViewById(android.support.v7.appcompat.R.id.decor_content_parent);
|
||||
if (!(view instanceof ActionBarOverlayLayout)) return null;
|
||||
try {
|
||||
final Field field = ActionBarOverlayLayout.class.getDeclaredField("mWindowContentOverlay");
|
||||
field.setAccessible(true);
|
||||
return (Drawable) field.get(view);
|
||||
} catch (Exception ignore) {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void initPagerIndicatorAsActionBarTab(FragmentActivity activity, TabPagerIndicator indicator) {
|
||||
final float supportActionBarElevation = getSupportActionBarElevation(activity);
|
||||
ViewCompat.setElevation(indicator, supportActionBarElevation);
|
||||
|
@ -203,6 +217,18 @@ public class ThemeUtils implements Constants {
|
|||
}
|
||||
}
|
||||
|
||||
public static void setCompatToolbarOverlay(Activity activity, Drawable background) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) return;
|
||||
final View view = activity.getWindow().findViewById(android.support.v7.appcompat.R.id.decor_content_parent);
|
||||
if (!(view instanceof ActionBarOverlayLayout)) return;
|
||||
try {
|
||||
final Field field = ActionBarOverlayLayout.class.getDeclaredField("mWindowContentOverlay");
|
||||
field.setAccessible(true);
|
||||
field.set(view, background);
|
||||
} catch (Exception ignore) {
|
||||
}
|
||||
}
|
||||
|
||||
public static void wrapMenuIcon(@NonNull Menu menu, int itemColor, int subItemColor, int... excludeGroups) {
|
||||
for (int i = 0, j = menu.size(); i < j; i++) {
|
||||
final MenuItem item = menu.getItem(i);
|
||||
|
|
|
@ -129,7 +129,9 @@ public final class TwidereLinkify implements Constants {
|
|||
addLinks(string, account_id, type, sensitive, listener, highlightOption);
|
||||
}
|
||||
view.setText(string);
|
||||
addLinkMovementMethod(view);
|
||||
if (mAddMovementMethod) {
|
||||
addLinkMovementMethod(view);
|
||||
}
|
||||
}
|
||||
|
||||
public final void applyUserProfileLink(final TextView view, final long accountId, final long userId,
|
||||
|
@ -152,7 +154,9 @@ public final class TwidereLinkify implements Constants {
|
|||
applyLink(screenName, 0, string.length(), string, accountId, LINK_TYPE_MENTION, false, listener);
|
||||
}
|
||||
view.setText(string);
|
||||
addLinkMovementMethod(view);
|
||||
if (mAddMovementMethod) {
|
||||
addLinkMovementMethod(view);
|
||||
}
|
||||
}
|
||||
|
||||
public void setHighlightOption(final int style) {
|
||||
|
|
|
@ -30,11 +30,11 @@
|
|||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<View
|
||||
<android.support.v4.view.ViewPager
|
||||
android:id="@+id/view_pager"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/element_spacing_xsmall"
|
||||
android:layout_alignBottom="@+id/view_pager_tabs"
|
||||
android:background="?android:dividerVertical"/>
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/view_pager_tabs"/>
|
||||
|
||||
<org.mariotaku.twidere.view.TabPagerIndicator
|
||||
android:id="@+id/view_pager_tabs"
|
||||
|
@ -49,13 +49,8 @@
|
|||
app:tabShowDivider="true"
|
||||
tools:ignore="UnusedAttribute"/>
|
||||
|
||||
<android.support.v4.view.ViewPager
|
||||
android:id="@+id/view_pager"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@id/view_pager_tabs"/>
|
||||
|
||||
<View
|
||||
android:id="@+id/pager_window_overlay"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignBottom="@+id/view_pager"
|
||||
|
|
Loading…
Reference in New Issue