diff --git a/app/build.gradle b/app/build.gradle
index e4b289bb..721375e8 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -35,12 +35,6 @@ android {
versionCode buildDateTime
versionName rootProject.ext.versionName
- javaCompileOptions {
- annotationProcessorOptions {
- includeCompileClasspath false
- }
- }
-
// Enabling multidex support.
multiDexEnabled true
@@ -109,7 +103,7 @@ android {
}
kotlinOptions {
- jvmTarget = "1.8"
+ jvmTarget = '1.8'
}
compileOptions {
@@ -118,6 +112,14 @@ android {
}
}
+allprojects {
+ repositories {
+ flatDir {
+ dirs 'libs'
+ }
+ }
+}
+
dependencies {
/////////////////////////////
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 7bbfc395..931e46a3 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -39,7 +39,8 @@
-
+
+
@@ -146,6 +147,7 @@
@@ -194,6 +196,7 @@
@@ -294,6 +297,7 @@
@@ -393,6 +397,7 @@
@@ -405,7 +410,8 @@
+ android:enabled="true"
+ android:exported="true">
-
+
@@ -449,7 +457,9 @@
android:enabled="true"
android:exported="false" />
-
+
diff --git a/app/src/main/java/com/riders/thelab/core/livedata/ConnectionLiveData.kt b/app/src/main/java/com/riders/thelab/core/livedata/ConnectionLiveData.kt
index 4e40cc04..78e2cf71 100644
--- a/app/src/main/java/com/riders/thelab/core/livedata/ConnectionLiveData.kt
+++ b/app/src/main/java/com/riders/thelab/core/livedata/ConnectionLiveData.kt
@@ -16,6 +16,7 @@ class ConnectionLiveData(
override fun onActive() {
super.onActive()
+ @Suppress("DEPRECATION")
val filter = IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)
context.registerReceiver(networkReceiver, filter)
}
@@ -28,12 +29,16 @@ class ConnectionLiveData(
private val networkReceiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent) {
if (intent.extras != null) {
+ @Suppress("DEPRECATION")
val activeNetwork =
intent.extras!![ConnectivityManager.EXTRA_NETWORK_INFO] as NetworkInfo?
+
+ @Suppress("DEPRECATION")
val isConnected = activeNetwork != null &&
activeNetwork.isConnectedOrConnecting
if (isConnected) {
+ @Suppress("DEPRECATION")
when (activeNetwork!!.type) {
ConnectivityManager.TYPE_WIFI ->
value = ConnectionModel(ConnectivityManager.TYPE_WIFI, true)
diff --git a/app/src/main/java/com/riders/thelab/core/location/GpsUtils.kt b/app/src/main/java/com/riders/thelab/core/location/GpsUtils.kt
index 1cd282f0..dace6e95 100644
--- a/app/src/main/java/com/riders/thelab/core/location/GpsUtils.kt
+++ b/app/src/main/java/com/riders/thelab/core/location/GpsUtils.kt
@@ -32,8 +32,8 @@ class GpsUtils(private val context: Context) {
this.mSettingsClient = LocationServices.getSettingsClient(mContext!!)
this.locationRequest = LocationRequest.create()
locationRequest?.priority = LocationRequest.PRIORITY_HIGH_ACCURACY
- locationRequest?.interval = 10 * 1000
- locationRequest?.fastestInterval = 2 * 1000
+ locationRequest?.interval = (10 * 1000).toLong()
+ locationRequest?.fastestInterval = (2 * 1000).toLong()
val builder: LocationSettingsRequest.Builder = LocationSettingsRequest.Builder()
.addLocationRequest(locationRequest!!)
@@ -58,7 +58,7 @@ class GpsUtils(private val context: Context) {
// GPS is already enable, callback GPS status through listener
onGpsListener.gpsStatus(true)
}
- ?.addOnFailureListener((context as Activity)) { exception ->
+ ?.addOnFailureListener(context) { exception ->
when ((exception as ApiException).statusCode) {
LocationSettingsStatusCodes.RESOLUTION_REQUIRED -> {
diff --git a/app/src/main/java/com/riders/thelab/core/okhttp/LabInterceptors.kt b/app/src/main/java/com/riders/thelab/core/okhttp/LabInterceptors.kt
index d46c6c99..f2775ae8 100644
--- a/app/src/main/java/com/riders/thelab/core/okhttp/LabInterceptors.kt
+++ b/app/src/main/java/com/riders/thelab/core/okhttp/LabInterceptors.kt
@@ -7,7 +7,6 @@ import okio.GzipSink
import okio.buffer
import timber.log.Timber
import java.io.IOException
-import java.util.*
class LabInterceptors {
@@ -41,11 +40,12 @@ class LabInterceptors {
Timber.d("Received response : %s", jsonResponse)
// Re-create the response before returning it because body can be read only once
+ @Suppress("DEPRECATION")
return response
.newBuilder()
.body(
ResponseBody.create(
- Objects.requireNonNull(response.body)!!.contentType(),
+ response.body?.contentType(),
jsonResponse
)
)
diff --git a/app/src/main/java/com/riders/thelab/core/service/FloatingViewService.kt b/app/src/main/java/com/riders/thelab/core/service/FloatingViewService.kt
index 30e8e0c5..fcae1193 100644
--- a/app/src/main/java/com/riders/thelab/core/service/FloatingViewService.kt
+++ b/app/src/main/java/com/riders/thelab/core/service/FloatingViewService.kt
@@ -95,7 +95,7 @@ class FloatingViewService : Service() {
//Set the next button.
val nextButton = mFloatingView!!.findViewById(R.id.next_btn) as ImageView
- nextButton.setOnClickListener { v: View? ->
+ nextButton.setOnClickListener {
Toast.makeText(
this@FloatingViewService,
"Playing next song.",
@@ -107,7 +107,7 @@ class FloatingViewService : Service() {
//Set the pause button.
val prevButton = mFloatingView!!.findViewById(R.id.prev_btn) as ImageView
- prevButton.setOnClickListener { v: View? ->
+ prevButton.setOnClickListener {
Toast.makeText(
this@FloatingViewService,
"Playing previous song.",
@@ -119,7 +119,7 @@ class FloatingViewService : Service() {
//Set the close button
val closeButton = mFloatingView!!.findViewById(R.id.close_button) as ImageView
- closeButton.setOnClickListener { view: View? ->
+ closeButton.setOnClickListener {
collapsedView.visibility = View.VISIBLE
expandedView.visibility = View.GONE
}
@@ -127,7 +127,7 @@ class FloatingViewService : Service() {
//Open the application on thi button click
val openButton = mFloatingView!!.findViewById(R.id.open_button) as ImageView
- openButton.setOnClickListener { view: View? ->
+ openButton.setOnClickListener {
//Open the application click.
val intent = Intent(this@FloatingViewService, FloatingViewActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
diff --git a/app/src/main/java/com/riders/thelab/core/service/MusicMediaPlaybackService.kt b/app/src/main/java/com/riders/thelab/core/service/MusicMediaPlaybackService.kt
index 1a794d8d..e2073706 100644
--- a/app/src/main/java/com/riders/thelab/core/service/MusicMediaPlaybackService.kt
+++ b/app/src/main/java/com/riders/thelab/core/service/MusicMediaPlaybackService.kt
@@ -13,7 +13,7 @@ class MusicMediaPlaybackService : Service() {
//binder given to client
private val mBinder: IBinder = LocalBinder()
- private lateinit var mMediaSessionCompat: MediaSessionCompat
+ private var mMediaSessionCompat: MediaSessionCompat? = null
override fun onBind(intent: Intent?): IBinder {
Timber.d("onBind()")
diff --git a/app/src/main/java/com/riders/thelab/core/service/TheLabBootService.kt b/app/src/main/java/com/riders/thelab/core/service/TheLabBootService.kt
index 7f630ec8..7d1a4357 100644
--- a/app/src/main/java/com/riders/thelab/core/service/TheLabBootService.kt
+++ b/app/src/main/java/com/riders/thelab/core/service/TheLabBootService.kt
@@ -79,6 +79,7 @@ class TheLabBootService : Service() {
)
val mBuilder: NotificationCompat.Builder =
+ @Suppress("DEPRECATION")
NotificationCompat.Builder(this).apply {
setSmallIcon(R.mipmap.ic_lab_six_round)
setContentTitle(getString(R.string.notification_title))
diff --git a/app/src/main/java/com/riders/thelab/core/storage/ExternalStorage.kt b/app/src/main/java/com/riders/thelab/core/storage/ExternalStorage.kt
index fe74aad1..bbd5849e 100644
--- a/app/src/main/java/com/riders/thelab/core/storage/ExternalStorage.kt
+++ b/app/src/main/java/com/riders/thelab/core/storage/ExternalStorage.kt
@@ -25,6 +25,7 @@ class ExternalStorage {
return false
}
+ @Suppress("DEPRECATION")
fun getSdCardPath(): String {
return Environment.getExternalStorageDirectory().path + "/"
}
@@ -134,6 +135,7 @@ class ExternalStorage {
mMounts.clear()
if (map.isEmpty()) {
+ @Suppress("DEPRECATION")
map[SD_CARD] = Environment.getExternalStorageDirectory()
}
return map;
diff --git a/app/src/main/java/com/riders/thelab/core/storage/FileManager.kt b/app/src/main/java/com/riders/thelab/core/storage/FileManager.kt
index b397f8e6..f6b79786 100644
--- a/app/src/main/java/com/riders/thelab/core/storage/FileManager.kt
+++ b/app/src/main/java/com/riders/thelab/core/storage/FileManager.kt
@@ -1,8 +1,6 @@
package com.riders.thelab.core.storage
import android.content.Context
-import android.graphics.BitmapFactory
-import android.media.MediaMetadataRetriever
import android.os.Build
import android.os.Environment
import android.os.storage.StorageManager
@@ -103,25 +101,22 @@ class FileManager private constructor() {
}
}
- fun getMetaDataImage() {
+ /*fun getMetaDataImage() {
val mmr = MediaMetadataRetriever()
- // mmr.setDataSource(songsList.get(songIndex).get("songPath"))
-
- val data = mmr.embeddedPicture
- //coverart is an Imageview object
+ mmr.setDataSource(songsList.get(songIndex).get("songPath"))
// convert the byte array to a bitmap
- //coverart is an Imageview object
+ val data = mmr.embeddedPicture
// convert the byte array to a bitmap
if (data != null) {
val bitmap = BitmapFactory.decodeByteArray(data, 0, data.size)
- //coverart.setImageBitmap(bitmap) //associated cover art in bitmap
+ coverart.setImageBitmap(bitmap) //associated cover art in bitmap
} else {
- //coverart.setImageResource(R.drawable.fallback_cover) //any default cover resourse folder
+ coverart.setImageResource(R.drawable.fallback_cover) //any default cover resourse folder
}
- //coverart.setAdjustViewBounds(true)
- //coverart.setLayoutParams(LinearLayout.LayoutParams(500, 500))
- }
+ coverart.setAdjustViewBounds(true)
+ coverart.setLayoutParams(LinearLayout.LayoutParams(500, 500))
+ }*/
}
\ No newline at end of file
diff --git a/app/src/main/java/com/riders/thelab/core/utils/BrowserUtils.kt b/app/src/main/java/com/riders/thelab/core/utils/BrowserUtils.kt
index a1f4c44d..23184967 100644
--- a/app/src/main/java/com/riders/thelab/core/utils/BrowserUtils.kt
+++ b/app/src/main/java/com/riders/thelab/core/utils/BrowserUtils.kt
@@ -9,7 +9,7 @@ class BrowserUtils private constructor() {
companion object {
fun isSameDomain(url: String, url1: String): Boolean {
- return getRootDomainUrl(url.toLowerCase()) == getRootDomainUrl(url1.toLowerCase())
+ return getRootDomainUrl(url.lowercase()) == getRootDomainUrl(url1.lowercase())
}
private fun getRootDomainUrl(url: String): String {
diff --git a/app/src/main/java/com/riders/thelab/core/utils/LabAddressesUtils.kt b/app/src/main/java/com/riders/thelab/core/utils/LabAddressesUtils.kt
index 014da97f..ab82f93e 100644
--- a/app/src/main/java/com/riders/thelab/core/utils/LabAddressesUtils.kt
+++ b/app/src/main/java/com/riders/thelab/core/utils/LabAddressesUtils.kt
@@ -49,9 +49,7 @@ class LabAddressesUtils private constructor() {
}
}
-
fun buildAddress(address: Address): String? {
- val finalCity = ""
val addressStringBuilder = StringBuilder()
val street = address.featureName + ", " + address.thoroughfare
val locality = address.locality
@@ -66,7 +64,8 @@ class LabAddressesUtils private constructor() {
.append(departmentName).append(" - ")
.append(regionName).append(" - ")
.append(countryName)
- Timber.d(addressStringBuilder.toString())
+ val finalAddress = addressStringBuilder.toString()
+ Timber.d(finalAddress)
return locality
}
}
diff --git a/app/src/main/java/com/riders/thelab/core/utils/LabCompatibilityManager.kt b/app/src/main/java/com/riders/thelab/core/utils/LabCompatibilityManager.kt
index 597f332b..9f8f01be 100644
--- a/app/src/main/java/com/riders/thelab/core/utils/LabCompatibilityManager.kt
+++ b/app/src/main/java/com/riders/thelab/core/utils/LabCompatibilityManager.kt
@@ -137,10 +137,10 @@ class LabCompatibilityManager private constructor() {
}
// TEST
- fields = null
+ fields = VERSION_CODES::class.java.fields
val builder = StringBuilder()
builder.append("android : ").append(Build.VERSION.RELEASE)
- fields = VERSION_CODES::class.java.fields
+
for (field in fields) {
val fieldName = field.name
var fieldValue = -1
@@ -159,7 +159,7 @@ class LabCompatibilityManager private constructor() {
.append("sdk=").append(fieldValue)
}
}
- fields = null
+
Timber.e("OS: %s", builder.toString())
// TEST
return OSName
diff --git a/app/src/main/java/com/riders/thelab/core/utils/LabDeviceManager.kt b/app/src/main/java/com/riders/thelab/core/utils/LabDeviceManager.kt
index 056704b6..e2d26e2c 100644
--- a/app/src/main/java/com/riders/thelab/core/utils/LabDeviceManager.kt
+++ b/app/src/main/java/com/riders/thelab/core/utils/LabDeviceManager.kt
@@ -149,9 +149,8 @@ class LabDeviceManager private constructor() {
@SuppressLint("NewApi")
fun getScreenHeight(activity: Activity): Int {
- var screenHeight = 0
- screenHeight = if (LabCompatibilityManager.isAndroid10()
- && getModel().trim { it <= ' ' }.toLowerCase()
+ val screenHeight: Int = if (LabCompatibilityManager.isAndroid10()
+ && getModel().trim { it <= ' ' }.lowercase()
.contains(Constants.EMULATOR_DEVICE_TAG)
) {
val metrics = getDisplayMetricsAndroid10(activity)
@@ -165,9 +164,8 @@ class LabDeviceManager private constructor() {
@SuppressLint("NewApi")
fun getScreenWidth(activity: Activity): Int {
- var screenWidth = 0
- screenWidth = if (LabCompatibilityManager.isAndroid10()
- && getModel().trim { it <= ' ' }.toLowerCase()
+ val screenWidth: Int = if (LabCompatibilityManager.isAndroid10()
+ && getModel().trim { it <= ' ' }.lowercase()
.contains(Constants.EMULATOR_DEVICE_TAG)
) {
val metrics = getDisplayMetricsAndroid10(activity)
@@ -186,9 +184,10 @@ class LabDeviceManager private constructor() {
* @param activity
* @return
*/
- fun getDisplayMetrics(activity: Activity): DisplayMetrics {
+ private fun getDisplayMetrics(activity: Activity): DisplayMetrics {
//Retrieve Screen's height and width
val metrics = DisplayMetrics()
+ @Suppress("DEPRECATION")
activity
.windowManager
.defaultDisplay
diff --git a/app/src/main/java/com/riders/thelab/core/utils/LabLocationManager.kt b/app/src/main/java/com/riders/thelab/core/utils/LabLocationManager.kt
index c3114ac9..ab6acfef 100644
--- a/app/src/main/java/com/riders/thelab/core/utils/LabLocationManager.kt
+++ b/app/src/main/java/com/riders/thelab/core/utils/LabLocationManager.kt
@@ -267,7 +267,7 @@ class LabLocationManager constructor(
// On pressing Settings button
alertDialog.setPositiveButton(
"Settings"
- ) { dialog: DialogInterface?, which: Int ->
+ ) { _: DialogInterface?, _: Int ->
val intent = Intent(
Settings.ACTION_LOCATION_SOURCE_SETTINGS
)
@@ -277,7 +277,7 @@ class LabLocationManager constructor(
// on pressing cancel button
alertDialog.setNegativeButton(
"Cancel"
- ) { dialog: DialogInterface, which: Int -> dialog.cancel() }
+ ) { dialog: DialogInterface, _: Int -> dialog.cancel() }
// Showing Alert Message
alertDialog.show()
diff --git a/app/src/main/java/com/riders/thelab/core/utils/LabNetworkManagerNewAPI.kt b/app/src/main/java/com/riders/thelab/core/utils/LabNetworkManagerNewAPI.kt
index 98c9742f..456ff808 100644
--- a/app/src/main/java/com/riders/thelab/core/utils/LabNetworkManagerNewAPI.kt
+++ b/app/src/main/java/com/riders/thelab/core/utils/LabNetworkManagerNewAPI.kt
@@ -20,9 +20,8 @@ class LabNetworkManagerNewAPI constructor(
var isConnected = false
}
- init {
- val mListener: ConnectivityListener = listener
- }
+ val mListener: ConnectivityListener get() = listener
+
/**
* Check the Internet connection
@@ -38,7 +37,7 @@ class LabNetworkManagerNewAPI constructor(
super.onAvailable(network)
Timber.d("onAvailable()")
isConnected = true
- listener.onConnected()
+ mListener.onConnected()
}
override fun onBlockedStatusChanged(network: Network, blocked: Boolean) {
@@ -55,7 +54,7 @@ class LabNetworkManagerNewAPI constructor(
super.onLost(network)
Timber.e("onLost()")
isConnected = false
- listener.onLostConnection()
+ mListener.onLostConnection()
}
override fun onUnavailable() {
@@ -65,7 +64,7 @@ class LabNetworkManagerNewAPI constructor(
}
- @SuppressLint("WifiManagerPotentialLeak")
+ @SuppressLint("WifiManagerPotentialLeak", "InlinedApi")
fun changeWifiState(applicationContext: Context, activity: Activity) {
Timber.d("changeWifiState()")
@@ -74,6 +73,7 @@ class LabNetworkManagerNewAPI constructor(
applicationContext.getSystemService(AppCompatActivity.WIFI_SERVICE) as WifiManager
if (!LabCompatibilityManager.isAndroid10()) {
val isWifi = wifiManager.isWifiEnabled
+ @Suppress("DEPRECATION")
wifiManager.isWifiEnabled = !isWifi
} else {
Timber.e("For applications targeting android.os.Build.VERSION_CODES Q or above, this API will always fail and return false")
diff --git a/app/src/main/java/com/riders/thelab/core/utils/RecyclerItemClickListener.kt b/app/src/main/java/com/riders/thelab/core/utils/RecyclerItemClickListener.kt
index 1e254663..e861809a 100644
--- a/app/src/main/java/com/riders/thelab/core/utils/RecyclerItemClickListener.kt
+++ b/app/src/main/java/com/riders/thelab/core/utils/RecyclerItemClickListener.kt
@@ -31,7 +31,7 @@ class RecyclerItemClickListener(
override fun onLongPress(e: MotionEvent) {
val child = recyclerView.findChildViewUnder(e.x, e.y)
if (child != null && mListener != null) {
- mListener!!.onLongClick(child, recyclerView.getChildPosition(child))
+ mListener!!.onLongClick(child, recyclerView.getChildAdapterPosition(child))
}
}
})
@@ -40,7 +40,7 @@ class RecyclerItemClickListener(
override fun onInterceptTouchEvent(view: RecyclerView, e: MotionEvent): Boolean {
val childView = view.findChildViewUnder(e.x, e.y)
if (childView != null && mListener != null && mGestureDetector!!.onTouchEvent(e)) {
- mListener!!.onItemClick(childView, view.getChildPosition(childView))
+ mListener!!.onItemClick(childView, view.getChildAdapterPosition(childView))
return true
}
return false
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 1953e9cf..8c794a21 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
@@ -78,7 +78,7 @@ class UIManager private constructor() {
// Setting Dialog Message
alertDialog.setMessage(message)
- alertDialog.setNegativeButton(negativeMessage) { dialog: DialogInterface, which: Int ->
+ alertDialog.setNegativeButton(negativeMessage) { dialog: DialogInterface, _: Int ->
showActionInToast(context, negativeMessage)
if (negativeMessage.equals("Réessayer", ignoreCase = true)) {
//launchActivity(context, MainActivity.class, Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED|Intent.FLAG_ACTIVITY_NEW_TASK, null, null);
@@ -89,7 +89,7 @@ class UIManager private constructor() {
dialog.dismiss()
}
}
- alertDialog.setPositiveButton(positiveMessage) { dialog: DialogInterface?, which: Int ->
+ alertDialog.setPositiveButton(positiveMessage) { _: DialogInterface?, _: Int ->
showActionInToast(context, positiveMessage)
activity?.onBackPressed()
if (negativeMessage.equals("Quitter", ignoreCase = true)) {
@@ -290,7 +290,8 @@ class UIManager private constructor() {
targetImageView: ShapeableImageView,
listener: RequestListener
) {
- LabGlideUtils.getInstance().loadImage(context, iconResDrawable, targetImageView, listener)
+ LabGlideUtils.getInstance()
+ .loadImage(context, iconResDrawable, targetImageView, listener)
}
/**
diff --git a/app/src/main/java/com/riders/thelab/core/views/toast/TheLabToast.kt b/app/src/main/java/com/riders/thelab/core/views/toast/TheLabToast.kt
index dcecca46..bef10ae2 100644
--- a/app/src/main/java/com/riders/thelab/core/views/toast/TheLabToast.kt
+++ b/app/src/main/java/com/riders/thelab/core/views/toast/TheLabToast.kt
@@ -4,18 +4,13 @@ import android.app.Activity
import android.content.Context
import android.graphics.PorterDuff
import android.view.Gravity
-import android.view.View
-import android.view.ViewGroup
import android.view.animation.Animation
import android.view.animation.AnimationSet
import android.view.animation.TranslateAnimation
-import android.widget.LinearLayout
import android.widget.Toast
import androidx.core.content.ContextCompat
import androidx.interpolator.view.animation.LinearOutSlowInInterpolator
-import com.google.android.material.imageview.ShapeableImageView
-import com.google.android.material.textview.MaterialTextView
-import com.riders.thelab.R
+import com.riders.thelab.databinding.CustomToastLayoutBinding
import timber.log.Timber
/**
@@ -24,12 +19,33 @@ import timber.log.Timber
class TheLabToast(
private val context: Context
) : Toast(context) {
+ private var _viewBinding: CustomToastLayoutBinding? = null
+ private val binding get() = _viewBinding!!
+
+
+ /**
+ * Construct an empty Toast object. You must call [.setView] before you
+ * can call [.show].
+ *
+ * @param context The context to use. Usually your [Application]
+ * or [Activity] object.
+ */
+ init {
+
+ run {
+ _viewBinding = CustomToastLayoutBinding.inflate((context as Activity).layoutInflater)
+
+ // Ref : https://developer.android.com/reference/android/widget/Toast#setGravity(int,%20int,%20int)
+ setGravity(Gravity.BOTTOM, 0, 250)
+ this.duration = LENGTH_LONG
+
+ @Suppress("DEPRECATION")
+ this.view = binding.root
+ }
+ }
- private val container: LinearLayout
- private val imageView: ShapeableImageView
- private val textView: MaterialTextView
override fun setText(s: CharSequence) {
- textView.text = s
+ binding.text.text = s
}
fun setType(toastTypeEnum: ToastTypeEnum?) {
@@ -39,7 +55,7 @@ class TheLabToast(
}
fun setImageResource(drawableResourceID: Int) {
- imageView.setImageDrawable(ContextCompat.getDrawable(context, drawableResourceID))
+ binding.ivLol.setImageDrawable(ContextCompat.getDrawable(context, drawableResourceID))
}
/**
@@ -48,7 +64,7 @@ class TheLabToast(
* @param color
*/
fun setBackgroundColor(color: Int) {
- container
+ binding.customToastContainer
.background
.setColorFilter(
ContextCompat.getColor(context, color),
@@ -59,7 +75,7 @@ class TheLabToast(
override fun show() {
Timber.d("show()")
val translateAnimation = TranslateAnimation(
- 0f, 0f, 180f, container.top
+ 0f, 0f, 180f, binding.customToastContainer.top
.toFloat()
)
@@ -78,13 +94,14 @@ class TheLabToast(
})
val animationSet = AnimationSet(true)
animationSet.addAnimation(translateAnimation)
- container.startAnimation(animationSet)
+ binding.customToastContainer.startAnimation(animationSet)
super.show()
}
override fun cancel() {
Timber.e("cancel()")
super.cancel()
+ _viewBinding = null
}
class Builder(var context: Context) {
@@ -108,26 +125,4 @@ class TheLabToast(
}
}
- /**
- * Construct an empty Toast object. You must call [.setView] before you
- * can call [.show].
- *
- * @param context The context to use. Usually your [Application]
- * or [Activity] object.
- */
- init {
- val inflater = (context as Activity).layoutInflater
- val layout = inflater.inflate(
- R.layout.custom_toast_layout,
- context.findViewById(R.id.custom_toast_container) as ViewGroup
- )
- container = layout.findViewById(R.id.custom_toast_container) as LinearLayout
- imageView = layout.findViewById(R.id.ivLol)
- textView = layout.findViewById(R.id.text)
-
- // Ref : https://developer.android.com/reference/android/widget/Toast#setGravity(int,%20int,%20int)
- setGravity(Gravity.BOTTOM, 0, 250)
- this.duration = LENGTH_LONG
- this.view = layout
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/riders/thelab/data/local/model/Movie.kt b/app/src/main/java/com/riders/thelab/data/local/model/Movie.kt
index cd7e096f..f3ce6737 100644
--- a/app/src/main/java/com/riders/thelab/data/local/model/Movie.kt
+++ b/app/src/main/java/com/riders/thelab/data/local/model/Movie.kt
@@ -3,7 +3,7 @@ package com.riders.thelab.data.local.model
import android.os.Parcelable
import com.riders.thelab.data.local.bean.MovieEnum
import com.squareup.moshi.JsonClass
-import kotlinx.android.parcel.Parcelize
+import kotlinx.parcelize.Parcelize
@Parcelize
@JsonClass(generateAdapter = true)
diff --git a/app/src/main/java/com/riders/thelab/data/local/model/RecyclerItem.kt b/app/src/main/java/com/riders/thelab/data/local/model/RecyclerItem.kt
index 3edb6509..2854f134 100644
--- a/app/src/main/java/com/riders/thelab/data/local/model/RecyclerItem.kt
+++ b/app/src/main/java/com/riders/thelab/data/local/model/RecyclerItem.kt
@@ -2,7 +2,7 @@ package com.riders.thelab.data.local.model
import android.os.Parcelable
import com.riders.thelab.data.local.bean.RecyclerEnum
-import kotlinx.android.parcel.Parcelize
+import kotlinx.parcelize.Parcelize
@Parcelize
data class RecyclerItem constructor(var name: String? = null) : Parcelable {
diff --git a/app/src/main/java/com/riders/thelab/data/local/model/Video.kt b/app/src/main/java/com/riders/thelab/data/local/model/Video.kt
index 0cbef2c9..d35f301c 100644
--- a/app/src/main/java/com/riders/thelab/data/local/model/Video.kt
+++ b/app/src/main/java/com/riders/thelab/data/local/model/Video.kt
@@ -3,7 +3,7 @@ package com.riders.thelab.data.local.model
import android.os.Parcelable
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
-import kotlinx.android.parcel.Parcelize
+import kotlinx.parcelize.Parcelize
@Parcelize
@JsonClass(generateAdapter = true)
diff --git a/app/src/main/java/com/riders/thelab/data/local/model/app/App.kt b/app/src/main/java/com/riders/thelab/data/local/model/app/App.kt
index 42f42932..46e30b9e 100644
--- a/app/src/main/java/com/riders/thelab/data/local/model/app/App.kt
+++ b/app/src/main/java/com/riders/thelab/data/local/model/app/App.kt
@@ -31,12 +31,13 @@ data class App(
var drawable: BitmapDrawable?
val bitmap = parcel.readValue(Bitmap::class.java.classLoader)!! as Bitmap
- if (bitmap != null) {
+ if (null != bitmap) {
drawable =
BitmapDrawable(TheLabApplication.getInstance().getContext().resources, bitmap)
} else {
drawable = null
}
+
// Custom read implementation
return App(
parcel.readLong(),
@@ -51,7 +52,7 @@ data class App(
// Custom write implementation
parcel.writeLong(id)
var bitmap: Bitmap? = null
-
+
if (appDrawableIcon is BitmapDrawable) {
bitmap = (appDrawableIcon as BitmapDrawable).bitmap as Bitmap
} else if (appDrawableIcon is VectorDrawable) {
@@ -59,7 +60,7 @@ data class App(
}
parcel.writeParcelable(bitmap, flags)
- appName?.let { parcel.writeString(appName) }
+ appName.let { parcel.writeString(it) }
parcel.writeString(appVersion)
parcel.writeString(appPackageName)
parcel.writeString(appTitle)
@@ -73,7 +74,7 @@ data class App(
@IgnoredOnParcel
private var name: String? = null
- //@IgnoredOnParcel
+ @IgnoredOnParcel
private var drawableIcon: Drawable? = null
@IgnoredOnParcel
diff --git a/app/src/main/java/com/riders/thelab/data/remote/ApiImpl.kt b/app/src/main/java/com/riders/thelab/data/remote/ApiImpl.kt
index 27c6e4a1..fe0f495e 100644
--- a/app/src/main/java/com/riders/thelab/data/remote/ApiImpl.kt
+++ b/app/src/main/java/com/riders/thelab/data/remote/ApiImpl.kt
@@ -50,6 +50,10 @@ class ApiImpl @Inject constructor(
val task = mAuth.signInAnonymously().await()
+ task.user?.let {
+ Timber.d("signInAnonymously:success : $it")
+ }
+
if (null != mAuth.currentUser) {
// Sign in success, update UI with the signed-in user's information
Timber.d("signInAnonymously:success")
diff --git a/app/src/main/java/com/riders/thelab/data/remote/dto/artist/Artist.kt b/app/src/main/java/com/riders/thelab/data/remote/dto/artist/Artist.kt
index 289efa02..1ef3f827 100644
--- a/app/src/main/java/com/riders/thelab/data/remote/dto/artist/Artist.kt
+++ b/app/src/main/java/com/riders/thelab/data/remote/dto/artist/Artist.kt
@@ -3,7 +3,7 @@ package com.riders.thelab.data.remote.dto.artist
import android.os.Parcelable
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
-import kotlinx.android.parcel.Parcelize
+import kotlinx.parcelize.Parcelize
@Parcelize
@JsonClass(generateAdapter = true)
diff --git a/app/src/main/java/com/riders/thelab/data/remote/rest/WeatherRestClient.kt b/app/src/main/java/com/riders/thelab/data/remote/rest/WeatherRestClient.kt
index 1288d819..f68a19cd 100644
--- a/app/src/main/java/com/riders/thelab/data/remote/rest/WeatherRestClient.kt
+++ b/app/src/main/java/com/riders/thelab/data/remote/rest/WeatherRestClient.kt
@@ -27,7 +27,7 @@ class WeatherRestClient {
.addInterceptor(Interceptor { chain: Interceptor.Chain ->
val original = chain.request()
val originalHttpUrl = original.url
- var url: HttpUrl? = null
+ var url: HttpUrl?
// Request customization: add request headers
url = originalHttpUrl.newBuilder()
diff --git a/app/src/main/java/com/riders/thelab/ui/base/SimpleActivity.kt b/app/src/main/java/com/riders/thelab/ui/base/SimpleActivity.kt
index 1b83eb97..e7a03124 100644
--- a/app/src/main/java/com/riders/thelab/ui/base/SimpleActivity.kt
+++ b/app/src/main/java/com/riders/thelab/ui/base/SimpleActivity.kt
@@ -1,6 +1,5 @@
package com.riders.thelab.ui.base
-import android.view.View
import androidx.appcompat.app.AppCompatActivity
import com.google.android.material.appbar.MaterialToolbar
@@ -21,6 +20,6 @@ class SimpleActivity : AppCompatActivity() {
ab.title = title
if (subTitle != null) ab.subtitle = subTitle
}
- toolbar.setNavigationOnClickListener { view: View? -> onBackPressed() }
+ toolbar.setNavigationOnClickListener { onBackPressed() }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/riders/thelab/ui/bluetooth/BluetoothActivity.kt b/app/src/main/java/com/riders/thelab/ui/bluetooth/BluetoothActivity.kt
index 6271592c..b41738eb 100644
--- a/app/src/main/java/com/riders/thelab/ui/bluetooth/BluetoothActivity.kt
+++ b/app/src/main/java/com/riders/thelab/ui/bluetooth/BluetoothActivity.kt
@@ -2,6 +2,7 @@ package com.riders.thelab.ui.bluetooth
import android.bluetooth.BluetoothAdapter
import android.bluetooth.BluetoothDevice
+import android.bluetooth.BluetoothManager
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
@@ -17,8 +18,6 @@ import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import com.riders.thelab.R
-import com.riders.thelab.core.utils.UIManager
-import com.riders.thelab.data.local.bean.SnackBarType
import com.riders.thelab.databinding.ActivityBluetoothBinding
import timber.log.Timber
@@ -33,6 +32,7 @@ class BluetoothActivity : AppCompatActivity(),
private val mViewModel: BluetoothViewModel by viewModels()
+ private lateinit var bluetoothManager: BluetoothManager
private lateinit var bluetoothDevicesSearchList: ArrayList
@@ -145,32 +145,19 @@ class BluetoothActivity : AppCompatActivity(),
_viewBinding = ActivityBluetoothBinding.inflate(layoutInflater)
setContentView(binding.root)
+ /* Source : https://stackoverflow.com/questions/69122978/what-do-i-use-now-that-bluetoothadapter-getdefaultadapter-is-deprecated*/
+ bluetoothManager = getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
+
bluetoothDevicesSearchList = mutableListOf() as ArrayList
- binding.switchBluetooth.setOnCheckedChangeListener(this)
- binding.btnDiscovery.setOnClickListener(this)
+ setListeners()
initViewModelsObservers()
initSwitch()
initButton()
- val pairedDevices = BluetoothAdapter.getDefaultAdapter().bondedDevices
- if (pairedDevices.size > 0) {
-
- val boundedDevices: ArrayList = mutableListOf() as ArrayList
-
- for (d in pairedDevices) {
- val deviceName = d.name
- val macAddress = d.address
- Timber.i("paired device: $deviceName at $macAddress")
- // do what you need/want this these list items
-
- boundedDevices.add(deviceName)
- }
-
- bindListView(binding.lvBoundedDevices, boundedDevices)
- }
+ mViewModel.fetchBoundedDevices(bluetoothManager)
}
override fun onResume() {
@@ -201,7 +188,7 @@ class BluetoothActivity : AppCompatActivity(),
override fun onStop() {
super.onStop()
- mViewModel.stopDiscovery()
+ mViewModel.stopDiscovery(bluetoothManager)
}
override fun onDestroy() {
@@ -213,6 +200,11 @@ class BluetoothActivity : AppCompatActivity(),
unregisterReceiver(receiver)
}
+ private fun setListeners() {
+ binding.switchBluetooth.setOnCheckedChangeListener(this)
+ binding.btnDiscovery.setOnClickListener(this)
+ }
+
private fun initViewModelsObservers() {
mViewModel.getBluetoothEnabled().observe(this, {
Timber.d("getBluetoothEnabled().observe : $it")
@@ -232,16 +224,27 @@ class BluetoothActivity : AppCompatActivity(),
it
)
})
+
+ mViewModel.getBoundedDevices().observe(this, {
+ if (it.isEmpty()) {
+ Timber.e("Bluetooth bounded devices size = 0")
+
+ } else {
+ bindListView(binding.lvBoundedDevices, it)
+ }
+ })
}
private fun initSwitch() {
binding.switchBluetooth.text =
- if (!mViewModel.getBluetoothState()) getString(R.string.bluetooth_off) else getString(R.string.bluetooth_on)
- binding.switchBluetooth.isChecked = mViewModel.getBluetoothState()
+ if (!mViewModel.getBluetoothState(bluetoothManager)) getString(R.string.bluetooth_off) else getString(
+ R.string.bluetooth_on
+ )
+ binding.switchBluetooth.isChecked = mViewModel.getBluetoothState(bluetoothManager)
}
private fun initButton() {
- val isBluetoothEnabled = mViewModel.getBluetoothState()
+ val isBluetoothEnabled = mViewModel.getBluetoothState(bluetoothManager)
changeButton(
if (!isBluetoothEnabled) getString(R.string.bluetooth_unable_to_discover) else getString(
R.string.bluetooth_start_discovery
@@ -274,7 +277,7 @@ class BluetoothActivity : AppCompatActivity(),
override fun onCheckedChanged(buttonView: CompoundButton?, isChecked: Boolean) {
if (binding.switchBluetooth.isShown) {
- mViewModel.setBluetooth(isChecked)
+ mViewModel.setBluetooth(bluetoothManager, isChecked)
}
}
@@ -282,14 +285,12 @@ class BluetoothActivity : AppCompatActivity(),
when (view?.id) {
R.id.btn_discovery -> {
- val bluetoothAdapter: BluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
-
- if (!bluetoothAdapter.isEnabled) {
+ if (!bluetoothManager.adapter.isEnabled) {
Timber.e("Bluetooth not enable cannot start discovery")
} else {
- if (!bluetoothAdapter.isDiscovering) {
- bluetoothAdapter.startDiscovery()
+ if (!bluetoothManager.adapter.isDiscovering) {
+ bluetoothManager.adapter.startDiscovery()
changeButton(
getString(R.string.bluetooth_cancel_discovery),
ContextCompat.getDrawable(
@@ -300,7 +301,7 @@ class BluetoothActivity : AppCompatActivity(),
)
binding.progressSearchedDevices.visibility = View.VISIBLE
} else {
- bluetoothAdapter.cancelDiscovery()
+ bluetoothManager.adapter.cancelDiscovery()
changeButton(
getString(R.string.bluetooth_start_discovery),
ContextCompat.getDrawable(
diff --git a/app/src/main/java/com/riders/thelab/ui/bluetooth/BluetoothViewModel.kt b/app/src/main/java/com/riders/thelab/ui/bluetooth/BluetoothViewModel.kt
index e8c1aa0c..7527b224 100644
--- a/app/src/main/java/com/riders/thelab/ui/bluetooth/BluetoothViewModel.kt
+++ b/app/src/main/java/com/riders/thelab/ui/bluetooth/BluetoothViewModel.kt
@@ -1,47 +1,69 @@
package com.riders.thelab.ui.bluetooth
-import android.bluetooth.BluetoothAdapter
+import android.bluetooth.BluetoothManager
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
+import timber.log.Timber
class BluetoothViewModel : ViewModel() {
private val isBluetoothEnabled: MutableLiveData = MutableLiveData()
-
+ private val boundedDevices: MutableLiveData> = MutableLiveData()
fun getBluetoothEnabled(): LiveData {
return isBluetoothEnabled
}
- fun setBluetooth(enable: Boolean) {
- val bluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
- val isEnabled = bluetoothAdapter.isEnabled
+ fun getBoundedDevices(): LiveData> {
+ return boundedDevices
+ }
+
+ fun setBluetooth(bluetoothManager: BluetoothManager, enable: Boolean) {
+
+ val isEnabled = bluetoothManager.adapter.isEnabled
if (enable && !isEnabled) {
- isBluetoothEnabled.value = bluetoothAdapter.enable()
+ isBluetoothEnabled.value = bluetoothManager.adapter.enable()
} else if (!enable && isEnabled) {
- isBluetoothEnabled.value = bluetoothAdapter.disable()
+ isBluetoothEnabled.value = bluetoothManager.adapter.disable()
}
// No need to change bluetooth state
// isBluetoothEnabled.value = true
}
- fun getBluetoothState(): Boolean {
- val bluetoothAdapter: BluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
- return bluetoothAdapter.isEnabled
+ fun getBluetoothState(bluetoothManager: BluetoothManager): Boolean {
+ return bluetoothManager.adapter.isEnabled
}
- fun startDiscovery() {
- val bluetoothAdapter: BluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
-
- if (!bluetoothAdapter.isDiscovering) {
- bluetoothAdapter.startDiscovery()
+ fun startDiscovery(bluetoothManager: BluetoothManager) {
+ if (!bluetoothManager.adapter.isDiscovering) {
+ bluetoothManager.adapter.startDiscovery()
}
}
- fun stopDiscovery() {
- val bluetoothAdapter: BluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
- bluetoothAdapter.cancelDiscovery()
+ fun stopDiscovery(bluetoothManager: BluetoothManager) {
+ if (bluetoothManager.adapter.isDiscovering)
+ bluetoothManager.adapter.cancelDiscovery()
+ }
+
+ fun fetchBoundedDevices(bluetoothManager: BluetoothManager) {
+ val pairedDevices = bluetoothManager.adapter.bondedDevices
+ if (pairedDevices.size > 0) {
+
+ val boundedDevicesToReturn: ArrayList =
+ mutableListOf() as ArrayList
+
+ for (d in pairedDevices) {
+ val deviceName = d.name
+ val macAddress = d.address
+ Timber.i("paired device: $deviceName at $macAddress")
+ // do what you need/want this these list items
+
+ boundedDevicesToReturn.add(deviceName)
+ }
+
+ boundedDevices.value = boundedDevicesToReturn
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/riders/thelab/ui/builtin/BuiltInBrowserActivity.kt b/app/src/main/java/com/riders/thelab/ui/builtin/BuiltInBrowserActivity.kt
index a93354b6..3e430164 100644
--- a/app/src/main/java/com/riders/thelab/ui/builtin/BuiltInBrowserActivity.kt
+++ b/app/src/main/java/com/riders/thelab/ui/builtin/BuiltInBrowserActivity.kt
@@ -81,7 +81,7 @@ class BuiltInBrowserActivity : AppCompatActivity() {
viewBinding.contentBuiltInBrowser.browserWebView.clearHistory()
viewBinding.contentBuiltInBrowser.browserWebView.settings.javaScriptEnabled = true
viewBinding.contentBuiltInBrowser.browserWebView.isHorizontalScrollBarEnabled = false
- viewBinding.contentBuiltInBrowser.browserWebView.setOnTouchListener { view: View?, event: MotionEvent ->
+ viewBinding.contentBuiltInBrowser.browserWebView.setOnTouchListener { _: View?, event: MotionEvent ->
if (event.pointerCount > 1) {
//Multi touch detected
return@setOnTouchListener true
diff --git a/app/src/main/java/com/riders/thelab/ui/builtin/BuiltInWebViewActivity.kt b/app/src/main/java/com/riders/thelab/ui/builtin/BuiltInWebViewActivity.kt
index 640f5f24..c7b6b78e 100644
--- a/app/src/main/java/com/riders/thelab/ui/builtin/BuiltInWebViewActivity.kt
+++ b/app/src/main/java/com/riders/thelab/ui/builtin/BuiltInWebViewActivity.kt
@@ -6,7 +6,6 @@ import android.os.Bundle
import android.text.TextUtils
import android.view.MotionEvent
import android.view.View
-import android.view.View.OnTouchListener
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.appcompat.app.AppCompatActivity
@@ -81,7 +80,7 @@ class BuiltInWebViewActivity : AppCompatActivity() {
viewBinding.contentBuiltInWebview.builtInWebView.clearHistory()
viewBinding.contentBuiltInWebview.builtInWebView.settings.javaScriptEnabled = true
viewBinding.contentBuiltInWebview.builtInWebView.isHorizontalScrollBarEnabled = false
- viewBinding.contentBuiltInWebview.builtInWebView.setOnTouchListener(OnTouchListener { v: View?, event: MotionEvent ->
+ viewBinding.contentBuiltInWebview.builtInWebView.setOnTouchListener { _: View?, event: MotionEvent ->
if (event.pointerCount > 1) {
//Multi touch detected
true
@@ -92,7 +91,7 @@ class BuiltInWebViewActivity : AppCompatActivity() {
event.setLocation(m_downX, event.y)
}
false
- })
+ }
}
private fun renderPost() {
diff --git a/app/src/main/java/com/riders/thelab/ui/contacts/ContactDetailActivity.kt b/app/src/main/java/com/riders/thelab/ui/contacts/ContactDetailActivity.kt
index eac9474a..e97a3d2c 100644
--- a/app/src/main/java/com/riders/thelab/ui/contacts/ContactDetailActivity.kt
+++ b/app/src/main/java/com/riders/thelab/ui/contacts/ContactDetailActivity.kt
@@ -24,33 +24,38 @@ class ContactDetailActivity : AppCompatActivity() {
private var mContext: Context? = null
+ private var _viewBinding: ActivityContactsDetailBinding? = null
+
+ // This property is only valid between onCreateView and
+ // onDestroyView.
+ private val binding get() = _viewBinding!!
+
var itemNameDetail: String? = null
var itemSurnameDetail: String? = null
var itemEmailDetail: String? = null
var itemImage: String? = null
- lateinit var viewBinding: ActivityContactsDetailBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- viewBinding = ActivityContactsDetailBinding.inflate(layoutInflater)
- setContentView(viewBinding.root)
+ _viewBinding = ActivityContactsDetailBinding.inflate(layoutInflater)
+ setContentView(binding.root)
mContext = this
getBundle()
- ViewCompat.setTransitionName(viewBinding.appBarLayout, "icon")
+ ViewCompat.setTransitionName(binding.appBarLayout, "icon")
supportPostponeEnterTransition()
/*setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);*/
- setSupportActionBar(viewBinding.contactDetailToolbar)
+ setSupportActionBar(binding.contactDetailToolbar)
supportActionBar!!.setDisplayHomeAsUpEnabled(true)
- viewBinding.contactDetailCollapsingToolbar.title = itemNameDetail
- viewBinding.contactDetailCollapsingToolbar.setExpandedTitleColor(
+ binding.contactDetailCollapsingToolbar.title = itemNameDetail
+ binding.contactDetailCollapsingToolbar.setExpandedTitleColor(
ContextCompat.getColor(
this,
R.color.transparent
@@ -58,8 +63,8 @@ class ContactDetailActivity : AppCompatActivity() {
)
// getSupportActionBar().setTitle(itemNameDetail);
- viewBinding.appBarLayout.setExpanded(true)
- viewBinding.appBarLayout.addOnOffsetChangedListener(object : OnOffsetChangedListener {
+ binding.appBarLayout.setExpanded(true)
+ binding.appBarLayout.addOnOffsetChangedListener(object : OnOffsetChangedListener {
var isShow = false
var scrollRange = -1
override fun onOffsetChanged(appBarLayout: AppBarLayout, verticalOffset: Int) {
@@ -67,16 +72,22 @@ class ContactDetailActivity : AppCompatActivity() {
scrollRange = appBarLayout.totalScrollRange
}
if (scrollRange + verticalOffset == 0) {
- viewBinding.contactDetailCollapsingToolbar.title = itemNameDetail
+ binding.contactDetailCollapsingToolbar.title = itemNameDetail
isShow = true
} else if (isShow) {
- viewBinding.contactDetailCollapsingToolbar.title = " "
+ binding.contactDetailCollapsingToolbar.title = " "
isShow = false
}
}
})
}
+ override fun onDestroy() {
+ super.onDestroy()
+ Timber.e("onDestroy()")
+ _viewBinding = null
+ }
+
private fun getBundle() {
val bundle = intent.extras
if (null == bundle) {
@@ -90,7 +101,7 @@ class ContactDetailActivity : AppCompatActivity() {
}
private fun setViews() {
- viewBinding.tvNameDetail.text = itemNameDetail
- viewBinding.tvEmailDetail.text = itemEmailDetail
+ binding.tvNameDetail.text = itemNameDetail
+ binding.tvEmailDetail.text = itemEmailDetail
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/riders/thelab/ui/contacts/ContactViewModel.kt b/app/src/main/java/com/riders/thelab/ui/contacts/ContactViewModel.kt
index 0b6a4dd2..f39956a8 100644
--- a/app/src/main/java/com/riders/thelab/ui/contacts/ContactViewModel.kt
+++ b/app/src/main/java/com/riders/thelab/ui/contacts/ContactViewModel.kt
@@ -1,6 +1,5 @@
package com.riders.thelab.ui.contacts
-
import android.content.Intent
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
diff --git a/app/src/main/java/com/riders/thelab/ui/contacts/ContactsActivity.kt b/app/src/main/java/com/riders/thelab/ui/contacts/ContactsActivity.kt
index 559927b4..339a8bf3 100644
--- a/app/src/main/java/com/riders/thelab/ui/contacts/ContactsActivity.kt
+++ b/app/src/main/java/com/riders/thelab/ui/contacts/ContactsActivity.kt
@@ -24,26 +24,29 @@ import timber.log.Timber
import java.util.*
@AndroidEntryPoint
-class ContactsActivity : AppCompatActivity(), ContactsClickListener,
- RecyclerItemTouchHelperListener {
+class ContactsActivity
+ : AppCompatActivity(), ContactsClickListener, RecyclerItemTouchHelperListener {
- lateinit var viewBinding: ActivityContactsBinding
- private var searchView: SearchView? = null
+ private var _viewBinding: ActivityContactsBinding? = null
- private var mAdapter: ContactsAdapter? = null
+ // This property is only valid between onCreateView and
+ // onDestroyView.
+ private val binding get() = _viewBinding!!
- private val mContactViewModel: ContactViewModel by viewModels()
+ private var searchView: SearchView? = null
+ private val mContactViewModel: ContactViewModel by viewModels()
private var contactList: List? = null
+ private var mAdapter: ContactsAdapter? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- viewBinding = ActivityContactsBinding.inflate(layoutInflater)
- setContentView(viewBinding.root)
+ _viewBinding = ActivityContactsBinding.inflate(layoutInflater)
+ setContentView(binding.root)
- setSupportActionBar(viewBinding.toolbar)
+ setSupportActionBar(binding.toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)
@@ -57,7 +60,7 @@ class ContactsActivity : AppCompatActivity(), ContactsClickListener,
mContactViewModel
.getNoContactFound()
.observe(this, {
- viewBinding.noContactFoundLayoutContainer.layoutNoContactsFound.visibility =
+ binding.noContactFoundLayoutContainer.layoutNoContactsFound.visibility =
View.VISIBLE
})
@@ -80,9 +83,9 @@ class ContactsActivity : AppCompatActivity(), ContactsClickListener,
)
val linearLayoutManager = LinearLayoutManager(this@ContactsActivity)
- viewBinding.contactsLayoutContainer.rvContacts.layoutManager = linearLayoutManager
- viewBinding.contactsLayoutContainer.rvContacts.itemAnimator = DefaultItemAnimator()
- viewBinding.contactsLayoutContainer.rvContacts.adapter = mAdapter
+ binding.contactsLayoutContainer.rvContacts.layoutManager = linearLayoutManager
+ binding.contactsLayoutContainer.rvContacts.itemAnimator = DefaultItemAnimator()
+ binding.contactsLayoutContainer.rvContacts.adapter = mAdapter
// adding item touch helper
// only ItemTouchHelper.LEFT added to detect Right to Left swipe
@@ -91,10 +94,10 @@ class ContactsActivity : AppCompatActivity(), ContactsClickListener,
val itemTouchHelperCallback: ItemTouchHelper.SimpleCallback =
RecyclerItemTouchHelper(0, ItemTouchHelper.LEFT, this)
ItemTouchHelper(itemTouchHelperCallback)
- .attachToRecyclerView(viewBinding.contactsLayoutContainer.rvContacts)
+ .attachToRecyclerView(binding.contactsLayoutContainer.rvContacts)
})
- viewBinding.noContactFoundLayoutContainer.btnAddNewContact.setOnClickListener {
+ binding.noContactFoundLayoutContainer.btnAddNewContact.setOnClickListener {
Navigator(this).callAddContactActivity()
}
}
@@ -163,6 +166,12 @@ class ContactsActivity : AppCompatActivity(), ContactsClickListener,
}
}
+ override fun onDestroy() {
+ super.onDestroy()
+ Timber.e("onDestroy()")
+ _viewBinding = null
+ }
+
override fun onContactItemCLickListener(item: Contact, position: Int) {
Timber.d("contact %s clicked", item.toString())
@@ -173,19 +182,19 @@ class ContactsActivity : AppCompatActivity(), ContactsClickListener,
if (viewHolder is ContactsViewHolder) {
// get the removed item name to display it in snack bar
- val name: String? = contactList?.get(viewHolder.getAdapterPosition())?.name
+ val name: String? = contactList?.get(viewHolder.absoluteAdapterPosition)?.name
// backup of removed item for undo purpose
- val deletedItem: Contact? = contactList?.get(viewHolder.getAdapterPosition())
- val deletedIndex = viewHolder.getAdapterPosition()
+ val deletedItem: Contact? = contactList?.get(viewHolder.absoluteAdapterPosition)
+ val deletedIndex = viewHolder.absoluteAdapterPosition
// remove the item from recycler view
- mAdapter!!.removeItem(viewHolder.getAdapterPosition())
+ mAdapter!!.removeItem(viewHolder.absoluteAdapterPosition)
// showing snack bar with Undo option
UIManager.showActionInSnackBar(
this,
- viewBinding.coordinator,
+ binding.coordinator,
"$name removed from cart!",
SnackBarType.WARNING,
"UNDO"
@@ -197,6 +206,4 @@ class ContactsActivity : AppCompatActivity(), ContactsClickListener,
}
}
}
-
-
}
\ No newline at end of file
diff --git a/app/src/main/java/com/riders/thelab/ui/contacts/ContactsAdapter.kt b/app/src/main/java/com/riders/thelab/ui/contacts/ContactsAdapter.kt
index 7321d96c..b2a6c204 100644
--- a/app/src/main/java/com/riders/thelab/ui/contacts/ContactsAdapter.kt
+++ b/app/src/main/java/com/riders/thelab/ui/contacts/ContactsAdapter.kt
@@ -2,7 +2,6 @@ package com.riders.thelab.ui.contacts
import android.content.Context
import android.view.LayoutInflater
-import android.view.View
import android.view.ViewGroup
import android.widget.Filter
import android.widget.Filterable
@@ -32,10 +31,10 @@ class ContactsAdapter(
val item = contactListFiltered!![position]
holder.bindData(item)
- holder.viewBinding.cvContactItem.setOnClickListener { view: View? ->
+ holder.viewBinding.cvContactItem.setOnClickListener {
listener.onContactItemCLickListener(
item,
- holder.adapterPosition
+ holder.absoluteAdapterPosition
)
}
}
@@ -61,8 +60,8 @@ class ContactsAdapter(
// name match condition. this might differ depending on your requirement
// here we are looking for name or phone number match
- if (row.name.toLowerCase(Locale.ROOT)
- .contains(charString.toLowerCase(Locale.ROOT))
+ if (row.name.lowercase()
+ .contains(charString.lowercase())
|| row.email.contains(charSequence)
) {
filteredList.add(row)
diff --git a/app/src/main/java/com/riders/thelab/ui/contacts/RecyclerItemTouchHelper.kt b/app/src/main/java/com/riders/thelab/ui/contacts/RecyclerItemTouchHelper.kt
index ac8be09f..ba49a99a 100644
--- a/app/src/main/java/com/riders/thelab/ui/contacts/RecyclerItemTouchHelper.kt
+++ b/app/src/main/java/com/riders/thelab/ui/contacts/RecyclerItemTouchHelper.kt
@@ -72,7 +72,7 @@ class RecyclerItemTouchHelper constructor(
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
- listener!!.onSwiped(viewHolder, direction, viewHolder.adapterPosition)
+ listener!!.onSwiped(viewHolder, direction, viewHolder.absoluteAdapterPosition)
}
override fun convertToAbsoluteDirection(flags: Int, layoutDirection: Int): Int {
diff --git a/app/src/main/java/com/riders/thelab/ui/deviceinformation/DeviceInfoViewModel.kt b/app/src/main/java/com/riders/thelab/ui/deviceinformation/DeviceInfoViewModel.kt
index 43f3b3a8..a0d0a445 100644
--- a/app/src/main/java/com/riders/thelab/ui/deviceinformation/DeviceInfoViewModel.kt
+++ b/app/src/main/java/com/riders/thelab/ui/deviceinformation/DeviceInfoViewModel.kt
@@ -22,6 +22,8 @@ class DeviceInfoViewModel : ViewModel() {
//Retrieve Screen's height and width
val metrics = DisplayMetrics()
+
+ @Suppress("DEPRECATION")
activity.windowManager.defaultDisplay.getMetrics(metrics)
val mDeviceInfo = DeviceInformation(
diff --git a/app/src/main/java/com/riders/thelab/ui/download/DownloadActivity.kt b/app/src/main/java/com/riders/thelab/ui/download/DownloadActivity.kt
index 83e13606..1376baec 100644
--- a/app/src/main/java/com/riders/thelab/ui/download/DownloadActivity.kt
+++ b/app/src/main/java/com/riders/thelab/ui/download/DownloadActivity.kt
@@ -6,6 +6,7 @@ import android.view.MenuItem
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
+import androidx.lifecycle.lifecycleScope
import com.riders.thelab.R
import com.riders.thelab.data.local.model.Download
import com.riders.thelab.databinding.ActivityDownloadBinding
@@ -98,7 +99,7 @@ class DownloadActivity
@DelicateCoroutinesApi
private fun downloadFile() {
- GlobalScope.launch {
+ lifecycleScope.launch(coroutineContext) {
try {
supervisorScope {
mViewModel.downloadFile()
diff --git a/app/src/main/java/com/riders/thelab/ui/filterlistview/FilterListViewActivity.kt b/app/src/main/java/com/riders/thelab/ui/filterlistview/FilterListViewActivity.kt
index 3dc8a42c..ee3cbcfd 100644
--- a/app/src/main/java/com/riders/thelab/ui/filterlistview/FilterListViewActivity.kt
+++ b/app/src/main/java/com/riders/thelab/ui/filterlistview/FilterListViewActivity.kt
@@ -16,19 +16,22 @@ import java.util.*
@AndroidEntryPoint
class FilterListViewActivity : AppCompatActivity(), TextWatcher {
- var mWorldPopulationList: ArrayList? = null
- lateinit var adapter: FilterListViewAdapter
-
- lateinit var viewBinding: ActivityFilterListviewBinding
+ private var _viewBinding: ActivityFilterListviewBinding? = null
+ // This property is only valid between onCreateView and
+ // onDestroyView.
+ private val binding get() = _viewBinding!!
private val mFilterViewModel: FilterListViewModel by viewModels()
+ var mWorldPopulationList: ArrayList? = null
+ lateinit var adapter: FilterListViewAdapter
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- viewBinding = ActivityFilterListviewBinding.inflate(layoutInflater)
- setContentView(viewBinding.root)
+ _viewBinding = ActivityFilterListviewBinding.inflate(layoutInflater)
+ setContentView(binding.root)
setAdapter()
@@ -40,10 +43,10 @@ class FilterListViewActivity : AppCompatActivity(), TextWatcher {
adapter = FilterListViewAdapter(this, list as MutableList)
// Binds the Adapter to the ListView
- viewBinding.lvFilterListview.adapter = adapter
+ binding.lvFilterListview.adapter = adapter
// Capture Text in EditText
- viewBinding.etFilterListviewSearch.addTextChangedListener(this)
+ binding.etFilterListviewSearch.addTextChangedListener(this)
})
}
@@ -56,6 +59,13 @@ class FilterListViewActivity : AppCompatActivity(), TextWatcher {
return true
}
+ override fun onDestroy() {
+ super.onDestroy()
+ Timber.e("onDestroy()")
+ _viewBinding = null
+ }
+
+
private fun setAdapter() {
mFilterViewModel.generatePopulationList()
}
@@ -67,8 +77,7 @@ class FilterListViewActivity : AppCompatActivity(), TextWatcher {
}
override fun afterTextChanged(s: Editable?) {
- val text: String =
- viewBinding.etFilterListviewSearch.text.toString().toLowerCase(Locale.getDefault())
+ val text: String = binding.etFilterListviewSearch.text.toString().lowercase()
adapter.filter(text)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/riders/thelab/ui/filterlistview/FilterListViewAdapter.kt b/app/src/main/java/com/riders/thelab/ui/filterlistview/FilterListViewAdapter.kt
index 73e54e20..f6652164 100644
--- a/app/src/main/java/com/riders/thelab/ui/filterlistview/FilterListViewAdapter.kt
+++ b/app/src/main/java/com/riders/thelab/ui/filterlistview/FilterListViewAdapter.kt
@@ -9,8 +9,6 @@ import android.widget.BaseAdapter
import com.google.android.material.textview.MaterialTextView
import com.riders.thelab.R
import com.riders.thelab.data.local.model.WorldPopulation
-import java.util.*
-import kotlin.collections.ArrayList
class FilterListViewAdapter(context: Context, worldPopulationList: MutableList) :
@@ -42,31 +40,33 @@ class FilterListViewAdapter(context: Context, worldPopulationList: MutableList(R.id.notify_me).setOnClickListener { view: View? ->
+ findViewById(R.id.notify_me).setOnClickListener {
startService(
Intent(
this@FloatingViewActivity,
diff --git a/app/src/main/java/com/riders/thelab/ui/googledrive/GoogleDriveActivity.kt b/app/src/main/java/com/riders/thelab/ui/googledrive/GoogleDriveActivity.kt
index 6e39bc69..f4822ad1 100644
--- a/app/src/main/java/com/riders/thelab/ui/googledrive/GoogleDriveActivity.kt
+++ b/app/src/main/java/com/riders/thelab/ui/googledrive/GoogleDriveActivity.kt
@@ -5,6 +5,7 @@ import android.content.IntentSender
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.lifecycleScope
import com.google.android.gms.auth.GoogleAuthException
import com.google.android.gms.auth.api.signin.GoogleSignIn
import com.google.android.gms.auth.api.signin.GoogleSignInClient
@@ -14,7 +15,6 @@ import com.google.android.gms.common.GoogleApiAvailability
import com.google.android.gms.common.api.GoogleApiClient
import com.google.android.gms.common.api.Scope
import com.google.android.gms.common.api.internal.OnConnectionFailedListener
-import com.google.api.client.extensions.android.http.AndroidHttp
import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow
@@ -175,6 +175,8 @@ class GoogleDriveActivity
// From the GoogleSignInClient object we can get the signInIntent
// which we can use in startActivityForResult to trigger the login flow
val signInIntent = mGoogleSignInClient?.signInIntent
+
+ @Suppress("DEPRECATION")
startActivityForResult(signInIntent, CONST_SIGN_IN)
}
}
@@ -242,7 +244,7 @@ class GoogleDriveActivity
// and GoogleAccountCredential as parameters
return Drive
.Builder(
- AndroidHttp.newCompatibleTransport(),
+ NetHttpTransport.Builder().build(),
JacksonFactory.getDefaultInstance(),
credential
)
@@ -264,11 +266,11 @@ class GoogleDriveActivity
private fun accessDriveFiles() {
Timber.i("accessDriveFiles()")
checkLastSignedInAccount()?.let { googleDriveService ->
- GlobalScope.launch(Dispatchers.IO) {
+ lifecycleScope.launch(Dispatchers.IO) {
try {
Timber.d("googleDriveService.files()")
- var pageToken: String? = null
+ var pageToken: String?
do {
val result: FileList = googleDriveService.files().list().apply {
@@ -293,6 +295,7 @@ class GoogleDriveActivity
ex.printStackTrace()
withContext(Dispatchers.Main) {
+ @Suppress("DEPRECATION")
startActivityForResult(ex.intent, REQUEST_SIGN_IN)
}
} catch (transientEx: IOException) {
diff --git a/app/src/main/java/com/riders/thelab/ui/googlesignin/GoogleSignInActivity.kt b/app/src/main/java/com/riders/thelab/ui/googlesignin/GoogleSignInActivity.kt
index e41a0d8b..a8ee0550 100644
--- a/app/src/main/java/com/riders/thelab/ui/googlesignin/GoogleSignInActivity.kt
+++ b/app/src/main/java/com/riders/thelab/ui/googlesignin/GoogleSignInActivity.kt
@@ -64,6 +64,7 @@ class GoogleSignInActivity : AppCompatActivity(), View.OnClickListener {
// If the GoogleSignInOptions only asks for IDToken and/or profile and/or email then no
// consent screen will be shown here.
val signInIntent: Intent = mGoogleSignInClient?.signInIntent!!
+ @Suppress("DEPRECATION")
startActivityForResult(signInIntent, RC_GET_TOKEN)
}
@@ -85,6 +86,7 @@ class GoogleSignInActivity : AppCompatActivity(), View.OnClickListener {
try {
val account = completedTask.getResult(ApiException::class.java)
val idToken = account.idToken
+ Timber.d("Token fetched : $idToken")
// TODO(developer): send ID Token to server and validate
updateUI(account)
@@ -110,6 +112,7 @@ class GoogleSignInActivity : AppCompatActivity(), View.OnClickListener {
@Deprecated("")
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ @Suppress("DEPRECATION")
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == RC_GET_TOKEN) {
// [START get_id_token]
diff --git a/app/src/main/java/com/riders/thelab/ui/locationonmaps/LocationOnMapsActivity.kt b/app/src/main/java/com/riders/thelab/ui/locationonmaps/LocationOnMapsActivity.kt
index fc3ac5aa..ae8159d2 100644
--- a/app/src/main/java/com/riders/thelab/ui/locationonmaps/LocationOnMapsActivity.kt
+++ b/app/src/main/java/com/riders/thelab/ui/locationonmaps/LocationOnMapsActivity.kt
@@ -21,6 +21,7 @@ import com.google.android.gms.common.api.ApiException
import com.google.android.gms.common.api.CommonStatusCodes
import com.google.android.gms.common.api.ResolvableApiException
import com.google.android.gms.location.*
+import com.google.android.gms.location.LocationRequest
import com.google.android.gms.maps.*
import com.google.android.gms.maps.model.LatLng
import com.google.android.gms.maps.model.MarkerOptions
@@ -70,7 +71,7 @@ class LocationOnMapsActivity : AppCompatActivity(), OnMapReadyCallback,
private lateinit var mLocation: Location
private lateinit var mLocationManager: LocationManager
private var mCriteria: Criteria? = null
- private var mProvider = ""
+ private var mProvider: String? = null
// bunch of location related apis
private var mFusedLocationClient: FusedLocationProviderClient? = null
@@ -150,6 +151,7 @@ class LocationOnMapsActivity : AppCompatActivity(), OnMapReadyCallback,
}
}
+ @Suppress("DEPRECATION")
super.onActivityResult(requestCode, resultCode, data)
}
@@ -308,6 +310,7 @@ class LocationOnMapsActivity : AppCompatActivity(), OnMapReadyCallback,
}
}
mRequestingLocationUpdates = false
+ @Suppress("DEPRECATION")
mLocationRequest = LocationRequest()
mLocationRequest!!.interval = UPDATE_INTERVAL_IN_MILLISECONDS
mLocationRequest!!.fastestInterval = FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS
@@ -340,14 +343,14 @@ class LocationOnMapsActivity : AppCompatActivity(), OnMapReadyCallback,
labLocationManager.showSettingsAlert()
} else {
try {
- mLocation = mLocationManager.getLastKnownLocation(mProvider)!!
+ mLocation = mLocationManager.getLastKnownLocation(mProvider!!)!!
} catch (e: SecurityException) {
e.printStackTrace()
}
onLocationChanged(mLocation)
try {
mLocationManager.requestLocationUpdates(
- mProvider,
+ mProvider!!,
20000,
0f,
this
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 cf2afe2a..da24c1df 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
@@ -186,7 +186,6 @@ class MainActivity : AppCompatActivity(),
super.onPause()
}
- @DelicateCoroutinesApi
override fun onResume() {
super.onResume()
Timber.i("onResume()")
@@ -234,6 +233,7 @@ class MainActivity : AppCompatActivity(),
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ @Suppress("DEPRECATION")
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == Activity.RESULT_OK && requestCode == GPS_REQUEST) {
isGPS = true // flag maintain before get location
@@ -389,7 +389,7 @@ class MainActivity : AppCompatActivity(),
GlobalScope.launch(Dispatchers.Main) {
Timber.d("resetProgressBars()")
- binding.includeToolbarLayout?.llProgressBarContainer?.children?.let {
+ binding.includeToolbarLayout?.llProgressBarContainer?.children?.let { it ->
val size = it.count() - 1
for (i in size downTo 0) {
@@ -401,9 +401,9 @@ class MainActivity : AppCompatActivity(),
progressBar.progress = 100
- for (j in 100 downTo 0) {
- progressBar.progress = j
- delay(20)
+ (100 downTo 0).forEach { percent ->
+ progressBar.progress = percent
+ delay(15)
}
}
}
@@ -717,6 +717,7 @@ class MainActivity : AppCompatActivity(),
Timber.d("toggleWifi()")
if (LabCompatibilityManager.isAndroid10()) {
val panelIntent = Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY)
+ @Suppress("DEPRECATION")
startActivityForResult(panelIntent, 0)
} else {
// use previous solution, add appropriate permissions to AndroidManifest file (see answers above)
@@ -727,6 +728,7 @@ class MainActivity : AppCompatActivity(),
Timber.d("(this.applicationContext.getSystemService(Context.WIFI_SERVICE) as? WifiManager) $isWifiEnabled")
Timber.d("This should activate wifi")
+ @Suppress("DEPRECATION")
isWifiEnabled = true
UIManager.updateToolbarIcon(
@@ -739,6 +741,7 @@ class MainActivity : AppCompatActivity(),
Timber.d("(this.applicationContext.getSystemService(Context.WIFI_SERVICE) as? WifiManager) $isWifiEnabled")
Timber.d("This should disable wifi")
+ @Suppress("DEPRECATION")
isWifiEnabled = false
UIManager.updateToolbarIcon(
@@ -748,6 +751,7 @@ class MainActivity : AppCompatActivity(),
R.drawable.ic_wifi_off
)
}
+ @Suppress("DEPRECATION")
this.isWifiEnabled = !isWifiEnabled
}
}
diff --git a/app/src/main/java/com/riders/thelab/ui/mainactivity/MainActivityAdapter.kt b/app/src/main/java/com/riders/thelab/ui/mainactivity/MainActivityAdapter.kt
index d6fa7ba7..1bc3b0b7 100644
--- a/app/src/main/java/com/riders/thelab/ui/mainactivity/MainActivityAdapter.kt
+++ b/app/src/main/java/com/riders/thelab/ui/mainactivity/MainActivityAdapter.kt
@@ -5,7 +5,6 @@ import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import android.view.animation.AnimationUtils
import android.widget.Filter
import android.widget.Filterable
import androidx.recyclerview.widget.RecyclerView
@@ -102,7 +101,7 @@ class MainActivityAdapter constructor(
holder.viewBinding.rowItemCardView?.setOnClickListener { view: View? ->
lastPosition = position
notifyDataSetChanged()
- mListener.onAppItemCLickListener(view!!, item, holder.adapterPosition)
+ mListener.onAppItemCLickListener(view!!, item, holder.absoluteAdapterPosition)
}
}
diff --git a/app/src/main/java/com/riders/thelab/ui/mainactivity/RowAppViewHolder.kt b/app/src/main/java/com/riders/thelab/ui/mainactivity/RowAppViewHolder.kt
index e04ef5ae..f7e81528 100644
--- a/app/src/main/java/com/riders/thelab/ui/mainactivity/RowAppViewHolder.kt
+++ b/app/src/main/java/com/riders/thelab/ui/mainactivity/RowAppViewHolder.kt
@@ -35,7 +35,7 @@ class RowAppViewHolder constructor(
// Load background image
UIManager.loadImage(
context,
- app.appDrawableIcon!!,
+ app.appDrawableIcon,
view as ShapeableImageView
)
}
diff --git a/app/src/main/java/com/riders/thelab/ui/mainactivity/fragment/home/HomeFragment.kt b/app/src/main/java/com/riders/thelab/ui/mainactivity/fragment/home/HomeFragment.kt
index dbca9d79..0ce28475 100644
--- a/app/src/main/java/com/riders/thelab/ui/mainactivity/fragment/home/HomeFragment.kt
+++ b/app/src/main/java/com/riders/thelab/ui/mainactivity/fragment/home/HomeFragment.kt
@@ -21,6 +21,7 @@ import timber.log.Timber
class HomeFragment : BaseFragment() {
private var _viewBinding: FragmentHomeBinding? = null
+
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _viewBinding!!
diff --git a/app/src/main/java/com/riders/thelab/ui/mainactivity/fragment/home/HomeViewModel.kt b/app/src/main/java/com/riders/thelab/ui/mainactivity/fragment/home/HomeViewModel.kt
index 33212635..beb3368b 100644
--- a/app/src/main/java/com/riders/thelab/ui/mainactivity/fragment/home/HomeViewModel.kt
+++ b/app/src/main/java/com/riders/thelab/ui/mainactivity/fragment/home/HomeViewModel.kt
@@ -18,7 +18,7 @@ import java.util.*
import javax.inject.Inject
@HiltViewModel
-class HomeViewModel @Inject constructor(
+class HomeViewModel @Inject constructor(
private val repository: IRepository
) : ViewModel() {
diff --git a/app/src/main/java/com/riders/thelab/ui/mainactivity/fragment/news/NewsFragment.kt b/app/src/main/java/com/riders/thelab/ui/mainactivity/fragment/news/NewsFragment.kt
index 4a72d5a5..35f57ab9 100644
--- a/app/src/main/java/com/riders/thelab/ui/mainactivity/fragment/news/NewsFragment.kt
+++ b/app/src/main/java/com/riders/thelab/ui/mainactivity/fragment/news/NewsFragment.kt
@@ -71,10 +71,12 @@ class NewsFragment : BaseFragment(), View.OnClickListener {
Timber.e("bundle is null - check the data you are trying to pass through please !")
} else {
Timber.e("get the data one by one")
- (extras.getParcelable(EXTRA_APP) as App?)?.let {
- item = it
+ if (null != extras.getParcelable(EXTRA_APP)) {
+ item = extras.getParcelable(EXTRA_APP)
}
-
+ /*(extras.getParcelable(EXTRA_APP) as App?)?.let {
+ item = it
+ }*/
}
}
diff --git a/app/src/main/java/com/riders/thelab/ui/mainactivity/fragment/time/TimeFragment.kt b/app/src/main/java/com/riders/thelab/ui/mainactivity/fragment/time/TimeFragment.kt
index 07d2e9a3..7466fc4a 100644
--- a/app/src/main/java/com/riders/thelab/ui/mainactivity/fragment/time/TimeFragment.kt
+++ b/app/src/main/java/com/riders/thelab/ui/mainactivity/fragment/time/TimeFragment.kt
@@ -4,7 +4,6 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import com.bumptech.glide.Glide
import com.riders.thelab.core.utils.LabCompatibilityManager
diff --git a/app/src/main/java/com/riders/thelab/ui/mainactivity/fragment/weather/WeatherFragment.kt b/app/src/main/java/com/riders/thelab/ui/mainactivity/fragment/weather/WeatherFragment.kt
index d6f1fa61..71d2e5d4 100644
--- a/app/src/main/java/com/riders/thelab/ui/mainactivity/fragment/weather/WeatherFragment.kt
+++ b/app/src/main/java/com/riders/thelab/ui/mainactivity/fragment/weather/WeatherFragment.kt
@@ -6,7 +6,6 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import com.riders.thelab.core.bus.LocationFetchedEvent
import com.riders.thelab.core.utils.LabLocationManager
@@ -36,7 +35,7 @@ class WeatherFragment : BaseFragment(), LocationListener {
}
}
- private var _viewBinding: FragmentWeatherBinding? = null
+ private var _viewBinding: FragmentWeatherBinding? = null
private val binding get() = _viewBinding!!
diff --git a/app/src/main/java/com/riders/thelab/ui/multipane/MoviesAdapter.kt b/app/src/main/java/com/riders/thelab/ui/multipane/MoviesAdapter.kt
index 06ad7516..c09f291e 100644
--- a/app/src/main/java/com/riders/thelab/ui/multipane/MoviesAdapter.kt
+++ b/app/src/main/java/com/riders/thelab/ui/multipane/MoviesAdapter.kt
@@ -31,6 +31,6 @@ class MoviesAdapter(
override fun onBindViewHolder(holder: MultiPaneViewHolder, position: Int) {
val movie: Movie = moviesList[position]
holder.bind(movie)
- holder.viewBinding.cvMultiPaneItem.setOnClickListener { v -> listener.onMovieClicked(movie) }
+ holder.viewBinding.cvMultiPaneItem.setOnClickListener { listener.onMovieClicked(movie) }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/riders/thelab/ui/multipane/MultipaneDetailActivity.kt b/app/src/main/java/com/riders/thelab/ui/multipane/MultipaneDetailActivity.kt
index 07ac4298..6997661e 100644
--- a/app/src/main/java/com/riders/thelab/ui/multipane/MultipaneDetailActivity.kt
+++ b/app/src/main/java/com/riders/thelab/ui/multipane/MultipaneDetailActivity.kt
@@ -6,7 +6,6 @@ import com.bumptech.glide.Glide
import com.riders.thelab.data.local.model.Movie
import com.riders.thelab.databinding.ActivityMultiPaneDetailBinding
import timber.log.Timber
-import java.util.*
class MultipaneDetailActivity : AppCompatActivity() {
companion object {
@@ -28,10 +27,13 @@ class MultipaneDetailActivity : AppCompatActivity() {
Timber.e("Bundle is null exit activity.")
finish()
}
- val movie: Movie? = Objects.requireNonNull(bundle)!!.getParcelable(EXTRA_MOVIE)
- if (movie != null) {
- supportActionBar?.title = movie.title
- setViews(movie)
+
+ bundle?.let {
+ val movie: Movie? = it.getParcelable(EXTRA_MOVIE)
+ if (movie != null) {
+ supportActionBar?.title = movie.title
+ setViews(movie)
+ }
}
}
diff --git a/app/src/main/java/com/riders/thelab/ui/multipane/fragments/MultiPaneDetailFragment.kt b/app/src/main/java/com/riders/thelab/ui/multipane/fragments/MultiPaneDetailFragment.kt
index c28198f4..433374ec 100644
--- a/app/src/main/java/com/riders/thelab/ui/multipane/fragments/MultiPaneDetailFragment.kt
+++ b/app/src/main/java/com/riders/thelab/ui/multipane/fragments/MultiPaneDetailFragment.kt
@@ -17,7 +17,6 @@ import com.riders.thelab.data.local.model.Movie
import com.riders.thelab.databinding.FragmentMultiPaneDetailBinding
import dagger.hilt.android.AndroidEntryPoint
import timber.log.Timber
-import java.util.*
@AndroidEntryPoint
class MultiPaneDetailFragment : Fragment() {
@@ -84,7 +83,7 @@ class MultiPaneDetailFragment : Fragment() {
Timber.e("URL RECEIVE : %s", movie.urlThumbnail)
- Glide.with(Objects.requireNonNull(activity)!!)
+ Glide.with(requireActivity())
.load(movie.urlThumbnail)
.listener(object : RequestListener {
override fun onLoadFailed(
diff --git a/app/src/main/java/com/riders/thelab/ui/recycler/RecyclerViewActivity.kt b/app/src/main/java/com/riders/thelab/ui/recycler/RecyclerViewActivity.kt
index addbe125..91205082 100644
--- a/app/src/main/java/com/riders/thelab/ui/recycler/RecyclerViewActivity.kt
+++ b/app/src/main/java/com/riders/thelab/ui/recycler/RecyclerViewActivity.kt
@@ -111,7 +111,7 @@ class RecyclerViewActivity : AppCompatActivity(), RecyclerClickListener {
}
override fun onDetailClick(artist: Artist, sharedImageView: ShapeableImageView, position: Int) {
- mRecyclerViewModel.onDetailClick(this, artist, sharedImageView, position)
+ mRecyclerViewModel.onDetailClick(this, artist, sharedImageView)
}
override fun onDeleteClick(artist: Artist, position: Int) {
diff --git a/app/src/main/java/com/riders/thelab/ui/recycler/RecyclerViewAdapter.kt b/app/src/main/java/com/riders/thelab/ui/recycler/RecyclerViewAdapter.kt
index 0a5baf63..294a5933 100644
--- a/app/src/main/java/com/riders/thelab/ui/recycler/RecyclerViewAdapter.kt
+++ b/app/src/main/java/com/riders/thelab/ui/recycler/RecyclerViewAdapter.kt
@@ -102,7 +102,7 @@ class RecyclerViewAdapter(
position
)
}
- holder.viewBinding.rowDeleteBtn.setOnClickListener { deleteView: View? ->
+ holder.viewBinding.rowDeleteBtn.setOnClickListener {
Timber.e("setOnClickListener deleteView ")
listener.onDeleteClick(artist, position)
}
diff --git a/app/src/main/java/com/riders/thelab/ui/recycler/RecyclerViewModel.kt b/app/src/main/java/com/riders/thelab/ui/recycler/RecyclerViewModel.kt
index ec5ad9a6..07b74e1f 100644
--- a/app/src/main/java/com/riders/thelab/ui/recycler/RecyclerViewModel.kt
+++ b/app/src/main/java/com/riders/thelab/ui/recycler/RecyclerViewModel.kt
@@ -4,7 +4,6 @@ import android.annotation.SuppressLint
import android.app.Activity
import android.content.Intent
import android.net.Uri
-import android.view.View
import androidx.core.app.ActivityOptionsCompat
import androidx.core.view.ViewCompat
import androidx.lifecycle.LiveData
@@ -116,10 +115,10 @@ class RecyclerViewModel @Inject constructor(
Timber.d("signInAnonymously:success")
- storageReference?.let {
+ storageReference?.let { ref ->
// Create a child reference
// imagesRef now points to "images"
- val imagesRef: StorageReference = it.child("images/artists")
+ val imagesRef: StorageReference = ref.child("images/artists")
imagesRef
.listAll()
@@ -146,7 +145,7 @@ class RecyclerViewModel @Inject constructor(
Timber.d("Links : %s", job.toString())
if (taskResult.result.items.size == job.size) {
withContext(Dispatchers.Main) {
- artistsThumbnails.value = job!!
+ job.also { artistsThumbnails.value = it }
}
}
}
@@ -177,7 +176,7 @@ class RecyclerViewModel @Inject constructor(
Timber.e(throwable)
return@addOnFailureListener
}
- .addOnCompleteListener { taskResult: Task? ->
+ .addOnCompleteListener {
return@addOnCompleteListener
}
@@ -197,7 +196,7 @@ class RecyclerViewModel @Inject constructor(
Timber.e(throwable)
return@addOnFailureListener
}
- .addOnCompleteListener { task1: Task? ->
+ .addOnCompleteListener {
return@addOnCompleteListener
}
}
@@ -228,8 +227,7 @@ class RecyclerViewModel @Inject constructor(
fun onDetailClick(
activity: Activity,
item: Artist,
- sharedImageView: ShapeableImageView,
- position: Int
+ sharedImageView: ShapeableImageView
) {
Timber.d("onDetailClick(item, sharedImageView, position)")
@@ -274,7 +272,7 @@ class RecyclerViewModel @Inject constructor(
activity, activity.findViewById(android.R.id.content),
"$name removed from cart!", SnackBarType.WARNING,
"UNDO"
- ) { view: View? ->
+ ) {
// undo is selected, restore the deleted item
adapter.restoreItem(item, position)
}
diff --git a/app/src/main/java/com/riders/thelab/ui/schedule/ScheduleActivity.kt b/app/src/main/java/com/riders/thelab/ui/schedule/ScheduleActivity.kt
index 3f9492f7..2e71e11b 100644
--- a/app/src/main/java/com/riders/thelab/ui/schedule/ScheduleActivity.kt
+++ b/app/src/main/java/com/riders/thelab/ui/schedule/ScheduleActivity.kt
@@ -23,14 +23,16 @@ import timber.log.Timber
class ScheduleActivity : AppCompatActivity() {
- private lateinit var viewBinding: ActivityScheduleBinding
+ private var _viewBinding: ActivityScheduleBinding? = null
+
+ private val binding get() = _viewBinding!!
private val mViewModel: ScheduleViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- viewBinding = ActivityScheduleBinding.inflate(layoutInflater)
- setContentView(viewBinding.root)
+ _viewBinding = ActivityScheduleBinding.inflate(layoutInflater)
+ setContentView(binding.root)
mViewModel.getCountDown().observe(
this,
@@ -54,12 +56,12 @@ class ScheduleActivity : AppCompatActivity() {
})
- viewBinding.button.setOnClickListener {
- viewBinding.time.text.toString().isNotBlank().let {
+ binding.button.setOnClickListener {
+ binding.time.text.toString().isNotBlank().let {
if (it)
- mViewModel.startAlert(this, viewBinding.time.text.toString())
+ mViewModel.startAlert(this, binding.time.text.toString())
else UIManager.showCustomToast(
- this,
+ this@ScheduleActivity,
ToastTypeEnum.WARNING,
"Field cannot be empty. Please enter a valid number"
)
@@ -68,6 +70,7 @@ class ScheduleActivity : AppCompatActivity() {
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ @Suppress("DEPRECATION")
super.onActivityResult(requestCode, resultCode, data)
if (ScheduleAlarmReceiver.REQUEST_CODE == resultCode) {
Timber.e("result code caught !!!!");
@@ -111,20 +114,22 @@ class ScheduleActivity : AppCompatActivity() {
override fun onDestroy() {
mViewModel.unbindService(this)
super.onDestroy()
+
+ _viewBinding = null
}
private fun showCountDownView() {
- viewBinding.llDelayTimeContainer.visibility = View.VISIBLE
+ binding.llDelayTimeContainer.visibility = View.VISIBLE
}
private fun hideCountDownView() {
- viewBinding.llDelayTimeContainer.visibility = View.GONE
+ binding.llDelayTimeContainer.visibility = View.GONE
}
@SuppressLint("SetTextI18n")
fun updateContDownUI(millisUntilFinished: Long) {
- runOnUiThread { viewBinding.tvDelayTime.text = "" + millisUntilFinished }
+ runOnUiThread { binding.tvDelayTime.text = "" + millisUntilFinished }
}
////////////////////////////
diff --git a/app/src/main/java/com/riders/thelab/ui/songplayer/SongPlayerActivity.kt b/app/src/main/java/com/riders/thelab/ui/songplayer/SongPlayerActivity.kt
index 6b04ca7d..14377570 100644
--- a/app/src/main/java/com/riders/thelab/ui/songplayer/SongPlayerActivity.kt
+++ b/app/src/main/java/com/riders/thelab/ui/songplayer/SongPlayerActivity.kt
@@ -11,8 +11,6 @@ import android.os.Bundle
import android.os.Handler
import android.os.IBinder
import android.support.v4.media.session.MediaControllerCompat
-import android.support.v4.media.session.MediaSessionCompat
-import android.support.v4.media.session.PlaybackStateCompat
import android.view.MenuItem
import android.view.View
import android.widget.SeekBar
@@ -20,8 +18,6 @@ import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.constraintlayout.motion.widget.MotionLayout
import androidx.core.animation.addListener
-import androidx.core.app.NotificationCompat
-import androidx.core.app.NotificationManagerCompat
import androidx.core.view.marginTop
import androidx.interpolator.view.animation.LinearOutSlowInInterpolator
import androidx.media.session.MediaButtonReceiver
@@ -36,7 +32,6 @@ import com.riders.thelab.R
import com.riders.thelab.core.service.MusicMediaPlaybackService
import com.riders.thelab.core.utils.LabNotificationManager
import com.riders.thelab.core.utils.SongsManager
-import com.riders.thelab.core.utils.UIManager
import com.riders.thelab.data.local.model.music.SongModel
import com.riders.thelab.databinding.ActivitySongPlayerBinding
import com.riders.thelab.utils.Constants
@@ -57,6 +52,7 @@ class SongPlayerActivity : AppCompatActivity(),
get() = Dispatchers.Main + Job()
private var _viewBinding: ActivitySongPlayerBinding? = null
+
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _viewBinding!!
@@ -67,11 +63,11 @@ class SongPlayerActivity : AppCompatActivity(),
private lateinit var mp: MediaPlayer
// Handler to update UI timer, progress bar etc,.
- private var mHandler: Handler? = Handler()
+ private var mHandler: Handler? = null
private var songManager: SongsManager? = null
- private val seekForwardTime = 5000 // 5000 milliseconds
+ // private val seekForwardTime = 5000 // 5000 milliseconds
- private val seekBackwardTime = 5000 // 5000 milliseconds
+ // private val seekBackwardTime = 5000 // 5000 milliseconds
private var currentSongIndex = 0
private val isShuffle = false
@@ -86,6 +82,30 @@ class SongPlayerActivity : AppCompatActivity(),
private lateinit var mAdapter: SongPlayerAdapter
+ /**
+ * Background Runnable thread
+ */
+ private val mUpdateTimeTask: Runnable = object : Runnable {
+ override fun run() {
+ val totalDuration = mp.duration.toLong()
+ val currentDuration = mp.currentPosition.toLong()
+
+ // Displaying Total Duration time
+ //songTotalDurationLabel.setText("" + utils.milliSecondsToTimer(totalDuration))
+ // Displaying time completed playing
+ //songCurrentDurationLabel.setText("" + utils.milliSecondsToTimer(currentDuration))
+
+ // Updating progress bar
+ val progress = SongPlayerUtils.getProgressPercentage(currentDuration, totalDuration)
+ //Log.d("Progress", ""+progress);
+ if (_viewBinding != null) binding.songProgressBar.progress = progress
+
+ @Suppress("DEPRECATION")
+ mHandler = Handler()
+ // Running this thread after 100 milliseconds
+ mHandler?.postDelayed(this, 100)
+ }
+ }
private lateinit var controller: MediaControllerCompat
private lateinit var mServiceMusic: MusicMediaPlaybackService
@@ -133,6 +153,7 @@ class SongPlayerActivity : AppCompatActivity(),
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ @Suppress("DEPRECATION")
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == 100) {
@@ -415,118 +436,6 @@ class SongPlayerActivity : AppCompatActivity(),
binding.cvSongPlayer.isClickable = true
mAdapter.setClickable(true)
}
-
- }
-
- @SuppressLint("NewApi")
- private fun displaySessionNotification(songModel: SongModel) {
- Timber.d("displaySessionNotification()")
-
- // Given a media session and its context (usually the component containing the session)
- val mediaSession: MediaSessionCompat = SongPlayerUtils.createMediaSession(this, mp)
-
- // Create a NotificationCompat.Builder
-
- // Get the session's metadata
- // var mediaSession: MediaSessionCompat = MediaSessionCompat(this, TAG)
- controller = SongPlayerUtils.createMediaController(mediaSession)
- /*val controlsCallback: MediaControllerCompat.Callback =
- object : MediaControllerCompat.Callback() {
- override fun onPlaybackStateChanged(state: PlaybackStateCompat?) {
- super.onPlaybackStateChanged(state)
-
- when (state?.state?.toLong()) {
- PlaybackState.ACTION_PLAY -> {
- Timber.d("controlsCallback - PlaybackState.ACTION_PLAY")
- }
- PlaybackState.ACTION_PAUSE -> {
- Timber.e("controlsCallback - PlaybackState.ACTION_PAUSE")
- }
- }
- }
- }*/
- //controller.registerCallback(controlsCallback)
-
- val mediaMetadata = controller.metadata
- val description = mediaMetadata?.description
-
-
- val notification =
- NotificationCompat.Builder(this, Constants.NOTIFICATION_MUSIC_CHANNEL_ID).apply {
-
- // Add the metadata for the currently playing track
- setContentTitle(description?.title)
- setContentText(description?.subtitle)
- setSubText(description?.description)
- setLargeIcon(description?.iconBitmap)
-
- // Enable launching the player by clicking the notification
- setContentIntent(controller.sessionActivity)
-
- // Stop the service when the notification is swiped away
- setDeleteIntent(
- MediaButtonReceiver.buildMediaButtonPendingIntent(
- this@SongPlayerActivity,
- PlaybackStateCompat.ACTION_STOP
- )
- )
-
- // Show controls on lock screen even when user hides sensitive content.
- setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
-
- // Add an app icon and set its accent color
- // Be careful about the color
- setSmallIcon(R.drawable.ic_music)
-
- // Add a pause button
- addAction(
- NotificationCompat.Action(
- R.drawable.ic_pause,
- getString(R.string.action_pause),
- MediaButtonReceiver.buildMediaButtonPendingIntent(
- this@SongPlayerActivity,
- PlaybackStateCompat.ACTION_PLAY_PAUSE
- )
- )
- )
-
-
- // Add media control buttons that invoke intents in your media service
- //.addAction(R.drawable.ic_previous, "Previous", prevPendingIntent) // #0
- //.addAction(R.drawable.ic_pause, "Pause", pausePendingIntent) // #1
- //.addAction(R.drawable.ic_next, "Next", nextPendingIntent) // #2
- // Apply the media style template
- setStyle(
- // Take advantage of MediaStyle features
- androidx.media.app.NotificationCompat.MediaStyle()
- .setShowActionsInCompactView(0 /* #1: pause button */)
- .setMediaSession(mediaSession.sessionToken)
-
- // Add a cancel button
- .setShowCancelButton(true)
- .setCancelButtonIntent(
- MediaButtonReceiver.buildMediaButtonPendingIntent(
- this@SongPlayerActivity,
- PlaybackStateCompat.ACTION_STOP
- )
- )
- )
- setContentTitle(songModel.name)
- setContentText(songModel.path)
- setLargeIcon(
- UIManager.getDrawable(
- this@SongPlayerActivity,
- R.drawable.logo_colors
- )!!
- )
- }
-
- with(NotificationManagerCompat.from(this)) {
- // notificationId is a unique int for each notification that you must define
- notify(Constants.NOTIFICATION_MUSIC_ID, notification.build())
- // Provide a unique integer for the "notificationId" of each notification.
- mServiceMusic.startForeground(Constants.NOTIFICATION_MUSIC_ID, notification.build())
- }
}
/**
@@ -536,28 +445,6 @@ class SongPlayerActivity : AppCompatActivity(),
mHandler?.postDelayed(mUpdateTimeTask, 100)
}
- /**
- * Background Runnable thread
- */
- private val mUpdateTimeTask: Runnable = object : Runnable {
- override fun run() {
- val totalDuration = mp.duration.toLong()
- val currentDuration = mp.currentPosition.toLong()
-
- // Displaying Total Duration time
- //songTotalDurationLabel.setText("" + utils.milliSecondsToTimer(totalDuration))
- // Displaying time completed playing
- //songCurrentDurationLabel.setText("" + utils.milliSecondsToTimer(currentDuration))
-
- // Updating progress bar
- val progress = SongPlayerUtils.getProgressPercentage(currentDuration, totalDuration)
- //Log.d("Progress", ""+progress);
- if (_viewBinding != null) binding.songProgressBar.progress = progress
-
- // Running this thread after 100 milliseconds
- mHandler?.postDelayed(this, 100)
- }
- }
override fun onSongClick(view: View, item: SongModel) {
Timber.d("onFileClick() - $item")
@@ -573,7 +460,7 @@ class SongPlayerActivity : AppCompatActivity(),
toggleAnimation(view)
}
- R.id.cv_song_player -> {
+ R.id.tv_song_path -> {
if (!isToggle)
toggleAnimation(view)
}
@@ -650,7 +537,6 @@ class SongPlayerActivity : AppCompatActivity(),
}
override fun onStopTrackingTouch(seekBar: SeekBar?) {
-
mHandler?.removeCallbacks(mUpdateTimeTask)
val totalDuration = mp.duration
val currentPosition: Int =
diff --git a/app/src/main/java/com/riders/thelab/ui/songplayer/SongPlayerAdapter.kt b/app/src/main/java/com/riders/thelab/ui/songplayer/SongPlayerAdapter.kt
index 0705ed87..a8f17047 100644
--- a/app/src/main/java/com/riders/thelab/ui/songplayer/SongPlayerAdapter.kt
+++ b/app/src/main/java/com/riders/thelab/ui/songplayer/SongPlayerAdapter.kt
@@ -19,7 +19,7 @@ class SongPlayerAdapter(
private var lastClickedPosition = -1
// This keeps track of the currently selected position
- var selectedPosition by Delegates.observable(-1) { property, oldPos, newPos ->
+ var selectedPosition by Delegates.observable(-1) { _, oldPos, newPos ->
if (newPos in fileList.indices) {
notifyItemChanged(oldPos)
notifyItemChanged(newPos)
diff --git a/app/src/main/java/com/riders/thelab/ui/songplayer/SongPlayerUtils.kt b/app/src/main/java/com/riders/thelab/ui/songplayer/SongPlayerUtils.kt
index e1ea76bf..c664aea9 100644
--- a/app/src/main/java/com/riders/thelab/ui/songplayer/SongPlayerUtils.kt
+++ b/app/src/main/java/com/riders/thelab/ui/songplayer/SongPlayerUtils.kt
@@ -83,9 +83,11 @@ class SongPlayerUtils {
}
mediaSession.setCallback(callback)
+ @Suppress("DEPRECATION")
mediaSession.setFlags(
MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS or MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS
)
+
mediaSession.setPlaybackState(
PlaybackStateCompat.Builder()
.setState(
diff --git a/app/src/main/java/com/riders/thelab/ui/speechtotext/SpeechToTextActivity.kt b/app/src/main/java/com/riders/thelab/ui/speechtotext/SpeechToTextActivity.kt
index 943fca0c..17343155 100644
--- a/app/src/main/java/com/riders/thelab/ui/speechtotext/SpeechToTextActivity.kt
+++ b/app/src/main/java/com/riders/thelab/ui/speechtotext/SpeechToTextActivity.kt
@@ -241,8 +241,6 @@ class SpeechToTextActivity : AppCompatActivity(), RecognitionListener {
override fun onResults(results: Bundle?) {
Timber.e("onResults()")
- var result = ""
-
val matches = results!!.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION)
for (element in matches!!) Timber.d(element)
@@ -260,7 +258,7 @@ class SpeechToTextActivity : AppCompatActivity(), RecognitionListener {
hideEq()
}
- result = matches[0]
+ val result: String = matches[0]
viewBinding.speechInputTextView.text = result
}
diff --git a/app/src/main/java/com/riders/thelab/ui/splashscreen/SplashScreenActivity.kt b/app/src/main/java/com/riders/thelab/ui/splashscreen/SplashScreenActivity.kt
index 7c7943ea..7da37173 100644
--- a/app/src/main/java/com/riders/thelab/ui/splashscreen/SplashScreenActivity.kt
+++ b/app/src/main/java/com/riders/thelab/ui/splashscreen/SplashScreenActivity.kt
@@ -15,6 +15,7 @@ import android.view.WindowManager
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.core.animation.addListener
+import androidx.lifecycle.lifecycleScope
import com.riders.thelab.R
import com.riders.thelab.core.utils.LabAnimationsManager
import com.riders.thelab.core.utils.LabCompatibilityManager
@@ -24,12 +25,18 @@ import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.*
import timber.log.Timber
import java.util.concurrent.TimeUnit
+import kotlin.coroutines.CoroutineContext
@AndroidEntryPoint
-class SplashScreenActivity : AppCompatActivity(), OnPreparedListener,
+class SplashScreenActivity : AppCompatActivity(),
+ CoroutineScope,
+ OnPreparedListener,
OnCompletionListener {
+ override val coroutineContext: CoroutineContext
+ get() = Dispatchers.Main + Job()
+
companion object {
private const val ANDROID_RES_PATH = "android.resource://"
private const val SEPARATOR = "/"
@@ -226,13 +233,11 @@ class SplashScreenActivity : AppCompatActivity(), OnPreparedListener,
fadeProgressAnimator.start()
}
- @DelicateCoroutinesApi
private fun clearAllAnimations() {
- Timber.d("clearAllAnimations()")
+ Timber.d("clearAllAnimations() - Use coroutines to clear animations then launch Main Activity")
- Timber.d("Use coroutines to clear animations then launch Main Activity")
// Use coroutines to clear animations then launch Main Activity
- GlobalScope.launch(Dispatchers.Main) {
+ lifecycleScope.launch(coroutineContext) {
Timber.d("Use coroutines to clear animations")
LabAnimationsManager.getInstance().clearAnimations(
versionTextAnimator, fadeProgressAnimator
diff --git a/app/src/main/java/com/riders/thelab/ui/spring/SpringActivity.kt b/app/src/main/java/com/riders/thelab/ui/spring/SpringActivity.kt
index f427fe7a..10273565 100644
--- a/app/src/main/java/com/riders/thelab/ui/spring/SpringActivity.kt
+++ b/app/src/main/java/com/riders/thelab/ui/spring/SpringActivity.kt
@@ -1,5 +1,6 @@
package com.riders.thelab.ui.spring
+import android.animation.ObjectAnimator
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.MenuItem
@@ -8,16 +9,31 @@ import android.view.View
import android.view.View.OnTouchListener
import android.view.ViewGroup.MarginLayoutParams
import android.view.ViewTreeObserver.OnGlobalLayoutListener
+import android.view.animation.BounceInterpolator
import androidx.appcompat.app.AppCompatActivity
import androidx.dynamicanimation.animation.DynamicAnimation
import androidx.dynamicanimation.animation.DynamicAnimation.ViewProperty
+import androidx.dynamicanimation.animation.FloatPropertyCompat
import androidx.dynamicanimation.animation.SpringAnimation
import androidx.dynamicanimation.animation.SpringForce
+import com.riders.thelab.R
import com.riders.thelab.databinding.ActivitySpringBinding
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
+import timber.log.Timber
-class SpringActivity : AppCompatActivity() {
+class SpringActivity : AppCompatActivity(), View.OnClickListener {
- lateinit var viewBinding: ActivitySpringBinding
+ private var _viewBinding: ActivitySpringBinding? = null
+
+ // This property is only valid between onCreateView and
+ // onDestroyView.
+ private val binding get() = _viewBinding!!
+
+ private var isTopAnimationToggle: Boolean = false
+ private var isBottomAnimationToggle: Boolean = false
private var xAnimation: SpringAnimation? = null
private var yAnimation: SpringAnimation? = null
@@ -25,14 +41,13 @@ class SpringActivity : AppCompatActivity() {
private var dX = 0f
private var dY = 0f
-
private val globalLayoutListener = OnGlobalLayoutListener {
xAnimation = createSpringAnimation(
- viewBinding.imageView, DynamicAnimation.X, viewBinding.imageView.getX(),
+ binding.imageView, DynamicAnimation.X, binding.imageView.getX(),
SpringForce.STIFFNESS_MEDIUM, SpringForce.DAMPING_RATIO_HIGH_BOUNCY
)
yAnimation = createSpringAnimation(
- viewBinding.imageView, DynamicAnimation.Y, viewBinding.imageView.getY(),
+ binding.imageView, DynamicAnimation.Y, binding.imageView.getY(),
SpringForce.STIFFNESS_MEDIUM, SpringForce.DAMPING_RATIO_HIGH_BOUNCY
)
}
@@ -51,7 +66,7 @@ class SpringActivity : AppCompatActivity() {
}
MotionEvent.ACTION_MOVE -> {
// a different approach would be to change the view's LayoutParams.
- viewBinding.imageView.animate()
+ binding.imageView.animate()
.x(event.rawX + dX)
.y(event.rawY + dY)
.setDuration(0)
@@ -76,11 +91,13 @@ class SpringActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
+ Timber.d("onCreate()")
+ _viewBinding = ActivitySpringBinding.inflate(layoutInflater)
+ setContentView(binding.root)
- viewBinding = ActivitySpringBinding.inflate(layoutInflater)
- setContentView(viewBinding.root)
+ setListeners()
- viewBinding.imageView.viewTreeObserver.addOnGlobalLayoutListener(globalLayoutListener)
+ binding.imageView.viewTreeObserver.addOnGlobalLayoutListener(globalLayoutListener)
chainedSpringAnimation()
}
@@ -94,7 +111,38 @@ class SpringActivity : AppCompatActivity() {
}
- fun createSpringAnimation(
+ override fun onBackPressed() {
+ Timber.d("onBackPressed()")
+
+ if (isTopAnimationToggle) {
+ revertTopAnimation()
+ setListeners()
+ return
+ }
+
+ if (isBottomAnimationToggle) {
+ revertBottomAnimation()
+ setListeners()
+ return
+ }
+
+
+ super.onBackPressed()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ Timber.e("onDestroy()")
+ _viewBinding = null
+ }
+
+ private fun setListeners() {
+ Timber.d("setListeners()")
+ binding.clTop.setOnClickListener(this)
+ binding.clBottom.setOnClickListener(this)
+ }
+
+ private fun createSpringAnimation(
view: View?,
property: ViewProperty?,
finalPosition: Float,
@@ -112,75 +160,76 @@ class SpringActivity : AppCompatActivity() {
@SuppressLint("ClickableViewAccessibility")
private fun chainedSpringAnimation() {
+ Timber.d("chainedSpringAnimation()")
val xAnimation2 = createSpringAnimation(
- viewBinding.imageView2, DynamicAnimation.X, viewBinding.imageView2.getX(),
+ binding.imageView2, DynamicAnimation.X, binding.imageView2.x,
SpringForce.STIFFNESS_MEDIUM, SpringForce.DAMPING_RATIO_HIGH_BOUNCY
)
val yAnimation2 = createSpringAnimation(
- viewBinding.imageView2, DynamicAnimation.Y, viewBinding.imageView2.getY(),
+ binding.imageView2, DynamicAnimation.Y, binding.imageView2.y,
SpringForce.STIFFNESS_MEDIUM, SpringForce.DAMPING_RATIO_HIGH_BOUNCY
)
val xAnimation3 = createSpringAnimation(
- viewBinding.imageView3, DynamicAnimation.X, viewBinding.imageView3.getX(),
+ binding.imageView3, DynamicAnimation.X, binding.imageView3.x,
SpringForce.STIFFNESS_MEDIUM, SpringForce.DAMPING_RATIO_HIGH_BOUNCY
)
val yAnimation3 = createSpringAnimation(
- viewBinding.imageView3, DynamicAnimation.Y, viewBinding.imageView3.getY(),
+ binding.imageView3, DynamicAnimation.Y, binding.imageView3.y,
SpringForce.STIFFNESS_MEDIUM, SpringForce.DAMPING_RATIO_HIGH_BOUNCY
)
val xAnimation4 = createSpringAnimation(
- viewBinding.imageView4, DynamicAnimation.X, viewBinding.imageView4.getX(),
+ binding.imageView4, DynamicAnimation.X, binding.imageView4.x,
SpringForce.STIFFNESS_MEDIUM, SpringForce.DAMPING_RATIO_HIGH_BOUNCY
)
val yAnimation4 = createSpringAnimation(
- viewBinding.imageView4, DynamicAnimation.Y, viewBinding.imageView4.getY(),
+ binding.imageView4, DynamicAnimation.Y, binding.imageView4.y,
SpringForce.STIFFNESS_MEDIUM, SpringForce.DAMPING_RATIO_HIGH_BOUNCY
)
val xAnimation5 = createSpringAnimation(
- viewBinding.imageView5, DynamicAnimation.X, viewBinding.imageView5.getX(),
+ binding.imageView5, DynamicAnimation.X, binding.imageView5.x,
SpringForce.STIFFNESS_MEDIUM, SpringForce.DAMPING_RATIO_HIGH_BOUNCY
)
val yAnimation5 = createSpringAnimation(
- viewBinding.imageView5, DynamicAnimation.Y, viewBinding.imageView5.getY(),
+ binding.imageView5, DynamicAnimation.Y, binding.imageView5.y,
SpringForce.STIFFNESS_MEDIUM, SpringForce.DAMPING_RATIO_HIGH_BOUNCY
)
- val imageView2Params = viewBinding.imageView2.getLayoutParams() as MarginLayoutParams
- val imageView3Params = viewBinding.imageView3.getLayoutParams() as MarginLayoutParams
- val imageView4Params = viewBinding.imageView4.getLayoutParams() as MarginLayoutParams
- val imageView5Params = viewBinding.imageView5.getLayoutParams() as MarginLayoutParams
- xAnimation2.addUpdateListener { dynamicAnimation: DynamicAnimation<*>?, v: Float, v1: Float ->
+ val imageView2Params = binding.imageView2.layoutParams as MarginLayoutParams
+ val imageView3Params = binding.imageView3.layoutParams as MarginLayoutParams
+ val imageView4Params = binding.imageView4.layoutParams as MarginLayoutParams
+ val imageView5Params = binding.imageView5.layoutParams as MarginLayoutParams
+ xAnimation2.addUpdateListener { _: DynamicAnimation<*>?, v: Float, _: Float ->
xAnimation3.animateToFinalPosition(
- v + (viewBinding.imageView2.width - viewBinding.imageView3.width) / 2
+ v + (binding.imageView2.width - binding.imageView3.width) / 2
)
}
- yAnimation2.addUpdateListener { dynamicAnimation: DynamicAnimation<*>?, v: Float, v1: Float ->
+ yAnimation2.addUpdateListener { _: DynamicAnimation<*>?, v: Float, _: Float ->
yAnimation3.animateToFinalPosition(
- v + viewBinding.imageView2.height + imageView3Params.topMargin
+ v + binding.imageView2.height + imageView3Params.topMargin
)
}
- xAnimation3.addUpdateListener { dynamicAnimation: DynamicAnimation<*>?, v: Float, v1: Float ->
+ xAnimation3.addUpdateListener { _: DynamicAnimation<*>?, v: Float, _: Float ->
xAnimation4.animateToFinalPosition(
- v + (viewBinding.imageView3.width - viewBinding.imageView4.width) / 2
+ v + (binding.imageView3.width - binding.imageView4.width) / 2
)
}
- yAnimation3.addUpdateListener { dynamicAnimation: DynamicAnimation<*>?, v: Float, v1: Float ->
+ yAnimation3.addUpdateListener { _: DynamicAnimation<*>?, v: Float, _: Float ->
yAnimation4.animateToFinalPosition(
- v + viewBinding.imageView3.height + imageView4Params.topMargin
+ v + binding.imageView3.height + imageView4Params.topMargin
)
}
- xAnimation4.addUpdateListener { dynamicAnimation: DynamicAnimation<*>?, v: Float, v1: Float ->
+ xAnimation4.addUpdateListener { _: DynamicAnimation<*>?, v: Float, _: Float ->
xAnimation5.animateToFinalPosition(
- v + (viewBinding.imageView4.width - viewBinding.imageView5.width) / 2
+ v + (binding.imageView4.width - binding.imageView5.width) / 2
)
}
- yAnimation4.addUpdateListener { dynamicAnimation: DynamicAnimation<*>?, v: Float, v1: Float ->
+ yAnimation4.addUpdateListener { _: DynamicAnimation<*>?, v: Float, _: Float ->
yAnimation5.animateToFinalPosition(
- v + viewBinding.imageView4.height + imageView5Params.topMargin
+ v + binding.imageView4.height + imageView5Params.topMargin
)
}
- viewBinding.imageView.setOnTouchListener { view: View, motionEvent: MotionEvent ->
+ binding.imageView.setOnTouchListener { view: View, motionEvent: MotionEvent ->
when (motionEvent.actionMasked) {
MotionEvent.ACTION_DOWN -> {
dX = view.x - motionEvent.rawX
@@ -196,14 +245,164 @@ class SpringActivity : AppCompatActivity() {
.setDuration(0)
.start()
xAnimation2.animateToFinalPosition(
- newX + (viewBinding.imageView.width - viewBinding.imageView2.width) / 2
+ newX + (binding.imageView.width - binding.imageView2.width) / 2
)
yAnimation2.animateToFinalPosition(
- newY + viewBinding.imageView2.height + imageView2Params.topMargin
+ newY + binding.imageView2.height + imageView2Params.topMargin
)
}
}
true
}
}
+
+
+ override fun onClick(view: View?) {
+ when (view?.id) {
+ R.id.cl_top -> {
+ Timber.d("Click on top then Dismiss bottom")
+ toggleTopAnimation()
+ }
+
+ R.id.cl_bottom -> {
+ Timber.d("Click on bottom then Dismiss top")
+ toggleBottomAnimation()
+ }
+ }
+ }
+
+ private fun removeListeners() {
+ binding.clTop.setOnClickListener(null)
+ binding.clBottom.setOnClickListener(null)
+ }
+
+
+ /**
+ * This function moves the top card view to the center of the screen while fading out the bottom card view
+ * and display the multiple views in full screen
+ */
+ private fun toggleTopAnimation() {
+ Timber.d("toggleTopAnimation()")
+ removeListeners()
+ isTopAnimationToggle = !isTopAnimationToggle
+ startChainedAnimations(R.id.start, R.id.bottom_dismiss_end, R.id.cl_views_container_end)
+ launchAnimations()
+ }
+
+
+ /**
+ * This function moves the bottom card view to the center of the screen while fading out the top card view
+ * and display the dot container in full screen
+ */
+ private fun toggleBottomAnimation() {
+ Timber.d("toggleBottomAnimation()")
+ removeListeners()
+ isBottomAnimationToggle = !isBottomAnimationToggle
+ startChainedAnimations(R.id.start, R.id.top_dismiss_end, R.id.cl_dot_container_end)
+ }
+
+
+ /**
+ * This function should collapse the multiple spring views into the card view
+ * and then display the two buttons
+ */
+ private fun revertTopAnimation() {
+ Timber.d("revertTopAnimation()")
+ startChainedAnimations(R.id.cl_views_container_end, R.id.bottom_dismiss_end, R.id.start)
+ isTopAnimationToggle = !isTopAnimationToggle
+ }
+
+ /**
+ * This function should collapse the dot container view into the card view
+ * and then display the two buttons
+ */
+ private fun revertBottomAnimation() {
+ Timber.d("revertBottomAnimation()")
+ startChainedAnimations(R.id.cl_dot_container_end, R.id.top_dismiss_end, R.id.start)
+ isBottomAnimationToggle = !isBottomAnimationToggle
+ }
+
+
+ /**
+ * Used to run animations avoid code redundancy
+ */
+ private fun startChainedAnimations(
+ idTransitionStart: Int,
+ idTransitionEnd: Int,
+ idOnEndListenerTransitionEnd: Int
+ ) {
+ // Use idTransitionEnd as idOnEndListenerTransitionStart because the end point of the first animation
+ // will be the start point of the end listener animation
+ val idOnEndListenerTransitionStart: Int = idTransitionEnd
+
+ binding.springMotionLayout.setTransition(idTransitionStart, idTransitionEnd)
+ binding.springMotionLayout.transitionToEnd {
+ Runnable {
+ Timber.d("Expand bottom")
+ binding.springMotionLayout.setTransition(
+ idOnEndListenerTransitionStart,
+ idOnEndListenerTransitionEnd
+ )
+ binding.springMotionLayout.transitionToEnd()
+ }.run()
+ }
+ }
+
+
+ private fun launchAnimations() {
+ CoroutineScope(Dispatchers.Main).launch {
+ launch {
+ delay(450)
+ setBounceAnimation(binding.tvTopLeft, "translationY")
+ }
+ launch {
+ delay(750)
+ getSpringAnimation(
+ binding.tvTopRight,
+ SpringAnimation.TRANSLATION_Y,
+ 100f
+ ).start()
+ }
+
+ launch {
+ delay(500)
+ // Translation on bottom left
+ setBounceAnimation(binding.tvBottomLeft, "translationX")
+ }
+ launch {
+ delay(750)
+ // Scale on bottom right
+ getSpringAnimation(binding.tvBottomRight, SpringAnimation.SCALE_X, 0.8f).start()
+ getSpringAnimation(binding.tvBottomRight, SpringAnimation.SCALE_Y, 0.8f).start()
+ }
+ }
+ }
+
+ private fun setBounceAnimation(targetView: View, propertyName: String) {
+ val bounceInterpolator = BounceInterpolator()
+ val anim: ObjectAnimator =
+ ObjectAnimator.ofFloat(targetView, propertyName, 0f, -50f, 50f, 0f)
+ anim.interpolator = bounceInterpolator
+ anim
+ .setDuration(450)
+ .start()
+ }
+
+
+ private fun getSpringAnimation(
+ view: View,
+ springAnimationType: FloatPropertyCompat,
+ finalPosition: Float
+ ): SpringAnimation {
+ val animation = SpringAnimation(view, springAnimationType)
+ // create a spring with desired parameters
+ val spring = SpringForce()
+ spring.finalPosition = finalPosition
+ spring.stiffness = SpringForce.STIFFNESS_MEDIUM // optional
+ spring.dampingRatio = SpringForce.DAMPING_RATIO_HIGH_BOUNCY // optional
+ // set your animation's spring
+ animation.spring = spring
+ return animation
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/riders/thelab/ui/tabs/WorkingFragment.kt b/app/src/main/java/com/riders/thelab/ui/tabs/WorkingFragment.kt
new file mode 100644
index 00000000..e4916874
--- /dev/null
+++ b/app/src/main/java/com/riders/thelab/ui/tabs/WorkingFragment.kt
@@ -0,0 +1,61 @@
+package com.riders.thelab.ui.tabs
+
+import android.annotation.SuppressLint
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import com.riders.thelab.databinding.FragmentOneBinding
+
+// Instances of this class are fragments representing a single
+// object in our collection.
+class WorkingFragment : Fragment() {
+
+ companion object {
+
+ private const val ARG_OBJ = "arg_obj"
+
+ fun newInstance(position: Int): WorkingFragment {
+ val fragment = WorkingFragment()
+ val args = Bundle()
+ args.putInt(ARG_OBJ, position)
+ fragment.arguments = args
+ return fragment
+ }
+ }
+
+ private var _viewBinding: FragmentOneBinding? = null
+
+ // This property is only valid between onCreateView and
+ // onDestroyView.
+ private val binding get() = _viewBinding!!
+
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ _viewBinding = FragmentOneBinding.inflate(inflater, container, false)
+ return binding.root
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ arguments?.let { bundle ->
+ bundle.getInt(ARG_OBJ).let { position ->
+ binding.tv.text = "Position : $position"
+ }
+ }
+
+ }
+
+ override fun onDestroyView() {
+ super.onDestroyView()
+
+ _viewBinding = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/riders/thelab/ui/tabs/WorkingTabsActivity.kt b/app/src/main/java/com/riders/thelab/ui/tabs/WorkingTabsActivity.kt
index 55ad8f79..40c1ae99 100644
--- a/app/src/main/java/com/riders/thelab/ui/tabs/WorkingTabsActivity.kt
+++ b/app/src/main/java/com/riders/thelab/ui/tabs/WorkingTabsActivity.kt
@@ -3,31 +3,35 @@ package com.riders.thelab.ui.tabs
import android.os.Bundle
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
-import androidx.fragment.app.Fragment
-import androidx.fragment.app.FragmentManager
-import androidx.fragment.app.FragmentPagerAdapter
-import androidx.viewpager.widget.ViewPager
+import androidx.viewpager2.widget.ViewPager2
+import com.google.android.material.tabs.TabLayoutMediator
import com.riders.thelab.databinding.ActivityTabsBinding
import com.riders.thelab.ui.tabs.fragment.OneFragment
import com.riders.thelab.ui.tabs.fragment.ThreeFragment
import com.riders.thelab.ui.tabs.fragment.TwoFragment
-import java.util.*
+import timber.log.Timber
class WorkingTabsActivity : AppCompatActivity() {
- lateinit var viewBinding: ActivityTabsBinding
+ private var _viewBinding: ActivityTabsBinding? = null
+
+ // This property is only valid between onCreateView and
+ // onDestroyView.
+ private val binding get() = _viewBinding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- viewBinding = ActivityTabsBinding.inflate(layoutInflater)
- setContentView(viewBinding.root)
+ _viewBinding = ActivityTabsBinding.inflate(layoutInflater)
+ setContentView(binding.root)
- setSupportActionBar(viewBinding.tabToolbar)
+ setSupportActionBar(binding.tabToolbar)
- setupViewPager(viewBinding.tabViewPager)
+ setupViewPager(binding.tabViewPager2)
- viewBinding.tabs.setupWithViewPager(viewBinding.tabViewPager)
+ TabLayoutMediator(binding.tabs, binding.tabViewPager2) { tab, position ->
+ tab.text = "OBJECT ${(position + 1)}"
+ }.attach()
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
@@ -39,39 +43,18 @@ class WorkingTabsActivity : AppCompatActivity() {
return true
}
+ override fun onDestroy() {
+ super.onDestroy()
+ Timber.e("onDestroy()")
+ _viewBinding = null
+ }
+
- private fun setupViewPager(viewPager: ViewPager) {
- val adapter = ViewPagerAdapter(supportFragmentManager)
+ private fun setupViewPager(viewPager: ViewPager2) {
+ val adapter = WorkingTabsAdapter(supportFragmentManager, lifecycle)
adapter.addFragment(OneFragment.newInstance(), "ONE")
adapter.addFragment(TwoFragment.newInstance(), "TWO")
adapter.addFragment(ThreeFragment.newInstance(), "THREE")
viewPager.adapter = adapter
}
-
-
- private class ViewPagerAdapter(manager: FragmentManager?) :
- FragmentPagerAdapter(manager!!) {
-
- private val mFragmentList: MutableList = ArrayList()
- private val mFragmentTitleList: MutableList = ArrayList()
-
- override fun getItem(position: Int): Fragment {
- return mFragmentList[position]
- }
-
- override fun getCount(): Int {
- return mFragmentList.size
- }
-
- fun addFragment(fragment: Fragment, title: String) {
- mFragmentList.add(fragment)
- mFragmentTitleList.add(title)
- }
-
- override fun getPageTitle(position: Int): CharSequence? {
-
- // return null to display only the icon (if there's icons)
- return mFragmentTitleList[position]
- }
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/riders/thelab/ui/tabs/WorkingTabsAdapter.kt b/app/src/main/java/com/riders/thelab/ui/tabs/WorkingTabsAdapter.kt
new file mode 100644
index 00000000..2ac6d7b4
--- /dev/null
+++ b/app/src/main/java/com/riders/thelab/ui/tabs/WorkingTabsAdapter.kt
@@ -0,0 +1,40 @@
+package com.riders.thelab.ui.tabs
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.lifecycle.Lifecycle
+import androidx.viewpager2.adapter.FragmentStateAdapter
+import java.util.*
+
+class WorkingTabsAdapter(manager: FragmentManager, lifecycle: Lifecycle) :
+ FragmentStateAdapter(manager, lifecycle) {
+
+ private val mFragmentList: MutableList = ArrayList()
+ private val mFragmentTitleList: MutableList = ArrayList()
+
+ override fun createFragment(position: Int): Fragment {
+ // Return a NEW fragment instance in createFragment(int)
+ return WorkingFragment.newInstance(position + 1)
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun getItemCount(): Int = 3
+
+ fun getItem(position: Int): Fragment {
+ return mFragmentList[position]
+ }
+
+ fun addFragment(fragment: Fragment, title: String) {
+ mFragmentList.add(fragment)
+ mFragmentTitleList.add(title)
+ }
+
+ fun getPageTitle(position: Int): CharSequence {
+
+ // return null to display only the icon (if there's icons)
+ return mFragmentTitleList[position]
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/riders/thelab/ui/weather/WeatherActivity.kt b/app/src/main/java/com/riders/thelab/ui/weather/WeatherActivity.kt
index d497fe62..d4f94e4d 100644
--- a/app/src/main/java/com/riders/thelab/ui/weather/WeatherActivity.kt
+++ b/app/src/main/java/com/riders/thelab/ui/weather/WeatherActivity.kt
@@ -58,7 +58,7 @@ import kotlin.math.roundToInt
class WeatherActivity : AppCompatActivity(), WeatherClickListener {
private var _viewBinding: ActivityWeatherBinding? = null
-
+
private val binding get() = _viewBinding!!
private val mWeatherViewModel: WeatherViewModel by viewModels()
diff --git a/app/src/main/java/com/riders/thelab/ui/weather/WeatherDownloadWorker.kt b/app/src/main/java/com/riders/thelab/ui/weather/WeatherDownloadWorker.kt
index fe730f3a..267de160 100644
--- a/app/src/main/java/com/riders/thelab/ui/weather/WeatherDownloadWorker.kt
+++ b/app/src/main/java/com/riders/thelab/ui/weather/WeatherDownloadWorker.kt
@@ -130,8 +130,7 @@ class WeatherDownloadWorker @AssistedInject constructor(
CoroutineScope(Dispatchers.IO).launch {
try {
- val job = mRepository.saveCities(dtoCities)
-
+ mRepository.saveCities(dtoCities)
mRepository.insertWeatherData(WeatherData(0, true))
outputData = createOutputData(WORK_RESULT, WORK_SUCCESS)
future!!.set(Result.success(outputData!!))
diff --git a/app/src/main/java/com/riders/thelab/ui/weather/WeatherSearchViewAdapter.kt b/app/src/main/java/com/riders/thelab/ui/weather/WeatherSearchViewAdapter.kt
index 07d22f4d..34f25b7a 100644
--- a/app/src/main/java/com/riders/thelab/ui/weather/WeatherSearchViewAdapter.kt
+++ b/app/src/main/java/com/riders/thelab/ui/weather/WeatherSearchViewAdapter.kt
@@ -15,7 +15,6 @@ import com.riders.thelab.R
import com.riders.thelab.core.utils.LabCompatibilityManager
import com.riders.thelab.data.local.model.weather.CityModel
import com.riders.thelab.utils.Constants
-import java.util.*
@SuppressLint("RestrictedApi")
class WeatherSearchViewAdapter(
@@ -52,15 +51,14 @@ class WeatherSearchViewAdapter(
.load(countryURL)
.into(ivCityFlag)
- view.setOnClickListener { view1: View? ->
+ view.setOnClickListener {
//take next action based user selected item
if (!LabCompatibilityManager.isOreo()) {
if (!mSearchView.isIconified) {
mSearchView.isIconified = true
}
} else {
- Objects.requireNonNull((context as WeatherActivity).supportActionBar)
- ?.collapseActionView()
+ (context as WeatherActivity).supportActionBar?.collapseActionView()
}
mListener.onWeatherItemClicked(CityModel(cursor))
}
diff --git a/app/src/main/java/com/riders/thelab/ui/youtubelike/YoutubeLikeDetailActivity.kt b/app/src/main/java/com/riders/thelab/ui/youtubelike/YoutubeLikeDetailActivity.kt
index 05350cb2..732c1253 100644
--- a/app/src/main/java/com/riders/thelab/ui/youtubelike/YoutubeLikeDetailActivity.kt
+++ b/app/src/main/java/com/riders/thelab/ui/youtubelike/YoutubeLikeDetailActivity.kt
@@ -19,7 +19,6 @@ import com.riders.thelab.data.local.model.Video
import com.riders.thelab.databinding.ActivityYoutubeDetailBinding
import jp.wasabeef.glide.transformations.BlurTransformation
import timber.log.Timber
-import java.util.*
class YoutubeLikeDetailActivity : AppCompatActivity() {
@@ -65,7 +64,7 @@ class YoutubeLikeDetailActivity : AppCompatActivity() {
}
private fun loadContent() {
- Objects.requireNonNull(supportActionBar)?.title = item.name
+ supportActionBar?.title = item.name
//Load the background thumb image
Glide.with(this)
@@ -123,8 +122,7 @@ class YoutubeLikeDetailActivity : AppCompatActivity() {
//il se peut que la palette ne génère pas tous les swatch
if (muted != null) {
//j'utilise getRgb() en tant que couleur de fond de ma toolbar
- Objects.requireNonNull(supportActionBar)
- ?.setBackgroundDrawable(ColorDrawable(muted.rgb))
+ supportActionBar?.setBackgroundDrawable(ColorDrawable(muted.rgb))
}
}
run {
diff --git a/app/src/main/java/com/riders/thelab/ui/youtubelike/YoutubeLikeListAdapter.kt b/app/src/main/java/com/riders/thelab/ui/youtubelike/YoutubeLikeListAdapter.kt
index 6c09816e..7cca6f84 100644
--- a/app/src/main/java/com/riders/thelab/ui/youtubelike/YoutubeLikeListAdapter.kt
+++ b/app/src/main/java/com/riders/thelab/ui/youtubelike/YoutubeLikeListAdapter.kt
@@ -48,7 +48,7 @@ class YoutubeLikeListAdapter(
holder.getNameTextView(),
holder.getDescriptionView(),
itemYoutubeVideo,
- holder.adapterPosition
+ holder.absoluteAdapterPosition
)
}
diff --git a/app/src/main/java/com/riders/thelab/utils/DateTimeUtils.kt b/app/src/main/java/com/riders/thelab/utils/DateTimeUtils.kt
index 78d49e0d..7371b552 100644
--- a/app/src/main/java/com/riders/thelab/utils/DateTimeUtils.kt
+++ b/app/src/main/java/com/riders/thelab/utils/DateTimeUtils.kt
@@ -1,7 +1,6 @@
package com.riders.thelab.utils
import android.annotation.SuppressLint
-import timber.log.Timber
import java.text.SimpleDateFormat
import java.util.*
@@ -45,33 +44,5 @@ class DateTimeUtils {
return if (offset > 0) "$UTC+$offset" // Don't contains "+" sign
else UTC + offset // Already contains "-" sign
}
-
- private fun compareUTC(currentOffsetMillis: Long, targetOffsetMillis: Long) {
-
-
- // Step 1 : get current UTC offset
- val currentUTC = getOffsetTimeZone((TimeZone.getDefault().rawOffset / 1000).toLong())
-
- // Step 2 : calculate mills target offset
- val targetUTC = getOffsetTimeZone(targetOffsetMillis)
-
- // Step 3 : compare target offset with current offset,
- // this will determine final sunrise/sunset times according to user's utc offset
- if (targetUTC < currentUTC) {
- Timber.d("target offset is lower than current, calculated final offset should be currentUTC - targetUTC")
- } else if (targetUTC > currentUTC) {
- Timber.d("target offset is greater than current, calculated final offset should be currentUTC + targetUTC")
- } else if (targetUTC == currentUTC) {
- Timber.d("target offset is equal to current, calculated final offset should be currentUTC = targetUTC")
- }
-
- // if target offset is lower than user's utc offset -> target offset minus user's offset
- // e.g. :
- // - Los Angeles = UTC -8 (18h) --> UTC (0) = (3h)
- // - Paris = UTC +1 (17h) --> UTC (0) = (16h)
- //
- // Calculate Los Angeles UTC(-8) with Paris base UTC (+1),
- // result should be a 9 hours gap between these two
- }
}
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_staggered_layout.xml b/app/src/main/res/drawable/ic_staggered_layout.xml
index aee41f88..45f59424 100644
--- a/app/src/main/res/drawable/ic_staggered_layout.xml
+++ b/app/src/main/res/drawable/ic_staggered_layout.xml
@@ -1,5 +1,10 @@
-
-
+
+
diff --git a/app/src/main/res/drawable/round_corners.xml b/app/src/main/res/drawable/round_corners.xml
index 9d401458..9afa9518 100644
--- a/app/src/main/res/drawable/round_corners.xml
+++ b/app/src/main/res/drawable/round_corners.xml
@@ -3,6 +3,6 @@
xmlns:tools="http://schemas.android.com/tools"
android:shape="rectangle">
-
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index d5fd8eba..c7d0274d 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -12,8 +12,8 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+ android:background="@color/default_dark"
+ app:layoutDescription="@xml/activity_spring_scene"
+ tools:context=".ui.spring.SpringActivity"
+ tools:motionDebug="SHOW_ALL">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_tabs.xml b/app/src/main/res/layout/activity_tabs.xml
index 2a3811b2..11c437a7 100644
--- a/app/src/main/res/layout/activity_tabs.xml
+++ b/app/src/main/res/layout/activity_tabs.xml
@@ -5,7 +5,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
- tools:context=".activities.WorkingTabsActivity">
+ tools:context=".ui.tabs.WorkingTabsActivity">
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/custom_toast_layout.xml b/app/src/main/res/layout/custom_toast_layout.xml
index 324b79a3..aeb73d77 100644
--- a/app/src/main/res/layout/custom_toast_layout.xml
+++ b/app/src/main/res/layout/custom_toast_layout.xml
@@ -4,6 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:id="@+id/cl_custom_layout"
android:padding="8dp"
tools:backgroundTint="@color/adminDashboardSelectedItemAccentTranslucent">
diff --git a/app/src/main/res/layout/fragment_news.xml b/app/src/main/res/layout/fragment_news.xml
index 371160df..8ec7404e 100644
--- a/app/src/main/res/layout/fragment_news.xml
+++ b/app/src/main/res/layout/fragment_news.xml
@@ -14,9 +14,9 @@
diff --git a/app/src/main/res/layout/fragment_one.xml b/app/src/main/res/layout/fragment_one.xml
index 2f496fb3..66cf6b20 100644
--- a/app/src/main/res/layout/fragment_one.xml
+++ b/app/src/main/res/layout/fragment_one.xml
@@ -7,10 +7,12 @@
tools:context=".ui.tabs.fragment.OneFragment">
diff --git a/app/src/main/res/xml/activity_spring_scene.xml b/app/src/main/res/xml/activity_spring_scene.xml
new file mode 100644
index 00000000..cc674a98
--- /dev/null
+++ b/app/src/main/res/xml/activity_spring_scene.xml
@@ -0,0 +1,171 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/xml/song_player_scene.xml b/app/src/main/res/xml/song_player_scene.xml
index e72f87d0..d3a80319 100644
--- a/app/src/main/res/xml/song_player_scene.xml
+++ b/app/src/main/res/xml/song_player_scene.xml
@@ -50,7 +50,6 @@
-