Skip to content

User Manual Code Protocol

Faisal Amir edited this page Feb 2, 2022 · 5 revisions

Disclaimer

Penelitian ini bertujuan untuk merancang framework yang mudah digunakan untuk pengembangan aplikasi android dengan topik permasalahan seputar gizi. Framework android ini terdiri dari 3 bagian utama yaitu UI / tampilan, data, method / fungsi. Terdapat 2 pengguna yang terdiri dari pengguna programmer dan pengguna akhir, pengguna programmer memanfaatkan untuk pengembangan aplikasi android, dan pengguna akhir memanfaatkan untuk menyelesaikan permasalahan gizi mereka. Framework di publikasikan menggunakan layanan dari jetpack.io agar pengembang android dapat menggunakannya dengan cara memasang di proyek coding aplikasi yang sedang di kembangkan.

Kerangka Project

Library

Berikut diagram penjelasan mengenai source code yang dapat di implementasi kan terhadap project lain. Modul utama yang dapat di akses oleh project lain dengan bantuan jitpack.io sebagai perantara untuk mengenerate library yaitu Nutrition Core dan Nutrition Framework. Pada Nutrition Core berisi kumpulan data dan method function yang dapat di akses desktop application dan android application, sedangkan untuk Nutrition framework berisi sekumpulan android method function dan UI strucktur yang hanya dapat di panggil di android application dikarenakan modul Nutrition Framework merupakan turunan dari library bawaan Android Google.

Main Project

Pada Main Project menggunakan Struktur MVVM dimana sesuai dengan anjuran dari Google Developer Android.

Setup Project

Untuk Detail Setup Project :

Penjelasan Detail Project

Detail Module

Terdapat 4 module besar utama, terdiri dari buildSrc, nutritionapp, nutritioncore, nurtitionframework.

  1. buildSrc, merupakan module yang berisi Setting utama dari main project, module ini berguna sebagai inti dari project untuk keperluan publikasi di playstore
  2. nutritionapp, merupakan module yang berisi main source code utama dari aplikasi, semua source code pada module ini akan di proses kedalam aplikasi yang dijalankan
  3. nutritioncode, merupakan module yang berisi serangkaian fungsi utama dari aplikasi dimana module ini dapat di delegasikan kedalam project lain sebagai library dan dapat di proses pada project desktop dan android
  4. nutritionframework, merupakan module yang berisi serangkaian fungsi utama dari aplikasi dimana module ini dapat di delegasikan kedalam project lain sebagai library dan hanya dapat di proses pada project android

Detail Module buildSrc

Terdapat 2 Main Class utama yaitu ProjectSetting.kt dan Dependency.kt, Fungsi dari ProjectSetting.kt adalah class yang berisi keperluan untuk publikasi di playstore, sedangkan Dependency.kt adalah class yang berisi version number dari setiap library google yang dibutuhkan.

Detail Module NutritionCore

Pada module ini fungsi dasar yang terbuat dengan Bahasa kotlin tanpa menggunakan library bawaan dari Google Developer Android, sehingga module ini bisa digunakan atau diproses pada project desktop dan project android. Berikut beberapa fungsi penting yang terdapat pada NutritionCore :

  • ConsumeNewsApi
// Get Top Headline
fun getTopHeadline(
    q: String?,
    sources: String?,
    category: String?,
    country: String?,
    pageSize: Int?,
    page: Int?,
    callback: NutriResponse.DataResponse<ArticleResponse>
)

// Get Everythings
fun getEverythings(
    q: String?,
    from: String?,
    to: String?,
    qInTitle: String?,
    sources: String?,
    domains: String?,
    excludeDomains: String?,
    language: String?,
    sortBy: String?,
    pageSize: Int?,
    page: Int?,
    callback: NutriResponse.DataResponse<ArticleResponse>
)

// Get Sources
fun getSources(
    language: String,
    country: String,
    category: String,
    callback: NutriResponse.DataResponse<SourceResponse>
)
  • ConsumeTheMealDbApi
