Skip to content

Commit f146256

Browse files
support hybrid mode
1 parent a74a5d7 commit f146256

File tree

9 files changed

+118
-134
lines changed

9 files changed

+118
-134
lines changed

analysis_options.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ include: package:lint/analysis_options_package.yaml
22

33
analyzer:
44
exclude:
5-
- "example/**"
5+
# - "example/**"
66
- "**/*.g.dart"
77

88
linter:

android/src/main/java/com/instabug/flutter/InstabugFlutterPlugin.java

Lines changed: 100 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package com.instabug.flutter;
22

3-
import android.annotation.SuppressLint;
43
import android.app.Activity;
4+
import android.app.Application;
55
import android.content.Context;
66
import android.content.Intent;
77
import android.graphics.Bitmap;
8+
import android.nfc.Tag;
89
import android.os.Bundle;
910
import android.util.Log;
1011
import android.view.View;
@@ -22,9 +23,11 @@
2223
import com.instabug.flutter.modules.RepliesApi;
2324
import com.instabug.flutter.modules.SessionReplayApi;
2425
import com.instabug.flutter.modules.SurveysApi;
26+
import com.instabug.flutter.util.ThreadManager;
2527

2628
import java.util.concurrent.Callable;
2729

30+
import io.flutter.embedding.engine.FlutterEngine;
2831
import io.flutter.embedding.engine.plugins.FlutterPlugin;
2932
import io.flutter.embedding.engine.plugins.activity.ActivityAware;
3033
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
@@ -35,10 +38,74 @@
3538
public class InstabugFlutterPlugin implements FlutterPlugin, ActivityAware {
3639
private static final String TAG = InstabugFlutterPlugin.class.getName();
3740

38-
private Activity activity;
41+
private Activity flutterActivity;
42+
43+
public InstabugFlutterPigeon.InstabugFlutterApi instabugFlutterApi;
44+
45+
Application.ActivityLifecycleCallbacks callbacks = new Application.ActivityLifecycleCallbacks() {
46+
@Override
47+
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {
48+
if (activity == flutterActivity) {
49+
Log.v(TAG, "onActivityCreated");
50+
}
51+
}
52+
53+
@Override
54+
public void onActivityStarted(@NonNull Activity activity) {
55+
56+
if (activity == flutterActivity) {
57+
Log.v(TAG, "onActivityStarted");
58+
ThreadManager.runOnMainThread(new Runnable() {
59+
@Override
60+
public void run() {
61+
try {
62+
if (instabugApi != null) {
63+
instabugApi.reportLastScreenChange();
64+
}
65+
} catch (Exception e) {
66+
e.printStackTrace();
67+
}
68+
}
69+
});
70+
71+
}
72+
73+
}
74+
75+
@Override
76+
public void onActivityResumed(@NonNull Activity activity) {
77+
78+
}
79+
80+
81+
@Override
82+
public void onActivityPaused(@NonNull Activity activity) {
83+
if (activity == flutterActivity) {
84+
Log.v(TAG, "onActivityPaused");
85+
}
86+
}
87+
88+
@Override
89+
public void onActivityStopped(@NonNull Activity activity) {
90+
if (activity == flutterActivity) {
91+
Log.v(TAG, "onActivityStopped");
92+
}
93+
94+
}
95+
96+
@Override
97+
public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {
98+
99+
}
100+
101+
@Override
102+
public void onActivityDestroyed(@NonNull Activity activity) {
103+
104+
}
105+
};
39106

40-
public static InstabugFlutterPigeon.InstabugFlutterApi instabugFlutterApi;
41107
PluginRegistry.ActivityResultListener resultListener;
108+
private InstabugApi instabugApi;
42109

43110
@Override
44111
public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) {
@@ -47,59 +114,58 @@ public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) {
47114

48115
@Override
49116
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
50-
activity = null;
117+
flutterActivity = null;
51118
}
52119

53120
@Override
54121
public void onAttachedToActivity(@NonNull ActivityPluginBinding binding) {
55-
activity = binding.getActivity();
122+
flutterActivity = binding.getActivity();
56123
initOnActivityResultListener(binding);
57-
58-
59124
}
60125

