# Система Crash Reports для Rosetta Android

## 📋 Обзор

Реализована система автоматического сохранения crash reports в приложении Rosetta Android. Теперь при каждом краше приложения информация о нем будет сохраняться в локальное хранилище для последующего анализа.

## 🎯 Функциональность

### Автоматический сбор

- **Отлов крашей**: Все необработанные исключения автоматически перехватываются
- **Детальная информация**: Сохраняется полная информация о краше:
  - Timestamp (дата и время)
  - Информация о приложении (package, версия)
  - Информация об устройстве (модель, Android версия)
  - Thread информация
  - Exception type и message
  - Полный stack trace
  - Вложенные causes (до 10 уровней)

### Управление логами

- **Просмотр**: Удобный UI для просмотра всех крашей
- **Детали**: Подробный просмотр каждого краша с возможностью копирования
- **Удаление**: Можно удалить отдельный краш или все разом
- **Автоочистка**: Хранится максимум 50 последних крашей

## 📁 Файловая структура

```
rosetta-android/app/src/main/java/com/rosetta/messenger/
├── RosettaApplication.kt                    # Application класс с инициализацией
├── utils/
│   └── CrashReportManager.kt               # Основной класс управления крашами
└── ui/
    └── crashlogs/
        └── CrashLogsScreen.kt              # UI для просмотра логов
```

## 🚀 Как использовать

### 1. Просмотр Crash Logs

В приложении:

1. Откройте **Профиль** (Settings)
2. Нажмите на **Crash Logs**
3. Увидите список всех крашей
4. Нажмите на краш для просмотра деталей

### 2. Программный доступ

```kotlin
// Получить список всех крашей
val crashes = CrashReportManager.getCrashReports(context)

// Удалить конкретный краш
CrashReportManager.deleteCrashReport(context, fileName)

// Удалить все краши
CrashReportManager.deleteAllCrashReports(context)
```

### 3. Тестирование системы

Для проверки работы crash reporter можно добавить тестовый краш:

```kotlin
// В любом месте приложения
Button(onClick = {
    throw RuntimeException("Test crash for debugging")
}) {
    Text("Test Crash")
}
```

## 📝 Формат Crash Report

Пример сохраненного crash report:

```
=== CRASH REPORT ===

Timestamp: 2026-01-25 14:30:45

=== App Info ===
Package: com.rosetta.messenger
Version: 1.0.0 (1)

=== Device Info ===
Manufacturer: Samsung
Model: SM-G991B
Android Version: 13 (API 33)
Device: o1s
Board: s5e9925

=== Thread Info ===
Thread: main
Thread ID: 2

=== Exception ===
Exception Type: java.lang.NullPointerException
Message: Attempt to invoke virtual method on null object

=== Stack Trace ===
java.lang.NullPointerException: Attempt to invoke virtual method on null object
    at com.rosetta.messenger.ui.MainActivity.onCreate(MainActivity.kt:123)
    at android.app.Activity.performCreate(Activity.java:8051)
    ...

=== Caused by (level 1) ===
...
```

## 🔧 Настройки

В [CrashReportManager.kt](rosetta-android/app/src/main/java/com/rosetta/messenger/utils/CrashReportManager.kt):

```kotlin
private const val MAX_CRASH_FILES = 50  // Максимум файлов
private const val CRASH_DIR = "crash_reports"  // Директория хранения
```

## 💾 Хранение данных

- **Расположение**: `/data/data/com.rosetta.messenger/files/crash_reports/`
- **Формат файлов**: `crash_YYYY-MM-DD_HH-mm-ss.txt`
- **Автоочистка**: Старые файлы удаляются при превышении лимита

## 🎨 UI Features

### Список крашей

- ❌ Красная иконка bug для каждого краша
- 📅 Дата и время краша
- 🔍 Тип исключения
- 🗑️ Кнопка удаления для каждого

### Детальный просмотр

- 📄 Полный текст crash report
- ✂️ Возможность выделения и копирования текста
- 🔙 Навигация назад
- 🗑️ Удаление краша

### Пустое состояние

Если нет крашей, показывается дружелюбное сообщение:

```
🐛 No crash reports
Great! Your app is running smoothly
```

## 🔒 Безопасность и Privacy

- ✅ Данные хранятся только локально
- ✅ Не отправляются на сторонние серверы
- ✅ Пользователь контролирует удаление
- ✅ Автоматическая ротация старых логов

## 🛠️ Техническая реализация

### Инициализация

Crash reporter автоматически инициализируется в `RosettaApplication.onCreate()`:

```kotlin
class RosettaApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        CrashReportManager.init(this)
    }
}
```

### Обработка крашей

`CrashReportManager` реализует `Thread.UncaughtExceptionHandler`:

- Перехватывает необработанные исключения
- Сохраняет детальную информацию
- Передает управление дефолтному handler (для нормального завершения)

## 📊 Мониторинг

### Что отслеживать:

1. **Частота крашей**: Как часто происходят краши
2. **Тип исключений**: Какие типы ошибок встречаются
3. **Места крашей**: В каких частях кода происходят проблемы
4. **Устройства**: На каких устройствах чаще крашится

### Аналитика

Регулярно проверяйте Crash Logs раздел для:

- Выявления паттернов
- Приоритизации багов
- Улучшения стабильности

## 🚧 Дальнейшие улучшения

Возможные доработки:

1. **Export**: Экспорт крашей в файл для отправки разработчикам
2. **Filtering**: Фильтрация по типу исключения, дате
3. **Statistics**: Статистика по типам крашей
4. **Auto-report**: Опциональная отправка на сервер (с согласия)
5. **Symbols**: Интеграция с символами для более читаемых stack traces

## 🐛 Debug режим

В debug режиме рекомендуется добавить быстрый доступ к Crash Logs:

```kotlin
// В ProfileScreen или DebugMenu
if (BuildConfig.DEBUG) {
    Button(onClick = {
        throw RuntimeException("Test crash")
    }) {
        Text("Trigger Test Crash")
    }
}
```

## ✅ Чеклист интеграции

- [x] CrashReportManager создан
- [x] RosettaApplication настроен
- [x] AndroidManifest обновлен
- [x] UI для просмотра создан
- [x] Навигация добавлена
- [x] Автоочистка настроена

## 📞 Получение крашей от пользователей

Если пользователь сообщает о краше:

1. Попросите открыть Profile → Crash Logs
2. Найти краш по дате/времени
3. Скопировать текст краша
4. Отправить разработчикам

## 🎯 Best Practices

1. **Регулярная проверка**: Просматривайте краши минимум раз в неделю
2. **Приоритеты**: Сначала исправляйте частые краши
3. **Тестирование**: После исправления проверяйте что краш не воспроизводится
4. **Документация**: Документируйте причины и решения крашей

---

**Статус**: ✅ Готово к использованию  
**Версия**: 1.0  
**Дата**: 25 января 2026
