Skip to content

Commit af2317f

Browse files
authored
fix(statusbar): fix info when notify listeners (#2247)
1 parent 1ceecb0 commit af2317f

File tree

2 files changed

+23
-13
lines changed

2 files changed

+23
-13
lines changed

status-bar/android/src/main/java/com/capacitorjs/plugins/statusbar/StatusBar.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,27 @@
1515

1616
public class StatusBar {
1717

18+
public static final String statusBarVisibilityChanged = "statusBarVisibilityChanged";
19+
public static final String statusBarOverlayChanged = "statusBarOverlayChanged";
20+
1821
private int currentStatusBarColor;
22+
private final ChangeListener listener;
1923
private final AppCompatActivity activity;
2024
private final String defaultStyle;
2125

22-
public StatusBar(AppCompatActivity activity, StatusBarConfig config) {
26+
public StatusBar(AppCompatActivity activity, StatusBarConfig config, ChangeListener listener) {
2327
// save initial color of the status bar
2428
this.activity = activity;
2529
this.currentStatusBarColor = activity.getWindow().getStatusBarColor();
30+
this.listener = listener;
2631
this.defaultStyle = getStyle();
2732

2833
setBackgroundColor(config.getBackgroundColor());
2934
setStyle(config.getStyle());
3035
setOverlaysWebView(config.isOverlaysWebView());
36+
StatusBarInfo info = getInfo();
37+
info.setVisible(true);
38+
listener.onChange(statusBarOverlayChanged, info);
3139
}
3240

3341
public void setStyle(String style) {
@@ -56,12 +64,18 @@ public void hide() {
5664
View decorView = activity.getWindow().getDecorView();
5765
WindowInsetsControllerCompat windowInsetsControllerCompat = WindowCompat.getInsetsController(activity.getWindow(), decorView);
5866
windowInsetsControllerCompat.hide(WindowInsetsCompat.Type.statusBars());
67+
StatusBarInfo info = getInfo();
68+
info.setVisible(false);
69+
listener.onChange(statusBarVisibilityChanged, info);
5970
}
6071

6172
public void show() {
6273
View decorView = activity.getWindow().getDecorView();
6374
WindowInsetsControllerCompat windowInsetsControllerCompat = WindowCompat.getInsetsController(activity.getWindow(), decorView);
6475
windowInsetsControllerCompat.show(WindowInsetsCompat.Type.statusBars());
76+
StatusBarInfo info = getInfo();
77+
info.setVisible(true);
78+
listener.onChange(statusBarVisibilityChanged, info);
6579
}
6680

6781
@SuppressWarnings("deprecation")
@@ -81,6 +95,7 @@ public void setOverlaysWebView(Boolean overlays) {
8195
// recover the previous color of the status bar
8296
activity.getWindow().setStatusBarColor(currentStatusBarColor);
8397
}
98+
listener.onChange(statusBarOverlayChanged, getInfo());
8499
}
85100

86101
@SuppressWarnings("deprecation")
@@ -130,4 +145,8 @@ private int getStatusBarHeight() {
130145
// Fallback if the insets are not available
131146
return 0;
132147
}
148+
149+
public interface ChangeListener {
150+
void onChange(String eventName, StatusBarInfo info);
151+
}
133152
}

status-bar/android/src/main/java/com/capacitorjs/plugins/statusbar/StatusBarPlugin.java

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,12 @@
1212
@CapacitorPlugin(name = "StatusBar")
1313
public class StatusBarPlugin extends Plugin {
1414

15-
public static final String statusBarVisibilityChanged = "statusBarVisibilityChanged";
16-
public static final String statusBarOverlayChanged = "statusBarOverlayChanged";
17-
1815
private StatusBar implementation;
1916

2017
@Override
2118
public void load() {
2219
StatusBarConfig config = getStatusBarConfig();
23-
implementation = new StatusBar(getActivity(), config);
20+
implementation = new StatusBar(getActivity(), config, (eventName, info) -> notifyListeners(eventName, toJSObject(info), true));
2421
}
2522

2623
private StatusBarConfig getStatusBarConfig() {
@@ -98,8 +95,6 @@ public void hide(final PluginCall call) {
9895
.executeOnMainThread(
9996
() -> {
10097
implementation.hide();
101-
StatusBarInfo info = implementation.getInfo();
102-
notifyListeners(statusBarVisibilityChanged, toJSObject(info));
10398
call.resolve();
10499
}
105100
);
@@ -112,8 +107,6 @@ public void show(final PluginCall call) {
112107
.executeOnMainThread(
113108
() -> {
114109
implementation.show();
115-
StatusBarInfo info = implementation.getInfo();
116-
notifyListeners(statusBarVisibilityChanged, toJSObject(info));
117110
call.resolve();
118111
}
119112
);
@@ -127,13 +120,11 @@ public void getInfo(final PluginCall call) {
127120

128121
@PluginMethod
129122
public void setOverlaysWebView(final PluginCall call) {
130-
final Boolean overlays = call.getBoolean("overlay", true);
123+
final Boolean overlay = call.getBoolean("overlay", true);
131124
getBridge()
132125
.executeOnMainThread(
133126
() -> {
134-
implementation.setOverlaysWebView(overlays);
135-
StatusBarInfo info = implementation.getInfo();
136-
notifyListeners(statusBarOverlayChanged, toJSObject(info));
127+
implementation.setOverlaysWebView(overlay);
137128
call.resolve();
138129
}
139130
);

0 commit comments

Comments
 (0)