diff --git a/app/build.gradle b/app/build.gradle
index 9583e6d9..e4b289bb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -255,6 +255,9 @@ dependencies {
implementation rootProject.ext.generalDependencies.goldfinger
implementation rootProject.ext.generalDependencies.goldfingerRX
+ // Lottie
+ implementation rootProject.ext.generalDependencies.lottie
+
//ThreeTen : Alternative to Android Calendar API
implementation rootProject.ext.generalDependencies.threeten
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 06c15209..d9cbfe2a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -372,6 +372,12 @@
android:parentActivityName=".ui.mainactivity.MainActivity"
android:screenOrientation="portrait"
tools:ignore="LockedOrientationActivity" />
+
+
diff --git a/app/src/main/java/com/riders/thelab/core/utils/UIManager.kt b/app/src/main/java/com/riders/thelab/core/utils/UIManager.kt
index 6b57606a..1953e9cf 100644
--- a/app/src/main/java/com/riders/thelab/core/utils/UIManager.kt
+++ b/app/src/main/java/com/riders/thelab/core/utils/UIManager.kt
@@ -312,6 +312,12 @@ class UIManager private constructor() {
menu.setGroupVisible(R.id.menu_main_group, true)
}
+ fun getBitmapFromDrawable(context: Context, drawableResId: Int): Bitmap? {
+ if (0 == drawableResId)
+ return null
+ return drawableToBitmap(ContextCompat.getDrawable(context, drawableResId)!!)
+ }
+
/**
* Hide menu buttons when collapse toolbar is expanded
*/
@@ -329,5 +335,10 @@ class UIManager private constructor() {
fun setBackgroundColor(context: Context, targetView: View, colorResID: Int) {
targetView.setBackgroundColor(ContextCompat.getColor(context, colorResID))
}
+
+ fun updateToolbarIcon(activity: Activity, menu: Menu, actionId: Int, drawableResId: Int) {
+ menu.findItem(actionId)?.icon = ContextCompat.getDrawable(activity, drawableResId)
+ }
+
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/riders/thelab/ui/lottie/LottieActivity.kt b/app/src/main/java/com/riders/thelab/ui/lottie/LottieActivity.kt
new file mode 100644
index 00000000..4d3e646e
--- /dev/null
+++ b/app/src/main/java/com/riders/thelab/ui/lottie/LottieActivity.kt
@@ -0,0 +1,111 @@
+package com.riders.thelab.ui.lottie
+
+import android.animation.Animator
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.view.doOnPreDraw
+import com.riders.thelab.databinding.ActivityLottieBinding
+import timber.log.Timber
+import kotlin.random.Random
+
+class LottieActivity : AppCompatActivity() {
+
+ private var _viewBinding: ActivityLottieBinding? = null
+
+ // This property is only valid between onCreateView and
+ // onDestroyView.
+ private val binding get() = _viewBinding!!
+
+ private var isConnected: Boolean = false
+
+ companion object {
+ val lottieUrls = mutableListOf(
+ // Android
+ "https://assets1.lottiefiles.com/datafiles/8rza4J0CdJeJ8Pb3v9INOKI0vcekEpVccKVF2lNQ/android.json",
+ // Search
+ "https://assets4.lottiefiles.com/packages/lf20_83et0zjc.json",
+ // Loading
+ "https://assets1.lottiefiles.com/private_files/lf30_bn5winlb.json",
+ "https://assets5.lottiefiles.com/private_files/lf30_qsg7wqkv.json",
+ // Fluid loader
+ "https://assets2.lottiefiles.com/packages/lf20_kk62um5v.json",
+ // Swinging
+ "https://assets6.lottiefiles.com/packages/lf20_97iupqly.json",
+ // Scanning files
+ "https://assets5.lottiefiles.com/private_files/lf30_jasmilgh.json",
+
+ // Backgrounds
+ // IT
+ "https://assets10.lottiefiles.com/packages/lf20_k5dcqzxm.json",
+ // Abstract
+ "https://assets7.lottiefiles.com/packages/lf20_ym8w5cx4.json",
+ )
+ }
+
+ /////////////////////////////////////
+ //
+ // OVERRIDE
+ //
+ /////////////////////////////////////
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ _viewBinding = ActivityLottieBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+
+ postponeEnterTransition()
+ binding.root.doOnPreDraw { startPostponedEnterTransition() }
+
+ binding.lottieAnimationView.enableMergePathsForKitKatAndAbove(true)
+ binding.lottieAnimationView.setOutlineMasksAndMattes(true)
+
+ binding.lottieAnimationView.setAnimationFromUrl(lottieUrls[6])
+ }
+
+ override fun onPause() {
+ super.onPause()
+ Timber.e("onPause()")
+ }
+
+ override fun onResume() {
+ super.onResume()
+ Timber.d("onResume()")
+ }
+
+
+ override fun onDestroy() {
+ Timber.e("onDestroy()")
+ _viewBinding = null
+ super.onDestroy()
+ }
+
+ private fun startRandomPlay() {
+
+ binding.lottieAnimationView.setAnimationFromUrl(lottieUrls[3])
+ binding.lottieAnimationView.addAnimatorListener(object : Animator.AnimatorListener {
+ override fun onAnimationStart(animation: Animator?) {
+ Timber.d("onAnimationStart()")
+ }
+
+ override fun onAnimationEnd(animation: Animator?) {
+ Timber.e("onAnimationEnd()")
+ }
+
+ override fun onAnimationCancel(animation: Animator?) {
+ Timber.e("onAnimationCancel()")
+ }
+
+ override fun onAnimationRepeat(animation: Animator?) {
+ Timber.d("onAnimationRepeat()")
+ binding.lottieAnimationView.setAnimationFromUrl(
+ lottieUrls[Random.nextInt(
+ 0,
+ lottieUrls.size
+ )]
+ )
+ binding.lottieAnimationView.playAnimation()
+ }
+
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/riders/thelab/ui/mainactivity/MainActivity.kt b/app/src/main/java/com/riders/thelab/ui/mainactivity/MainActivity.kt
index 763f4b9f..b55d84e4 100644
--- a/app/src/main/java/com/riders/thelab/ui/mainactivity/MainActivity.kt
+++ b/app/src/main/java/com/riders/thelab/ui/mainactivity/MainActivity.kt
@@ -16,7 +16,6 @@ import android.net.ConnectivityManager
import android.net.NetworkCapabilities
import android.net.NetworkRequest
import android.net.wifi.WifiManager
-import android.os.Build
import android.os.Bundle
import android.provider.Settings
import android.view.Menu
@@ -203,7 +202,8 @@ class MainActivity : AppCompatActivity(),
mConnectivityManager!!.registerNetworkCallback(request, networkManager)
- val labLocationManager = LabLocationManager(this@MainActivity, this@MainActivity, this)
+ val labLocationManager =
+ LabLocationManager(this@MainActivity, this@MainActivity, this)
if (!labLocationManager.canGetLocation()) {
Timber.e("Cannot get location please enable position")
@@ -429,9 +429,14 @@ class MainActivity : AppCompatActivity(),
this,
{ locationStatus ->
Timber.d("getLocationData().observe : $locationStatus")
- menu?.findItem(R.id.action_location_settings)?.setIcon(
+
+ UIManager.updateToolbarIcon(
+ this@MainActivity,
+ menu!!,
+ R.id.action_location_settings,
if (!locationStatus) R.drawable.ic_location_off else R.drawable.ic_location_on
)
+
})
mViewModel.getWeather().observe(
@@ -613,7 +618,7 @@ class MainActivity : AppCompatActivity(),
private fun applyRecycler() {
Timber.d("applyRecycler()")
- var layoutManager: RecyclerView.LayoutManager?
+ val layoutManager: RecyclerView.LayoutManager?
if (!LabCompatibilityManager.isTablet(this)) {
@@ -707,9 +712,10 @@ class MainActivity : AppCompatActivity(),
if (!isGPS) mGpsUtils.turnGPSOn(this)
}
+ @SuppressLint("InlinedApi")
private fun toggleWifi() {
Timber.d("toggleWifi()")
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ if (LabCompatibilityManager.isAndroid10()) {
val panelIntent = Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY)
startActivityForResult(panelIntent, 0)
} else {
@@ -720,15 +726,27 @@ class MainActivity : AppCompatActivity(),
if (!isWifiEnabled) {
Timber.d("(this.applicationContext.getSystemService(Context.WIFI_SERVICE) as? WifiManager) $isWifiEnabled")
Timber.d("This should activate wifi")
+
isWifiEnabled = true
- menu?.findItem(R.id.action_connection_settings)?.icon =
- ContextCompat.getDrawable(this@MainActivity, R.drawable.ic_wifi)
+
+ UIManager.updateToolbarIcon(
+ this@MainActivity,
+ menu!!,
+ R.id.action_connection_settings,
+ R.drawable.ic_wifi
+ )
} else {
Timber.d("(this.applicationContext.getSystemService(Context.WIFI_SERVICE) as? WifiManager) $isWifiEnabled")
Timber.d("This should disable wifi")
+
isWifiEnabled = false
- menu?.findItem(R.id.action_connection_settings)?.icon =
- ContextCompat.getDrawable(this@MainActivity, R.drawable.ic_wifi_off)
+
+ UIManager.updateToolbarIcon(
+ this@MainActivity,
+ menu!!,
+ R.id.action_connection_settings,
+ R.drawable.ic_wifi_off
+ )
}
this.isWifiEnabled = !isWifiEnabled
}
@@ -920,10 +938,15 @@ class MainActivity : AppCompatActivity(),
private fun updateToolbarConnectionIcon(isConnected: Boolean) {
Timber.e("updateToolbarConnectionIcon, is connected : %s", isConnected)
if (!LabCompatibilityManager.isTablet(this))
- menu?.findItem(R.id.action_connection_settings)?.icon = ContextCompat.getDrawable(
- this@MainActivity,
- if (isConnected) R.drawable.ic_wifi else R.drawable.ic_wifi_off
- )
+
+ runOnUiThread {
+ UIManager.updateToolbarIcon(
+ this@MainActivity,
+ menu!!,
+ R.id.action_connection_settings,
+ if (isConnected) R.drawable.ic_wifi else R.drawable.ic_wifi_off
+ )
+ }
}
override fun gpsStatus(isGPSEnable: Boolean) {
@@ -931,8 +954,14 @@ class MainActivity : AppCompatActivity(),
Timber.d("turn on/off GPS - isGPSEnable : $isGPSEnable")
isGPS = isGPSEnable
- if (isGPS) menu?.findItem(R.id.action_location_settings)?.icon =
- ContextCompat.getDrawable(this@MainActivity, R.drawable.ic_location_on)
+ if (isGPS) {
+ UIManager.updateToolbarIcon(
+ this@MainActivity,
+ menu!!,
+ R.id.action_location_settings,
+ R.drawable.ic_location_on
+ )
+ }
}
override fun onLocationChanged(location: Location) {
diff --git a/app/src/main/java/com/riders/thelab/utils/AppBuilderUtils.kt b/app/src/main/java/com/riders/thelab/utils/AppBuilderUtils.kt
index 80ca0085..312d9ba0 100644
--- a/app/src/main/java/com/riders/thelab/utils/AppBuilderUtils.kt
+++ b/app/src/main/java/com/riders/thelab/utils/AppBuilderUtils.kt
@@ -20,6 +20,7 @@ import com.riders.thelab.ui.googledrive.GoogleDriveActivity
import com.riders.thelab.ui.googlesignin.GoogleSignInActivity
import com.riders.thelab.ui.kat.KatActivity
import com.riders.thelab.ui.locationonmaps.LocationOnMapsActivity
+import com.riders.thelab.ui.lottie.LottieActivity
import com.riders.thelab.ui.multipane.MultipaneActivity
import com.riders.thelab.ui.palette.PaletteActivity
import com.riders.thelab.ui.recycler.RecyclerViewActivity
@@ -403,6 +404,22 @@ class AppBuilderUtils {
.build()
list.add(download)
+ // lottie
+ val lottie =
+ AppBuilder
+ .withId(26L)
+ .withActivityTitle("Lottie")
+ .withActivityDescription("Lottie is a mobile library for Android and iOS that parses Adobe After Effects animations and renders them natively on mobile!...")
+ .withActivityIcon(
+ getDrawableFromIntResource(
+ context,
+ R.drawable.ic_lottie_icon
+ )
+ )
+ .withActivityClass(LottieActivity::class.java)
+ .build()
+ list.add(lottie)
+
// Wip
val wip =
AppBuilder
diff --git a/app/src/main/res/drawable-mdpi/ic_lottie_icon.xml b/app/src/main/res/drawable-mdpi/ic_lottie_icon.xml
new file mode 100644
index 00000000..1fcedeec
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/ic_lottie_icon.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_lottie.xml b/app/src/main/res/layout/activity_lottie.xml
new file mode 100644
index 00000000..153f2361
--- /dev/null
+++ b/app/src/main/res/layout/activity_lottie.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 81e50cd2..23a67c32 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -373,4 +373,7 @@
Download
+
+ Lottie
+
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 65c7179c..f7b85358 100644
--- a/build.gradle
+++ b/build.gradle
@@ -8,7 +8,7 @@ ext {
// version information
versionMajor = 10
versionMinor = 6
- versionPatch = 0
+ versionPatch = 1
versionName = "${versionMajor}.${versionMinor}.${versionPatch}"
// Kotlin
@@ -92,6 +92,8 @@ ext {
// GoldFinger
goldfingerVersion = '2.0.1'
+ lottieVersion = '4.1.0'
+
threetenVersion = '1.3.1'
timberVersion = '5.0.1'
@@ -107,7 +109,7 @@ ext {
kotlinCoroutines : "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion",
kotlinCoroutinesAndroid : "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion",
kotlinParcelize : "org.jetbrains.kotlin:kotlin-parcelize-runtime:$kotlinVersion",
- kotlinPlaySevices : "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:$kotlinPlayServices",
+ kotlinPlaySevices : "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:$kotlinPlayServices",
// KTX framework
activityKTX : "androidx.activity:activity-ktx:$activityKtxVersion",
@@ -228,6 +230,9 @@ ext {
goldfinger : "co.infinum:goldfinger:$goldfingerVersion",
goldfingerRX : "co.infinum:goldfinger-rx:$goldfingerVersion",
+ // Lottie
+ lottie : "com.airbnb.android:lottie:$lottieVersion",
+
// Timber : Logging library
timber : "com.jakewharton.timber:timber:$timberVersion"
]