// Search meal by name
fun searchMeal(mealName: String, callback: NutriResponse.DataResponse<MealResponse<Meal>>)

// List all meals by first letter
fun listAllMeal(firstLetter: String, callback: NutriResponse.DataResponse<MealResponse<Meal>>)

// Lookup full meal details by id
fun lookupFullMeal(idMeal: String, callback: NutriResponse.DataResponse<MealResponse<Meal>>)

// Lookup a single random meal
fun lookupRandomMeal(callback: NutriResponse.DataResponse<MealResponse<Meal>>)

// List all meal categories
fun listMealCategories(callback: NutriResponse.DataResponse<CategoryResponse>)

// List all Categories
fun listAllCateories(callback: NutriResponse.DataResponse<MealResponse<Category>>)

// List all Area
fun listAllArea(callback: NutriResponse.DataResponse<MealResponse<Area>>)

// List all Ingredients
fun listAllIngredients(callback: NutriResponse.DataResponse<MealResponse<Ingredient>>)

// Filter by main ingredient
fun filterByIngredient(ingredient: String, callback: NutriResponse.DataResponse<MealResponse<MealFilter>>)

// Filter by Category
fun filterByCategory(category: String, callback: NutriResponse.DataResponse<MealResponse<MealFilter>>)

// Filter by Area
fun filterByArea(area: String, callback: NutriResponse.DataResponse<MealResponse<MealFilter>>)
  • NutritionApi
// Get Vitamin A
fun getVitaminA(callback: NutriResponse.DataResponse<VitaminResponse>)

// Get Vitamin C
fun getVitaminC(callback: NutriResponse.DataResponse<VitaminResponse>)

// Get Vitamin E
fun getVitaminE(callback: NutriResponse.DataResponse<VitaminResponse>)

// Get BMI Kg/m2
fun getBMI(weightKg: Double, heightCm: Double) : Double
  • NutriApiClient
inline fun <reified T> create(url: String): T {
    return Retrofit.Builder()
        .baseUrl(url)
        .addConverterFactory(GsonConverterFactory.create())
        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
        .build().create(T::class.java)
}

inline fun <reified T> create(url: String, usingClient: Boolean): T {
    val mLoggingInterceptor = HttpLoggingInterceptor()
    mLoggingInterceptor.level = HttpLoggingInterceptor.Level.BODY

    val mClient = OkHttpClient.Builder()
        .addInterceptor(mLoggingInterceptor)
        .readTimeout(30, TimeUnit.SECONDS)
        .connectTimeout(30, TimeUnit.SECONDS)
        .build()

    return if (usingClient) {
        Retrofit.Builder()
            .baseUrl(url)
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .client(mClient)
            .build().create(T::class.java)
    } else {
        Retrofit.Builder()
            .baseUrl(url)
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .build().create(T::class.java)
    }
}
  • NutriResponse
interface DataResponse<T> {
    fun onShowProgress()
    fun onHideProgress()
    fun onEmpty()
    fun onSuccess(data: T)
    fun onFailed(statusCode: Int, errorMessage: String? = "")
}

Detail Module NutritionFramework

Pada module ini berfokus pada widget dan tampilan dari fungsi android sendiri. sehingga module ini hanya bisa digunakan atau diproses pada project android. Berikut beberapa fungsi penting yang terdapat pada NutritionFramework :

  • Layout Xml
