#1381 Action bars and popup menus

This commit is contained in:
sictiru 2020-11-21 13:55:42 -08:00
parent 3d1052c943
commit 9439d0ef43
10 changed files with 19 additions and 128 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 389 B

View file

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_reading_fullscreen"
android:icon="@drawable/ic_menu_fullscreen_gray55"
app:showAsAction="always"
android:title="@string/menu_fullscreen"/>
</menu>

View file

@ -155,7 +155,6 @@
<string name="menu_oldest_mark_newer_stories_as_read">\u21E3 Mark newer as read</string>
<string name="menu_mark_story_as_read">Mark as read</string>
<string name="menu_mark_unread">Mark as unread</string>
<string name="menu_fullscreen">Full screen</string>
<string name="menu_search_stories">Search…</string>
<string name="menu_mute_feed">Mute feed</string>
<string name="menu_unmute_feed">Unmute feed</string>

View file

@ -384,4 +384,14 @@
<item name="android:src">@drawable/mute_black</item>
</style>
<style name="actionBarPopup" parent="Widget.MaterialComponents.PopupMenu">
<item name="android:background">@color/transparent</item>
<item name="popupMenuBackground">@color/primary</item>
</style>
<style name="actionBarPopup.dark" parent="Widget.MaterialComponents.PopupMenu">
<item name="android:background">@color/transparent</item>
<item name="popupMenuBackground">@color/gray13</item>
</style>
</resources>

View file

@ -5,6 +5,7 @@
<item name="colorPrimaryDark">@color/primaryDark</item>
<item name="colorSecondary">@color/secondary</item>
<item name="actionBarTheme">@style/actionbar</item>
<item name="actionBarPopupTheme">@style/actionBarPopup</item>
<item name="popupMenuBackground">@color/primary</item>
<item name="buttonBarPositiveButtonStyle">@style/dialogButton</item>
<item name="buttonBarNegativeButtonStyle">@style/dialogButton</item>
@ -54,7 +55,8 @@
<item name="colorPrimaryDark">@color/primaryDark.dark</item>
<item name="colorSecondary">@color/secondary.dark</item>
<item name="actionBarTheme">@style/actionbar.dark</item>
<item name="popupMenuBackground">@color/primary.dark</item>
<item name="actionBarPopupTheme">@style/actionBarPopup.dark</item>
<item name="popupMenuBackground">@color/gray13</item>
<item name="buttonBarPositiveButtonStyle">@style/dialogButton.dark</item>
<item name="buttonBarNegativeButtonStyle">@style/dialogButton.dark</item>
<item name="buttonBarNeutralButtonStyle">@style/dialogButton.dark</item>
@ -103,7 +105,8 @@
<item name="colorPrimaryDark">@color/primaryDark.black</item>
<item name="colorSecondary">@color/secondary.black</item>
<item name="actionBarTheme">@style/actionbar.black</item>
<item name="popupMenuBackground">@color/primary.black</item>
<item name="actionBarPopupTheme">@style/actionBarPopup.dark</item>
<item name="popupMenuBackground">@color/gray13</item>
<item name="buttonBarPositiveButtonStyle">@style/dialogButton.dark</item>
<item name="buttonBarNegativeButtonStyle">@style/dialogButton.dark</item>
<item name="buttonBarNeutralButtonStyle">@style/dialogButton.dark</item>

View file

@ -13,6 +13,7 @@ import com.newsblur.domain.UserDetails;
import com.newsblur.fragment.ProfileDetailsFragment;
import com.newsblur.network.APIManager;
import com.newsblur.util.PrefsUtils;
import com.newsblur.util.UIUtils;
public class Profile extends NbActivity {
@ -28,7 +29,7 @@ public class Profile extends NbActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
UIUtils.setCustomActionBar(this, R.drawable.logo, getString(R.string.profile), true);
apiManager = new APIManager(this);
if (savedInstanceState == null) {
userId = getIntent().getStringExtra(USER_ID);

View file

@ -53,7 +53,6 @@ public abstract class Reading extends NbActivity implements OnPageChangeListener
private static final String BUNDLE_POSITION = "position";
private static final String BUNDLE_STARTING_UNREAD = "starting_unread";
private static final String BUNDLE_SELECTED_FEED_VIEW = "selectedFeedView";
private static final String BUNDLE_IS_FULLSCREEN = "is_fullscreen";
/** special value for starting story hash that jumps to the first unread. */
public static final String FIND_FIRST_UNREAD = "FIND_FIRST_UNREAD";
@ -143,14 +142,6 @@ public abstract class Reading extends NbActivity implements OnPageChangeListener
intelState = PrefsUtils.getStateFilter(this);
volumeKeyNavigation = PrefsUtils.getVolumeKeyNavigation(this);
// were we fullscreen before rotation?
if ((savedInstanceBundle != null) && savedInstanceBundle.containsKey(BUNDLE_IS_FULLSCREEN)) {
boolean isFullscreen = savedInstanceBundle.getBoolean(BUNDLE_IS_FULLSCREEN, false);
if (isFullscreen) {
ViewUtils.hideSystemUI(getWindow().getDecorView());
}
}
// this value is expensive to compute but doesn't change during a single runtime
this.overlayRangeTopPx = (float) UIUtils.dp2px(this, OVERLAY_RANGE_TOP_DP);
this.overlayRangeBotPx = (float) UIUtils.dp2px(this, OVERLAY_RANGE_BOT_DP);
@ -199,10 +190,6 @@ public abstract class Reading extends NbActivity implements OnPageChangeListener
if (startingUnreadCount != 0) {
outState.putInt(BUNDLE_STARTING_UNREAD, startingUnreadCount);
}
if (ViewUtils.isSystemUIHidden(getWindow().getDecorView())) {
outState.putBoolean(BUNDLE_IS_FULLSCREEN, true);
}
}
@Override
@ -375,29 +362,12 @@ public abstract class Reading extends NbActivity implements OnPageChangeListener
return result;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.reading, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
return true;
} else if (item.getItemId() == R.id.menu_reading_fullscreen) {
ViewUtils.hideSystemUI(getWindow().getDecorView());
return true;
} else {
} else {
return super.onOptionsItemSelected(item);
}
}

