From 85ca15269c09f0b48ff670374e1cb95f0b5b9eaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20S=C3=A1nchez?= Date: Tue, 17 Dec 2024 19:08:13 -0300 Subject: [PATCH] exchange section populated --- .../example/dcav2gui/InstanceInterface.java | 8 +++ .../ui/exchanges/BinanceFragment.java | 4 -- .../ui/exchanges/BinanceViewModel.java | 17 ++----- .../dcav2gui/ui/exchanges/GateioFragment.java | 29 +++++------ .../ui/exchanges/GateioViewModel.java | 50 ++++++++++++++++--- .../dcav2gui/ui/exchanges/KucoinFragment.java | 29 +++++------ .../ui/exchanges/KucoinViewModel.java | 50 ++++++++++++++++--- .../dcav2gui/ui/exchanges/OkxFragment.java | 29 +++++------ .../dcav2gui/ui/exchanges/OkxViewModel.java | 50 ++++++++++++++++--- app/src/main/res/layout/fragment_binance.xml | 20 ++++---- app/src/main/res/layout/fragment_gateio.xml | 29 ++++------- app/src/main/res/layout/fragment_kucoin.xml | 29 ++++------- app/src/main/res/layout/fragment_okx.xml | 29 ++++------- 13 files changed, 228 insertions(+), 145 deletions(-) diff --git a/app/src/main/java/com/example/dcav2gui/InstanceInterface.java b/app/src/main/java/com/example/dcav2gui/InstanceInterface.java index cd07e4a..1750828 100644 --- a/app/src/main/java/com/example/dcav2gui/InstanceInterface.java +++ b/app/src/main/java/com/example/dcav2gui/InstanceInterface.java @@ -644,6 +644,14 @@ public class InstanceInterface { workerDataList.add(workerData); } } + // Sort the list by uptime + workerDataList.sort(new Comparator() { + @Override + public int compare(WorkerData w1, WorkerData w2) { + return Double.compare(w1.getUptime(), w2.getUptime()); + } + }); + return workerDataList; } diff --git a/app/src/main/java/com/example/dcav2gui/ui/exchanges/BinanceFragment.java b/app/src/main/java/com/example/dcav2gui/ui/exchanges/BinanceFragment.java index f679c12..570793b 100644 --- a/app/src/main/java/com/example/dcav2gui/ui/exchanges/BinanceFragment.java +++ b/app/src/main/java/com/example/dcav2gui/ui/exchanges/BinanceFragment.java @@ -8,13 +8,9 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; -import com.example.dcav2gui.R; import com.example.dcav2gui.databinding.FragmentBinanceBinding; import com.example.dcav2gui.ui.exchanges.adapters.WorkerCardAdapter; -import com.example.dcav2gui.ui.exchanges.WorkerData; -import java.io.IOException; -import java.util.List; public class BinanceFragment extends Fragment { diff --git a/app/src/main/java/com/example/dcav2gui/ui/exchanges/BinanceViewModel.java b/app/src/main/java/com/example/dcav2gui/ui/exchanges/BinanceViewModel.java index 52d2b47..61a8ec7 100644 --- a/app/src/main/java/com/example/dcav2gui/ui/exchanges/BinanceViewModel.java +++ b/app/src/main/java/com/example/dcav2gui/ui/exchanges/BinanceViewModel.java @@ -7,17 +7,17 @@ import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; - import com.example.dcav2gui.InstanceInterface; -import com.google.gson.JsonObject; +import com.example.dcav2gui.MainActivity; +import com.example.dcav2gui.ui.settings.SettingsData; import java.io.IOException; -import java.util.ArrayList; import java.util.List; public class BinanceViewModel extends AndroidViewModel { - private MutableLiveData> workerDataList; + private final MutableLiveData> workerDataList; + SettingsData settingsData = MainActivity.getGlobalSettings(); public BinanceViewModel(@NonNull Application application) { super(application); @@ -30,21 +30,14 @@ public class BinanceViewModel extends AndroidViewModel { if (workerDataList.getValue() == null) { fetchWorkerData(); } - //System.err.println(workerDataList.getValue().get(0).toString()); return workerDataList; } private void fetchWorkerData() { - // Simulate fetching data from a source - //List data = new ArrayList<>(); - // Add WorkerData objects to the list - //workerDataList.setValue(data); - - // Schedule a periodic update new Thread(() -> { while (true) { try { - Thread.sleep(5000); + Thread.sleep((long) settingsData.timeBetweenQueries*1000); // Fetch and update the data List newData = InstanceInterface.fetchWorkersDataForCards("binance"); //System.err.println(newData.toString()); diff --git a/app/src/main/java/com/example/dcav2gui/ui/exchanges/GateioFragment.java b/app/src/main/java/com/example/dcav2gui/ui/exchanges/GateioFragment.java index a0794ef..c5e63aa 100644 --- a/app/src/main/java/com/example/dcav2gui/ui/exchanges/GateioFragment.java +++ b/app/src/main/java/com/example/dcav2gui/ui/exchanges/GateioFragment.java @@ -4,34 +4,35 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.TextView; - import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; - import com.example.dcav2gui.databinding.FragmentGateioBinding; +import com.example.dcav2gui.ui.exchanges.adapters.WorkerCardAdapter; + public class GateioFragment extends Fragment { private FragmentGateioBinding binding; + private GateioViewModel GateioViewModel; + private WorkerCardAdapter workerCardAdapter; + @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - GateioViewModel GateioViewModel = - new ViewModelProvider(this).get(GateioViewModel.class); - binding = FragmentGateioBinding.inflate(inflater, container, false); View root = binding.getRoot(); - final TextView textView = binding.textGateio; - GateioViewModel.getText().observe(getViewLifecycleOwner(), textView::setText); + GateioViewModel = new ViewModelProvider(this).get(GateioViewModel.class); + + workerCardAdapter = new WorkerCardAdapter(binding.gateioCardsContainer); + + GateioViewModel.getWorkerData().observe(getViewLifecycleOwner(), workerDataList -> { + if (workerDataList != null) { + workerCardAdapter.updateData(workerDataList); + } + }); + return root; } - - @Override - public void onDestroyView() { - super.onDestroyView(); - binding = null; - } } \ No newline at end of file diff --git a/app/src/main/java/com/example/dcav2gui/ui/exchanges/GateioViewModel.java b/app/src/main/java/com/example/dcav2gui/ui/exchanges/GateioViewModel.java index 25a00e3..845bbc0 100644 --- a/app/src/main/java/com/example/dcav2gui/ui/exchanges/GateioViewModel.java +++ b/app/src/main/java/com/example/dcav2gui/ui/exchanges/GateioViewModel.java @@ -1,19 +1,53 @@ package com.example.dcav2gui.ui.exchanges; +import android.app.Application; +import androidx.annotation.NonNull; +import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; -import androidx.lifecycle.ViewModel; -public class GateioViewModel extends ViewModel { +import com.example.dcav2gui.InstanceInterface; +import com.example.dcav2gui.MainActivity; +import com.example.dcav2gui.ui.settings.SettingsData; - private final MutableLiveData mText; +import java.io.IOException; +import java.util.List; - public GateioViewModel() { - mText = new MutableLiveData<>(); - mText.setValue("This is Gate.io fragment"); +public class GateioViewModel extends AndroidViewModel { + + private final MutableLiveData> workerDataList; + SettingsData settingsData = MainActivity.getGlobalSettings(); + + public GateioViewModel(@NonNull Application application) { + super(application); + workerDataList = new MutableLiveData<>(); + fetchWorkerData(); // Initial data fetch } - public LiveData getText() { - return mText; + public LiveData> getWorkerData() { + //Iterate through workerDataList + if (workerDataList.getValue() == null) { + fetchWorkerData(); + } + return workerDataList; } + + private void fetchWorkerData() { + new Thread(() -> { + while (true) { + try { + Thread.sleep((long) settingsData.timeBetweenQueries*1000); + // Fetch and update the data + List newData = InstanceInterface.fetchWorkersDataForCards("gateio"); + //System.err.println(newData.toString()); + workerDataList.postValue(newData); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + }).start(); + } + } \ No newline at end of file diff --git a/app/src/main/java/com/example/dcav2gui/ui/exchanges/KucoinFragment.java b/app/src/main/java/com/example/dcav2gui/ui/exchanges/KucoinFragment.java index 1b60716..bf91ef2 100644 --- a/app/src/main/java/com/example/dcav2gui/ui/exchanges/KucoinFragment.java +++ b/app/src/main/java/com/example/dcav2gui/ui/exchanges/KucoinFragment.java @@ -4,34 +4,35 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.TextView; - import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; - import com.example.dcav2gui.databinding.FragmentKucoinBinding; +import com.example.dcav2gui.ui.exchanges.adapters.WorkerCardAdapter; + public class KucoinFragment extends Fragment { private FragmentKucoinBinding binding; + private KucoinViewModel KucoinViewModel; + private WorkerCardAdapter workerCardAdapter; + @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - KucoinViewModel KucoinViewModel = - new ViewModelProvider(this).get(KucoinViewModel.class); - binding = FragmentKucoinBinding.inflate(inflater, container, false); View root = binding.getRoot(); - final TextView textView = binding.textKucoin; - KucoinViewModel.getText().observe(getViewLifecycleOwner(), textView::setText); + KucoinViewModel = new ViewModelProvider(this).get(KucoinViewModel.class); + + workerCardAdapter = new WorkerCardAdapter(binding.kucoinCardsContainer); + + KucoinViewModel.getWorkerData().observe(getViewLifecycleOwner(), workerDataList -> { + if (workerDataList != null) { + workerCardAdapter.updateData(workerDataList); + } + }); + return root; } - - @Override - public void onDestroyView() { - super.onDestroyView(); - binding = null; - } } \ No newline at end of file diff --git a/app/src/main/java/com/example/dcav2gui/ui/exchanges/KucoinViewModel.java b/app/src/main/java/com/example/dcav2gui/ui/exchanges/KucoinViewModel.java index 9263519..86d0f56 100644 --- a/app/src/main/java/com/example/dcav2gui/ui/exchanges/KucoinViewModel.java +++ b/app/src/main/java/com/example/dcav2gui/ui/exchanges/KucoinViewModel.java @@ -1,19 +1,53 @@ package com.example.dcav2gui.ui.exchanges; +import android.app.Application; +import androidx.annotation.NonNull; +import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; -import androidx.lifecycle.ViewModel; -public class KucoinViewModel extends ViewModel { +import com.example.dcav2gui.InstanceInterface; +import com.example.dcav2gui.MainActivity; +import com.example.dcav2gui.ui.settings.SettingsData; - private final MutableLiveData mText; +import java.io.IOException; +import java.util.List; - public KucoinViewModel() { - mText = new MutableLiveData<>(); - mText.setValue("This is KuCoin fragment"); +public class KucoinViewModel extends AndroidViewModel { + + private final MutableLiveData> workerDataList; + SettingsData settingsData = MainActivity.getGlobalSettings(); + + public KucoinViewModel(@NonNull Application application) { + super(application); + workerDataList = new MutableLiveData<>(); + fetchWorkerData(); // Initial data fetch } - public LiveData getText() { - return mText; + public LiveData> getWorkerData() { + //Iterate through workerDataList + if (workerDataList.getValue() == null) { + fetchWorkerData(); + } + return workerDataList; } + + private void fetchWorkerData() { + new Thread(() -> { + while (true) { + try { + Thread.sleep((long) settingsData.timeBetweenQueries*1000); + // Fetch and update the data + List newData = InstanceInterface.fetchWorkersDataForCards("kucoin"); + //System.err.println(newData.toString()); + workerDataList.postValue(newData); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + }).start(); + } + } \ No newline at end of file diff --git a/app/src/main/java/com/example/dcav2gui/ui/exchanges/OkxFragment.java b/app/src/main/java/com/example/dcav2gui/ui/exchanges/OkxFragment.java index 05b9e67..721661a 100644 --- a/app/src/main/java/com/example/dcav2gui/ui/exchanges/OkxFragment.java +++ b/app/src/main/java/com/example/dcav2gui/ui/exchanges/OkxFragment.java @@ -4,34 +4,35 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.TextView; - import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; - import com.example.dcav2gui.databinding.FragmentOkxBinding; +import com.example.dcav2gui.ui.exchanges.adapters.WorkerCardAdapter; + public class OkxFragment extends Fragment { private FragmentOkxBinding binding; + private OkxViewModel OkxViewModel; + private WorkerCardAdapter workerCardAdapter; + @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - OkxViewModel OkxViewModel = - new ViewModelProvider(this).get(OkxViewModel.class); - binding = FragmentOkxBinding.inflate(inflater, container, false); View root = binding.getRoot(); - final TextView textView = binding.textOkx; - OkxViewModel.getText().observe(getViewLifecycleOwner(), textView::setText); + OkxViewModel = new ViewModelProvider(this).get(OkxViewModel.class); + + workerCardAdapter = new WorkerCardAdapter(binding.okexCardsContainer); + + OkxViewModel.getWorkerData().observe(getViewLifecycleOwner(), workerDataList -> { + if (workerDataList != null) { + workerCardAdapter.updateData(workerDataList); + } + }); + return root; } - - @Override - public void onDestroyView() { - super.onDestroyView(); - binding = null; - } } \ No newline at end of file diff --git a/app/src/main/java/com/example/dcav2gui/ui/exchanges/OkxViewModel.java b/app/src/main/java/com/example/dcav2gui/ui/exchanges/OkxViewModel.java index 250f823..1dd32e4 100644 --- a/app/src/main/java/com/example/dcav2gui/ui/exchanges/OkxViewModel.java +++ b/app/src/main/java/com/example/dcav2gui/ui/exchanges/OkxViewModel.java @@ -1,19 +1,53 @@ package com.example.dcav2gui.ui.exchanges; +import android.app.Application; +import androidx.annotation.NonNull; +import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; -import androidx.lifecycle.ViewModel; -public class OkxViewModel extends ViewModel { +import com.example.dcav2gui.InstanceInterface; +import com.example.dcav2gui.MainActivity; +import com.example.dcav2gui.ui.settings.SettingsData; - private final MutableLiveData mText; +import java.io.IOException; +import java.util.List; - public OkxViewModel() { - mText = new MutableLiveData<>(); - mText.setValue("This is OKX fragment"); +public class OkxViewModel extends AndroidViewModel { + + private final MutableLiveData> workerDataList; + SettingsData settingsData = MainActivity.getGlobalSettings(); + + public OkxViewModel(@NonNull Application application) { + super(application); + workerDataList = new MutableLiveData<>(); + fetchWorkerData(); // Initial data fetch } - public LiveData getText() { - return mText; + public LiveData> getWorkerData() { + //Iterate through workerDataList + if (workerDataList.getValue() == null) { + fetchWorkerData(); + } + return workerDataList; } + + private void fetchWorkerData() { + new Thread(() -> { + while (true) { + try { + Thread.sleep((long) settingsData.timeBetweenQueries*1000); + // Fetch and update the data + List newData = InstanceInterface.fetchWorkersDataForCards("okex"); + //System.err.println(newData.toString()); + workerDataList.postValue(newData); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + }).start(); + } + } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_binance.xml b/app/src/main/res/layout/fragment_binance.xml index f1039d3..b3f6533 100644 --- a/app/src/main/res/layout/fragment_binance.xml +++ b/app/src/main/res/layout/fragment_binance.xml @@ -1,13 +1,15 @@ - - + android:layout_height="match_parent"> + - + - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_gateio.xml b/app/src/main/res/layout/fragment_gateio.xml index af89606..afeeecd 100644 --- a/app/src/main/res/layout/fragment_gateio.xml +++ b/app/src/main/res/layout/fragment_gateio.xml @@ -1,22 +1,15 @@ - - - + - \ No newline at end of file + android:orientation="vertical" + android:visibility="visible"> + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_kucoin.xml b/app/src/main/res/layout/fragment_kucoin.xml index 9488fd4..ca7e7bb 100644 --- a/app/src/main/res/layout/fragment_kucoin.xml +++ b/app/src/main/res/layout/fragment_kucoin.xml @@ -1,22 +1,15 @@ - - - + - \ No newline at end of file + android:orientation="vertical" + android:visibility="visible"> + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_okx.xml b/app/src/main/res/layout/fragment_okx.xml index bf2db03..b512038 100644 --- a/app/src/main/res/layout/fragment_okx.xml +++ b/app/src/main/res/layout/fragment_okx.xml @@ -1,22 +1,15 @@ - - - + - \ No newline at end of file + android:orientation="vertical" + android:visibility="visible"> + + + + + \ No newline at end of file