Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
102 commits
Select commit Hold shift + click to select a range
c5111cf
feat: add instabug_screen_render_manager which control screen render …
andrewdanieldev Jun 6, 2025
7064e0e
chore: attach screen render collector to the app lifecycle and ui tra…
andrewdanieldev Jun 18, 2025
2faf643
chore: add unit tests for app lifecycle
andrewdanieldev Jun 18, 2025
21cc57b
chore: fix related uint testing files ,
andrewdanieldev Jun 19, 2025
35a0c5a
chore: fix ci failed jobs
andrewdanieldev Jun 21, 2025
953cb53
chore: fix ci failed jobs
andrewdanieldev Jun 22, 2025
e576a89
chore: add unit test cases for instabug_navigator_observer
andrewdanieldev Jun 22, 2025
ec2b04b
chore: add instabug_screen_render_manager_test_manual_mocks.dart
andrewdanieldev Jun 22, 2025
608f5e5
chore: run dart format .
andrewdanieldev Jun 22, 2025
dce7286
chore: run dart format .
andrewdanieldev Jun 22, 2025
a53c8c0
Merge remote-tracking branch 'origin/dev' into feat/screen-render
andrewdanieldev Jun 25, 2025
83cbbba
chore: add native feature apis
andrewdanieldev Jun 28, 2025
7a2ca11
chore: fix some capture logic, add unit test cases.
andrewdanieldev Jun 30, 2025
b804d45
chore: merge screen_render_native_apis branch
andrewdanieldev Jun 30, 2025
39bdd72
chore: apply flutter 2.10.5
andrewdanieldev Jul 1, 2025
2ae2acc
fix: dart format
ahmedAlaaInstabug Jul 1, 2025
852884e
Merge pull request #582 from Instabug/feat/screen-render
andrewdanieldev Jul 2, 2025
86cb8be
chore: add ios store pod
andrewdanieldev Jul 2, 2025
d9acd3a
chore: add store API in Flutter side
andrewdanieldev Jul 2, 2025
49652b7
bump: android SDK to 15.0.2 (#594)
ahmedAlaaInstabug Jul 7, 2025
0072d5a
Merge pull request #596 from Instabug/master
ahmedAlaaInstabug Jul 7, 2025
dd69dcc
Merge pull request #597 from Instabug/release/androidv15.0.2
ahmedAlaaInstabug Jul 9, 2025
b183a43
chore: add store API in iOS side
andrewdanieldev Jul 9, 2025
3ea6484
feat: support advanced UI customization
AyaMahmoud148 Jul 10, 2025
4081f5b
chore: add change log
AyaMahmoud148 Jul 10, 2025
8798555
fix: delete setFullScreen
AyaMahmoud148 Jul 10, 2025
d46e04d
fix: linting
AyaMahmoud148 Jul 10, 2025
98a2f8c
fix: unit test
AyaMahmoud148 Jul 10, 2025
20add37
fix: linting
AyaMahmoud148 Jul 10, 2025
5c1551b
chore: add store API in Android side
andrewdanieldev Jul 13, 2025
a39ea76
chore: remove logs
andrewdanieldev Jul 13, 2025
cdfea37
chore: add 2.10.5 changes
andrewdanieldev Jul 13, 2025
79d152c
chore: add 2.10.5 changes
andrewdanieldev Jul 13, 2025
4cdf341
fix: flutter format
ahmedAlaaInstabug Jul 14, 2025
cd807c4
fix: resolve comments
AyaMahmoud148 Jul 14, 2025
c21725e
Merge pull request #601 from Instabug/feat/screen-render-local-store
andrewdanieldev Jul 15, 2025
b8d6815
chore: apply pr comments & update the captured timestamp to be since …
andrewdanieldev Jul 16, 2025
c1d7ff5
fix: dart format
ahmedAlaaInstabug Jul 17, 2025
37de671
Merge pull request #603 from Instabug/feat/screen-render-local-store
andrewdanieldev Jul 17, 2025
db97a53
chore: update logic in the sample app
andrewdanieldev Jul 17, 2025
04b5972
fix: dart format
ahmedAlaaInstabug Jul 17, 2025
50d35c1
Merge pull request #604 from Instabug/feat/screen-render-local-store
andrewdanieldev Jul 17, 2025
e07363c
Merge remote-tracking branch 'origin/dev' into feat/screen-render-to-dev
andrewdanieldev Jul 20, 2025
d84e96f
chore: update capture screen rendering logic
andrewdanieldev Jul 28, 2025
2266836
Merge pull request #610 from Instabug/feat/screen-render-testing
andrewdanieldev Jul 28, 2025
751cdaa
fix: delayed frames summation
andrewdanieldev Jul 29, 2025
5485132
chore: update Instabug dependency to version 15.1.17 in Podfile and r…
andrewdanieldev Jul 29, 2025
a49ae10
prepare for ci
andrewdanieldev Jul 30, 2025
67c817b
Merge pull request #613 from Instabug/feat/screen-render-testing
andrewdanieldev Jul 30, 2025
6227629
update ios pods
andrewdanieldev Jul 30, 2025
3a28199
chore: remove deprecated apis
AyaMahmoud148 Jul 31, 2025
cb19383
chore: add changelog
AyaMahmoud148 Jul 31, 2025
400df41
Merge branch 'feat/support-advanced-UI-customization' into chore/-Rem…
AyaMahmoud148 Jul 31, 2025
4257f33
fix: setTheme calling
AyaMahmoud148 Jul 31, 2025
5c59d8c
fix: formatte
AyaMahmoud148 Jul 31, 2025
47d148f
add: tolerance value to screen render capturing
andrewdanieldev Jul 31, 2025
e7c05cf
chore: update iOS pods
andrewdanieldev Jul 31, 2025
61da816
fix: formate
AyaMahmoud148 Jul 31, 2025
924f1d9
fix: formatting
AyaMahmoud148 Jul 31, 2025
270940c
fix: ios tests
AyaMahmoud148 Jul 31, 2025
7f301c1
chore: separate the start and end methods of screenRenderCollector
andrewdanieldev Aug 1, 2025
3aa618b
fix: ios tests
AyaMahmoud148 Aug 3, 2025
6e88be4
fix: e2e tests
AyaMahmoud148 Aug 3, 2025
985709a
fix: formate analyze
AyaMahmoud148 Aug 3, 2025
d82c1d4
fix: e2e ios testing
AyaMahmoud148 Aug 3, 2025
e01e271
chore: format code
andrewdanieldev Aug 3, 2025
61522cf
chore: update iOS pods & implement tolerance in iOS
andrewdanieldev Aug 4, 2025
2018d9f
chore: run mockito on 2.10.5
andrewdanieldev Aug 4, 2025
55340b3
Merge pull request #617 from Instabug/feat/screen-render-updates
andrewdanieldev Aug 5, 2025
d882ac9
Merge remote-tracking branch 'origin/feat/screen-render-to-dev' into …
andrewdanieldev Aug 5, 2025
f2c14a9
Merge remote-tracking branch 'origin/chore/-Remove-deprecated-APIS' i…
andrewdanieldev Aug 5, 2025
7324592
chore: resolve conflict with remove deprecated apis branch, update CH…
andrewdanieldev Aug 5, 2025
ba40474
chore: run mockito of flutter 2.10.5
andrewdanieldev Aug 5, 2025
bfac8cd
fix: format
ahmedAlaaInstabug Aug 6, 2025
cfc0c01
chore: update android dependency
andrewdanieldev Aug 10, 2025
db428b4
chore: add report nonfatal beside exception logs
andrewdanieldev Aug 12, 2025
72f9bc9
chore: adapt instabug_screen_render_manager_test for flutter 2.10.5
andrewdanieldev Aug 12, 2025
7244bcc
chore: remove logs
andrewdanieldev Aug 12, 2025
cb85eda
feat: support app variant (#585)
ahmedAlaaInstabug Aug 13, 2025
57b169a
Merge pull request #619 from Instabug/feat/screen-render-debugging
andrewdanieldev Aug 13, 2025
f9d6d61
feat: support advanced UI customization (#599)
AyaMahmoud148 Aug 13, 2025
364fa45
chore: update iOS custom pods
andrewdanieldev Aug 14, 2025
3b90e9f
chore: update the public api name
andrewdanieldev Aug 14, 2025
e1d73f2
chore: fix main.dart
andrewdanieldev Aug 14, 2025
f7b505e
chore: fix screen_render_switch.dart
andrewdanieldev Aug 17, 2025
a646dda
chore: fix store SR logic for custom ui traces
andrewdanieldev Aug 17, 2025
f725976
Merge remote-tracking branch 'origin/dev' into feat/screen-render-to-dev
andrewdanieldev Aug 17, 2025
ab3bb29
chore: rebase dev branch and resolve conflict
andrewdanieldev Aug 17, 2025
96298dc
chore: update native android dependency
andrewdanieldev Aug 18, 2025
ba7a535
fix: dropping SR data for customUiTrace when disable AutoUiTrace
andrewdanieldev Aug 19, 2025
3695b62
fix: android back button drop the active traces
andrewdanieldev Aug 20, 2025
4dac2ae
remove logs & run mockito on FLT 2.10.5
andrewdanieldev Aug 20, 2025
8a3a98c
remove unnecessary native unit test
andrewdanieldev Aug 20, 2025
2a3a72c
Merge pull request #625 from Instabug/feat/screen-render-testing
andrewdanieldev Aug 20, 2025
6b7d480
fix android back button
andrewdanieldev Aug 20, 2025
565bdb2
update iOS pods
andrewdanieldev Aug 20, 2025
8bbbd3d
Merge remote-tracking branch 'origin/feat/screen-render-to-dev' into …
andrewdanieldev Aug 20, 2025
ff28d23
resolve conflicts and remove logs
andrewdanieldev Aug 20, 2025
7b6f48b
remove static testing log
andrewdanieldev Aug 20, 2025
19226b1
update android snapshot
andrewdanieldev Aug 21, 2025
f408c8a
Merge pull request #627 from Instabug/feat/screen-render-android-back…
andrewdanieldev Aug 21, 2025
89c5dcf
update android snapshot
andrewdanieldev Aug 21, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 17 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,21 @@
# Changelog

## [15.0.1](https://github.com/Instabug/Instabug-Flutter/compare/v14.3.0...15.0.1)
## [Unreleased](https://github.com/Instabug/Instabug-Flutter/compare/v15.0.2...dev)

### Added

- Add support for Advanced UI customization with comprehensive theming capabilities ([#599](https://github.com/Instabug/Instabug-Flutter/pull/599))

- Add support for App variant. ([#585](https://github.com/Instabug/Instabug-Flutter/pull/585))

- Add screen rendering monitoring functionality within the APM product. ([#605](https://github.com/Instabug/Instabug-Flutter/pull/605))

### Changed

- **BREAKING** Remove deprecated APIs ([#614](https://github.com/Instabug/Instabug-Flutter/pull/614)). See migration guide for more details.


## [15.0.2](https://github.com/Instabug/Instabug-Flutter/compare/v14.3.0...15.0.2) (Jul 7, 2025)

### Added

Expand All @@ -12,7 +27,7 @@

- Bump Instabug iOS SDK to v15.1.1 ([#581](https://github.com/Instabug/Instabug-Flutter/pull/581)). [See release notes](https://github.com/Instabug/Instabug-iOS/releases/tag/15.1.1).

- Bump Instabug Android SDK to v15.0.1 ([#581](https://github.com/Instabug/Instabug-Flutter/pull/581)). [See release notes](https://github.com/Instabug/Instabug-Android/releases/tag/v15.0.1).
- Bump Instabug Android SDK to v15.0.2 ([#581](https://github.com/Instabug/Instabug-Flutter/pull/581)). [See release notes](https://github.com/Instabug/Instabug-Android/releases/tag/v15.0.2).

## [14.3.1](https://github.com/Instabug/Instabug-Flutter/compare/v14.3.0...14.3.1) (May 20, 2025)

Expand Down
12 changes: 8 additions & 4 deletions android/build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
group 'com.instabug.flutter'
version '15.0.1'
version '14.3.0'

buildscript {
repositories {
Expand All @@ -17,11 +17,16 @@ rootProject.allprojects {
google()
mavenCentral()
maven {
url 'https://oss.sonatype.org/content/repositories/snapshots'
url "https://mvn.instabug.com/nexus/repository/instabug-internal/"
credentials {
username "instabug"
password System.getenv("INSTABUG_REPOSITORY_PASSWORD")
}
}
}
}


apply plugin: 'com.android.library'

android {
Expand All @@ -47,11 +52,10 @@ android {
}

dependencies {
api 'com.instabug.library:instabug:15.0.1'
api 'com.instabug.library:instabug:16.0.0.6893868-SNAPSHOT'
testImplementation 'junit:junit:4.13.2'
testImplementation "org.mockito:mockito-inline:3.12.1"
testImplementation "io.mockk:mockk:1.13.13"

}

// add upload_symbols task
Expand Down
1 change: 0 additions & 1 deletion android/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,3 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-bin.zip
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,18 @@
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Build;
import android.util.Log;
import android.view.Display;
import android.view.View;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleEventObserver;
import androidx.lifecycle.LifecycleOwner;

import com.instabug.flutter.generated.InstabugPigeon;
import com.instabug.flutter.modules.ApmApi;
import com.instabug.flutter.modules.BugReportingApi;
import com.instabug.flutter.modules.CrashReportingApi;
Expand All @@ -25,19 +31,23 @@
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.embedding.engine.plugins.activity.ActivityAware;
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
import io.flutter.embedding.engine.plugins.lifecycle.HiddenLifecycleReference;
import io.flutter.embedding.engine.renderer.FlutterRenderer;
import io.flutter.plugin.common.BinaryMessenger;

public class InstabugFlutterPlugin implements FlutterPlugin, ActivityAware {
public class InstabugFlutterPlugin implements FlutterPlugin, ActivityAware, LifecycleEventObserver {
private static final String TAG = InstabugFlutterPlugin.class.getName();

@SuppressLint("StaticFieldLeak")
private static Activity activity;

private InstabugPigeon.InstabugFlutterApi instabugFlutterApi;
private Lifecycle lifecycle;

@Override
public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) {
register(binding.getApplicationContext(), binding.getBinaryMessenger(), (FlutterRenderer) binding.getTextureRegistry());
instabugFlutterApi = new InstabugPigeon.InstabugFlutterApi(binding.getBinaryMessenger());
}

@Override
Expand All @@ -48,23 +58,60 @@ public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
@Override
public void onAttachedToActivity(@NonNull ActivityPluginBinding binding) {
activity = binding.getActivity();

// Register lifecycle observer if available
if (binding.getLifecycle() instanceof HiddenLifecycleReference) {
lifecycle = ((HiddenLifecycleReference) binding.getLifecycle()).getLifecycle();
lifecycle.addObserver(this);
}
}

@Override
public void onDetachedFromActivityForConfigChanges() {
if (lifecycle != null) {
lifecycle.removeObserver(this);
}
activity = null;
}

@Override
public void onReattachedToActivityForConfigChanges(@NonNull ActivityPluginBinding binding) {
activity = binding.getActivity();

// Re-register lifecycle observer if available
if (binding.getLifecycle() instanceof HiddenLifecycleReference) {
lifecycle = ((HiddenLifecycleReference) binding.getLifecycle()).getLifecycle();
lifecycle.addObserver(this);
}
}

@Override
public void onDetachedFromActivity() {
if (lifecycle != null) {
lifecycle.removeObserver(this);
lifecycle = null;
}
activity = null;
}

@Override
public void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event event) {
if (event == Lifecycle.Event.ON_PAUSE) {
handleOnPause();
}
}

private void handleOnPause() {
if (instabugFlutterApi != null) {
instabugFlutterApi.dispose(new InstabugPigeon.InstabugFlutterApi.Reply<Void>() {
@Override
public void reply(Void reply) {
Log.d(TAG, "Screen render cleanup dispose called successfully");
}
});
}
}

private static void register(Context context, BinaryMessenger messenger, FlutterRenderer renderer) {
final Callable<Bitmap> screenshotProvider = new Callable<Bitmap>() {
@Override
Expand All @@ -73,7 +120,14 @@ public Bitmap call() {
}
};

ApmApi.init(messenger);
Callable<Float> refreshRateProvider = new Callable<Float>() {
@Override
public Float call() {
return getRefreshRate();
}
};

ApmApi.init(messenger, refreshRateProvider);
BugReportingApi.init(messenger);
CrashReportingApi.init(messenger);
FeatureRequestsApi.init(messenger);
Expand All @@ -99,4 +153,20 @@ private static Bitmap takeScreenshot(FlutterRenderer renderer) {
return null;
}
}

private static float getRefreshRate() {
float refreshRate = 60f;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
final Display display = activity.getDisplay();
if (display != null) {
refreshRate = display.getRefreshRate();
}
} else {
refreshRate = activity.getWindowManager().getDefaultDisplay().getRefreshRate();
}

return refreshRate;
}

}
Loading