nutri_container_empty_view.xml
nutri_empty_view.xml
nutri_list_nested_item.xml
nutri_rv_grid_type_1.xml
nutri_rv_grid_type_2.xml
nutri_rv_grid_type_3.xml
nutri_rv_grid_type_4.xml
nutri_rv_grid_type_5.xml
nutri_rv_grid_type_6.xml
nutri_rv_grid_type_7.xml
nutri_rv_list_type_1.xml
nutri_rv_list_type_10.xml
nutri_rv_list_type_11.xml
nutri_rv_list_type_12.xml
nutri_rv_list_type_2.xml
nutri_rv_list_type_3.xml
nutri_rv_list_type_4.xml
nutri_rv_list_type_5.xml
nutri_rv_list_type_6.xml
nutri_rv_list_type_7.xml
nutri_rv_list_type_8.xml
nutri_rv_list_type_9.xml
nutri_rv_root_grid_type.xml
nutri_rv_root_list_type.xml
nutri_rv_selected_list_type_1.xml
widget_nutri_new_recyclerview.xml
widget_nutri_progress_recyclerview.xml
widget_nutri_shimmer_recyclerview.xml
  • Colors.xml
<color name="nutriColorPrimary">#6200EE</color>
<color name="nutriColorPrimaryDark">#3700B3</color>
<color name="nutriColorAccent">#03DAC5</color>

<color name="nutriColorWhite">#FFFFFF</color>
<color name="nutriColorBlack">#000000</color>
<color name="nutriColorRed">#F44336</color>
<color name="nutriColorPink">#E91E63</color>
<color name="nutriColorPurple">#9C27B0</color>
<color name="nutriColorDeepPurple">#673AB7</color>
<color name="nutriColorIndigo">#3F51B5</color>
<color name="nutriColorBlue">#2196F3</color>
<color name="nutriColorLightBlue">#03A9F4</color>
<color name="nutriColorCyan">#00BCD4</color>
<color name="nutriColorTeal">#009688</color>
<color name="nutriColorGreen">#4CAF50</color>
<color name="nutriColorLightGreen">#8BC34A</color>
<color name="nutriColorLime">#CDDC39</color>
<color name="nutriColorYellowLime">#CDDC39</color>
<color name="nutriColorYellow">#FFEB3B</color>
<color name="nutriColorDarkYellow">#FFC107</color>
<color name="nutriColorAmber">#FF9800</color>
<color name="nutriColorOrange">#FF5722</color>
<color name="nutriColorGrey">#919191</color>
  • Dimens.xml
<!--Penamaan Dimen : {dimens/size}_{nama}-->
<!--Contoh : dimens_horizontal-->
<!--Contoh : text_size_title-->

<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
<dimen name="nav_header_vertical_spacing">8dp</dimen>
<dimen name="nav_header_height">176dp</dimen>
<dimen name="fab_margin">16dp</dimen>
<dimen name="dimen_navigation_drawer">60dp</dimen>

<dimen name="dimen_elevation">12dp</dimen>

<dimen name="dimen_view_line">1dp</dimen>
<dimen name="dimen_weight">0dp</dimen>

<dimen name="dimen_circle_background">50dp</dimen>
<dimen name="dimen_profil_header">220dp</dimen>
<dimen name="dimen_profil_photo">125dp</dimen>
<dimen name="dimen_profil_photo_list">60dp</dimen>
<dimen name="dimen_profil_photo_list_info">50dp</dimen>
<dimen name="dimen_drawable_padding">5dip</dimen>

<!--Sizes-->
<dimen name="text_size_title_big_super_30sp">24sp</dimen>
<dimen name="text_size_title_big_24sp">24sp</dimen>
<dimen name="text_size_title_medium_20sp">20sp</dimen>
<dimen name="text_size_title_small_18sp">18sp</dimen>
<dimen name="text_size_medium_16sp">16sp</dimen>
<dimen name="text_size_default_12sp">12sp</dimen>
<dimen name="text_size_small_10sp">10sp</dimen>

<dimen name="min_height_list_bimbingan_95dp">95dp</dimen>
<dimen name="min_height_info_200dp">200dp</dimen>
<dimen name="dimen_img_product_150dp">90dp</dimen>
<dimen name="dimen_elevation_2dp">2dp</dimen>
<dimen name="show_permission_padding">20dp</dimen>
<dimen name="dimen_menu_category_100dp">100dp</dimen>

<dimen name="dimen_splash_screen">144dp</dimen>

