ソースを参照

Notification auto dismiss timer (#696)

* Add showInAppNotification autoDismissTimerSec param

* Default autoDismissTimerSec of notification to 5, like on iOS

* Add param to disable notification auto-dismiss behaviour.

* Update showInAppNotification example with optional params
Royce Townsend 8 年 前
コミット
20dd48480f

+ 1
- 0
android/app/src/main/java/com/reactnativenavigation/params/SlidingOverlayParams.java ファイルの表示

17
 
17
 
18
     public String screenInstanceId;
18
     public String screenInstanceId;
19
     public NavigationParams navigationParams;
19
     public NavigationParams navigationParams;
20
+    public Integer autoDismissTimerSec;
20
     public Position position;
21
     public Position position;
21
 }
22
 }

+ 3
- 0
android/app/src/main/java/com/reactnativenavigation/params/parsers/SlidingOverlayParamsParser.java ファイルの表示

11
         final SlidingOverlayParams result = new SlidingOverlayParams();
11
         final SlidingOverlayParams result = new SlidingOverlayParams();
12
         result.screenInstanceId = bundle.getString("screen");
12
         result.screenInstanceId = bundle.getString("screen");
13
         result.navigationParams = new NavigationParams(bundle.getBundle("navigationParams"));
13
         result.navigationParams = new NavigationParams(bundle.getBundle("navigationParams"));
14
+        result.autoDismissTimerSec = bundle.containsKey("autoDismissTimerSec")
15
+                ? bundle.getInt("autoDismissTimerSec")
16
+                : null;
14
         result.position = SlidingOverlayParams.Position.fromString(bundle.getString("position", "top"));
17
         result.position = SlidingOverlayParams.Position.fromString(bundle.getString("position", "top"));
15
         return result;
18
         return result;
16
     }
19
     }

+ 4
- 0
android/app/src/main/java/com/reactnativenavigation/views/slidingOverlay/SlidingOverlay.java ファイルの表示

40
         this.listener = listener;
40
         this.listener = listener;
41
     }
41
     }
42
 
42
 
43
+    public Integer getAutoDismissTimerSec() {
44
+        return params.autoDismissTimerSec;
45
+    }
46
+
43
     public void show() {
47
     public void show() {
44
         parent.addView(view);
48
         parent.addView(view);
45
 
49
 

+ 20
- 17
android/app/src/main/java/com/reactnativenavigation/views/slidingOverlay/SlidingOverlaysQueue.java ファイルの表示

9
 
9
 
10
 public class SlidingOverlaysQueue implements SlidingOverlay.SlidingListener{
10
 public class SlidingOverlaysQueue implements SlidingOverlay.SlidingListener{
11
 
11
 
12
-    private static final int SUSTAIN_DURATION = 3000;
13
     private static final int SHORT_SUSTAIN_DURATION = 500;
12
     private static final int SHORT_SUSTAIN_DURATION = 500;
14
 
13
 
15
     protected Timer autoDismissTimer = null;
14
     protected Timer autoDismissTimer = null;
60
 
59
 
61
     @Override
60
     @Override
62
     public void onSlidingOverlayShown() {
61
     public void onSlidingOverlayShown() {
63
-        int autoDismissDuration = pendingHide || queue.size() > 1
64
-                ? SHORT_SUSTAIN_DURATION
65
-                : SUSTAIN_DURATION;
66
-        pendingHide = false;
62
+        Integer autoDismissTimerSec = queue.peek().getAutoDismissTimerSec();
67
 
63
 
68
-        autoDismissTimer = new Timer();
69
-        autoDismissTimer.schedule(new TimerTask() {
70
-            @Override
71
-            public void run() {
72
-                NavigationApplication.instance.runOnMainThread(new Runnable() {
73
-                    @Override
74
-                    public void run() {
75
-                        queue.peek().hide();
76
-                    }
77
-                });
78
-            }
79
-        }, autoDismissDuration);
64
+        if (autoDismissTimerSec != null || pendingHide || queue.size() > 1) {
65
+            int autoDismissDuration = autoDismissTimerSec != null
66
+                    ? autoDismissTimerSec * 1000
67
+                    : SHORT_SUSTAIN_DURATION;
68
+            pendingHide = false;
69
+
70
+            autoDismissTimer = new Timer();
71
+            autoDismissTimer.schedule(new TimerTask() {
72
+                @Override
73
+                public void run() {
74
+                    NavigationApplication.instance.runOnMainThread(new Runnable() {
75
+                        @Override
76
+                        public void run() {
77
+                            queue.peek().hide();
78
+                        }
79
+                    });
80
+                }
81
+            }, autoDismissDuration);
82
+        }
80
     }
83
     }
81
 
84
 
82
     @Override
85
     @Override

+ 3
- 1
example/src/screens/SideMenu.js ファイルの表示

54
     this._toggleDrawer();
54
     this._toggleDrawer();
55
     this.props.navigator.showInAppNotification({
55
     this.props.navigator.showInAppNotification({
56
       screen: "example.InAppNotification",
56
       screen: "example.InAppNotification",
57
-      //position: "bottom",
57
+      // autoDismiss: false,
58
+      // autoDismissTimerSec: 1,
59
+      // position: "bottom",
58
     });
60
     });
59
   }
61
   }
60
 
62
 

+ 4
- 0
src/deprecated/platformSpecificDeprecated.android.js ファイルの表示

378
 function showInAppNotification(params) {
378
 function showInAppNotification(params) {
379
   params.navigationParams = {};
379
   params.navigationParams = {};
380
   addNavigatorParams(params.navigationParams);
380
   addNavigatorParams(params.navigationParams);
381
+
382
+  params.autoDismissTimerSec = params.autoDismissTimerSec || 5;
383
+  if (params.autoDismiss === false) delete params.autoDismissTimerSec;
384
+
381
   newPlatformSpecific.showInAppNotification(params);
385
   newPlatformSpecific.showInAppNotification(params);
382
 }
386
 }
383
 
387
 

+ 4
- 2
src/deprecated/platformSpecificDeprecated.ios.js ファイルの表示

518
   
518
   
519
   savePassProps(params);
519
   savePassProps(params);
520
 
520
 
521
-  Notification.show({
521
+  let args = {
522
     component: params.screen,
522
     component: params.screen,
523
     passProps: passProps,
523
     passProps: passProps,
524
     style: params.style,
524
     style: params.style,
527
     shadowRadius: params.shadowRadius,
527
     shadowRadius: params.shadowRadius,
528
     dismissWithSwipe: params.dismissWithSwipe || true,
528
     dismissWithSwipe: params.dismissWithSwipe || true,
529
     autoDismissTimerSec: params.autoDismissTimerSec || 5
529
     autoDismissTimerSec: params.autoDismissTimerSec || 5
530
-  });
530
+  };
531
+  if (params.autoDismiss === false) delete args.autoDismissTimerSec;
532
+  Notification.show(args);
531
 }
533
 }
532
 
534
 
533
 function dismissInAppNotification(params) {
535
 function dismissInAppNotification(params) {