View file

@ -1,7 +1,6 @@
package com.newsblur.activity;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentActivity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.MenuItem;

View file

@ -21,11 +21,9 @@ import androidx.fragment.app.DialogFragment;
import android.text.TextUtils;
import android.util.Log;
import android.view.ContextMenu;
import android.view.GestureDetector;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
@ -51,7 +49,6 @@ import com.newsblur.util.PrefConstants.ThemeValue;
import com.newsblur.util.PrefsUtils;
import com.newsblur.util.StoryUtils;
import com.newsblur.util.UIUtils;
import com.newsblur.util.ViewUtils;
import com.newsblur.view.ReadingScrollView;
import java.util.HashMap;
@ -208,8 +205,6 @@ public class ReadingItemFragment extends NbFragment implements PopupMenu.OnMenuI
ReadingScrollView scrollView = (ReadingScrollView) view.findViewById(R.id.reading_scrollview);
scrollView.registerScrollChangeListener(activity);
setupImmersiveViewGestureDetector();
return view;
}
@ -236,23 +231,6 @@ public class ReadingItemFragment extends NbFragment implements PopupMenu.OnMenuI
});
}
private void setupImmersiveViewGestureDetector() {
// Change the system visibility on the decorview from the activity so that the state is maintained as we page through
// fragments
ImmersiveViewHandler immersiveViewHandler = new ImmersiveViewHandler(getActivity().getWindow().getDecorView());
final GestureDetector gestureDetector = new GestureDetector(getActivity(), immersiveViewHandler);
View.OnTouchListener touchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return gestureDetector.onTouchEvent(motionEvent);
}
};
binding.readingWebview.setOnTouchListener(touchListener);
view.setOnTouchListener(touchListener);
getActivity().getWindow().getDecorView().setOnSystemUiVisibilityChangeListener(immersiveViewHandler);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
HitTestResult result = binding.readingWebview.getHitTestResult();
@ -935,37 +913,4 @@ public class ReadingItemFragment extends NbFragment implements PopupMenu.OnMenuI
reloadStoryContent();
}
}
private class ImmersiveViewHandler extends GestureDetector.SimpleOnGestureListener implements View.OnSystemUiVisibilityChangeListener {
private View view;
public ImmersiveViewHandler(View view) {
this.view = view;
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
if (binding.readingWebview.wasLinkClicked()) {
// Clicked a link so ignore immersive view
return super.onSingleTapUp(e);
}
if (ViewUtils.isSystemUIHidden(view)) {
ViewUtils.showSystemUI(view);
} else if (PrefsUtils.enterImmersiveReadingModeOnSingleTap(getActivity())) {
ViewUtils.hideSystemUI(view);
}
return super.onSingleTapUp(e);
}
@Override
public void onSystemUiVisibilityChange(int i) {
// If immersive view has been exited via a system gesture we want to ensure that it gets resized
// in the same way as using tap to exit.
if (ViewUtils.immersiveViewExitedViaSystemGesture(view)) {
ViewUtils.showSystemUI(view);
}
}
}
}
}

View file

@ -41,31 +41,6 @@ public class ViewUtils {
return image;
}
public static void showSystemUI(View view) {
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
}
public static void hideSystemUI(View view) {
view.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE);
}
public static boolean isSystemUIHidden(View view) {
return (view.getSystemUiVisibility() & View.SYSTEM_UI_FLAG_IMMERSIVE) != 0;
}
public static boolean immersiveViewExitedViaSystemGesture(View view) {
return view.getSystemUiVisibility() == (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE);
}
/**
* see if Power Save mode is enabled on the device and the UI should disable animations
* or other extra features.