Jetpack Compose ile Haberler Uygulaması Geliştirme | Android Geliştirme

ibrahimcanerdogan
4 min readOct 29, 2024

--

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.ktKullanı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.ktHaber 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.ktHaber 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.ktUygulamanı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ı

  1. Öğ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.
  2. 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.
  3. İ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

İbrahim Can Erdoğan

LINKEDIN

YOUTUBE

UDEMY

GITHUB

--

--

ibrahimcanerdogan
ibrahimcanerdogan

Written by ibrahimcanerdogan

Hi, My name is Ibrahim, I am developing ebebek android app within Ebebek. I publish various articles in the field of programming and self-improvement.

No responses yet