# Highlights

- We've updated `targetSdkVersion` to SDK 36 and Billing Library 8.0.0 to keep Google Play happy.
- Improved SAF support in all file handling functions.
- Fixed Google Play warning about 16 KB memory page sizes.


# Previous Highlights

- Introduced a new `cfg.EdgeToEdge` option to enable edge-to-edge features in your apps so that you can draw under the status bar and navigation bar if desired.

- You will see that the Hybrid template apps are now using modules instead of simple include files. We will be moving towards the use of modules going forward as they are now supported by most phones and browsers and work on front-end (browser) as well as back-end (NodeJS) code. They provide better protection against clashing of variable names/class names and a uniform and portable approach to modularisation, encapsulation and code re-use (which is always good).

- The correct matching version of the APKBuilder is automatically used when downloading via the 'Plugins' menu. No need to manually install it for beta versions of DS anymore :)

- We've added support for ESP32 based microcontroller boards when running Micropython and included some useful samples. See here if you are interested in experimenting with digital electronics:

    - <https://shop.pimoroni.com/search?q=ESP32>
    - <https://docs.micropython.org/en/latest/esp32/quickref.html>

- We've updated the obfuscator component, so you can use more modern js libs in your code and make use of useful newer js features like the `?.` operator and default parameter values on functions. You can also call this in your code using `ide.obfuscate( src, dest )` if you want to export protected code (for example when building DS extensions or plugins).

- You might notice that if you add a new JS-Module file to your project, then the generated class will extend a class called `Binder`. Doing this is optional but will make your life much easier when dealing with native callbacks or timer callbacks because it automatically binds all your class methods to your class instance so that you don't have to worry about the current context (ie. the `this` keyword will always refer to the enclosing class, not some random context which can sometimes happen in JavaScript).


# Release History

## DS 2.80.0

- Fixed SAF file write truncation bug.
- Fixed `app.CreateShortcut` bug in APKs.
- Added new `app.GetSafeArea()` method with `cutout` and `system` option.
- Fixed `app.EnableBackKey(false)` in Android 16 APKs.
- Fixed Google Play warning about 16 KB memory page sizes.
- Improved SAF support in all file handling functions.
- `app.ListPermissions( "all/internal/external/usb" )` now returns use-able URIs.

## DS 2.79.2b

- Updated ApkBuilder to target API 36.
- Updated ApkBuilder to use Billing v8.

## DS 2.79.1b

- Fixed missing ScratchPad extension on device IDE.
- Fixed module/ESM based projects not working in APKs (new apkbuilder needed).
- Fixed issue with `app.SetScreenMode( "game" )` showing black bar at bottom.
- Filtered `.*android_webview/browser.*` errors in NodeJS apps.
- Added 'AllFiles' permission to `app.GetPermissions`/`CheckPermissions` (for X version).
- Fixed import statements not working for libs in sub-folders.
- Fixed issue with wifi-ide not showing app-icon.png files.

## DS 2.78.9

- Fixed app icon and provider authority issue in APK/AAB builder.
- Set AAB builder default to SDK level 35.

## DS 2.78.8b

- Added `app.GetNavBarHeight` method.
- Updated nav bar detection/measuring to support runtime changes.

## DS 2.78.7b

- Enabled drawing over camera notch.
- Changed internal method for calculating Navbar height.

## DS 2.78b1

- Updated `targetSdkVersion` to SDK 35.
- Updated Google Play Billing Library to version 7.0.0.
- Added support for edge-to-edge mode on Android 15+.
- Permission "Media" is now only added in 'X' version (due to GPlay restriction).
- Fixed bug preventing spks/ppks/epks from being installed from file managers.
- Fix docs open/close, unwanted refresh bug.
- Added `wbs.SetOnWsReceive`, `wbs.SetOnWsOpen`, `wbs.SetOnWsClose` callbacks.
- App name is now (space) trimmed when creating a new app on the device.
- App now starts up faster (no orientation flips).
- Added new `cfg.EdgeToEdge` mode to enable it if available on the device.
- Added new `app.IsEdgeToEdge()` method.

## DS 2.77b2

