diff --git a/app/diario-bordo.html b/app/diario-bordo.html
index 43731dc..5833c85 100644
--- a/app/diario-bordo.html
+++ b/app/diario-bordo.html
@@ -5794,24 +5794,50 @@ async function ensureBleNativeReady(){
_bleNativeInitialized=true;
}
-// Copia log diagnóstico pro clipboard
-async function copyDiagLog(){
+// Mostra log num modal pro usuário copiar/compartilhar manualmente
+// (navigator.clipboard crasha em alguns WebViews Capacitor / Samsung One UI)
+function copyDiagLog(){
const el=document.getElementById('bt-diag');
if(!el){toast('Log vazio');return}
- // Extrai texto puro (innerText preserva quebras de linha)
const txt=`Shivao v${APP_VERSION} · log diagnóstico\n\n`+(el.innerText||el.textContent||'').trim();
- try{
- if(navigator.clipboard?.writeText){
- await navigator.clipboard.writeText(txt);
- toast('✓ Log copiado · cole no chat');
- }else{
- // Fallback: textarea hack
- const ta=document.createElement('textarea');
- ta.value=txt;document.body.appendChild(ta);ta.select();
- document.execCommand('copy');ta.remove();
- toast('✓ Log copiado');
- }
- }catch(e){toast('Erro ao copiar: '+e.message)}
+ let modal=document.getElementById('bt-log-modal');
+ if(modal)modal.remove();
+ modal=document.createElement('div');
+ modal.id='bt-log-modal';
+ modal.style.cssText='position:fixed;inset:0;z-index:9999;background:rgba(0,0,0,.85);display:flex;flex-direction:column;padding:16px;backdrop-filter:blur(8px)';
+ // safe escape
+ const esc=txt.replace(/&/g,'&').replace(//g,'>');
+ modal.innerHTML=`
+
+
+
📋 Log diagnóstico
+
+
+
Toque dentro da caixa e segure pra selecionar tudo. Ou toque ↗ Compartilhar pra enviar via WhatsApp.
+
+
+
+
+
+ `;
+ document.body.appendChild(modal);
+ // Auto-seleciona o texto
+ setTimeout(()=>{
+ const ta=document.getElementById('bt-log-textarea');
+ if(ta){ta.focus();try{ta.select()}catch{}}
+ },200);
+}
+
+async function bmsShareLog(){
+ const ta=document.getElementById('bt-log-textarea');
+ if(!ta)return;
+ if(navigator.share){
+ try{
+ await navigator.share({title:'Shivao log diagnóstico',text:ta.value});
+ }catch(e){/* user cancelou */}
+ }else{
+ toast('Compartilhar não disponível · use seleção manual');
+ }
}
// Diagnóstico visível: mostra cada passo no card BLE
@@ -6303,7 +6329,7 @@ async function removeBluetoothDevice(id){
renderBluetoothCard();
}
-const APP_VERSION='1.10.7';
+const APP_VERSION='1.10.8';
function renderBluetoothCard(){
const el=document.getElementById('bt-list');
const supportEl=document.getElementById('bt-support');
diff --git a/mobile/android/app/build.gradle b/mobile/android/app/build.gradle
index f69740d..9c56606 100644
--- a/mobile/android/app/build.gradle
+++ b/mobile/android/app/build.gradle
@@ -7,8 +7,8 @@ android {
applicationId "br.com.pontualtech.shivao"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
- versionCode 23
- versionName "1.10.7"
+ versionCode 24
+ versionName "1.10.8"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
aaptOptions {
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
diff --git a/mobile/package.json b/mobile/package.json
index 1b3a604..40c67ae 100644
--- a/mobile/package.json
+++ b/mobile/package.json
@@ -1,6 +1,6 @@
{
"name": "shivao-mobile",
- "version": "1.10.7",
+ "version": "1.10.8",
"description": "Shivao app nativo (Capacitor wrapper Android/iOS)",
"main": "index.js",
"type": "module",
diff --git a/server/public/index.html b/server/public/index.html
index 43731dc..5833c85 100644
--- a/server/public/index.html
+++ b/server/public/index.html
@@ -5794,24 +5794,50 @@ async function ensureBleNativeReady(){
_bleNativeInitialized=true;
}
-// Copia log diagnóstico pro clipboard
-async function copyDiagLog(){
+// Mostra log num modal pro usuário copiar/compartilhar manualmente
+// (navigator.clipboard crasha em alguns WebViews Capacitor / Samsung One UI)
+function copyDiagLog(){
const el=document.getElementById('bt-diag');
if(!el){toast('Log vazio');return}
- // Extrai texto puro (innerText preserva quebras de linha)
const txt=`Shivao v${APP_VERSION} · log diagnóstico\n\n`+(el.innerText||el.textContent||'').trim();
- try{
- if(navigator.clipboard?.writeText){
- await navigator.clipboard.writeText(txt);
- toast('✓ Log copiado · cole no chat');
- }else{
- // Fallback: textarea hack
- const ta=document.createElement('textarea');
- ta.value=txt;document.body.appendChild(ta);ta.select();
- document.execCommand('copy');ta.remove();
- toast('✓ Log copiado');
- }
- }catch(e){toast('Erro ao copiar: '+e.message)}
+ let modal=document.getElementById('bt-log-modal');
+ if(modal)modal.remove();
+ modal=document.createElement('div');
+ modal.id='bt-log-modal';
+ modal.style.cssText='position:fixed;inset:0;z-index:9999;background:rgba(0,0,0,.85);display:flex;flex-direction:column;padding:16px;backdrop-filter:blur(8px)';
+ // safe escape
+ const esc=txt.replace(/&/g,'&').replace(//g,'>');
+ modal.innerHTML=`
+
+
+
📋 Log diagnóstico
+
+
+
Toque dentro da caixa e segure pra selecionar tudo. Ou toque ↗ Compartilhar pra enviar via WhatsApp.
+
+
+
+
+
+ `;
+ document.body.appendChild(modal);
+ // Auto-seleciona o texto
+ setTimeout(()=>{
+ const ta=document.getElementById('bt-log-textarea');
+ if(ta){ta.focus();try{ta.select()}catch{}}
+ },200);
+}
+
+async function bmsShareLog(){
+ const ta=document.getElementById('bt-log-textarea');
+ if(!ta)return;
+ if(navigator.share){
+ try{
+ await navigator.share({title:'Shivao log diagnóstico',text:ta.value});
+ }catch(e){/* user cancelou */}
+ }else{
+ toast('Compartilhar não disponível · use seleção manual');
+ }
}
// Diagnóstico visível: mostra cada passo no card BLE
@@ -6303,7 +6329,7 @@ async function removeBluetoothDevice(id){
renderBluetoothCard();
}
-const APP_VERSION='1.10.7';
+const APP_VERSION='1.10.8';
function renderBluetoothCard(){
const el=document.getElementById('bt-list');
const supportEl=document.getElementById('bt-support');
diff --git a/server/src/index.js b/server/src/index.js
index ebd6fe0..3d923d5 100644
--- a/server/src/index.js
+++ b/server/src/index.js
@@ -347,7 +347,7 @@ app.get('/.well-known/assetlinks.json', (req, res) => {
});
// Atalho: /apk redireciona pra última APK release no Forgejo
-const LATEST_APK_URL = 'https://git.pontualtech.work/karlao/shivao-projeto/releases/download/v1.10.7/Shivao-v1.10.7.apk';
+const LATEST_APK_URL = 'https://git.pontualtech.work/karlao/shivao-projeto/releases/download/v1.10.8/Shivao-v1.10.8.apk';
app.get('/apk', (req, res) => res.redirect(302, LATEST_APK_URL));
// Página A4 imprimível com QR Code + instruções (cola no barco/marina)