A simple Android MVVM pattern example and template.
- Kotlin
- Kotlin Coroutines (https://developer.android.com/kotlin/coroutines)
- View Binding (https://developer.android.com/topic/libraries/view-binding)
- Data Binding (https://developer.android.com/topic/libraries/data-binding)
- Retrofit (https://github.com/square/retrofit) with Moshi (https://github.com/square/moshi)
- Room Persistence Library (https://developer.android.com/topic/libraries/architecture/room)
- Shared Preferences (https://developer.android.com/training/data-storage/shared-preferences)
- Navigation Component (https://developer.android.com/guide/navigation)
- Glide (https://github.com/bumptech/glide)
- Timber (https://github.com/JakeWharton/timber)
- Custom Fonts (https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml)
- Shimmer for Android (https://github.com/facebook/shimmer-android)
- Hilt (https://dagger.dev/hilt/)
- Paging 3 (https://developer.android.com/topic/libraries/architecture/paging)
- Splash Screen (Introduced in Android 12)
- Custom Build variant (https://developer.android.com/studio/build/build-variants)
- Environment variable based on Build variant
- Custom Snackbar
- Dark Mode
- Awesome module naming example (see
AwesomeModuleConstants
) - Dynamic accent color from image (see
calculatePaletteInImage()
) - Simple Encryption Utils (see
EncryptionUtils
) - Data pass and receive example between Activities
- Pass data on
Activity
start (startActivity()
) - Start
Activity
for result (registerForActivityResult()
)
- Pass data on
- Data pass and receive example between Fragments
- Pass data between child
Fragment
using parentViewModel
- Pass data between child
Fragment
usingFragmentResultListener
- Pass data on
Fragment
transaction
- Pass data between child
- Simple Todo app (for beginner)
- Single Activity approach
- Used Go REST API (Just Todo API)
- Offline support
- Simple CMS app
- Single Activity approach
- Used Go REST API
- Sections: User, Post, Todo and Comment
- Navigation Component
- Hilt
- Material 3
- Service example
- Foreground service
- Data-pass using Broadcast
- GitHub Actions
- Send test push notification to self using OneSignal
- DateTime
- Dialog
- Dimension
- Flow
- General Spinner
- Miscellaneous: show/hide keyboard, download file, open permission settings, open url, send mail etc.
- Retrofit
- Snackbar
- String
- Toast
- RecyclerView
- Spinner
- ImageView
- TextView (for Date() to formatted date-time)
SharedPref
AlarmUtils
LocationProviderUtilClient
Event
Class: Get notified for identical values in LiveData, Channel, Flow etc.ignoreCrash { }
: Ignore exceptions for a block.
- UI/Unit Testing
- Example of
LocationProviderUtilClient
- Migrate full app to Material 3
- For dependency version check I am currently using Gradle Versions Plugin. I added this in the Gradle init script and can check versions using the following commend.
./gradlew dependencyUpdates
./gradlew spotlessApply
Open the local.properties
in your project level directory, and then add the following code. Replace YOUR_API_KEY
with your Go REST API key.
API_KEY=YOUR_API_KEY
- Oops! No Internet! - A simple no Internet dialog and snackbar, which will automatically appear and disappear based on Internet connectivity status.
- Why Not! Image Carousel! - An easy, super simple and customizable image carousel view for Android.
- Why Not Compose! - A collection of animations, compositions, UIs using Jetpack Compose. You can say Jetpack Compose cookbook or play-ground if you want!
- Why Not SwiftUI! - A collection of Swift, SwiftUI and iOS goodies.
Copyright 2023 Md. Mahmudul Hasan Shohag
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.