Procházet zdrojové kódy

Pass ActionMenuView as parent to right buttons instead of Toolbar (#3091)

Motivation:
When searching for the button's concrete TextView by label, if the
title has the same text as the buttons, both views are returned.
Guy Carmeli před 7 roky
rodič
revize
bee7e1a91b
No account linked to committer's email address

+ 1
- 1
android/app/src/main/java/com/reactnativenavigation/views/ContextualMenu.java Zobrazit soubor

47
 
47
 
48
     private void addButtonsToContextualMenu(List<ContextualMenuButtonParams> buttons, Menu menu) {
48
     private void addButtonsToContextualMenu(List<ContextualMenuButtonParams> buttons, Menu menu) {
49
         for (int i = 0; i < buttons.size(); i++) {
49
         for (int i = 0; i < buttons.size(); i++) {
50
-            final TitleBarButton button = new ContextualMenuButton(menu, this, buttons.get(i), this);
50
+            final TitleBarButton button = new ContextualMenuButton(menu, getActionMenuView(), buttons.get(i), this);
51
             addButtonInReverseOrder(buttons, i, button);
51
             addButtonInReverseOrder(buttons, i, button);
52
         }
52
         }
53
     }
53
     }

+ 2
- 2
android/app/src/main/java/com/reactnativenavigation/views/ContextualMenuButton.java Zobrazit soubor

1
 package com.reactnativenavigation.views;
1
 package com.reactnativenavigation.views;
2
 
2
 
3
+import android.support.v7.widget.ActionMenuView;
3
 import android.view.Menu;
4
 import android.view.Menu;
4
 import android.view.MenuItem;
5
 import android.view.MenuItem;
5
-import android.view.ViewGroup;
6
 
6
 
7
 import com.reactnativenavigation.params.ContextualMenuButtonParams;
7
 import com.reactnativenavigation.params.ContextualMenuButtonParams;
8
 
8
 
14
         void onClick(int index);
14
         void onClick(int index);
15
     }
15
     }
16
 
16
 
17
-    ContextualMenuButton(Menu menu, ViewGroup parent, ContextualMenuButtonParams contextualMenuButtonParams, ContextualButtonClickListener contextualButtonClickListener) {
17
+    ContextualMenuButton(Menu menu, ActionMenuView parent, ContextualMenuButtonParams contextualMenuButtonParams, ContextualButtonClickListener contextualButtonClickListener) {
18
         super(menu, parent, contextualMenuButtonParams, null);
18
         super(menu, parent, contextualMenuButtonParams, null);
19
         this.contextualMenuButtonParams = contextualMenuButtonParams;
19
         this.contextualMenuButtonParams = contextualMenuButtonParams;
20
         this.contextualButtonClickListener = contextualButtonClickListener;
20
         this.contextualButtonClickListener = contextualButtonClickListener;

+ 6
- 2
android/app/src/main/java/com/reactnativenavigation/views/TitleBar.java Zobrazit soubor

223
 
223
 
224
     private void addButtonsToTitleBar(String navigatorEventId, Menu menu) {
224
     private void addButtonsToTitleBar(String navigatorEventId, Menu menu) {
225
         for (int i = 0; i < rightButtons.size(); i++) {
225
         for (int i = 0; i < rightButtons.size(); i++) {
226
-            final TitleBarButton button = new TitleBarButton(menu, this, rightButtons.get(i), navigatorEventId);
226
+            final TitleBarButton button = new TitleBarButton(menu, getActionMenuView(), rightButtons.get(i), navigatorEventId);
227
             addButtonInReverseOrder(rightButtons, i, button);
227
             addButtonInReverseOrder(rightButtons, i, button);
228
         }
228
         }
229
     }
229
     }
368
     }
368
     }
369
 
369
 
