package com.utopiaindustries.qualitycontrol.viewmodels; import android.util.Log; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; import com.utopiaindustries.qualitycontrol.apiservice.ApiService; import com.utopiaindustries.qualitycontrol.apiservice.ApiServiceFactory; import com.utopiaindustries.qualitycontrol.models.QualityControlResponse; import com.utopiaindustries.qualitycontrol.models.QualitySaveResponse; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; public class HomeViewModel extends ViewModel { private MutableLiveData userLiveData; private MutableLiveData errorLiveData; private MutableLiveData isLoading; private ApiService apiService; private final ExecutorService executorService; public HomeViewModel() { apiService = ApiServiceFactory.getApiService(); userLiveData = new MutableLiveData<>(); errorLiveData = new MutableLiveData<>(); isLoading = new MutableLiveData<>(); this.executorService = Executors.newFixedThreadPool(4); } public LiveData getUserLiveData() { return userLiveData; } public LiveData getLoadingState() { return isLoading; } public LiveData getErrorMessage() { return errorLiveData; } /*public void saveQualityControlData(QualityControl qualityControl) { isLoading.setValue(true); apiService.saveQualityControlReport(qualityControl).enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { //Log.e("onResponse: ",""+response); isLoading.setValue(false); if (response.isSuccessful() && response.body() != null) { //Log.e("onResponse-success: ",""+response); userLiveData.setValue(response.body()); } else { errorLiveData.setValue(response.message()); } } @Override public void onFailure(Call call, Throwable t) { //Log.e("onResponse-fail: ",""+t.getMessage()); isLoading.setValue(false); errorLiveData.setValue(t.getMessage()); } }); }*/ public void saveQualityControlData(QualityControl qualityControl) { isLoading.setValue(true); // Notify UI that the task is starting // Execute the task in the background executorService.execute(() -> { try { // Synchronous network call Response response = apiService.saveQualityControlReport(qualityControl).execute(); // Switch to the main thread to update LiveData if (response.isSuccessful() && response.body() != null) { userLiveData.postValue(response.body()); } else { errorLiveData.postValue(response.message()); } } catch (Exception e) { // Handle errors errorLiveData.postValue(e.getMessage()); } finally { // Hide the loading spinner isLoading.postValue(false); } }); } public LiveData getUser() { return userLiveData; } public LiveData getError() { return errorLiveData; } @Override protected void onCleared() { super.onCleared(); // Shut down the executor service to prevent memory leaks executorService.shutdown(); } }