Skip to content

Commit 4a9a6e6

Browse files
authored
Merge pull request #492 from Countly/fix_anr_back
mixed: anr on back in content activity and show content on load
2 parents 4a68b7c + 3088cab commit 4a9a6e6

File tree

4 files changed

+40
-15
lines changed

4 files changed

+40
-15
lines changed

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
## XX.XX.XX
22

3+
* Mitigated an ANR that occurred when the back button was pressed on the content activity.
4+
35
* Health check requests now include additional metrics.
46

57
* Mitigated an issue where behavior settings were not stored when only provided through configuration during initialization.
68
* Mitigated an issue where, on the first run of the SDK, behavior settings returned null if none were previously stored.
79
* Mitigated an issue where first behavior settings update calls sent twice.
810

9-
1011
## 25.4.2
1112
* Mitigated an issue where latest fetched behavior settings were replacing the current settings instead of merging.
1213

sdk/src/main/java/ly/count/android/sdk/CountlyWebViewClient.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,13 @@
1010

1111
class CountlyWebViewClient extends WebViewClient {
1212
private final List<WebViewUrlListener> listeners;
13+
WebViewPageLoadedListener afterPageFinished;
14+
long pageLoadTime;
1315

1416
public CountlyWebViewClient() {
1517
super();
1618
this.listeners = new ArrayList<>();
19+
this.pageLoadTime = System.currentTimeMillis();
1720
}
1821

1922
@Override
@@ -38,6 +41,20 @@ public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request
3841
return false;
3942
}
4043

44+
@Override
45+
public void onPageFinished(WebView view, String url) {
46+
Log.v(Countly.TAG, "[CountlyWebViewClient] onPageFinished, url: [" + url + "]");
47+
super.onPageFinished(view, url);
48+
if (afterPageFinished != null) {
49+
pageLoadTime = System.currentTimeMillis() - pageLoadTime;
50+
boolean timeOut = (pageLoadTime / 1000L) >= 60;
51+
Log.d(Countly.TAG, "[CountlyWebViewClient] onPageFinished, pageLoadTime: " + pageLoadTime + " ms");
52+
53+
afterPageFinished.onPageLoaded(timeOut);
54+
afterPageFinished = null;
55+
}
56+
}
57+
4158
public void registerWebViewUrlListener(WebViewUrlListener listener) {
4259
this.listeners.add(listener);
4360
}

sdk/src/main/java/ly/count/android/sdk/TransparentActivity.java

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import android.webkit.WebView;
2020
import android.widget.RelativeLayout;
2121
import androidx.annotation.Nullable;
22+
import java.util.HashMap;
2223
import java.util.Map;
2324
import java.util.Objects;
2425
import java.util.concurrent.ConcurrentHashMap;
@@ -46,7 +47,7 @@ protected void onCreate(Bundle savedInstanceState) {
4647

4748
// there is a stripe at the top of the screen for contents
4849
// we eliminate it with hiding the system ui
49-
hideSystemUI();
50+
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
5051
super.onCreate(savedInstanceState);
5152
overridePendingTransition(0, 0);
5253

@@ -76,7 +77,8 @@ protected void onCreate(Bundle savedInstanceState) {
7677
params.y = config.y;
7778
params.height = config.height;
7879
params.width = config.width;
79-
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
80+
params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
81+
| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
8082
getWindow().setAttributes(params);
8183
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
8284

@@ -91,18 +93,6 @@ protected void onCreate(Bundle savedInstanceState) {
9193
setContentView(relativeLayout);
9294
}
9395

94-
private void hideSystemUI() {
95-
// Enables regular immersive mode
96-
getWindow().getDecorView().setSystemUiVisibility(
97-
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
98-
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
99-
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
100-
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
101-
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
102-
| View.SYSTEM_UI_FLAG_FULLSCREEN
103-
);
104-
}
105-
10696
private TransparentActivityConfig setupConfig(@Nullable TransparentActivityConfig config) {
10797
final WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
10898
final Display display = wm.getDefaultDisplay();
@@ -392,6 +382,7 @@ private void close(Map<String, Object> contentData) {
392382
@SuppressLint("SetJavaScriptEnabled")
393383
private WebView createWebView(TransparentActivityConfig config) {
394384
WebView webView = new CountlyWebView(this);
385+
webView.setVisibility(View.INVISIBLE);
395386
RelativeLayout.LayoutParams webLayoutParams = new RelativeLayout.LayoutParams(config.width, config.height);
396387
webLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
397388
webLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_END);
@@ -423,7 +414,17 @@ private WebView createWebView(TransparentActivityConfig config) {
423414
return false;
424415
}
425416
});
417+
client.afterPageFinished = (closeIt) -> {
418+
if (closeIt) {
419+
close(new HashMap<>());
426420

421+
if (Countly.sharedInstance().isInitialized()) {
422+
Countly.sharedInstance().moduleContent.notifyAfterContentIsClosed();
423+
}
424+
} else {
425+
webView.setVisibility(View.VISIBLE);
426+
}
427+
};
427428
webView.setWebViewClient(client);
428429
webView.loadUrl(config.url);
429430
return webView;
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package ly.count.android.sdk;
2+
3+
public interface WebViewPageLoadedListener {
4+
5+
void onPageLoaded(boolean timedOut);
6+
}

0 commit comments

Comments
 (0)