# Correção para Abertura de Aplicativos Externos no Android

## Problema Identificado
No Android, quando o usuário clicava nos botões de WhatsApp e Waze, recebia as mensagens:
- "Erro não foi possível abrir o aplicativo"
- "Erro Não foi possível abrir o WhatsApp"

## Causa do Problema
O Android 11+ introduziu restrições mais rigorosas para abrir aplicativos externos através do sistema de "Package Visibility". A partir desta versão, os apps precisam declarar explicitamente quais aplicativos externos podem ser abertos.

## Soluções Implementadas

### 1. Atualização do AndroidManifest.xml
Adicionadas as seguintes configurações no `android/app/src/main/AndroidManifest.xml`:

```xml
<!-- Permissões para abrir aplicativos externos -->
<queries>
  <!-- URLs HTTPS e HTTP -->
  <intent>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="https"/>
  </intent>
  <intent>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="http"/>
  </intent>
  
  <!-- Protocolos específicos -->
  <intent>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="whatsapp"/>
  </intent>
  <intent>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="waze"/>
  </intent>
  <intent>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="tel"/>
  </intent>
  <intent>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="telprompt"/>
  </intent>
  <intent>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="geo"/>
  </intent>
  <intent>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="maps"/>
  </intent>
  <intent>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="intent"/>
  </intent>
  
  <!-- Pacotes específicos -->
  <package android:name="com.whatsapp"/>
  <package android:name="com.waze"/>
  <package android:name="com.google.android.apps.maps"/>
</queries>
```

### 2. Melhoria nas Funções de Abertura de Apps

#### WhatsApp (`openWhatsApp`)
- **URLs mais abrangentes**: Adicionadas múltiplas variações de URLs
- **Protocolos alternativos**: Incluídos `intent://` para Android
- **Fallback para Play Store**: Se o app não estiver instalado, oferece instalação
- **Timeout**: Implementado timeout de 5 segundos para evitar travamentos

```typescript
const whatsappUrls = [
  // URLs com protocolo whatsapp:// (mais confiáveis)
  `whatsapp://send?phone=${cleanNumber}&text=${encodeURIComponent(message)}`,
  `whatsapp://send?phone=${cleanNumber.replace('+', '')}&text=${encodeURIComponent(message)}`,
  
  // URLs com https://wa.me/ (fallback web)
  `https://wa.me/${cleanNumber.replace('+', '')}?text=${encodeURIComponent(message)}`,
  `https://wa.me/${cleanNumber}?text=${encodeURIComponent(message)}`,
  
  // URLs alternativas para Android
  `intent://send/${cleanNumber.replace('+', '')}#Intent;scheme=smsto;package=com.whatsapp;S.sms_body=${encodeURIComponent(message)};end`,
  `intent://send/${cleanNumber}#Intent;scheme=smsto;package=com.whatsapp;S.sms_body=${encodeURIComponent(message)};end`,
  
  // URLs com formato mais simples
  `whatsapp://send?phone=${cleanNumber.replace('+', '')}`,
  `whatsapp://send?phone=${cleanNumber}`,
];
```

#### Navegação (`openNavigationApp`)
- **Múltiplas URLs por app**: Cada app de navegação tem várias opções de URL
- **Protocolos específicos**: `waze://`, `geo:`, `maps://`
- **Intent URLs**: URLs com formato `intent://` para Android
- **Fallback inteligente**: Se o app não estiver instalado, oferece instalação

```typescript
// Exemplo para Waze
urls = [
  // URLs com protocolo waze:// (mais confiáveis)
  `waze://?q=${encodedAddress}&navigate=yes`,
  `waze://?ll=${latitude},${longitude}&navigate=yes`,
  
  // URLs com https://waze.com/ (fallback web)
  `https://waze.com/ul?q=${encodedAddress}&navigate=yes`,
  `https://waze.com/ul?ll=${latitude},${longitude}&navigate=yes`,
  
  // URLs com intent:// para Android
  `intent://waze.com/ul?q=${encodedAddress}&navigate=yes#Intent;scheme=https;package=com.waze;end`,
  `intent://waze.com/ul?ll=${latitude},${longitude}&navigate=yes#Intent;scheme=https;package=com.waze;end`,
];
```

### 3. Tratamento de Erros Melhorado
- **Timeout**: Implementado timeout de 5 segundos para evitar travamentos
- **Fallback para Play Store**: Se o app não estiver instalado, oferece instalação
- **Logs detalhados**: Logs para debug de cada tentativa
- **Alertas informativos**: Mensagens claras para o usuário

### 4. Correção de Linter
- **Propriedades faltantes**: Adicionadas `latFrom` e `lngFrom` no tipo `Delivery`
- **Compatibilidade**: Garantida compatibilidade com a interface `Delivery`

## Como Testar

### 1. Build de Produção
```bash
npx expo run:android --variant release
```

### 2. Cenários de Teste
- **WhatsApp instalado**: Deve abrir o WhatsApp com a mensagem
- **WhatsApp não instalado**: Deve oferecer instalação na Play Store
- **Waze instalado**: Deve abrir o Waze com a rota
- **Waze não instalado**: Deve oferecer instalação na Play Store
- **Google Maps**: Deve abrir o Google Maps com a rota

### 3. Logs de Debug
Os logs detalhados ajudarão a identificar qual URL funcionou:
```
=== DEBUG: ABRINDO WHATSAPP ===
Número original: +55 91 99999-9999
Número formatado: +5591999999999
URLs para tentar: [...]
Tentativa 1: whatsapp://send?phone=+5591999999999&text=...
URL 1 suportada: whatsapp://send?phone=+5591999999999&text=...
```

## Compatibilidade
- ✅ Android 11+
- ✅ Android 10 e anteriores
- ✅ iOS (mantida compatibilidade)
- ✅ Expo SDK 53

## Referências
- [Android Package Visibility](https://developer.android.com/training/package-visibility)
- [React Native Linking](https://reactnative.dev/docs/linking)
- [WhatsApp Business API](https://developers.facebook.com/docs/whatsapp/cloud-api/reference/phone-numbers)
- [Waze URL Scheme](https://developers.google.com/waze/deep-links) 