370
     private void setButtonTextColor() {
370
     private void setButtonTextColor() {
371
-        final ActionMenuView buttonsContainer = ViewUtils.findChildByClass(this, ActionMenuView.class);
371
+        final ActionMenuView buttonsContainer = getActionMenuView();
372
         if (buttonsContainer != null) {
372
         if (buttonsContainer != null) {
373
             for (int i = 0; i < buttonsContainer.getChildCount(); i++) {
373
             for (int i = 0; i < buttonsContainer.getChildCount(); i++) {
374
                 if (buttonsContainer.getChildAt(i) instanceof TextView) {
374
                 if (buttonsContainer.getChildAt(i) instanceof TextView) {
378
         }
378
         }
379
     }
379
     }
380
 
380
 
381
+    protected ActionMenuView getActionMenuView() {
382
+        return ViewUtils.findChildByClass(this, ActionMenuView.class);
383
+    }
384
+
381
     private void setButtonsIconColor() {
385
     private void setButtonsIconColor() {
382
         final Menu menu = getMenu();
386
         final Menu menu = getMenu();
383
         for (int i = 0; i < menu.size(); i++) {
387
         for (int i = 0; i < menu.size(); i++) {

+ 8
- 11
android/app/src/main/java/com/reactnativenavigation/views/TitleBarButton.java Zobrazit soubor

8
 import android.view.Menu;
8
 import android.view.Menu;
9
 import android.view.MenuItem;
9
 import android.view.MenuItem;
10
 import android.view.View;
10
 import android.view.View;
11
-import android.view.ViewGroup;
12
 import android.widget.TextView;
11
 import android.widget.TextView;
13
 
12
 
14
 import com.reactnativenavigation.NavigationApplication;
13
 import com.reactnativenavigation.NavigationApplication;
21
 class TitleBarButton implements MenuItem.OnMenuItemClickListener {
20
 class TitleBarButton implements MenuItem.OnMenuItemClickListener {
22
 
21
 
23
     protected final Menu menu;
22
     protected final Menu menu;
24
-    protected final ViewGroup parent;
23
+    private final ActionMenuView actionMenuView;
25
     private TitleBarButtonParams buttonParams;
24
     private TitleBarButtonParams buttonParams;
26
     @Nullable protected String navigatorEventId;
25
     @Nullable protected String navigatorEventId;
27
 
26
 
28
-    TitleBarButton(Menu menu, ViewGroup parent, TitleBarButtonParams buttonParams, @Nullable String navigatorEventId) {
27
+    TitleBarButton(Menu menu, ActionMenuView actionMenuView, TitleBarButtonParams buttonParams, @Nullable String navigatorEventId) {
29
         this.menu = menu;
28
         this.menu = menu;
30
-        this.parent = parent;
29
+        this.actionMenuView = actionMenuView;
31
         this.buttonParams = buttonParams;
30
         this.buttonParams = buttonParams;
32
         this.navigatorEventId = navigatorEventId;
31
         this.navigatorEventId = navigatorEventId;
33
     }
32
     }
34
 
33
 
35
-    MenuItem addToMenu(int index) {
34
+    void addToMenu(int index) {
36
         MenuItem item = createMenuItem(index);
35
         MenuItem item = createMenuItem(index);
37
         item.setShowAsAction(buttonParams.showAsAction.action);
36
         item.setShowAsAction(buttonParams.showAsAction.action);
38
         item.setEnabled(buttonParams.enabled);
37
         item.setEnabled(buttonParams.enabled);
39
         if (buttonParams.hasComponent()) {
38
         if (buttonParams.hasComponent()) {
40
-            item.setActionView(new TitleBarButtonComponent(parent.getContext(), buttonParams.componentName, buttonParams.componentProps));
39
+            item.setActionView(new TitleBarButtonComponent(actionMenuView.getContext(), buttonParams.componentName, buttonParams.componentProps));
41
         }
40
         }
42
         setIcon(item, index);
41
         setIcon(item, index);
43
         setColor();
42
         setColor();
44
         setFont();
43
         setFont();
45
         item.setOnMenuItemClickListener(this);
44
         item.setOnMenuItemClickListener(this);
46
-        return item;
47
     }
45
     }
48
 
46
 
49
     private MenuItem createMenuItem(int index) {
47
     private MenuItem createMenuItem(int index) {
66
     }
64
     }
67
 
65
 
68
     private void dontShowLabelOnLongPress(final int index) {
66
     private void dontShowLabelOnLongPress(final int index) {
69
-        ViewUtils.runOnPreDraw(parent, new Runnable() {
67
+        ViewUtils.runOnPreDraw(actionMenuView, new Runnable() {
70
             @Override
68
             @Override
71
             public void run() {
69
             public void run() {
72
-                ActionMenuView actionMenuView = ViewUtils.findChildByClass(parent, ActionMenuView.class);
73
                 if (actionMenuView != null && actionMenuView.getChildAt(index) != null) {
70
                 if (actionMenuView != null && actionMenuView.getChildAt(index) != null) {
74
                     actionMenuView.getChildAt(index).setOnLongClickListener(null);
71
                     actionMenuView.getChildAt(index).setOnLongClickListener(null);
75
                 }
72
                 }
94
     }
91
     }
95
 
92
 
96
     private void setTextColor() {
93
     private void setTextColor() {
97
-        ViewUtils.runOnPreDraw(parent, new Runnable() {
94
+        ViewUtils.runOnPreDraw(actionMenuView, new Runnable() {
98
             @Override
95
             @Override
99
             public void run() {
96
             public void run() {
100
                 ArrayList<View> outViews = findActualTextViewInMenuByLabel();
97
                 ArrayList<View> outViews = findActualTextViewInMenuByLabel();
114
     @NonNull
111
     @NonNull
115
     private ArrayList<View> findActualTextViewInMenuByLabel() {
112
     private ArrayList<View> findActualTextViewInMenuByLabel() {
116
         ArrayList<View> outViews = new ArrayList<>();
113
         ArrayList<View> outViews = new ArrayList<>();
117
-        parent.findViewsWithText(outViews, buttonParams.label, View.FIND_VIEWS_WITH_TEXT);
114
+        actionMenuView.findViewsWithText(outViews, buttonParams.label, View.FIND_VIEWS_WITH_TEXT);
118
         return outViews;
115
         return outViews;
119
     }
116
     }
120
 
117