diff --git a/app/src/main/java/es/verdnatura/MobileApplication.kt b/app/src/main/java/es/verdnatura/MobileApplication.kt index f4d9af07..9839df9c 100644 --- a/app/src/main/java/es/verdnatura/MobileApplication.kt +++ b/app/src/main/java/es/verdnatura/MobileApplication.kt @@ -1,8 +1,10 @@ package es.verdnatura +import android.app.Activity import android.app.Application import android.graphics.Color import android.media.MediaPlayer +import android.os.Bundle import android.os.Handler import android.os.Looper import es.verdnatura.dataStore.DataStoreLocal @@ -16,6 +18,7 @@ import es.verdnatura.presentation.common.LoginListener import es.verdnatura.presentation.common.MainActivityListener import es.verdnatura.presentation.common.SignListener import es.verdnatura.presentation.view.component.CustomDialogMainActivity +import es.verdnatura.presentation.view.feature.login.activity.LoginActivity import kotlinx.coroutines.runBlocking import org.koin.android.ext.koin.androidContext import org.koin.core.context.loadKoinModules @@ -78,7 +81,7 @@ class MobileApplication : Application(), InteceptorListener { val restClient = RestClient(this, this) salix = restClient.salixClient - /* registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks { + registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks { override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { } @@ -104,7 +107,7 @@ class MobileApplication : Application(), InteceptorListener { override fun onActivityDestroyed(activity: Activity) { isActivityLoginRunning = false } - })*/ + }) } @@ -127,6 +130,9 @@ class MobileApplication : Application(), InteceptorListener { ) } + fun isLoginRunning(): Boolean { + return isActivityLoginRunning + } override fun onInterceptionResult(visibility: Int) { if (mainActivityListener != null) { handler.post { @@ -149,6 +155,7 @@ class MobileApplication : Application(), InteceptorListener { val settings = this.resources.configuration return settings.locales.get(0).language } + fun clearApplicationData() { try { val cacheDir = this.cacheDir diff --git a/app/src/main/java/es/verdnatura/domain/SalixCallback.kt b/app/src/main/java/es/verdnatura/domain/SalixCallback.kt index eb9624da..97e0984e 100644 --- a/app/src/main/java/es/verdnatura/domain/SalixCallback.kt +++ b/app/src/main/java/es/verdnatura/domain/SalixCallback.kt @@ -1,6 +1,5 @@ package es.verdnatura.domain -import android.app.ActivityManager import android.content.Context import android.content.Intent import com.google.gson.Gson @@ -26,7 +25,7 @@ abstract class SalixCallback(val context: Context) : Callback { var message = JSONObject(response.message()).getString("Message") onError(Error(message)) } else if (response.code() == 401) { - if (!isActivityRunning(context, LoginActivity::class.java)) { + if (!(context as MobileApplication).isLoginRunning()){ val intent = Intent(context, LoginActivity::class.java) intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_NEW_TASK) context.startActivity(intent) @@ -72,7 +71,7 @@ abstract class SalixCallback(val context: Context) : Callback { throw t } - fun isActivityRunning(context: Context, activityClass: Class<*>): Boolean { + /* fun isActivityRunning(context: Context, activityClass: Class<*>): Boolean { val packageName = context.packageName val activityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager val runningActivities = activityManager.getRunningTasks(Int.MAX_VALUE) @@ -84,7 +83,7 @@ abstract class SalixCallback(val context: Context) : Callback { } return false - } + }*/ private fun errorSalixMessage(response: Response): String { diff --git a/app/src/main/java/es/verdnatura/domain/SilexCallback.kt b/app/src/main/java/es/verdnatura/domain/SilexCallback.kt deleted file mode 100644 index 79395a98..00000000 --- a/app/src/main/java/es/verdnatura/domain/SilexCallback.kt +++ /dev/null @@ -1,108 +0,0 @@ -package es.verdnatura.domain - -import android.app.ActivityManager -import android.content.Context -import android.content.Intent -import com.google.gson.Gson -import com.google.gson.JsonObject -import es.verdnatura.presentation.base.nameofFunction -import es.verdnatura.presentation.view.feature.login.activity.LoginActivity -import org.json.JSONObject -import retrofit2.Call -import retrofit2.Callback -import retrofit2.Response -import kotlin.system.exitProcess - - -//Se crea interceptor para así generalizar las respuestas y llamadas, -//si hay respuesta de fallo 555 se llama onError que lanza un error para que se haga el catch() directamente, -//si no queremos que haga el catch tenemos que reescribir la llamada onError en la clase donde se llama o incluso -// lanzar un throw error de nuevo para que vuelva al catch y lo ejecute. -//-> sería válido en el caso que el catch fuera lo general para todos ( por ejemplo un Toast y después realizáramos -//otras acciones. Se reescribiria el método onError en LoginViewModel como: -// do_actions-> Haz acciones del fallo -// throw e -> De esta manera se consigue llegar al catch. El error se propaga a la llamada superior. - -//Falta pasarle al Callback el tipo que queramos y poder lanzar el toast - - -abstract class SilexCallback(val context: Context) : Callback { - - override fun onResponse(call: Call, response: Response) { - if (response.isSuccessful) { - onSuccess(response) - } else { - try { - if (response.code() == 555) { - var message = JSONObject(response.message()).getString("Message") - onError(Error(message)) - } else if (response.code() == 401) { - if (!isActivityRunning(context, LoginActivity::class.java)) { - val intent = Intent(context, LoginActivity::class.java) - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_NEW_TASK) - context.startActivity(intent) - exitProcess(0) - } else { - onError(Error(response.message().toString())) - } - } else { - - onError(Error(errorSalixMessage(response))) - // onError(Error(response.message().toString())) - } - } catch (t: Throwable) { - defaultErrorHandler(t) - } - } - } - - override fun onFailure(call: Call, t: Throwable) { - try { - onError(t) - } catch (t: Throwable) { - defaultErrorHandler(t) - } - } - - private fun defaultErrorHandler(t: Throwable) { - (nameofFunction((this)) + t.message).toast(context) - //(context as MobileApplication).playSoundIsOK(false) - } - - open fun onSuccess(response: Response) { - // (nameofFunction((this)) + context.getString(R.string.operationSuccessful)).toast(context) - //(context as MobileApplication).playSoundIsOK(true) - } - - open fun onError(t: Throwable) { - throw t - } - - fun isActivityRunning(context: Context, activityClass: Class<*>): Boolean { - val packageName = context.packageName - val activityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager - val runningActivities = activityManager.getRunningTasks(Int.MAX_VALUE) - - for (taskInfo in runningActivities) { - if (taskInfo.baseActivity?.className == activityClass.name && taskInfo.topActivity?.packageName == packageName) { - return true - } - } - - return false - } - - private fun errorSalixMessage(response: Response): String { - - val messageResponse = response.errorBody()!!.string() - return try { - - val jsonObject = Gson().fromJson(messageResponse, JsonObject::class.java) - jsonObject?.getAsJsonObject("error")?.get("message")?.asString.toString() - - } catch (ex: Exception) { - response.message() - } - - } -} \ No newline at end of file diff --git a/app/src/main/java/es/verdnatura/presentation/base/BaseActivity.kt b/app/src/main/java/es/verdnatura/presentation/base/BaseActivity.kt index 2db472ff..0b75d2b1 100644 --- a/app/src/main/java/es/verdnatura/presentation/base/BaseActivity.kt +++ b/app/src/main/java/es/verdnatura/presentation/base/BaseActivity.kt @@ -3,7 +3,6 @@ package es.verdnatura.presentation.base import android.Manifest import android.content.Context import android.content.pm.PackageManager -import android.location.LocationRequest import android.os.Bundle import android.os.Looper import android.view.View @@ -17,6 +16,7 @@ import androidx.databinding.ViewDataBinding import com.google.android.gms.location.FusedLocationProviderClient import com.google.android.gms.location.LocationCallback import com.google.android.gms.location.LocationResult +import com.google.android.gms.location.Priority import es.verdnatura.MobileApplication interface LocationUpdateCallback { @@ -35,16 +35,14 @@ abstract class BaseActivity : AppCompatActivity() { var locationUpdateCallback: LocationUpdateCallback? = null protected lateinit var binding: T - private lateinit var fusedLocationClient: com.google.android.gms.location.FusedLocationProviderClient - private val locationRequest: com.google.android.gms.location.LocationRequest = - com.google.android.gms.location.LocationRequest.create().apply { - interval = - 10000 - fastestInterval = - 5000 - priority = - LocationRequest.QUALITY_LOW_POWER - } + private lateinit var fusedLocationClient:FusedLocationProviderClient + private val locationRequest = + com.google.android.gms.location.LocationRequest.Builder( + Priority.PRIORITY_LOW_POWER, + 10000L + ).apply { + setMinUpdateIntervalMillis(5000L) + }.build() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/app/src/main/java/es/verdnatura/presentation/common/UIExtensions.kt b/app/src/main/java/es/verdnatura/presentation/common/UIExtensions.kt index 50187c7e..1a28a6e6 100644 --- a/app/src/main/java/es/verdnatura/presentation/common/UIExtensions.kt +++ b/app/src/main/java/es/verdnatura/presentation/common/UIExtensions.kt @@ -213,7 +213,7 @@ fun PackageManager.getPackageInfoCompat(packageName: String, flags: Int = 0): Pa if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { getPackageInfo(packageName, PackageManager.PackageInfoFlags.of(flags.toLong())) } else { - @Suppress("DEPRECATION") getPackageInfo(packageName, flags) + getPackageInfo(packageName, flags) } fun convertToDateString(date: String?): String? { @@ -221,8 +221,8 @@ fun convertToDateString(date: String?): String? { if (date.isNullOrEmpty()) { return date } - val formatoEntrada = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") // Formato de entrada - val formatoSalida = SimpleDateFormat("yyyy-MM-dd") // Formato de salida + val formatoEntrada = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.getDefault()) // Formato de entrada + val formatoSalida = SimpleDateFormat("yyyy-MM-dd",Locale.getDefault()) // Formato de salida val fechaDate = formatoEntrada.parse(date) // Convertir fecha de String a objeto Date return formatoSalida.format(fechaDate) // Convertir fecha a String con formato deseado } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ImageViewActivity.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ImageViewActivity.kt index 7879a93e..bacdd5bc 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ImageViewActivity.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ImageViewActivity.kt @@ -15,7 +15,7 @@ class ImageViewActivity : BaseActivity(){ binding.imgView.loadUrl(intent.getStringExtra(getString(R.string.url))!!) binding.mainToolbar.backButton.setOnClickListener { - onBackPressed() + finish() } } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/main/activity/MainActivity.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/main/activity/MainActivity.kt index 719580a7..f5663b4f 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/main/activity/MainActivity.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/main/activity/MainActivity.kt @@ -3,7 +3,6 @@ package es.verdnatura.presentation.view.feature.main.activity import android.content.Context import android.content.Intent import android.media.MediaPlayer -import android.net.Uri import android.os.Build import android.util.AttributeSet import android.view.Menu @@ -265,7 +264,7 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL startRepeatingTask( mobileApplication.dataStoreApp.readDataStoreKey(RENEWINTERVAL) ) - if (uriImage != null && uriImage is Uri) { + if (uriImage != null) { onPasillerosItemClickListener( PasillerosItemVO( 30, @@ -820,14 +819,11 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL } getString(R.string.titleUnLoadTruck) -> { - + @Suppress("UNCHECKED_CAST") addFragmentOnTop( LoadUnloadFragment.newInstance( - item.title, "DELIVERED", entryPoint, if (param != null) { - param as ArrayList - } else { - null - } + item.title, "DELIVERED", entryPoint, + param as? ArrayList ), getString(R.string.titleUnLoadTruck), delete = true ) diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/sacador/fragment/showticket/ShowTicketFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/sacador/fragment/showticket/ShowTicketFragment.kt index b3c3e8e8..384b69ab 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/sacador/fragment/showticket/ShowTicketFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/sacador/fragment/showticket/ShowTicketFragment.kt @@ -17,19 +17,28 @@ import es.verdnatura.presentation.view.feature.sacador.model.CollectionVO import es.verdnatura.presentation.view.feature.sacador.model.TicketStateSalix @Suppress("UNUSED_ANONYMOUS_PARAMETER") -class ShowTicketFragment(var menuOrigin: String) : +class ShowTicketFragment() : BaseFragment( ShowTicketViewModel::class ) { - + private var menuOrigin: String? = null private var goBack: Boolean = false private var onCollectionSelectedListener: OnCollectionSelectedListener? = null override fun getLayoutId(): Int = R.layout.fragment_show_ticket private var type = "" private var adapter: TicketLastStateAdapter? = null + constructor(menuOrigin: String) : this() { + this.menuOrigin = menuOrigin + } companion object { - fun newInstance(menuOrigin: String) = ShowTicketFragment(menuOrigin = menuOrigin) + private const val ARG_MENU_ORIGIN = "menu_origin" + + fun newInstance(menuOrigin: String) = ShowTicketFragment().apply { + arguments = Bundle().apply { + putString(ARG_MENU_ORIGIN, menuOrigin) + } + } } override fun onAttach(context: Context) { @@ -56,8 +65,10 @@ class ShowTicketFragment(var menuOrigin: String) : } override fun onCreate(savedInstanceState: Bundle?) { - type = ConstAndValues.VERTICKET + arguments?.let { + menuOrigin = it.getString(ARG_MENU_ORIGIN) + } super.onCreate(savedInstanceState) }