<!--  Nutri Base Dimen  -->
<dimen name="nutri_dimen_0dp">0dp</dimen>
<dimen name="nutri_dimen_1dp">1dp</dimen>
<dimen name="nutri_dimen_2dp">2dp</dimen>
<dimen name="nutri_dimen_4dp">4dp</dimen>
<dimen name="nutri_dimen_6dp">6dp</dimen>
<dimen name="nutri_dimen_8dp">8dp</dimen>
<dimen name="nutri_dimen_10dp">10dp</dimen>

<dimen name="nutri_dimen_12dp">12dp</dimen>
<dimen name="nutri_dimen_14dp">14dp</dimen>
<dimen name="nutri_dimen_16dp">16dp</dimen>
<dimen name="nutri_dimen_18dp">18dp</dimen>
<dimen name="nutri_dimen_20dp">20dp</dimen>

<dimen name="nutri_dimen_22dp">22dp</dimen>
<dimen name="nutri_dimen_24dp">24dp</dimen>
<dimen name="nutri_dimen_26dp">26dp</dimen>
<dimen name="nutri_dimen_28dp">28dp</dimen>
<dimen name="nutri_dimen_30dp">30dp</dimen>

<dimen name="nutri_dimen_32dp">32dp</dimen>
<dimen name="nutri_dimen_34dp">34dp</dimen>
<dimen name="nutri_dimen_36dp">36dp</dimen>
<dimen name="nutri_dimen_38dp">38dp</dimen>
<dimen name="nutri_dimen_40dp">40dp</dimen>

<dimen name="nutri_dimen_42dp">42dp</dimen>
<dimen name="nutri_dimen_44dp">44dp</dimen>
<dimen name="nutri_dimen_46dp">46dp</dimen>
<dimen name="nutri_dimen_48dp">48dp</dimen>
<dimen name="nutri_dimen_50dp">50dp</dimen>

<dimen name="nutri_dimen_52dp">52dp</dimen>
<dimen name="nutri_dimen_54dp">54dp</dimen>
<dimen name="nutri_dimen_56dp">56dp</dimen>
<dimen name="nutri_dimen_58dp">58dp</dimen>
<dimen name="nutri_dimen_60dp">60dp</dimen>

<dimen name="nutri_dimen_62dp">62dp</dimen>
<dimen name="nutri_dimen_64dp">64dp</dimen>
<dimen name="nutri_dimen_66dp">66dp</dimen>
<dimen name="nutri_dimen_68dp">68dp</dimen>
<dimen name="nutri_dimen_70dp">70dp</dimen>

<dimen name="nutri_dimen_72dp">72dp</dimen>
<dimen name="nutri_dimen_74dp">74dp</dimen>
<dimen name="nutri_dimen_76dp">76dp</dimen>
<dimen name="nutri_dimen_78dp">78dp</dimen>
<dimen name="nutri_dimen_80dp">80dp</dimen>

<dimen name="nutri_dimen_82dp">82dp</dimen>
<dimen name="nutri_dimen_84dp">84dp</dimen>
<dimen name="nutri_dimen_86dp">86dp</dimen>
<dimen name="nutri_dimen_88dp">88dp</dimen>
<dimen name="nutri_dimen_90dp">90dp</dimen>

<dimen name="nutri_dimen_92dp">92dp</dimen>
<dimen name="nutri_dimen_94dp">94dp</dimen>
<dimen name="nutri_dimen_96dp">96dp</dimen>
<dimen name="nutri_dimen_98dp">98dp</dimen>
<dimen name="nutri_dimen_100dp">100dp</dimen>

<dimen name="nutri_dimen_102dp">102dp</dimen>
<dimen name="nutri_dimen_104dp">104dp</dimen>
<dimen name="nutri_dimen_106dp">106dp</dimen>
<dimen name="nutri_dimen_108dp">108dp</dimen>
<dimen name="nutri_dimen_110dp">110dp</dimen>

