| | | | |
|:---:|:---:|:---:|:---:|
|

|

|

|

|
---
## Öne Çıkan Özellikler
- **Bağımsız İstemci** — Android için Telegram'ın bir çatalı (fork) değildir. MonoGram, tamamen sıfırdan bağımsız bir proje olarak inşa edilmiştir.
- **Material Design 3** — Telefonlar, tabletler ve katlanabilir cihazlarda harika görünen, estetik ve uyarlanabilir kullanıcı arayüzü.
- **Güvenli** — Yerleşik biyometrik kilitleme ve şifrelenmiş yerel depolama.
- **Zengin Medya Deneyimi** — ExoPlayer ve Coil 3 ile yüksek performanslı medya oynatma.
- **Hızlı ve Verimli** — Kotlin Coroutines ile desteklenen, performans için optimize edilmiş yapı.
- **Temiz Mimari (Clean Architecture)** — Domain, Data ve Presentation katmanları ile sorumlulukların net bir şekilde ayrılması.
- **MVI Deseni** — MVIKotlin kullanılarak sağlanan öngörülebilir durum yönetimi.
- **NFT veya Kripto Yok** — MonoGram; Telegram tarafından dayatılan ve bir mesajlaşma uygulamasının kapsamı dışında gördüğümüz NFT tanıtımları, hediyeleri veya benzeri özellikleri asla içermeyecektir.
---
## Başlangıç
Projeyi yerel ortamınızda kurmak için bu adımları izleyin.
### Ön Koşullar
- **Android Studio**: Ladybug veya daha yeni bir sürüm (önerilir).
- **JDK**: Java 17 veya daha yeni bir sürüm.
### 1. Depoyu Klonlayın
```bash
git clone --recurse-submodules https://github.com/monogram-android/monogram.git
cd monogram
```
### 2. Telegram API Anahtarlarını Yapılandırın
Telegram sunucularına bağlanmak için kendi API kimlik bilgilerinize ihtiyacınız vardır.
1. [my.telegram.org](https://my.telegram.org/) adresinde oturum açın.
2. **API development tools (API geliştirme araçları)** bölümüne gidin.
3. `App api_id` ve `App api_hash` değerlerinizi almak için yeni bir uygulama oluşturun.
4. Projenin kök dizininde (eğer yoksa) `local.properties` adlı bir dosya oluşturun.
5. Aşağıdaki satırları dosyaya ekleyin:
```properties
API_ID=12345678
API_HASH=your_api_hash_here
```
### 3. Anlık Bildirimleri (Push Notifications) Yapılandırın
1. [Firebase konsolunda](https://console.firebase.google.com) oturum açın.
2. Yeni bir proje oluşturun.
3. İhtiyacınız olan `applicationId` değerine sahip yeni bir uygulama ekleyin. Farklı ID'lere sahip birden fazla uygulamanız varsa, birden fazla Firebase uygulaması oluşturun. **Varsayılan olarak, hata ayıklama (debug) ve yayınlama (release) sürümlerinin `applicationId` değerleri farklıdır.**
4. `google-services.json` dosyasını indirin ve **app** modülünün kök dizinine kopyalayın (`monogram/app/google-services.json`). Birden fazla uygulama oluşturduysanız, yalnızca en güncel yapılandırmayı kopyalayın.
5. **Cloud Messaging** bölümüne gidin.
6. **Manage service accounts** (Hizmet hesaplarını yönet) seçeneğine tıklayın.
7. Açılan pencerenin üst kısmındaki **Keys** (Anahtarlar) sekmesini seçin.
8. **Add key** (Anahtar ekle) seçeneğine tıklayın ve **JSON** opsiyonunu seçin. Dosyanın indirilmesini bekleyin.
9. Uygulama ID'nizi aldığınız Telegram API sayfasına geri dönün.
10. FCM kimlik bilgileri (FCM credentials) bölümünün yanındaki **Update** (Güncelle) butonuna tıklayın.
11. Açılan sayfada hizmet hesabı (service account) JSON dosyasını yükleyin.
### 4. İlk Kurulum: libvpx Derlemesi
Animasyonların çalışması için libvpx'in derlenmiş olması gerekir. Bu işlem, Gradle derlemesini başlatmadan önce yapılmalıdır; aksi takdirde derleme hatalarıyla karşılaşırsınız.
1. Çalışma dizininizi `presentation/src/main/cpp` olarak değiştirin.
2. `build.sh` dosyası içerisine kendi `ANDROID_NDK_HOME` yolunuzu ekleyin.
3. `build.sh` dosyasını çalıştırın ve işlemin tamamlanmasını bekleyin.
### 5. Derleyin ve Çalıştırın
1. Projeyi **Android Studio** ile açın.
2. `TdApi.java` (TDLib sarmalayıcısı) dosyasının doğru şekilde indekslenebilmesi için IDE indeksleme limitlerini artırın. **Android Studio** veya **IntelliJ IDEA** içerisinde, **Help (Yardım) → Edit Custom Properties...** (Özel Özellikleri Düzenle) yolunu izleyin, aşağıdaki satırları yapıştırın ve istenirse IDE'yi yeniden başlatın:
```properties
# Kb cinsinden boyut
idea.max.intellisense.filesize=20480
# Kb cinsinden boyut
idea.max.content.load.filesize=20480
```
3. Gradle senkronizasyonunu (Sync) yapın.
4. `app` çalıştırma yapılandırmasını (run configuration) seçin.
5. Bir cihaz bağlayın veya bir emülatör başlatın.
6. **Run** (Çalıştır) butonuna tıklayın.
---
## TDLib Derlemesi
Eğer TDLib'i kaynaktan derlemeniz gerekirse, öncelikle gerekli bağımlılıkları kurun. Debian/Ubuntu tabanlı dağıtımlar için:
```bash
sudo apt-get update
sudo apt-get install build-essential git curl wget php perl gperf unzip zip default-jdk cmake
```
Ardından projenin kök dizininden derleme betiğini (script) çalıştırın:
```bash
./build-tdlib.sh
```
---
## Katkıda Bulunma
Katkılarınızı memnuniyetle karşılıyoruz! İster hataları gidermek, ister dokümantasyonu iyileştirmek veya yeni özellikler önermek olsun, her türlü katkıya açığız.
1. **Sorunları (Issues) Kontrol Edin** — Açık sorunlara göz atın veya fikirlerinizi tartışmak için yeni bir sorun kaydı oluşturun.
2. **`develop` Dalında Çalışın** — Kendi dalınızı (branch) `develop` üzerinden oluşturun ve çalışmalarınızı bu dalı temel alarak sürdürün.
3. **Fork & Branch** — Depoyu (repo) çatallayın (fork) ve bir özellik dalı (feature branch) oluşturun.
4. **Kod Stili** — Mevcut Kotlin kod yazım stiline ve Temiz Mimari (Clean Architecture) yönergelerine uyun.
5. **PR Gönderin** — Değişikliklerinizin net bir açıklamasını içeren bir Çekme İsteğini (Pull Request) `develop` dalına açın.
> [!IMPORTANT]
> - [Telegram API Hizmet Şartlarına](https://core.telegram.org/api/terms) uyun.
> - Kodunuzun tüm kontrollerden ve testlerden geçtiğinden emin olun.
### Hata Bildirme ve Özellik Önerileri
- **Hatalar (Bugs)** — Bir sorun kaydı (issue) açın ve başlıkta `[Bug]` etiketini kullanın (Örn: `[Bug] Uygulama başlangıçta çöküyor`). Ayrıca, bilinen tüm hatalara [**Hata Takipçisi**](https://github.com/orgs/monogram-android/projects/3/views/1) üzerinden göz atabilirsiniz.
- **Özellik İstekleri** — `[Feature]` etiketini içeren bir sorun kaydı açın (Örn: `[Feature] Planlanmış mesaj desteği`). Mevcut özellik isteklerini [**Özellik Panosu**](https://github.com/orgs/monogram-android/projects/5/views/1) üzerinden inceleyebilirsiniz.
---
## Çeviriler
MonoGram topluluk tarafından yapılan çevirileri memnuniyetle karşılar! Kendi dilinizle katkıda bulunmak için metin kaynak (strings resource) dosyasını düzenleyebilirsiniz.
Kaynak metinler [`presentation/src/main/res/values/string.xml`](https://github.com/monogram-android/monogram/blob/develop/presentation/src/main/res/values/string.xml) adresinde yer almaktadır. Yeni bir dil eklemek için, ilgili dile ait bir `values-