From 4eaca7e1d81e27a30fec56e5dd89c246cdb993ea Mon Sep 17 00:00:00 2001 From: OnlyPapy98 Date: Wed, 1 Apr 2026 19:51:19 +0200 Subject: [PATCH] Version avec integration slave master --- app/build.gradle.kts | 6 + app/src/main/AndroidManifest.xml | 8 +- .../java/com/example/quiz/AgentDetails.java | 331 ++++++++++++++++++ .../com/example/quiz/AgentManagement.java | 135 +++++++ .../java/com/example/quiz/BetValidation.java | 124 ++++++- .../main/java/com/example/quiz/Caisse.java | 9 +- .../java/com/example/quiz/ListOFBets.java | 46 +-- .../com/example/quiz/ListOfTypeOfBets.java | 106 +++++- app/src/main/java/com/example/quiz/Login.java | 5 +- .../main/java/com/example/quiz/PageQuiz.java | 34 +- .../main/java/com/example/quiz/Settings.java | 44 ++- app/src/main/java/com/example/quiz/Sold.java | 53 ++- .../java/com/example/quiz/SoldByCourse.java | 49 ++- .../java/com/example/quiz/StompModule.java | 24 ++ .../main/java/com/example/quiz/UpdatePin.java | 132 +++++++ .../quiz/data/adapter/AgentItemAdapter.java | 94 +++++ .../data/adapter/MultiTypeOfBetsAdapter.java | 149 ++++++++ .../com/example/quiz/data/model/Course.java | 1 - .../example/quiz/data/model/MiseInitiale.java | 49 +++ .../example/quiz/data/model/Restriction.java | 17 + .../quiz/data/model/dtos/NotifPayload.java | 52 +++ .../quiz/data/model/dtos/auth/Agent.java | 10 + .../quiz/data/model/dtos/auth/ChangePin.java | 25 ++ .../model/dtos/paris/CancelParisPaylaod.java | 17 + .../data/model/dtos/paris/SoldeResponse.java | 51 +++ .../quiz/data/model/enums/CourseType.java | 7 - .../example/quiz/data/remote/ApiService.java | 39 ++- .../quiz/data/remote/NotificationHelper.java | 57 +++ .../quiz/data/remote/SocketManager.java | 85 ----- .../quiz/data/remote/StompManager.java | 285 +++++++++++++++ .../quiz/data/remote/TokenManager.java | 5 +- .../quiz/data/repository/AgentRepository.java | 128 +++++++ .../data/repository/CourseRepository.java | 19 +- .../quiz/data/repository/LoginRepository.java | 30 +- .../data/repository/PariMiseRepository.java | 47 +++ .../quiz/data/repository/PariRepository.java | 25 +- .../com/example/quiz/utils/AuthNavigator.java | 24 +- .../quiz/viewModel/AgentViewModel.java | 56 +++ .../quiz/viewModel/LoginViewModel.java | 9 + .../quiz/viewModel/NotificationViewModel.java | 4 + .../quiz/viewModel/PariMiseViewModel.java | 33 ++ .../example/quiz/viewModel/PariViewModel.java | 9 +- .../drawable/agent_item_border_rounded.xml | 8 + app/src/main/res/drawable/circle_bg_light.xml | 8 + app/src/main/res/drawable/decorative_dot.xml | 8 + app/src/main/res/drawable/ic_bet.xml | 10 + app/src/main/res/drawable/ic_check.xml | 13 + .../main/res/drawable/ic_location_small.xml | 10 + app/src/main/res/drawable/ic_notification.xml | 12 + app/src/main/res/drawable/logo_svg.xml | 276 +++++++++++++++ .../main/res/drawable/rounded_button_red.xml | 5 + app/src/main/res/layout/agent_item.xml | 128 +++++++ .../res/layout/fragment_agent_details.xml | 178 ++++++++++ .../res/layout/fragment_agent_management.xml | 21 ++ .../main/res/layout/fragment_update_pin.xml | 130 +++++++ .../res/layout/multi_type_of_bet_item.xml | 78 +++++ app/src/main/res/layout/pin_view.xml | 2 +- .../main/res/mipmap-anydpi/ic_launcher.xml | 6 +- .../res/mipmap-anydpi/ic_launcher_round.xml | 6 +- app/src/main/res/values/colors.xml | 1 + gradle/libs.versions.toml | 6 + .../com/anggastudio/printama/Printama.java | 28 ++ .../com/anggastudio/printama/PrinterUtil.java | 60 +++- .../res/layout/activity_choose_printer.xml | 6 +- .../main/res/layout/fragment_device_list.xml | 8 +- settings.gradle.kts | 6 + 66 files changed, 3229 insertions(+), 218 deletions(-) create mode 100644 app/src/main/java/com/example/quiz/AgentDetails.java create mode 100644 app/src/main/java/com/example/quiz/AgentManagement.java create mode 100644 app/src/main/java/com/example/quiz/StompModule.java create mode 100644 app/src/main/java/com/example/quiz/UpdatePin.java create mode 100644 app/src/main/java/com/example/quiz/data/adapter/AgentItemAdapter.java create mode 100644 app/src/main/java/com/example/quiz/data/adapter/MultiTypeOfBetsAdapter.java create mode 100644 app/src/main/java/com/example/quiz/data/model/MiseInitiale.java create mode 100644 app/src/main/java/com/example/quiz/data/model/Restriction.java create mode 100644 app/src/main/java/com/example/quiz/data/model/dtos/NotifPayload.java create mode 100644 app/src/main/java/com/example/quiz/data/model/dtos/auth/ChangePin.java create mode 100644 app/src/main/java/com/example/quiz/data/model/dtos/paris/CancelParisPaylaod.java create mode 100644 app/src/main/java/com/example/quiz/data/model/dtos/paris/SoldeResponse.java delete mode 100644 app/src/main/java/com/example/quiz/data/model/enums/CourseType.java create mode 100644 app/src/main/java/com/example/quiz/data/remote/NotificationHelper.java delete mode 100644 app/src/main/java/com/example/quiz/data/remote/SocketManager.java create mode 100644 app/src/main/java/com/example/quiz/data/remote/StompManager.java create mode 100644 app/src/main/java/com/example/quiz/data/repository/AgentRepository.java create mode 100644 app/src/main/java/com/example/quiz/data/repository/PariMiseRepository.java create mode 100644 app/src/main/java/com/example/quiz/viewModel/AgentViewModel.java create mode 100644 app/src/main/java/com/example/quiz/viewModel/NotificationViewModel.java create mode 100644 app/src/main/java/com/example/quiz/viewModel/PariMiseViewModel.java create mode 100644 app/src/main/res/drawable/agent_item_border_rounded.xml create mode 100644 app/src/main/res/drawable/circle_bg_light.xml create mode 100644 app/src/main/res/drawable/decorative_dot.xml create mode 100644 app/src/main/res/drawable/ic_bet.xml create mode 100644 app/src/main/res/drawable/ic_check.xml create mode 100644 app/src/main/res/drawable/ic_location_small.xml create mode 100644 app/src/main/res/drawable/ic_notification.xml create mode 100644 app/src/main/res/drawable/logo_svg.xml create mode 100644 app/src/main/res/drawable/rounded_button_red.xml create mode 100644 app/src/main/res/layout/agent_item.xml create mode 100644 app/src/main/res/layout/fragment_agent_details.xml create mode 100644 app/src/main/res/layout/fragment_agent_management.xml create mode 100644 app/src/main/res/layout/fragment_update_pin.xml create mode 100644 app/src/main/res/layout/multi_type_of_bet_item.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ea04c20..8962fa3 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -43,7 +43,13 @@ android { dependencies { implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar", "*.aar")))) implementation(libs.room.runtime) + implementation("com.github.NaikSoftware:StompProtocolAndroid:1.6.6") + + // RxJava (déjà présent normalement) + implementation("io.reactivex.rxjava2:rxjava:2.2.21") + implementation("io.reactivex.rxjava2:rxandroid:2.1.1") annotationProcessor(libs.room.compiler) + implementation(libs.stompprotocolandroid) implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0") implementation("androidx.camera:camera-camera2:1.2.3") implementation("androidx.camera:camera-lifecycle:1.2.3") diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c7929de..c6c6ad2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -14,6 +14,8 @@ android:usesPermissionFlags="neverForLocation" /> + + @@ -50,10 +52,6 @@ android:theme="@style/Theme.Quiz" tools:targetApi="31" android:usesCleartextTraffic="true"> - + + diff --git a/app/src/main/res/layout/agent_item.xml b/app/src/main/res/layout/agent_item.xml new file mode 100644 index 0000000..347bbf8 --- /dev/null +++ b/app/src/main/res/layout/agent_item.xml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_agent_details.xml b/app/src/main/res/layout/fragment_agent_details.xml new file mode 100644 index 0000000..c1af809 --- /dev/null +++ b/app/src/main/res/layout/fragment_agent_details.xml @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_agent_management.xml b/app/src/main/res/layout/fragment_agent_management.xml new file mode 100644 index 0000000..25465ec --- /dev/null +++ b/app/src/main/res/layout/fragment_agent_management.xml @@ -0,0 +1,21 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_update_pin.xml b/app/src/main/res/layout/fragment_update_pin.xml new file mode 100644 index 0000000..dae2e63 --- /dev/null +++ b/app/src/main/res/layout/fragment_update_pin.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/multi_type_of_bet_item.xml b/app/src/main/res/layout/multi_type_of_bet_item.xml new file mode 100644 index 0000000..d49985f --- /dev/null +++ b/app/src/main/res/layout/multi_type_of_bet_item.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/pin_view.xml b/app/src/main/res/layout/pin_view.xml index 785bd64..511b959 100644 --- a/app/src/main/res/layout/pin_view.xml +++ b/app/src/main/res/layout/pin_view.xml @@ -35,7 +35,7 @@ android:layout_width="match_parent" android:layout_height="45dp" android:hint="@string/code_message" - android:inputType="number" + android:inputType="text" android:textSize="18sp" android:layout_marginVertical="13sp" android:textFontWeight="600" diff --git a/app/src/main/res/mipmap-anydpi/ic_launcher.xml b/app/src/main/res/mipmap-anydpi/ic_launcher.xml index 6f3b755..f81f677 100644 --- a/app/src/main/res/mipmap-anydpi/ic_launcher.xml +++ b/app/src/main/res/mipmap-anydpi/ic_launcher.xml @@ -1,6 +1,6 @@ - - - + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml index 6f3b755..fbe923e 100644 --- a/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml +++ b/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml @@ -1,6 +1,6 @@ - - - + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 2dfa387..f668a80 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -10,6 +10,7 @@ #333333 #501C5A29 #50C31617 + #F5F5F5 #e8e8e8 #00000000 #ffffff diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b33b484..78cb5ac 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,9 +17,12 @@ playServicesMaps = "18.1.0" recyclerviewV7 = "28.0.0" retrofit = "2.11.0" rxandroid = "1.2.1" +rxandroidVersion = "2.1.1" rxjava = "1.3.8" kotlin = "1.9.24" coreKtx = "1.17.0" +rxjavaVersion = "2.2.21" +stompprotocolandroid = "1.6.6" swiperefreshlayout = "1.1.0" core = "1.5.0" fragmentTesting = "1.6.2" @@ -59,6 +62,9 @@ room-runtime = { module = "androidx.room:room-runtime", version.ref = "roomCommo rxandroid = { module = "io.reactivex:rxandroid", version.ref = "rxandroid" } rxjava = { module = "io.reactivex:rxjava", version.ref = "rxjava" } core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } +rxjava2-rxandroid = { module = "io.reactivex.rxjava2:rxandroid", version.ref = "rxandroidVersion" } +stompprotocolandroid = { module = "com.github.NaikSoftware:StompProtocolAndroid", version.ref = "stompprotocolandroid" } +rxjava2-rxjava = { module = "io.reactivex.rxjava2:rxjava", version.ref = "rxjavaVersion" } swiperefreshlayout = { module = "androidx.swiperefreshlayout:swiperefreshlayout", version.ref = "swiperefreshlayout" } core = { module = "androidx.test:core", version.ref = "core" } fragment-testing = { module = "androidx.fragment:fragment-testing", version.ref = "fragmentTesting" } diff --git a/printama/src/main/java/com/anggastudio/printama/Printama.java b/printama/src/main/java/com/anggastudio/printama/Printama.java index aed5753..9728176 100644 --- a/printama/src/main/java/com/anggastudio/printama/Printama.java +++ b/printama/src/main/java/com/anggastudio/printama/Printama.java @@ -311,6 +311,11 @@ public class Printama { }); } + + public int checkPaperStatus(){ + return _util.checkPaperStatus(); + } + public boolean isConnected() { return _util.isConnected(); } @@ -385,6 +390,29 @@ public class Printama { }); } + public void printSold(Bitmap bitmap, String title, StringBuilder text){ + _printama.connect(printama -> { + _util.resetPrinter(); + _util.setBold(); + _util.printImage(bitmap); + _util.printText(lineSeparator()); + _util.setAlign(PA.CENTER); + _util.setBold(); + _util.printText(title+"\n"); + _util.setNormalText(); + _util.printText(lineSeparator()+"\n"); + _util.setNormalText(); + _util.setAlign(PA.LEFT); + _util.printText(text.toString()); + _util.printText(lineSeparator()); + _util.setAlign(PA.CENTER); + _util.printText("Powered by PMU-MALI"+"\n"); + _util.printText(lineSeparator()); + printama.feedPaper(); + printama.close(); + }); + } + //---------------------------------------------------------------------------------------------- // PRINTER COMMANDS diff --git a/printama/src/main/java/com/anggastudio/printama/PrinterUtil.java b/printama/src/main/java/com/anggastudio/printama/PrinterUtil.java index a9d6a12..ea26021 100644 --- a/printama/src/main/java/com/anggastudio/printama/PrinterUtil.java +++ b/printama/src/main/java/com/anggastudio/printama/PrinterUtil.java @@ -17,6 +17,7 @@ import com.anggastudio.printama.constants.PW; import com.anggastudio.printama.util.StrUtil; import java.io.IOException; +import java.io.InputStream; import java.io.OutputStream; import java.util.Arrays; import java.util.UUID; @@ -54,6 +55,7 @@ class PrinterUtil { private final BluetoothDevice printer; private BluetoothSocket btSocket = null; private OutputStream btOutputStream = null; + private InputStream btInputStream = null; private boolean is3InchPrinter; PrinterUtil(BluetoothDevice printer) { @@ -67,6 +69,7 @@ class PrinterUtil { btSocket = socket; try { btOutputStream = socket.getOutputStream(); + btInputStream = socket.getInputStream(); successListener.onConnected(); } catch (IOException e) { failedListener.onFailed(); @@ -80,8 +83,27 @@ class PrinterUtil { }).execute(printer); } - boolean isConnected() { - return btSocket != null && btSocket.isConnected(); + boolean isConnected() { + if (btSocket == null) { + return false; + } + + try { + // Tester la connexion en vérifiant le flux d'entrée + if (btSocket.isConnected()) { + // Vérifier si le flux est accessible + InputStream inputStream = btSocket.getInputStream(); + // Tenter de lire avec un timeout très court + if (inputStream.available() >= 0) { + return true; + } + } + return false; + } catch (IOException e) { + // Exception signifie que la connexion est perdue + Log.e("Bluetooth", "Socket non connecté: " + e.getMessage()); + return false; + } } void finish() { @@ -243,6 +265,40 @@ class PrinterUtil { } } + public int checkPaperStatus() { + try { + // Certaines imprimantes doivent être en mode "real-time" + // Commande GS a 1 pour activer le mode "real-time" + byte[] realtimeMode = new byte[]{0x1D, 0x61, 0x01}; + btOutputStream.write(realtimeMode); + btOutputStream.flush(); + + Thread.sleep(50); + + // Ensuite la commande de statut + byte[] statusCommand = new byte[]{0x1D, 0x72, 0x01}; + btOutputStream.write(statusCommand); + btOutputStream.flush(); + + Thread.sleep(200); + + // Lire la réponse + byte[] response = new byte[4]; + int bytesRead = btInputStream.read(response); + + if (bytesRead > 0) { + // Traiter la réponse... + return 0; + } + + return -1; + + } catch (Exception e) { + e.printStackTrace(); + return -1; + } + } + boolean printImage(Bitmap bitmap, int width) { return printImage(PA.CENTER, bitmap, width); } diff --git a/printama/src/main/res/layout/activity_choose_printer.xml b/printama/src/main/res/layout/activity_choose_printer.xml index b82fc09..743544a 100644 --- a/printama/src/main/res/layout/activity_choose_printer.xml +++ b/printama/src/main/res/layout/activity_choose_printer.xml @@ -17,7 +17,7 @@ android:layout_height="wrap_content" android:gravity="center" android:padding="20dp" - android:text="Choose Printer" + android:text="Choisir une imprimante" android:textSize="16sp" android:textStyle="bold" /> @@ -36,7 +36,7 @@ android:layout_margin="20dp" android:backgroundTint="@color/colorGray5" android:gravity="center" - android:text="Test" + android:text="Tester" android:textColor="@android:color/white" android:textSize="14sp" /> @@ -49,7 +49,7 @@ android:layout_marginBottom="20dp" android:backgroundTint="@color/colorGray5" android:gravity="center" - android:text="Save" + android:text="Valider" android:textColor="@android:color/white" android:textSize="14sp" /> diff --git a/printama/src/main/res/layout/fragment_device_list.xml b/printama/src/main/res/layout/fragment_device_list.xml index 83e20f0..fbcec9c 100644 --- a/printama/src/main/res/layout/fragment_device_list.xml +++ b/printama/src/main/res/layout/fragment_device_list.xml @@ -20,7 +20,7 @@ android:layout_height="wrap_content" android:gravity="center" android:padding="20dp" - android:text="Choose Printer" + android:text="Choissez une imprimante" android:textColor="@color/colorBlack" android:textSize="16sp" android:textStyle="bold" /> @@ -36,7 +36,7 @@ android:textColor="@color/colorBlack" android:textSize="14sp" android:visibility="gone" - tools:text="No paired Bluetooth printers found.\n\nTap the button below to open Bluetooth settings and pair a printer." + tools:text="Aucune imprimante Bluetooth jumelée trouvée.\n\nAppuyez sur le bouton ci-dessous pour ouvrir les paramètres Bluetooth et jumeler une imprimante." tools:visibility="visible" /> @@ -74,7 +74,7 @@ android:layout_weight="1" android:backgroundTint="@color/colorGray5" android:gravity="center" - android:text="Save" + android:text="Valider" android:textColor="@android:color/white" android:textSize="14sp" /> diff --git a/settings.gradle.kts b/settings.gradle.kts index 0b85237..f8fcb6f 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -16,6 +16,12 @@ dependencyResolutionManagement { repositories { google() mavenCentral() + maven{ + url = uri("https://jitpack.io") + content { + includeGroup("com.github.NaikSoftware") + } + } } }