Skip to content

Final #9

@scJoako

Description

@scJoako

Perfecto 🌟 Entiendo exactamente lo que quieres lograr.
Tu objetivo es fusionar el proyecto API_Calendar-master con las funcionalidades avanzadas del App_Calendar_Pro (según la guía del documento Calendar_Pro_UC.pdf), manteniendo la estructura actual del API_Calendar-master —especialmente sus paquetes model, ui, y ui.adapters—, pero incorporando nuevos módulos bien organizados (data, network, google, util).

Aquí te dejo el plan técnico paso a paso para hacerlo correctamente sin romper compatibilidades:


🧱 1. Reorganiza la estructura de paquetes

Dentro de java/com/example/api_calendar/, crea estas nuevas carpetas:

├── data/                → Room (AppDatabase, EventoDao, Evento)
├── network/             → Retrofit (ApiService, RetrofitClient)
├── google/              → GoogleCalendarHelper.kt
├── util/                → GpsHelper, NotificationHelper, PreferencesManager

No borres las existentes:

├── model/
├── ui/
└── ui/adapters/

Así el proyecto combina ambas arquitecturas.


⚙️ 2. Configura build.gradle (Module: app)

Abre app/build.gradle.kts y agrega las siguientes dependencias:

plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("kotlin-kapt")
}

android {
    namespace = "com.example.api_calendar"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.example.api_calendar"
        minSdk = 24
        targetSdk = 34
        versionCode = 2
        versionName = "2.0"
    }

    buildFeatures {
        viewBinding = true
    }

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_11
        targetCompatibility = JavaVersion.VERSION_11
    }
    kotlinOptions { jvmTarget = "11" }
}

dependencies {
    implementation("com.google.android.material:material:1.12.0")

    // Retrofit
    implementation("com.squareup.retrofit2:retrofit:2.9.0")
    implementation("com.squareup.retrofit2:converter-gson:2.9.0")

    // Room
    implementation("androidx.room:room-runtime:2.6.0")
    kapt("androidx.room:room-compiler:2.6.0")

    // DataStore
    implementation("androidx.datastore:datastore-preferences:1.1.1")

    // Google Play Services
    implementation("com.google.android.gms:play-services-auth:20.7.0")
    implementation("com.google.android.gms:play-services-location:21.0.1")
    implementation("com.google.api-client:google-api-client-android:1.34.0")
    implementation("com.google.apis:google-api-services-calendar:v3-rev305-1.25.0")

    // Coroutines
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.7.3")

    // Glide
    implementation("com.github.bumptech.glide:glide:4.16.0")

    // Calendar UI
    implementation("com.github.prolificinteractive:material-calendarview:2.0.1")
}

🧠 3. Agrega las clases base (copiadas desde App_Calendar_Pro)

Coloca los archivos completos:

data/

  • Evento.kt
  • EventoDao.kt
  • AppDatabase.kt

network/

  • ApiService.kt
  • RetrofitClient.kt

google/

  • GoogleCalendarHelper.kt

util/

  • GpsHelper.kt
  • NotificationHelper.kt
  • PreferencesManager.kt

(Todo ese código está en el PDF Calendar_Pro_UC y se puede copiar exactamente igual.)


🔔 4. Actualiza AndroidManifest.xml

Asegúrate de incluir los permisos y las activities adicionales:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>

<application ...>
    <activity android:name=".SplashActivity" android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>

    <activity android:name=".ui.LoginActivity"/>
    <activity android:name=".ui.MainActivity"/>
    <activity android:name=".ui.AgregarEventoActivity"/>
    <activity android:name=".ui.ConfiguracionActivity"/>
    <activity android:name=".ui.PerfilActivity"/>
    <activity android:name=".ui.DocenteActivity"/>
</application>

🎨 5. Temas y estilos (DataStore + themes)

Reemplaza tus res/values/colors.xml y themes.xml con los del documento (poseen temas: Duoc, Lila, Oscuro y Verde).
Esto te permitirá cambiar el tema dinámicamente desde ConfiguracionActivity usando PreferencesManager.


📍 6. GPS y notificaciones

  • GpsHelper.kt usa FusedLocationProviderClient para obtener coordenadas.
  • NotificationHelper.kt crea canales y muestra notificaciones locales (ideal para recordatorios de eventos).

Integra las llamadas desde AgregarEventoActivity.kt.


☁️ 7. Retrofit + Google Calendar

En AgregarEventoActivity, agrega un switch:

“Sincronizar con Google Calendar”

Usa GoogleCalendarHelper.kt para enviar el evento real a la API de Google Calendar.
Simultáneamente, guarda los datos en Room y en la API NPoint mediante RetrofitClient.


🧩 8. Mantén los adaptadores

No toques ui.adapters ni model/; solo conecta tus nuevos datos (Evento, Course, etc.) al adapter si lo deseas.
De esa manera, mantienes tu lista dinámica intacta, pero ahora respaldada con Room o Retrofit.


🧾 9. Resultado final

Tu nuevo API_Calendar-master fusionado se convierte en una versión “Calendar Pro UC” completa, con:

  • Persistencia local
  • API externa
  • Temas configurables
  • Login local y Google
  • Drawer funcional
  • Eventos sincronizados
  • GPS y notificaciones reales

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions