diff --git a/android/src/main/java/com/pspdfkit/react/ReactPdfViewManager.java b/android/src/main/java/com/pspdfkit/react/ReactPdfViewManager.java index 48ea91c9..5c20f28b 100644 --- a/android/src/main/java/com/pspdfkit/react/ReactPdfViewManager.java +++ b/android/src/main/java/com/pspdfkit/react/ReactPdfViewManager.java @@ -153,6 +153,11 @@ public void setShowNavigationButtonInToolbar(@NonNull final PdfView view, final view.setShowNavigationButtonInToolbar(showNavigationButtonInToolbar); } + @ReactProp(name= "hideDefaultToolbar") + public void setHideDefaultToolbar(@NonNull final PdfView view,final boolean hideDefaultToolbar) { + view.setHideDefaultToolbar(hideDefaultToolbar); + } + @Nullable @Override public Map getExportedCustomDirectEventTypeConstants() { diff --git a/android/src/main/java/com/pspdfkit/views/PdfView.java b/android/src/main/java/com/pspdfkit/views/PdfView.java index 79b7ade8..093c6e49 100644 --- a/android/src/main/java/com/pspdfkit/views/PdfView.java +++ b/android/src/main/java/com/pspdfkit/views/PdfView.java @@ -28,6 +28,7 @@ import com.pspdfkit.forms.TextFormElement; import com.pspdfkit.listeners.OnVisibilityChangedListener; import com.pspdfkit.listeners.SimpleDocumentListener; +import com.pspdfkit.react.R; import com.pspdfkit.react.events.PdfViewAnnotationChangedEvent; import com.pspdfkit.react.events.PdfViewAnnotationTappedEvent; import com.pspdfkit.react.events.PdfViewDataReturnedEvent; @@ -43,6 +44,7 @@ import com.pspdfkit.ui.PdfUiFragmentBuilder; import com.pspdfkit.ui.search.PdfSearchView; import com.pspdfkit.ui.search.PdfSearchViewInline; +import com.pspdfkit.ui.toolbar.MainToolbar; import com.pspdfkit.ui.toolbar.grouping.MenuItemGroupingRule; import org.json.JSONArray; @@ -234,7 +236,7 @@ public void setMenuItemGroupingRule(@NonNull MenuItemGroupingRule groupingRule) public void setShowNavigationButtonInToolbar(final boolean showNavigationButtonInToolbar) { isNavigationButtonShown = showNavigationButtonInToolbar; pendingFragmentActions.add(getCurrentPdfUiFragment() - .observeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) .subscribe(pdfUiFragment -> { if (!isSearchViewShown) { ((ReactPdfUiFragment) pdfUiFragment).setShowNavigationButtonInToolbar(showNavigationButtonInToolbar); @@ -242,6 +244,28 @@ public void setShowNavigationButtonInToolbar(final boolean showNavigationButtonI })); } + public void setHideDefaultToolbar(boolean hideDefaultToolbar) { + pendingFragmentActions.add(getCurrentPdfUiFragment() + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(pdfUiFragment -> { + final View views = pdfUiFragment.getView(); + if (views != null) { + final ReactMainToolbar mainToolbar = views.findViewById(R.id.pspdf__toolbar_main); + if (hideDefaultToolbar) { + // If hiding the toolbar is requested we force the visibility to gone, this way it will never be shown. + mainToolbar.setForcedVisibility(GONE); + } else { + // To reset we undo our forcing, and if the UI is supposed to be shown right + // now we manually set the visibility to visible so it's immediately shown. + mainToolbar.setForcedVisibility(null); + if (pdfUiFragment.isUserInterfaceVisible()) { + mainToolbar.setVisibility(VISIBLE); + } + } + } + })); + } + private void setupFragment() { if (fragmentTag != null && configuration != null && document != null) { PdfUiFragment pdfFragment = (PdfUiFragment) fragmentManager.findFragmentByTag(fragmentTag); @@ -647,7 +671,7 @@ public Maybe getActivePdfFragment() { } /** - * This returns {@link PdfFragment} as they become available. If the user changes the view configuration of the fragment is replaced for other reasons a new {@link PdfFragment} is emitted. + * This returns {@link PdfFragment} as they become available. If the user changes the view configuration or the fragment is replaced for other reasons a new {@link PdfFragment} is emitted. */ public Observable getPdfFragment() { return pdfUiFragmentGetter diff --git a/android/src/main/java/com/pspdfkit/views/ReactMainToolbar.java b/android/src/main/java/com/pspdfkit/views/ReactMainToolbar.java new file mode 100644 index 00000000..a9421064 --- /dev/null +++ b/android/src/main/java/com/pspdfkit/views/ReactMainToolbar.java @@ -0,0 +1,48 @@ +package com.pspdfkit.views; + +import android.content.Context; +import android.util.AttributeSet; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.pspdfkit.ui.toolbar.MainToolbar; + +/** Custom toolbar that allows us to force a visibility. */ +public class ReactMainToolbar extends MainToolbar { + + private @Nullable Integer forcedVisibility; + + public ReactMainToolbar(@NonNull Context context) { + super(context); + } + + public ReactMainToolbar(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + public ReactMainToolbar(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + /** + * Sets a forced visibility that will override all future calls to {@link #setVisibility(int)}. The visibility will also immediately be applied. + * + * @param visibility The visibility to force or {@code null} to not force any specific visibility. + */ + public void setForcedVisibility(@Nullable final Integer visibility) { + forcedVisibility = visibility; + if (forcedVisibility != null) { + setVisibility(forcedVisibility); + } + } + + @Override + public void setVisibility(int visibility) { + if (forcedVisibility == null) { + super.setVisibility(visibility); + } else { + super.setVisibility(forcedVisibility); + } + } +} diff --git a/android/src/main/java/com/pspdfkit/views/ReactPdfUiFragment.java b/android/src/main/java/com/pspdfkit/views/ReactPdfUiFragment.java index a667f594..57837ee2 100644 --- a/android/src/main/java/com/pspdfkit/views/ReactPdfUiFragment.java +++ b/android/src/main/java/com/pspdfkit/views/ReactPdfUiFragment.java @@ -33,7 +33,6 @@ public void performApplyConfiguration(@NonNull PdfActivityConfiguration configur } } - /** When set to true will add a navigation arrow to the toolbar. */ void setShowNavigationButtonInToolbar(final boolean showNavigationButtonInToolbar) { if (getView() == null) { diff --git a/android/src/main/res/layout/pspdf__toolbar_main.xml b/android/src/main/res/layout/pspdf__toolbar_main.xml new file mode 100644 index 00000000..b45c6701 --- /dev/null +++ b/android/src/main/res/layout/pspdf__toolbar_main.xml @@ -0,0 +1,25 @@ + + + \ No newline at end of file diff --git a/ios/RCTPSPDFKit/RCTPSPDFKitView.m b/ios/RCTPSPDFKit/RCTPSPDFKitView.m index 7171833b..8c92ae38 100644 --- a/ios/RCTPSPDFKit/RCTPSPDFKitView.m +++ b/ios/RCTPSPDFKit/RCTPSPDFKitView.m @@ -118,7 +118,7 @@ - (UIViewController *)pspdf_parentViewController { - (BOOL)enterAnnotationCreationMode { [self.pdfController setViewMode:PSPDFViewModeDocument animated:YES]; - [self.pdfController.annotationToolbarController updateHostView:nil container:nil viewController:self.pdfController]; + [self.pdfController.annotationToolbarController updateHostView:self container:nil viewController:self.pdfController]; return [self.pdfController.annotationToolbarController showToolbarAnimated:YES completion:NULL]; } diff --git a/package-lock.json b/package-lock.json index fd05d22f..2aa8f790 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "react-native-pspdfkit", - "version": "1.28.5", + "version": "1.28.6", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 06c3bc90..d168214e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-pspdfkit", - "version": "1.28.5", + "version": "1.28.6", "description": "A React Native module for the PSPDFKit library.", "keywords": [ "react native", diff --git a/samples/Catalog/Catalog.android.js b/samples/Catalog/Catalog.android.js index 69f86123..aa0cab9c 100644 --- a/samples/Catalog/Catalog.android.js +++ b/samples/Catalog/Catalog.android.js @@ -50,7 +50,7 @@ const CONFIGURATION = { // Settings this to false will disable all annotation editing enableAnnotationEditing: true, // Only stamps and square annotations will be editable, others can not be selected or otherwise modified. - editableAnnotationTypes: ['Stamp', 'Square'] + editableAnnotationTypes: ["Stamp", "Square"] }; const examples = [ @@ -61,8 +61,9 @@ const examples = [ action: () => { PSPDFKit.present("file:///android_asset/Annual Report.pdf", {}) .then(loaded => { - console.log("Document was loaded successfully.") - }).catch(error => { + console.log("Document was loaded successfully."); + }) + .catch(error => { console.log(error); }); PSPDFKit.setPageIndex(3, false); @@ -166,6 +167,17 @@ const examples = [ component.props.navigation.push("AnnotationProcessing"); }); } + }, + { + key: "item13", + name: "Hiding Toolbar", + description: + "Shows how to hide the main toolbar while keeping the thumbnail bar visible.", + action: component => { + extractFromAssetsIfMissing("Annual Report.pdf", function() { + component.props.navigation.push("HidingToolbar"); + }); + } } ]; @@ -289,7 +301,7 @@ class PdfViewScreen extends Component<{}> { return { // Since the PSPDFKitView provides it's own toolbar and back button we don't need a header. - header: null, + header: null }; }; @@ -342,7 +354,7 @@ class PdfViewScreen extends Component<{}> { fragmentTag="PDF1" showNavigationButtonInToolbar={true} onNavigationButtonClicked={event => { - this.props.navigation.goBack() + this.props.navigation.goBack(); }} menuItemGrouping={[ "freetext", @@ -569,7 +581,10 @@ class PdfViewInstantJsonScreen extends Component<{}> { lineWidth: 5, name: "my annotation", lines: { - intensities: [[0.5, 0.5, 0.5], [0.5, 0.5, 0.5]], + intensities: [ + [0.5, 0.5, 0.5], + [0.5, 0.5, 0.5] + ], points: [ [ [92.08633422851562, 101.07916259765625], @@ -960,6 +975,74 @@ class AnnotationProcessing extends Component { } } +class HidingToolbar extends Component { + static navigationOptions = ({ navigation }) => { + const params = navigation.state.params || {}; + return { + title: "Hidden Toolbar", + headerRight: ( +