61126
private void initOnActivityResultListener(@NonNull ActivityPluginBinding binding) {
62-
if(resultListener!=null) {
63-
binding.removeActivityResultListener(resultListener);
64-
}
65-
66-
resultListener = new PluginRegistry.ActivityResultListener() {
67-
@Override
68-
public boolean onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
69-
if (instabugFlutterApi != null) {
70-
instabugFlutterApi.reportLastScreenChange(new InstabugFlutterPigeon.InstabugFlutterApi.Reply<Void>() {
71-
@Override
72-
public void reply(Void reply) {
73-
74-
}
75-
});
76-
}
77-
78-
79-
return false;
80-
}
81-
};
82-
83127

84-
binding.addActivityResultListener(resultListener);
128+
Application app = flutterActivity.getApplication();
129+
130+
app.unregisterActivityLifecycleCallbacks(callbacks);
131+
app.registerActivityLifecycleCallbacks(callbacks);
132+
133+
// if (resultListener != null) {
134+
// binding.removeActivityResultListener(resultListener);
135+
// }
136+
137+
// resultListener = new PluginRegistry.ActivityResultListener() {
138+
// @Override
139+
// public boolean onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
140+
// Log.v(TAG, "onActivityResult");
141+
//
142+
//
143+
//
144+
//
145+
// return false;
146+
// }
147+
// };
148+
//
149+
//
150+
// binding.addActivityResultListener(resultListener);
85151
}
86152

87153

88154
@Override
89155
public void onDetachedFromActivityForConfigChanges() {
90-
activity = null;
156+
flutterActivity = null;
91157

92158
}
93159

94160
@Override
95161
public void onReattachedToActivityForConfigChanges(@NonNull ActivityPluginBinding binding) {
96-
activity = binding.getActivity();
162+
flutterActivity = binding.getActivity();
97163
initOnActivityResultListener(binding);
98164
}
99165

100166
@Override
101167
public void onDetachedFromActivity() {
102-
activity = null;
168+
flutterActivity = null;
103169
}
104170

