Jetpack Compose ile Haberler Uygulaması Geliştirme | Android Geliştirme
JetNews, günümüzün yoğun yaşam temposunda bilgiye hızlı, kolay ve etkili bir şekilde ulaşmak isteyenler için özel olarak geliştirildi. Jetpack Compose ile tasarlanan bu mobil uygulama, en güncel haberleri ve önemli başlıkları kullanıcı dostu bir arayüzle sunarak haber takip sürecini daha keyifli hale getiriyor. JetNews, kullanıcıların ilgisini çeken konularda haber akışı oluşturmasına ve diledikleri haberi kaydedip paylaşmasına olanak tanıyor.
➡️ Jetpack Compose: İleri Seviye Uygulama Geliştirme Rehberi 🚀
➡️ Android App Development with Google MLKIT 🚀
➡️ Kotlin Interview Bootcamp: From Zero to Android Mastery 2024 🚀
➡️ Türk Hava Yolları Uçuş Asistanı | Kotlin Android Geliştirme 🚀
JetNews’in GitHub üzerindeki açık kaynak deposu, bu uygulamanın nasıl çalıştığını görmek, katkıda bulunmak veya kod yapısından ilham almak isteyen geliştiriciler için büyük bir fırsattır. Kod yapısının anlaşılır bir şekilde düzenlenmiş olması, uygulamayı geliştirmeyi veya kendi projelerine entegre etmeyi düşünenler için bir rehber niteliğindedir.
NewsResponse.kt
Kullanıcı arayüzü elementlerini ve bileşenleri içeren dosyalar, kullanıcıya estetik ve işlevsel bir deneyim sunmak için dikkatlice tasarlanmıştır.
data class NewsResponse(
val articles: List<Article>,
val status: String,
val totalResults: Int
)
NewsAPI.kt
Haber verilerini almak için kullanılan API işlemlerinin bulunduğu sınıftır.
interface NewsAPI {
@GET("everything")
suspend fun getNews(
@Query("page") page: Int,
@Query("sources") sources: String,
@Query("apiKey") apiKey: String = BuildConfig.API_KEY
): NewsResponse
@GET("everything")
suspend fun searchNews(
@Query("q") searchQuery: String,
@Query("page") page: Int,
@Query("sources") sources: String,
@Query("apiKey") apiKey: String = BuildConfig.API_KEY
): NewsResponse
}
NewsRepository.kt
Haber kaynaklarına bağlanarak uygulamaya veri sağlayan katmandır.
interface NewsRepository {
fun getNewsFromRepository(sources: List<String>): Flow<PagingData<Article>>
fun searchNewsFromRepository(searchQuery: String, sources: List<String>): Flow<PagingData<Article>>
suspend fun upsertArticleRepository(article: Article)
suspend fun deleteArticleRepository(article: Article)
fun selectBookmarkArticlesRepository(): Flow<List<Article>>
suspend fun selectBookmarkArticleRepository(url: String): Article?
}
MainViewModel.kt
Haberlerin uygulamada nasıl görüntüleneceğini ve kullanıcı eylemlerini yönetmek için gerekli olan veri modellerini içerir.
@HiltViewModel
class MainViewModel @Inject constructor(
private val appEntryUseCase: AppEntryUseCase
) : ViewModel() {
var splashCondition by mutableStateOf(true)
private set
var startDestination by mutableStateOf(Route.AppStartNavigation.route)
private set
init {
appEntryUseCase.readAppEntry().onEach { shouldStartFromHomeScreen ->
if(shouldStartFromHomeScreen){
startDestination = Route.NewsNavigation.route
}else{
startDestination = Route.AppStartNavigation.route
}
delay(300)
splashCondition= false
}.launchIn(viewModelScope)
}
}
MainActivity.kt
Uygulamanın ana çalışma sayfasıdır. Jetpack Compose bileşenlerinin ve haber akışının kullanıcıya sunulduğu yerdir.
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
private val viewModel by viewModels<MainViewModel>()
override fun onCreate(savedInstanceState: Bundle?) {
installSplashScreen().apply {
setKeepOnScreenCondition {
viewModel.splashCondition
}
}
super.onCreate(savedInstanceState)
WindowCompat.setDecorFitsSystemWindows(window, false)
setContent {
NewsAppTheme {
val isSystemInDarkMode = isSystemInDarkTheme()
val systemController = rememberSystemUiController()
SideEffect {
systemController.setSystemBarsColor(
color = Color.Transparent,
darkIcons = !isSystemInDarkMode
)
}
Box(modifier = Modifier.background(color = MaterialTheme.colorScheme.background)) {
val startDestination = viewModel.startDestination
NavGraph(startDestination = startDestination)
}
}
}
}
}
JetNews Uygulamasının GitHub Üzerinden Kullanım Avantajları
- Öğrenim ve Geliştirme İmkanı
JetNews’in GitHub üzerindeki açık kaynak kodu, Android geliştiricilerine yeni teknolojiler ve geliştirme pratikleri hakkında bilgi edinme fırsatı sunar. Özellikle Jetpack Compose kullanımı, Kotlin dilindeki en iyi pratikler ve modern uygulama mimarisi gibi konular öğrenim açısından önemli katkılar sağlar. - Katkıda Bulunma Şansı
GitHub üzerinde JetNews’e katkıda bulunmak isteyenler, uygulamayı geliştirerek veya mevcut hataları düzelterek projeye destek olabilirler. Böylece hem kendi bilgilerini artırabilir hem de topluluğa katkı sağlayabilirler. - İlham Verici ve Rehber Niteliğinde Bir Kaynak
JetNews’in kod yapısı, temiz kod prensiplerine uygun olarak yapılandırılmıştır. Bu da özellikle yeni başlayan geliştiriciler için iyi bir örnek teşkil eder. Diğer projelere ilham kaynağı olması amacıyla da bu açık kaynak projesi önemli bir rol oynar.
Sonuç
JetNews, günlük haberlere ulaşmak ve kişisel gündemini takip etmek isteyenler için son derece kullanışlı bir mobil uygulamadır. Açık kaynak yapısı sayesinde, Android geliştiricileri için de öğrenme ve katkıda bulunma fırsatları sunmaktadır. Güncel kalmak, gündemi yakalamak ve kaliteli bir haber deneyimi yaşamak isteyen tüm kullanıcıları JetNews’e davet ediyoruz.
GitHub üzerinden erişmek ve uygulamanın detaylarına göz atmak isteyenler için: JetNews GitHub Deposu