Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
23ad7f8
Release 8.3.2
May 7, 2026
b2d7719
fix(cli): copy plugin files in CocoaPods projects (#8467)
jcesarmobile May 8, 2026
76ff70e
Release 8.3.3
May 8, 2026
b7e167b
chore(cli): update telemetry endpoint (#8464)
alexgerardojacinto May 12, 2026
de1e506
Release 8.3.4
May 12, 2026
731a82e
chore: format java code (#8475)
jcesarmobile May 21, 2026
bc74536
chore: format java code (#8477)
jcesarmobile May 21, 2026
93c72de
feat: add method getDouble to plugin config (#7638)
robingenz May 21, 2026
e456de0
fix(SystemBars): make `safe-area-inset-x` available on API <= 34 (#8424)
theproducer May 22, 2026
258867b
feat(cli): add experimental packageOptions (#8471)
jcesarmobile May 26, 2026
b4b297a
feat(cli): capture ios_package_manager in telemetry (#8482)
alexgerardojacinto May 27, 2026
1d031a4
fix(cli): revert live reload config on failure (#8485)
jcesarmobile May 28, 2026
f1077ef
chore: fix typo in declarations.ts (#8488)
jcesarmobile May 29, 2026
d4ad7ff
fix(SystemBars): respect `insetsHandling` disable (#8481)
theproducer Jun 1, 2026
4c6c321
fix(android): show only the requested system bar (#8480)
fallintoplace Jun 1, 2026
36b729d
chore: Decrease timeout for CI jobs from 60 to 30 minutes (#8476)
markemer Jun 1, 2026
41fd9de
Release 8.4.0
Jun 2, 2026
28bb2c6
fix(cli): patch Capacitor SPM dependency version in plugins (#8492)
jcesarmobile Jun 2, 2026
6048e90
fix(cli): make SPM dependency patch work on prereleases (#8508)
jcesarmobile Jun 15, 2026
7217b52
Release 8.4.1
Jun 19, 2026
b789b68
chore: run `npm run fmt` to fix lint errors (#8516)
markemer Jun 22, 2026
6f2d328
fix(android): explicitly grant URI permissions for image capture inte…
alexgerardojacinto Jul 8, 2026
1834b97
Release 8.4.2
Jul 14, 2026
f368a1b
chore(android): fix lint issues (#8542)
OS-pedrogustavobilro Jul 27, 2026
4c1c870
fix(cli): support TypeScript 7 when loading capacitor.config.ts (#8534)
conbrad Jul 28, 2026
3fa04a3
feat(ios): UIScene Support (#8536)
theproducer Jul 29, 2026
984fa85
feat(cli): add migrator functionality for adopting UIScene (#8544)
theproducer Jul 31, 2026
3ab4139
Release 8.5.0
Jul 31, 2026
5e5bb3b
fix(cli): use POSIX paths in CapApp-SPM Package.swift (#8549)
omriwil Aug 6, 2026
5ac4dd6
fix(core): prevent removeListener from removing wrong listener (#8271)
maniktyagi04 Aug 10, 2026
559ff48
fix(cli): reject apksigner for app bundles
Boulea7 Aug 11, 2026
d078255
chore: sync upstream PR #8568 from @Boulea7 (upstream-preferred confl…
Aug 28, 2026
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
12 changes: 6 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ concurrency:
jobs:
setup:
runs-on: ubuntu-latest
timeout-minutes: 10
timeout-minutes: 30
steps:
- name: Get Latest
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
Expand All @@ -38,7 +38,7 @@ jobs:
key: ${{ runner.OS }}-bun-dependencies-cache-${{ hashFiles('bun.lock') }}
lint:
runs-on: macos-15
timeout-minutes: 10
timeout-minutes: 30
steps:
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
Expand All @@ -57,7 +57,7 @@ jobs:
- run: bun run lint
test-cli:
runs-on: macos-15
timeout-minutes: 10
timeout-minutes: 30
needs:
- setup
- lint
Expand All @@ -81,7 +81,7 @@ jobs:
working-directory: ./cli
test-core:
runs-on: ubuntu-latest
timeout-minutes: 10
timeout-minutes: 30
needs:
- setup
- lint
Expand All @@ -105,7 +105,7 @@ jobs:
working-directory: ./core
test-ios:
runs-on: macos-15
timeout-minutes: 10
timeout-minutes: 30
needs:
- setup
- lint
Expand Down Expand Up @@ -136,7 +136,7 @@ jobs:
run: sh ./scripts/native-podspec.sh lint
test-android:
runs-on: ubuntu-latest
timeout-minutes: 10
timeout-minutes: 30
needs:
- setup
- lint
Expand Down
28 changes: 4 additions & 24 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,33 +3,13 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.

## [8.5.2](https://github.com/Cap-go/capacitor-plus/compare/8.5.1...8.5.2) (2026-08-26)

**Note:** Version bump only for package capacitor





## [8.5.1](https://github.com/Cap-go/capacitor-plus/compare/8.3.12...8.5.1) (2026-08-25)


### Bug Fixes

* **ci:** fetch upstream objects so plus branch sync works ([#109](https://github.com/Cap-go/capacitor-plus/issues/109)) ([1fa7eee](https://github.com/Cap-go/capacitor-plus/commit/1fa7eeeff9494e9b32afb20a9850389b79d6bcec))
* **ci:** resolve modify/delete conflicts in sync conflict PRs ([#110](https://github.com/Cap-go/capacitor-plus/issues/110)) ([5c29fb9](https://github.com/Cap-go/capacitor-plus/commit/5c29fb9af001b9aafdcde7b7054585e093f44431))





# [8.5.0](https://github.com/ionic-team/capacitor/compare/8.4.2...8.5.0) (2026-07-31)

## Bug Fixes
### Bug Fixes

- **cli:** support TypeScript 7 when loading capacitor.config.ts ([#8534](https://github.com/ionic-team/capacitor/issues/8534)) ([4c1c870](https://github.com/ionic-team/capacitor/commit/4c1c8709413b9c19b008c99122ca330cc3c90e6f))

## Features
### Features

- **cli:** add migrator functionality for adopting UIScene ([#8544](https://github.com/ionic-team/capacitor/issues/8544)) ([984fa85](https://github.com/ionic-team/capacitor/commit/984fa85ba0adab0aacf895aed6323bf4b503dccb))
- **ios:** UIScene Support ([#8536](https://github.com/ionic-team/capacitor/issues/8536)) ([3fa04a3](https://github.com/ionic-team/capacitor/commit/3fa04a357c92af34cd6fccb8124791963804a9dc))
Expand All @@ -49,14 +29,14 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline

# [8.4.0](https://github.com/ionic-team/capacitor/compare/8.3.4...8.4.0) (2026-06-02)

## Bug Fixes
### Bug Fixes

- **android:** show only the requested system bar ([#8480](https://github.com/ionic-team/capacitor/issues/8480)) ([4c6c321](https://github.com/ionic-team/capacitor/commit/4c6c3219afb5223211e857457e46283c37eb9424))
- **cli:** revert live reload config on failure ([#8485](https://github.com/ionic-team/capacitor/issues/8485)) ([1d031a4](https://github.com/ionic-team/capacitor/commit/1d031a4abec2c793079ba8897ad2e40c4cc6c7f9))
- **SystemBars:** make `safe-area-inset-x` available on API <= 34 ([#8424](https://github.com/ionic-team/capacitor/issues/8424)) ([e456de0](https://github.com/ionic-team/capacitor/commit/e456de083e19644f484bec5a5359cb67960ac8bc))
- **SystemBars:** respect `insetsHandling` disable ([#8481](https://github.com/ionic-team/capacitor/issues/8481)) ([d4ad7ff](https://github.com/ionic-team/capacitor/commit/d4ad7ffe39daf66e0cfc63af9028d5c05543bde7))

## Features
### Features

- add method getDouble to plugin config ([#7638](https://github.com/ionic-team/capacitor/issues/7638)) ([93c72de](https://github.com/ionic-team/capacitor/commit/93c72de40a2ec4c78b33659250cb08340083088e))
- **cli:** add experimental packageOptions ([#8471](https://github.com/ionic-team/capacitor/issues/8471)) ([258867b](https://github.com/ionic-team/capacitor/commit/258867b7bf37b1837b99b02ec9638e5a6df08d97))
Expand Down
16 changes: 0 additions & 16 deletions android/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,6 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.

## [8.5.2](https://github.com/Cap-go/capacitor-plus/compare/8.5.1...8.5.2) (2026-08-26)

**Note:** Version bump only for package @capacitor-plus/android





## [8.5.1](https://github.com/Cap-go/capacitor-plus/compare/8.3.12...8.5.1) (2026-08-25)

**Note:** Version bump only for package @capacitor-plus/android





# [8.5.0](https://github.com/ionic-team/capacitor/compare/8.4.2...8.5.0) (2026-07-31)

**Note:** Version bump only for package @capacitor/android
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -412,12 +412,6 @@ private boolean showImageCapturePicker(final ValueCallback<Uri[]> filePathCallba
}
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageFileUri);
takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);

// Store in static variables to survive activity recreation
pendingFilePathCallback = filePathCallback;
pendingImageFileUri = imageFileUri;
pendingFileChooserType = FileChooserType.IMAGE_CAPTURE;

activityListener = (activityResult) -> {
Uri[] result = null;
if (activityResult.getResultCode() == Activity.RESULT_OK) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -756,48 +756,6 @@ public long skip(long n) throws IOException {
}
}

/**
* An InputStream wrapper that limits the number of bytes that can be read.
*/
static class BoundedInputStream extends InputStream {

private final InputStream in;
private long remaining;

public BoundedInputStream(InputStream in, long limit) {
this.in = in;
this.remaining = limit;
}

@Override
public int available() throws IOException {
int available = in.available();
return (int) Math.min(available, remaining);
}

@Override
public int read() throws IOException {
if (remaining <= 0) return -1;
int result = in.read();
if (result != -1) remaining--;
return result;
}

@Override
public int read(byte[] b, int off, int len) throws IOException {
if (remaining <= 0) return -1;
int toRead = (int) Math.min(len, remaining);
int result = in.read(b, off, toRead);
if (result > 0) remaining -= result;
return result;
}

@Override
public void close() throws IOException {
in.close();
}
}

// For L and above.
private static class LollipopLazyInputStream extends LazyInputStream {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,14 +70,12 @@ public CapacitorEvalBridgeMode(WebView webView, CordovaInterface cordova) {

@Override
public void onNativeToJsMessageAvailable(final NativeToJsMessageQueue queue) {
cordova
.getActivity()
.runOnUiThread(() -> {
String js = queue.popAndEncodeAsJs();
if (js != null) {
webView.evaluateJavascript(js, null);
}
});
cordova.getActivity().runOnUiThread(() -> {
String js = queue.popAndEncodeAsJs();
if (js != null) {
webView.evaluateJavascript(js, null);
}
});
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,17 +44,17 @@ public class SystemBars extends Plugin {
private static final int WEBVIEW_VERSION_WITH_SAFE_AREA_KEYBOARD_FIX = 144;

static final String viewportMetaJSFunction = """
function capacitorSystemBarsCheckMetaViewport() {
const meta = document.querySelectorAll("meta[name=viewport]");
if (meta.length == 0) {
return false;
}
// get the last found meta viewport tag
const metaContent = meta[meta.length - 1].content;
return metaContent.includes("viewport-fit=cover");
function capacitorSystemBarsCheckMetaViewport() {
const meta = document.querySelectorAll("meta[name=viewport]");
if (meta.length == 0) {
return false;
}
capacitorSystemBarsCheckMetaViewport();
""";
// get the last found meta viewport tag
const metaContent = meta[meta.length - 1].content;
return metaContent.includes("viewport-fit=cover");
}
capacitorSystemBarsCheckMetaViewport();
""";

private String insetsHandling = INSETS_HANDLING_CSS;
private boolean hasViewportCover = false;
Expand Down Expand Up @@ -272,7 +272,7 @@ private void initWindowInsetsListener() {
// We need to correct for a possible shown IME
v.setPadding(0, 0, 0, keyboardVisible ? imeInsets.bottom : 0);

Insets safeAreaInsets = calcSafeAreaInsets(safeAreaSource);
Insets safeAreaInsets = calcSafeAreaInsets(insets);
injectSafeAreaCSS(safeAreaInsets.top, safeAreaInsets.right, safeAreaInsets.bottom, safeAreaInsets.left);

return new WindowInsetsCompat.Builder(insets)
Expand All @@ -297,7 +297,7 @@ private void initWindowInsetsListener() {
.setInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout(), Insets.of(0, 0, 0, 0))
.build();

Insets safeAreaInsets = calcSafeAreaInsets(safeAreaSource);
Insets safeAreaInsets = calcSafeAreaInsets(newInsets);
injectSafeAreaCSS(safeAreaInsets.top, safeAreaInsets.right, safeAreaInsets.bottom, safeAreaInsets.left);

return newInsets;
Expand Down Expand Up @@ -364,7 +364,6 @@ private void setHidden(boolean hide, String bar) {
if (hide) {
if (bar.isEmpty()) {
windowInsetsControllerCompat.hide(WindowInsetsCompat.Type.systemBars());
navBarVisible = false;
} else if (bar.equals(BAR_STATUS_BAR)) {
windowInsetsControllerCompat.hide(WindowInsetsCompat.Type.statusBars());
} else if (bar.equals(BAR_GESTURE_BAR)) {
Expand All @@ -376,7 +375,6 @@ private void setHidden(boolean hide, String bar) {

if (bar.isEmpty()) {
windowInsetsControllerCompat.show(WindowInsetsCompat.Type.systemBars());
navBarVisible = true;
} else if (bar.equals(BAR_STATUS_BAR)) {
windowInsetsControllerCompat.show(WindowInsetsCompat.Type.statusBars());
} else if (bar.equals(BAR_GESTURE_BAR)) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package com.getcapacitor.plugin;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.mockStatic;
import static org.mockito.Mockito.never;
Expand All @@ -15,7 +13,6 @@
import androidx.core.view.WindowInsetsCompat;
import androidx.core.view.WindowInsetsControllerCompat;
import com.getcapacitor.Bridge;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import org.junit.Test;
import org.mockito.MockedStatic;
Expand Down Expand Up @@ -49,66 +46,8 @@ public void showWithNavigationBarShowsOnlyNavigationBars() throws Exception {
verify(controller, never()).show(WindowInsetsCompat.Type.statusBars());
}

@Test
public void hideWithEmptyBarHidesSystemBars() throws Exception {
WindowInsetsControllerCompat controller = invokeSetHidden(new SystemBars(), true, "");

verify(controller).hide(WindowInsetsCompat.Type.systemBars());
verify(controller, never()).hide(WindowInsetsCompat.Type.statusBars());
verify(controller, never()).hide(WindowInsetsCompat.Type.navigationBars());
}

@Test
public void hideWithStatusBarHidesOnlyStatusBars() throws Exception {
WindowInsetsControllerCompat controller = invokeSetHidden(new SystemBars(), true, "StatusBar");

verify(controller).hide(WindowInsetsCompat.Type.statusBars());
verify(controller, never()).hide(WindowInsetsCompat.Type.systemBars());
verify(controller, never()).hide(WindowInsetsCompat.Type.navigationBars());
}

@Test
public void togglingNavigationBarTracksNavBarVisible() throws Exception {
SystemBars plugin = new SystemBars();

invokeSetHidden(plugin, true, "NavigationBar");
assertFalse(navBarVisible(plugin));

invokeSetHidden(plugin, false, "NavigationBar");
assertTrue(navBarVisible(plugin));
}

@Test
public void togglingAllBarsTracksNavBarVisible() throws Exception {
SystemBars plugin = new SystemBars();

invokeSetHidden(plugin, true, "");
assertFalse(navBarVisible(plugin));

invokeSetHidden(plugin, false, "");
assertTrue(navBarVisible(plugin));
}

@Test
public void hidingOnlyStatusBarLeavesNavBarVisible() throws Exception {
SystemBars plugin = new SystemBars();

invokeSetHidden(plugin, true, "StatusBar");

assertTrue(navBarVisible(plugin));
}

private boolean navBarVisible(SystemBars plugin) throws Exception {
Field field = SystemBars.class.getDeclaredField("navBarVisible");
field.setAccessible(true);
return field.getBoolean(plugin);
}

private WindowInsetsControllerCompat invokeSetHidden(String bar) throws Exception {
return invokeSetHidden(new SystemBars(), false, bar);
}

private WindowInsetsControllerCompat invokeSetHidden(SystemBars plugin, boolean hide, String bar) throws Exception {
SystemBars plugin = new SystemBars();
Bridge bridge = mock(Bridge.class);
AppCompatActivity activity = mock(AppCompatActivity.class);
Window window = mock(Window.class);
Expand All @@ -126,7 +65,7 @@ private WindowInsetsControllerCompat invokeSetHidden(SystemBars plugin, boolean

Method setHidden = SystemBars.class.getDeclaredMethod("setHidden", boolean.class, String.class);
setHidden.setAccessible(true);
setHidden.invoke(plugin, hide, bar);
setHidden.invoke(plugin, false, bar);
}

return controller;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ public class HttpRequestHandlerTest {

static final String BASE_URL = "https://httpbin.org/get";
static final String PARAMS_JSON = """
{"k": "a&b"}
""";
{"k": "a&b"}
""";

@Test
public void testHttpURLConnectionBuilderSetUrlParamsEncoded() throws Exception {
Expand Down
Loading
Loading