105171
private void register(Context context, BinaryMessenger messenger, FlutterRenderer renderer) {
@@ -114,7 +180,7 @@ public Bitmap call() {
114180
BugReportingApi.init(messenger);
115181
CrashReportingApi.init(messenger);
116182
FeatureRequestsApi.init(messenger);
117-
InstabugApi.init(messenger, context, screenshotProvider);
183+
instabugApi = InstabugApi.init(messenger, context, screenshotProvider);
118184
InstabugLogApi.init(messenger);
119185
RepliesApi.init(messenger);
120186
SessionReplayApi.init(messenger);
@@ -126,7 +192,7 @@ public Bitmap call() {
126192
@Nullable
127193
private Bitmap takeScreenshot(FlutterRenderer renderer) {
128194
try {
129-
final View view = activity.getWindow().getDecorView().getRootView();
195+
final View view = flutterActivity.getWindow().getDecorView().getRootView();
130196

131197
view.setDrawingCacheEnabled(true);
132198
final Bitmap bitmap = renderer.getBitmap();

android/src/main/java/com/instabug/flutter/modules/InstabugApi.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ public class InstabugApi implements InstabugPigeon.InstabugHostApi {
5959

6060
private final InstabugPigeon.FeatureFlagsFlutterApi featureFlagsFlutterApi;
6161

62+
private String lastScreenChanged = null;
63+
6264
public static InstabugApi init(BinaryMessenger messenger, Context context, Callable<Bitmap> screenshotProvider) {
6365
final InstabugPigeon.FeatureFlagsFlutterApi flutterApi = new InstabugPigeon.FeatureFlagsFlutterApi(messenger);
6466

@@ -107,9 +109,7 @@ public Boolean isEnabled() {
107109

108110
@NotNull
109111
@Override
110-
public Boolean isBuilt() {
111-
return Instabug.isBuilt();
112-
}
112+
public Boolean isBuilt() { return Instabug.isBuilt(); }
113113

114114
@Override
115115
public void init(@NonNull String token, @NonNull List<String> invocationEvents, @NonNull String debugLogsLevel) {
@@ -369,6 +369,7 @@ public void setReproStepsConfig(@Nullable String bugMode, @Nullable String crash
369369
@Override
370370
public void reportScreenChange(@NonNull String screenName) {
371371
try {
372+
lastScreenChanged=screenName;
372373
Method method = Reflection.getMethod(Class.forName("com.instabug.library.Instabug"), "reportScreenChange",
373374
Bitmap.class, String.class);
374375
if (method != null) {
@@ -385,6 +386,12 @@ public void reportScreenChange(@NonNull String screenName) {
385386
}
386387
}
387388

389+
public void reportLastScreenChange(){
390+
if(lastScreenChanged!=null){
391+
reportScreenChange(lastScreenChanged);
392+
}
393+
}
394+
388395
@VisibleForTesting
389396
public Bitmap getBitmapForAsset(String assetName) {
390397
try {
@@ -518,10 +525,10 @@ public void willRedirectToStore() {
518525

519526
@Override
520527
public void setNetworkLogBodyEnabled(@NonNull Boolean isEnabled) {
521-
try {
528+
try {
522529
// Instabug.setNetworkLogBodyEnabled(isEnabled);
523-
} catch (Exception e) {
524-
e.printStackTrace();
525-
}
530+
} catch (Exception e) {
531+
e.printStackTrace();
532+
}
526533
}
527534
}

android/src/main/java/com/instabug/flutter/util/InstabugHybirdUtils.java

Lines changed: 0 additions & 31 deletions
This file was deleted.

example/android/app/src/main/kotlin/com/example/InstabugSample/InstabugExampleMethodCallHandler.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import com.instabug.crash.models.IBGNonFatalException
77
import io.flutter.plugin.common.MethodCall
88
import io.flutter.plugin.common.MethodChannel
99

10-
class InstabugExampleMethodCallHandler(val activity:Activity) : MethodChannel.MethodCallHandler {
10+
class InstabugExampleMethodCallHandler : MethodChannel.MethodCallHandler {
1111

1212
override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) {
1313
when (call.method) {
@@ -22,10 +22,6 @@ class InstabugExampleMethodCallHandler(val activity:Activity) : MethodChannel.Me
2222
sendNativeFatalCrash()
2323
result.success(null)
2424
}
25-
"ahmed" -> {
26-
com.instabug.flutter.util.InstabugHybirdUtils.startFlutterScreen(activity,android.content.Intent(activity,activity))
27-
result.success(null)
28-
}
2925
SEND_NATIVE_FATAL_HANG -> {
3026
Log.d(TAG, "Sending native fatal hang for 3000 ms")
3127
sendANR()

lib/src/modules/instabug.dart

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
// ignore_for_file: avoid_classes_with_only_static_members
22

33
import 'dart:async';
4-
import 'dart:io';
54

65
// to maintain supported versions prior to Flutter 3.3
76
// ignore: unnecessary_import
@@ -12,13 +11,11 @@ import 'dart:typed_data';
1211
import 'dart:ui';
1312

1413
import 'package:flutter/material.dart';
15-
1614
// to maintain supported versions prior to Flutter 3.3
1715
// ignore: unused_import
1816
import 'package:flutter/services.dart';
1917
import 'package:instabug_flutter/instabug_flutter.dart';
2018
import 'package:instabug_flutter/src/generated/instabug.api.g.dart';
21-
import 'package:instabug_flutter/src/utils/hybrid_utils.dart';
2219
import 'package:instabug_flutter/src/utils/enum_converter.dart';
2320
import 'package:instabug_flutter/src/utils/feature_flags_manager.dart';
2421
import 'package:instabug_flutter/src/utils/ibg_build_info.dart';
@@ -156,7 +153,6 @@ class Instabug {
156153
BugReporting.$setup();
157154
Replies.$setup();
158155
Surveys.$setup();
159-
HybridUtils.$setup();
160156
}
161157

162158
/// @nodoc

lib/src/utils/hybrid_utils.dart

Lines changed: 0 additions & 28 deletions
This file was deleted.

0 commit comments

Comments
 (0)