<dimen name="nutri_dimen_112dp">112dp</dimen>
<dimen name="nutri_dimen_114dp">114dp</dimen>
<dimen name="nutri_dimen_116dp">116dp</dimen>
<dimen name="nutri_dimen_118dp">118dp</dimen>
<dimen name="nutri_dimen_120dp">120dp</dimen>

<dimen name="nutri_dimen_122dp">122dp</dimen>
<dimen name="nutri_dimen_124dp">124dp</dimen>
<dimen name="nutri_dimen_126dp">126dp</dimen>
<dimen name="nutri_dimen_128dp">128dp</dimen>
<dimen name="nutri_dimen_130dp">130dp</dimen>

<dimen name="nutri_dimen_132dp">132dp</dimen>
<dimen name="nutri_dimen_134dp">134dp</dimen>
<dimen name="nutri_dimen_136dp">136dp</dimen>
<dimen name="nutri_dimen_138dp">138dp</dimen>
<dimen name="nutri_dimen_140dp">140dp</dimen>

<dimen name="nutri_dimen_142dp">142dp</dimen>
<dimen name="nutri_dimen_144dp">144dp</dimen>
<dimen name="nutri_dimen_146dp">146dp</dimen>
<dimen name="nutri_dimen_148dp">148dp</dimen>
<dimen name="nutri_dimen_150dp">150dp</dimen>

<dimen name="nutri_dimen_152dp">152dp</dimen>
<dimen name="nutri_dimen_154dp">154dp</dimen>
<dimen name="nutri_dimen_156dp">156dp</dimen>
<dimen name="nutri_dimen_158dp">158dp</dimen>
<dimen name="nutri_dimen_160dp">160dp</dimen>

<dimen name="nutri_dimen_162dp">162dp</dimen>
<dimen name="nutri_dimen_164dp">164dp</dimen>
<dimen name="nutri_dimen_166dp">166dp</dimen>
<dimen name="nutri_dimen_168dp">168dp</dimen>
<dimen name="nutri_dimen_170dp">170dp</dimen>

<dimen name="nutri_dimen_172dp">172dp</dimen>
<dimen name="nutri_dimen_174dp">174dp</dimen>
<dimen name="nutri_dimen_176dp">176dp</dimen>
<dimen name="nutri_dimen_178dp">178dp</dimen>
<dimen name="nutri_dimen_180dp">180dp</dimen>

<dimen name="nutri_dimen_182dp">182dp</dimen>
<dimen name="nutri_dimen_184dp">184dp</dimen>
<dimen name="nutri_dimen_186dp">186dp</dimen>
<dimen name="nutri_dimen_188dp">188dp</dimen>
<dimen name="nutri_dimen_190dp">190dp</dimen>

<dimen name="nutri_dimen_192dp">192dp</dimen>
<dimen name="nutri_dimen_194dp">194dp</dimen>
<dimen name="nutri_dimen_196dp">196dp</dimen>
<dimen name="nutri_dimen_198dp">198dp</dimen>
<dimen name="nutri_dimen_200dp">200dp</dimen>

<!--  Frogo Base Font Dimen  -->
<dimen name="nutri_dimen_font_1sp">1sp</dimen>
<dimen name="nutri_dimen_font_2sp">2sp</dimen>
<dimen name="nutri_dimen_font_4sp">4sp</dimen>
<dimen name="nutri_dimen_font_6sp">6sp</dimen>
<dimen name="nutri_dimen_font_8sp">8sp</dimen>
<dimen name="nutri_dimen_font_9sp">9sp</dimen>
<dimen name="nutri_dimen_font_10sp">10sp</dimen>
<dimen name="nutri_dimen_font_11sp">11sp</dimen>
<dimen name="nutri_dimen_font_12sp">12sp</dimen>
<dimen name="nutri_dimen_font_13sp">13sp</dimen>
<dimen name="nutri_dimen_font_14sp">14sp</dimen>
<dimen name="nutri_dimen_font_15sp">15sp</dimen>
<dimen name="nutri_dimen_font_16sp">16sp</dimen>
<dimen name="nutri_dimen_font_18sp">18sp</dimen>
<dimen name="nutri_dimen_font_20sp">20sp</dimen>
<dimen name="nutri_dimen_font_22sp">22sp</dimen>
<dimen name="nutri_dimen_font_24sp">24sp</dimen>
<dimen name="nutri_dimen_font_26sp">26sp</dimen>
<dimen name="nutri_dimen_font_28sp">28sp</dimen>
<dimen name="nutri_dimen_font_30sp">30sp</dimen>
<dimen name="nutri_dimen_font_32sp">32sp</dimen>
<dimen name="nutri_dimen_font_34sp">34sp</dimen>
<dimen name="nutri_dimen_font_36sp">36sp</dimen>
  • String.xml