- Fixed bug where HTTP PUT requests were failing in Hybrid and Python apps.
- Added ForceCors option to `app.SetOptions` to force CORS checks on Hybrid and Python apps.
- Added new obfuscator and made `ide.Obfuscate` modal.
- Added support for Espressif ESP32 chips to UsbSerial module (tested on QT-Pi-ESP32-S3).
- Added mobile programming support for ESP32 chips running MicroPython + examples.
- Fixed editor not resizing after returning from docs when keyboard was show.
- Fixed IDE 'Create Shortcut' error always showing on Android 26+.
- Fixed APKBuilder mistakenly using old DS engine (caused mimetype errors etc).
- Stopped using V8 libs for IDE (js engine too old for new obfuscator libs).
- Downloading APKBuilder from plugins menu now downloads matching build version.
- Fixed Notificationlistener or `_AddOptions("NotifyService")` making project behave like HTML project.
- Fixed `app.QueryContent()` always asking for "Media" permissions (use `_AddPermissions` instead).
- Marked 'Query Videos/Images' samples as 'X' version only (due to new Google Play restrictions).
- Fixed HTML and Hybrid apps now auto-size when keyboard is shown.

## DS 2.77b1

- Removed READ_MEDIA_IMAGES/VIDEOS permissions for GPlay version (Google requirement).
- Removed FOREGROUND_SERVICE_LOCATION permission for GPlay version (Google requirement).
- Re-enabled 32bit ARM support (too many devices still running 32bit).

## DS 2.76b3

- Fixed bug when switching between 'Game' mode and 'Normal' mode.
- Updated docs to include Python fixes.
- Updated UI controls to v0.31.
- Fixed delay when first showing left side panel (docs).
- Wifi-IDE: New UI for text search (similar to Edit extension).
- Wifi-IDE: When creating and naming new files, the enter key now confirms the dialog.
- Wifi-IDE: Fixed meta key not working for MacBooks.
- Fixed Pixel7 text sizing and offscreen button issues.
- Fixed `app.IsTablet` response for Pixel7 (and other large phones).

## DS 2.76b2

- 'Game' mode now fills the camera notch area too (if present).
- Added "application/wasm" mime type to jetty/ide server.
- `cfg.ESM` is now automatic if 'export' or 'import' statements are found.
- Added support for .mjs files.
- Added new file type 'JS-Module'.
- Changed Hybrid samples to use import statements.
- Enabled creation of Python apps from wifi IDE.
- Switched Python Hybrid default to light mode.
- Removed Github feature (more work on wifi ide version needed).
- Added missing imports from many Python samples in docs.
- Html and Hybrid apps no longer allow pinch/zoom/scroll by default.
- Added 'desktop' option to `app.CreateWebView()` methods (enables desktop mode).
- Added `WebView.SetOptions` method so that (most) options can be changed at runtime.

## DS 2.76b1

- Fixed issue with null timer ids when using `app.SetOnError` in Node apps.
- Added missing Bluetooth/Location permissions when `app.DiscoverBtDevices` is used.
- Fixed right-click 'Install' option in wifi ide for ppks.
- Fixed `app.UnzipFile` failure on some devices.
- Added the .mjs MIME mapping to Jetty web server.
- Fixed `cfg.ESM` mode for recent Android WebViews.
- Fixed atob bug breaking pre-encoded plugin strings sent with CallScript method.
- Fixed automatic resize for Hybrid and Python apps on screen rotation.
- Added `ext.deviceName` and `ext.appType` fields to extension object.
- Added appType parameter to `ext_OnProject` callback.
- Fixed using `app.CreateNode` method inside services.
- Fixed `PlayStore.GetPurchases()` not returning 'IAP' types.
- Updated docs theme to look more modern (and match v3 editor).
- Upgraded material icons version for docs and extensions.
- Added `SetWeight( weight, orient )` method to all controls.
- Added `Layout.SetWeightSum( sum )`.
- Switched plugin installer to use Android built-in zip extractor.
- Fixed wiping out of .mjs files when using `cfg.NodeESM` mode.
- Modified NodeJS `os.homedir()` func to return same as `app.RealPath("/Private")`.
- Added (dark) Google group to forum tab.
- Fixed bug stopping demos work after using docs pythons samples.

## DS 2.75b2

- Prevented high CPU/power usage of NodeJS apps.
- Fixed DoEvents to prevent lockups in Node based apps.
- Added 'doevents' option to `app.CopyFolder` (keeps UI alive when copying large folders).
- Fixed 'Simple' Node Native template.

## DS 2.75b1

- Fixed crash when calling `!buildapk` option from Wifi-IDE.
- Added extra 'password' param to `!buildapk` (user.keystore musts exist).
- Added new `!buildaab` command to Wifi-IDE.
- Added 'noHeadless' option to config.json (block TV/Headless mode).
- Fixed `app.SetOnError` method for Node based apps (trap errors to prevent app exit).
- Crypto now uses "AES/GCM/NoPadding" (pass "AES/ECB/PKCS5Padding" to `app.CreateCrypt` for old method).
- Removed old samples tab from Wifi-IDE.
- Removed scanning for 'HeartRate' keyword (related to restricted body sensor permission).
- Fixed missing docs + 90% installation lockup for TV devices.
