|
| 1 | +<h1 align="center"> |
| 2 | + <br> |
| 3 | + <a href="https://github.com/monogram-android/monogram"><img width="130" height="130" alt="MonoGram" src="./documents/monogram.png" /> |
| 4 | +</a> |
| 5 | + <br> |
| 6 | + <b>MonoGram</b> |
| 7 | + <br> |
| 8 | +</h1> |
| 9 | + |
| 10 | +<h1 align="center"> |
| 11 | + <a href="https://github.com/monogram-android/monogram/blob/develop/LICENSE"> |
| 12 | + <img src="https://img.shields.io/badge/Lisans-GPLv3-blue.svg" width="120"> |
| 13 | + </a> |
| 14 | + <a href="https://github.com/monogram-android/monogram/stargazers"> |
| 15 | + <img src="https://img.shields.io/github/stars/monogram-android/monogram" width="120"> |
| 16 | + </a> |
| 17 | + <img src="https://img.shields.io/badge/Kotlin-2.0+-blue.svg?logo=kotlin" width="130"> |
| 18 | + <img src="https://img.shields.io/badge/TDLib-1.8.63-blue" width="120"> |
| 19 | + <img src="https://img.shields.io/badge/Durum-Aktif_Geliştirme-orange" width="170"> |
| 20 | + <a href="https://boosty.to/monogram"> |
| 21 | + <img src="https://img.shields.io/badge/Boosty-Projeyi_Destekle-ff6f61?logo=boosty&logoColor=white" width="200"> |
| 22 | + </a> |
| 23 | +</h1> |
| 24 | + |
| 25 | +**Bu dokümanı diğer dillerde okuyun:** [English](README.md), [Русский](README_RU.md), [Türkçe](README_TR.md), [한국어](README_KOR.md), [اُردو](README_UR.md), [Español](README_ES.md) |
| 26 | + |
| 27 | +--- |
| 28 | + |
| 29 | +**MonoGram**, Android için modern, yıldırım hızında ve zarif bir resmi olmayan Telegram istemcisidir. **Jetpack Compose** ve **Material Design 3** ile sıfırdan inşa edilen uygulama, resmi **TDLib** altyapısıyla desteklenen yerleşik (native) ve akıcı bir deneyim sunar. |
| 30 | + |
| 31 | +> [!IMPORTANT] |
| 32 | +> MonoGram şu an **aktif geliştirme** aşamasındadır. Sık güncellemeler, mimari değişiklikler ve nadiren de olsa hatalar (bug) bekleyebilirsiniz. |
| 33 | +
|
| 34 | +Projeyi [**Boosty**](https://boosty.to/monogram) üzerinden destekleyebilirsiniz. |
| 35 | + |
| 36 | +--- |
| 37 | + |
| 38 | +## Ekran Görüntüleri |
| 39 | + |
| 40 | +<div align="center"> |
| 41 | + |
| 42 | +| | | | | |
| 43 | +|:---:|:---:|:---:|:---:| |
| 44 | +| <img src="./documents/1.png" width="180" alt="Ekran Görüntüsü 1" /> | <img src="./documents/2.png" width="180" alt="Ekran Görüntüsü 2" /> | <img src="./documents/3.png" width="180" alt="Ekran Görüntüsü 3" /> | <img src="./documents/4.png" width="180" alt="Ekran Görüntüsü 4" /> | |
| 45 | + |
| 46 | +</div> |
| 47 | + |
| 48 | +--- |
| 49 | + |
| 50 | +## Öne Çıkan Özellikler |
| 51 | + |
| 52 | +- **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. |
| 53 | +- **Material Design 3** — Telefonlar, tabletler ve katlanabilir cihazlarda harika görünen, estetik ve uyarlanabilir kullanıcı arayüzü. |
| 54 | +- **Güvenli** — Yerleşik biyometrik kilitleme ve şifrelenmiş yerel depolama. |
| 55 | +- **Zengin Medya Deneyimi** — ExoPlayer ve Coil 3 ile yüksek performanslı medya oynatma. |
| 56 | +- **Hızlı ve Verimli** — Kotlin Coroutines ile desteklenen, performans için optimize edilmiş yapı. |
| 57 | +- **Temiz Mimari (Clean Architecture)** — Domain, Data ve Presentation katmanları ile sorumlulukların net bir şekilde ayrılması. |
| 58 | +- **MVI Deseni** — MVIKotlin kullanılarak sağlanan öngörülebilir durum yönetimi. |
| 59 | +- **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. |
| 60 | + |
| 61 | +--- |
| 62 | + |
| 63 | +## Başlangıç |
| 64 | + |
| 65 | +Projeyi yerel ortamınızda kurmak için bu adımları izleyin. |
| 66 | + |
| 67 | +### Ön Koşullar |
| 68 | + |
| 69 | +- **Android Studio**: Ladybug veya daha yeni bir sürüm (önerilir). |
| 70 | +- **JDK**: Java 17 veya daha yeni bir sürüm. |
| 71 | + |
| 72 | +### 1. Depoyu Klonlayın |
| 73 | + |
| 74 | +```bash |
| 75 | +git clone --recurse-submodules https://github.com/monogram-android/monogram.git |
| 76 | +cd monogram |
| 77 | +``` |
| 78 | +### 2. Telegram API Anahtarlarını Yapılandırın |
| 79 | + |
| 80 | +Telegram sunucularına bağlanmak için kendi API kimlik bilgilerinize ihtiyacınız vardır. |
| 81 | + |
| 82 | +1. [my.telegram.org](https://my.telegram.org/) adresinde oturum açın. |
| 83 | +2. **API development tools (API geliştirme araçları)** bölümüne gidin. |
| 84 | +3. `App api_id` ve `App api_hash` değerlerinizi almak için yeni bir uygulama oluşturun. |
| 85 | +4. Projenin kök dizininde (eğer yoksa) `local.properties` adlı bir dosya oluşturun. |
| 86 | +5. Aşağıdaki satırları dosyaya ekleyin: |
| 87 | + |
| 88 | +```properties |
| 89 | +API_ID=12345678 |
| 90 | +API_HASH=your_api_hash_here |
| 91 | +``` |
| 92 | +### 3. Anlık Bildirimleri (Push Notifications) Yapılandırın |
| 93 | + |
| 94 | +1. [Firebase konsolunda](https://console.firebase.google.com) oturum açın. |
| 95 | +2. Yeni bir proje oluşturun. |
| 96 | +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.** |
| 97 | +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. |
| 98 | +5. **Cloud Messaging** bölümüne gidin. |
| 99 | +6. **Manage service accounts** (Hizmet hesaplarını yönet) seçeneğine tıklayın. |
| 100 | +7. Açılan pencerenin üst kısmındaki **Keys** (Anahtarlar) sekmesini seçin. |
| 101 | +8. **Add key** (Anahtar ekle) seçeneğine tıklayın ve **JSON** opsiyonunu seçin. Dosyanın indirilmesini bekleyin. |
| 102 | +9. Uygulama ID'nizi aldığınız Telegram API sayfasına geri dönün. |
| 103 | +10. FCM kimlik bilgileri (FCM credentials) bölümünün yanındaki **Update** (Güncelle) butonuna tıklayın. |
| 104 | +11. Açılan sayfada hizmet hesabı (service account) JSON dosyasını yükleyin. |
| 105 | + |
| 106 | +### 4. İlk Kurulum: libvpx Derlemesi |
| 107 | + |
| 108 | +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. |
| 109 | + |
| 110 | +1. Çalışma dizininizi `presentation/src/main/cpp` olarak değiştirin. |
| 111 | +2. `build.sh` dosyası içerisine kendi `ANDROID_NDK_HOME` yolunuzu ekleyin. |
| 112 | +3. `build.sh` dosyasını çalıştırın ve işlemin tamamlanmasını bekleyin. |
| 113 | + |
| 114 | +### 5. Derleyin ve Çalıştırın |
| 115 | + |
| 116 | +1. Projeyi **Android Studio** ile açın. |
| 117 | +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: |
| 118 | + |
| 119 | +```properties |
| 120 | +# Kb cinsinden boyut |
| 121 | +idea.max.intellisense.filesize=20480 |
| 122 | +# Kb cinsinden boyut |
| 123 | +idea.max.content.load.filesize=20480 |
| 124 | +``` |
| 125 | + |
| 126 | +3. Gradle senkronizasyonunu (Sync) yapın. |
| 127 | +4. `app` çalıştırma yapılandırmasını (run configuration) seçin. |
| 128 | +5. Bir cihaz bağlayın veya bir emülatör başlatın. |
| 129 | +6. **Run** (Çalıştır) butonuna tıklayın. |
| 130 | + |
| 131 | +--- |
| 132 | + |
| 133 | +## TDLib Derlemesi |
| 134 | + |
| 135 | +Eğer TDLib'i kaynaktan derlemeniz gerekirse, öncelikle gerekli bağımlılıkları kurun. Debian/Ubuntu tabanlı dağıtımlar için: |
| 136 | + |
| 137 | +```bash |
| 138 | +sudo apt-get update |
| 139 | +sudo apt-get install build-essential git curl wget php perl gperf unzip zip default-jdk cmake |
| 140 | +``` |
| 141 | + |
| 142 | +Ardından projenin kök dizininden derleme betiğini (script) çalıştırın: |
| 143 | + |
| 144 | +```bash |
| 145 | +./build-tdlib.sh |
| 146 | +``` |
| 147 | + |
| 148 | +--- |
| 149 | + |
| 150 | +## Katkıda Bulunma |
| 151 | + |
| 152 | +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. |
| 153 | + |
| 154 | +1. **Sorunları (Issues) Kontrol Edin** — Açık sorunlara göz atın veya fikirlerinizi tartışmak için yeni bir sorun kaydı oluşturun. |
| 155 | +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. |
| 156 | +3. **Fork & Branch** — Depoyu (repo) çatallayın (fork) ve bir özellik dalı (feature branch) oluşturun. |
| 157 | +4. **Kod Stili** — Mevcut Kotlin kod yazım stiline ve Temiz Mimari (Clean Architecture) yönergelerine uyun. |
| 158 | +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. |
| 159 | + |
| 160 | +> [!IMPORTANT] |
| 161 | +> - [Telegram API Hizmet Şartlarına](https://core.telegram.org/api/terms) uyun. |
| 162 | +> - Kodunuzun tüm kontrollerden ve testlerden geçtiğinden emin olun. |
| 163 | +
|
| 164 | +### Hata Bildirme ve Özellik Önerileri |
| 165 | + |
| 166 | +- **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. |
| 167 | +- **Ö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. |
| 168 | + |
| 169 | +--- |
| 170 | + |
| 171 | +## Çeviriler |
| 172 | + |
| 173 | +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. |
| 174 | + |
| 175 | +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-<yerel-kod>/string.xml` dosyası oluşturun (örneğin Almanca için `values-de/string.xml`) ve metinleri orada çevirin. Çevirinizi içeren bir Çekme İsteği (PR) açın, biz de onu projeye dahil edelim. |
| 176 | + |
| 177 | +--- |
| 178 | + |
| 179 | +## Teknoloji Yığını |
| 180 | + |
| 181 | +MonoGram, en güncel Android geliştirme araçlarından ve kütüphanelerinden yararlanır: |
| 182 | + |
| 183 | +| Kategori | Kütüphaneler | |
| 184 | +|:---|:---| |
| 185 | +| **Dil** | [Kotlin](https://kotlinlang.org/) | |
| 186 | +| **Kullanıcı Arayüzü (UI)** | [Jetpack Compose](https://developer.android.com/jetpack/compose) (Material 3) | |
| 187 | +| **Mimari** | [Decompose](https://github.com/arkivanov/Decompose) (Navigasyon), [MVIKotlin](https://github.com/arkivanov/MVIKotlin) | |
| 188 | +| **Bağımlılık Enjeksiyonu (DI)** | [Koin](https://insert-koin.io/) | |
| 189 | +| **Asenkron İşlemler** | Coroutines & Flow | |
| 190 | +| **Telegram Çekirdeği** | [TDLib](https://core.telegram.org/tdlib) (Telegram Database Library) | |
| 191 | +| **Görsel Yükleme** | [Coil 3](https://coil-kt.github.io/coil/) | |
| 192 | +| **Medya** | Media3 (ExoPlayer) | |
| 193 | +| **Haritalar** | [MapLibre](https://maplibre.org/) | |
| 194 | +| **Yerel Veritabanı** | Room | |
| 195 | + |
| 196 | +--- |
| 197 | + |
| 198 | +## Proje Yapısı |
| 199 | + |
| 200 | +Proje, sorumlulukların ayrılmasını ve ölçeklenebilirliği sağlamak amacıyla çok modüllü (multi-module) bir yapı izlemektedir: |
| 201 | + |
| 202 | +| Modül | Açıklama | |
| 203 | +|:---|:---| |
| 204 | +| **:app** | Ana Android uygulama modülü. | |
| 205 | +| **:domain** | İş mantığı (business logic), kullanım durumları (use cases) ve depo (repository) arayüzlerini içeren saf Kotlin modülü. | |
| 206 | +| **:data** | Depo (repository) uygulamaları, veri kaynakları ve TDLib entegrasyonu. | |
| 207 | +| **:presentation** | Kullanıcı arayüzü (UI) bileşenleri, ekranlar ve görünüm modelleri (MVI Store'ları). | |
| 208 | +| **:core** | Modüller genelinde kullanılan ortak yardımcı sınıflar ve uzantılar (extensions). | |
| 209 | +| **:baselineprofile** | Uygulama başlangıcı ve performans optimizasyonu için Baseline Profilleri. | |
| 210 | + |
| 211 | +--- |
| 212 | + |
| 213 | +## Lisans |
| 214 | + |
| 215 | +Bu proje [**GNU General Public License v3.0**](LICENSE) (GNU Genel Kamu Lisansı v3.0) kapsamında lisanslanmıştır. |
0 commit comments