<!--  Nutri Base String  -->
<string name="nutri_is_empty_data">is Empty Data</string>
<string name="nutri_no_data_found">No data found</string>
<string name="nutri_please_insert_data">Please insert data here !!!</string>
<string name="nutri_dummy_content_description">This Is Image</string>
<string name="nutri_dummy_title">Lorem Ipsum</string>
<string name="nutri_dummy_subtitle">Lorem Ipsum is simply dummy text</string>
<string name="nutri_dummy_desc">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry\'s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book</string>

<string name="nutri_content_title">Frogo Content Title</string>
<string name="nutri_content_text">Frogo Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry\'s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries</string>
<string name="nutri_subtext">Frogo Sub Text</string>

<string name="ads_size_banner">BANNER</string> <!-- 320x50dp -->
<string name="ads_size_large_banner">LARGE_BANNER</string> <!-- 320x100dp -->
<string name="ads_size_medium_rectangle">MEDIUM_RECTANGLE</string> <!-- 300x250dp -->
<string name="ads_size_full_banner">FULL_BANNER</string> <!-- 468x60dp -->
<string name="ads_size_leader_board">LEADERBOARD</string> <!-- 728x90dp -->
<string name="ads_size_smart_banner">SMART_BANNER</string> <!-- match_parent -->

<string name="read_signature">Read APK signature</string>
<string name="verify_signature">Verify using the APK signature</string>
<string name="verify_installer_id">Verify using the Installer ID</string>
<string name="verify_unauthorized_apps">Verify unauthorized apps: Lucky Patcher, Freedom, CreeHack and HappyMod</string>
<string name="verify_stores">Verify third-party stores: Aptoide, BlackMart, 1Mobile, GetApk, etc</string>
<string name="verify_debug">Verify if app is a debug build</string>
<string name="verify_emulator">Verify if app is being run in an emulator</string>

<string name="about_frogobox">Frogobox Id</string>
<string name="about_copyright">© Copyright</string>
<string name="about_all_right_reserved">All Right Reserved</string>

<string name="title_about_us">toolbar_about_us</string>
<string name="title_copyright">Copyright</string>

<string name="dummyLong">Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam veniam similiquevoluptates odit, ipsum laborum architecto distinctio harum, provident fugiat praesentium ex quod doloreslaudantium aliquid quidem placeat incidunt vitae!</string>
<string name="dummy">Dummy</string>

<string name="dialog_button_yes">Yes</string>
<string name="dialog_button_no">No</string>
<string name="dialog_title_delete">Delete Data</string>
<string name="dialog_message_delete">Are you sure you want to delete data?</string>


<string name="content_title">Content title</string>
<string name="content_text">Content text</string>
<string name="subtext">Sub text</string>
<string name="send_notification">Send Notification</string>
<string name="text_show_notif">Testing Notif With Reply</string>
<string name="notif_action_reply">Reply Notif</string>
<string name="notif_title">New Notification</string>
<string name="notif_content">Ada notif baru</string>
<string name="notif_title_sent">Reply Sent</string>
<string name="notif_content_sent">Message has been sent</string>
<string name="hint_reply">Insert reply message</string>
<string name="hint_sender">Insert sender name</string>
<string name="hint_message">Insert message</string>
<string name="send">Send</string>
<string name="navigate_custom">Go to custom notif</string>
<string name="navigate_stack">Go to stack notif</string>
<string name="send_custom_notification">Send Custom Layout Notification</string>
  • Styles.xml
<style name="nutriBaseAreaWrapContent">
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
</style>

<style name="nutriBaseAreaMatchParent">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">match_parent</item>
</style>

<style name="nutriBaseAreaWidthMatchParent">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">wrap_content</item>
</style>

<style name="nutriBaseAreaHeightMatchParent">
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">match_parent</item>
</style>

<style name="nutriArea64dp">
    <item name="android:layout_width">@dimen/nutri_dimen_64dp</item>
    <item name="android:layout_height">@dimen/nutri_dimen_64dp</item>
</style>

<style name="nutriArea48dp">
    <item name="android:layout_width">@dimen/nutri_dimen_48dp</item>
    <item name="android:layout_height">@dimen/nutri_dimen_48dp</item>
</style>

<!-- TextView -->

<style name="nutriTvListTitle" parent="nutriBaseAreaWrapContent">
    <item name="android:maxLines">1</item>
    <item name="android:textColor">@color/nutriColorPrimaryDark</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textSize">@dimen/nutri_dimen_font_16sp</item>
</style>

<style name="nutriTvListSubTitle" parent="nutriBaseAreaWrapContent">
    <item name="android:maxLines">1</item>
    <item name="android:textSize">@dimen/nutri_dimen_font_12sp</item>
</style>

<style name="nutriTvListDescription" parent="nutriBaseAreaWrapContent">
    <item name="android:maxLines">3</item>
    <item name="android:textColor">@color/nutriColorBlack</item>
    <item name="android:textSize">@dimen/nutri_dimen_font_11sp</item>
</style>

<!-- Layout Container -->

<style name="nutriLayoutList8dp" parent="nutriBaseAreaWidthMatchParent">
    <item name="android:layout_marginStart">@dimen/nutri_dimen_16dp</item>
    <item name="android:layout_marginEnd">@dimen/nutri_dimen_16dp</item>
    <item name="android:layout_marginBottom">@dimen/nutri_dimen_16dp</item>
    <item name="android:elevation">@dimen/nutri_dimen_2dp</item>
    <item name="android:padding">@dimen/nutri_dimen_16dp</item>
    <item name="android:background">@drawable/nutri_bg_card_8dp</item>
</style>

<style name="nutriLayoutListWrap8dp" parent="nutriBaseAreaWrapContent">
    <item name="android:layout_marginStart">@dimen/nutri_dimen_16dp</item>
    <item name="android:layout_marginEnd">@dimen/nutri_dimen_16dp</item>
    <item name="android:layout_marginBottom">@dimen/nutri_dimen_16dp</item>
    <item name="android:elevation">@dimen/nutri_dimen_2dp</item>
    <item name="android:padding">@dimen/nutri_dimen_16dp</item>
    <item name="android:background">@drawable/nutri_bg_card_8dp</item>
</style>

<style name="nutriLayoutGrid8dp" parent="nutriBaseAreaWidthMatchParent">
    <item name="android:layout_marginEnd">@dimen/nutri_dimen_16dp</item>
    <item name="android:layout_marginBottom">@dimen/nutri_dimen_16dp</item>
    <item name="android:elevation">@dimen/nutri_dimen_2dp</item>
    <item name="android:padding">@dimen/nutri_dimen_16dp</item>
    <item name="android:background">@drawable/nutri_bg_card_8dp</item>
</style>
  • Widget dan Abstract Class

Detail Module NutritionApp

Pada Modul ini merupakan module yang berisi main source code utama dari aplikasi, semua source code pada module ini akan di proses kedalam aplikasi yang dijalankan, Berikut component utama yang ada dalam NutritionApp :

  • Letak Activity, Fragment, dan ViewModel untuk aplikasi terdapat dalam package mvvm

  • Letak Untuk Data terdapat dalam package sources