From a2c69a20c5d14c179383e0b8134f208d89beeb33 Mon Sep 17 00:00:00 2001 From: fakz9 Date: Mon, 13 Nov 2023 02:25:19 +0300 Subject: [PATCH] initial commit --- .gitignore | 15 ++ .idea/.gitignore | 3 + .idea/compiler.xml | 6 + .idea/deploymentTargetDropDown.xml | 17 ++ .idea/gradle.xml | 20 ++ .idea/inspectionProfiles/Project_Default.xml | 8 + .idea/misc.xml | 9 + app/.gitignore | 1 + app/build.gradle.kts | 54 +++++ app/libs/printer-lib-2.2.4.aar | Bin 0 -> 116340 bytes app/proguard-rules.pro | 21 ++ .../ExampleInstrumentedTest.java | 26 +++ app/src/main/AndroidManifest.xml | 33 ++++ .../assemblrprintingservice/MainActivity.java | 97 +++++++++ .../NotificationUtils.java | 44 +++++ .../PrintingController.java | 83 ++++++++ .../PrintingService.java | 67 +++++++ .../printing/Dimensions.java | 32 +++ .../printing/PDFUtils.java | 31 +++ .../printing/PrinterConnector.java | 130 ++++++++++++ .../printing/PrinterConnectorConfig.java | 31 +++ .../printing/pdf/PdfToBitmapIterable.java | 60 ++++++ .../server/PrintingServer.java | 76 +++++++ .../server/PrintingServerConfig.java | 14 ++ .../server/PrintingServerListener.java | 8 + .../ui/dashboard/DashboardFragment.java | 37 ++++ .../ui/dashboard/DashboardViewModel.java | 19 ++ .../ui/home/HomeFragment.java | 37 ++++ .../ui/home/HomeViewModel.java | 19 ++ .../notifications/NotificationsFragment.java | 37 ++++ .../notifications/NotificationsViewModel.java | 19 ++ .../res/drawable/ic_dashboard_black_24dp.xml | 9 + .../main/res/drawable/ic_home_black_24dp.xml | 9 + .../res/drawable/ic_launcher_background.xml | 170 ++++++++++++++++ .../res/drawable/ic_launcher_foreground.xml | 30 +++ .../drawable/ic_notifications_black_24dp.xml | 9 + app/src/main/res/layout/activity_main.xml | 44 +++++ .../main/res/layout/fragment_dashboard.xml | 22 +++ app/src/main/res/layout/fragment_home.xml | 22 +++ .../res/layout/fragment_notifications.xml | 22 +++ app/src/main/res/menu/bottom_nav_menu.xml | 19 ++ .../main/res/mipmap-anydpi/ic_launcher.xml | 6 + .../res/mipmap-anydpi/ic_launcher_round.xml | 6 + app/src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 1914 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 2898 bytes app/src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 1154 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 1772 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 2234 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 3918 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 2986 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 5914 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 3540 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 7778 bytes .../main/res/navigation/mobile_navigation.xml | 25 +++ app/src/main/res/values-night/themes.xml | 16 ++ app/src/main/res/values/colors.xml | 10 + app/src/main/res/values/dimens.xml | 5 + app/src/main/res/values/strings.xml | 8 + app/src/main/res/values/themes.xml | 16 ++ app/src/main/res/xml/backup_rules.xml | 13 ++ .../main/res/xml/data_extraction_rules.xml | 19 ++ .../ExampleUnitTest.java | 17 ++ build.gradle.kts | 4 + gradle.properties | 21 ++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59203 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 185 ++++++++++++++++++ gradlew.bat | 89 +++++++++ settings.gradle.kts | 22 +++ 69 files changed, 1878 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/deploymentTargetDropDown.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/misc.xml create mode 100644 app/.gitignore create mode 100644 app/build.gradle.kts create mode 100644 app/libs/printer-lib-2.2.4.aar create mode 100644 app/proguard-rules.pro create mode 100644 app/src/androidTest/java/com/denco/assemblrprintingservice/ExampleInstrumentedTest.java create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/com/denco/assemblrprintingservice/MainActivity.java create mode 100644 app/src/main/java/com/denco/assemblrprintingservice/NotificationUtils.java create mode 100644 app/src/main/java/com/denco/assemblrprintingservice/PrintingController.java create mode 100644 app/src/main/java/com/denco/assemblrprintingservice/PrintingService.java create mode 100644 app/src/main/java/com/denco/assemblrprintingservice/printing/Dimensions.java create mode 100644 app/src/main/java/com/denco/assemblrprintingservice/printing/PDFUtils.java create mode 100644 app/src/main/java/com/denco/assemblrprintingservice/printing/PrinterConnector.java create mode 100644 app/src/main/java/com/denco/assemblrprintingservice/printing/PrinterConnectorConfig.java create mode 100644 app/src/main/java/com/denco/assemblrprintingservice/printing/pdf/PdfToBitmapIterable.java create mode 100644 app/src/main/java/com/denco/assemblrprintingservice/server/PrintingServer.java create mode 100644 app/src/main/java/com/denco/assemblrprintingservice/server/PrintingServerConfig.java create mode 100644 app/src/main/java/com/denco/assemblrprintingservice/server/PrintingServerListener.java create mode 100644 app/src/main/java/com/denco/assemblrprintingservice/ui/dashboard/DashboardFragment.java create mode 100644 app/src/main/java/com/denco/assemblrprintingservice/ui/dashboard/DashboardViewModel.java create mode 100644 app/src/main/java/com/denco/assemblrprintingservice/ui/home/HomeFragment.java create mode 100644 app/src/main/java/com/denco/assemblrprintingservice/ui/home/HomeViewModel.java create mode 100644 app/src/main/java/com/denco/assemblrprintingservice/ui/notifications/NotificationsFragment.java create mode 100644 app/src/main/java/com/denco/assemblrprintingservice/ui/notifications/NotificationsViewModel.java create mode 100644 app/src/main/res/drawable/ic_dashboard_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_home_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 app/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 app/src/main/res/drawable/ic_notifications_black_24dp.xml create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/layout/fragment_dashboard.xml create mode 100644 app/src/main/res/layout/fragment_home.xml create mode 100644 app/src/main/res/layout/fragment_notifications.xml create mode 100644 app/src/main/res/menu/bottom_nav_menu.xml create mode 100644 app/src/main/res/mipmap-anydpi/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-anydpi/ic_launcher_round.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/navigation/mobile_navigation.xml create mode 100644 app/src/main/res/values-night/themes.xml create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/dimens.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/themes.xml create mode 100644 app/src/main/res/xml/backup_rules.xml create mode 100644 app/src/main/res/xml/data_extraction_rules.xml create mode 100644 app/src/test/java/com/denco/assemblrprintingservice/ExampleUnitTest.java create mode 100644 build.gradle.kts create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle.kts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b589d56 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml new file mode 100644 index 0000000..f6b68cc --- /dev/null +++ b/.idea/deploymentTargetDropDown.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..ae388c2 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..21da02b --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..8978d23 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 0000000..f20cd86 --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,54 @@ +plugins { + id("com.android.application") +} + +android { + namespace = "com.denco.assemblrprintingservice" + compileSdk = 34 + + defaultConfig { + applicationId = "com.denco.assemblrprintingservice" + minSdk = 29 + targetSdk = 34 + versionCode = 1 + versionName = "1.0" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + buildFeatures { + viewBinding = true + } + packagingOptions { + exclude("META-INF/*") + } +} + +dependencies { + + implementation("androidx.appcompat:appcompat:1.6.1") + implementation("com.google.android.material:material:1.10.0") + implementation("androidx.constraintlayout:constraintlayout:2.1.4") + implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.2") + implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2") + implementation("androidx.navigation:navigation-fragment:2.5.3") + implementation("androidx.navigation:navigation-ui:2.5.3") + testImplementation("junit:junit:4.13.2") + androidTestImplementation("androidx.test.ext:junit:1.1.5") + androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") + implementation(files("libs/printer-lib-2.2.4.aar")) + implementation("io.vertx:vertx-web:4.4.6") + implementation("org.apache.pdfbox:pdfbox:2.0.1") + +} + diff --git a/app/libs/printer-lib-2.2.4.aar b/app/libs/printer-lib-2.2.4.aar new file mode 100644 index 0000000000000000000000000000000000000000..08fd7378f3525c6fdad23394dac84193789b508c GIT binary patch literal 116340 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

8Kqm`W`>~^Y0>@3fw3`M4z0W35NY26B*%e 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 literal 0 HcmV?d00001 diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app/src/androidTest/java/com/denco/assemblrprintingservice/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/denco/assemblrprintingservice/ExampleInstrumentedTest.java new file mode 100644 index 0000000..5f72baf --- /dev/null +++ b/app/src/androidTest/java/com/denco/assemblrprintingservice/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.denco.assemblrprintingservice; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.denco.assemblrprintingservice", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..4dc7805 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/denco/assemblrprintingservice/MainActivity.java b/app/src/main/java/com/denco/assemblrprintingservice/MainActivity.java new file mode 100644 index 0000000..e9bca24 --- /dev/null +++ b/app/src/main/java/com/denco/assemblrprintingservice/MainActivity.java @@ -0,0 +1,97 @@ +package com.denco.assemblrprintingservice; + +import android.annotation.SuppressLint; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; + +import com.google.android.material.bottomnavigation.BottomNavigationView; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.navigation.NavController; +import androidx.navigation.Navigation; +import androidx.navigation.ui.AppBarConfiguration; +import androidx.navigation.ui.NavigationUI; + +import com.denco.assemblrprintingservice.databinding.ActivityMainBinding; + +import net.posprinter.CPCLConst; +import net.posprinter.CPCLPrinter; +import net.posprinter.IDeviceConnection; +import net.posprinter.IPOSListener; +import net.posprinter.POSConnect; +import net.posprinter.TSCConst; +import net.posprinter.TSCPrinter; +import net.posprinter.ZPLPrinter; + +public class MainActivity extends AppCompatActivity { + + private ActivityMainBinding binding; + private boolean isRunning = false; + private SharedPreferences preferences; + private Button button; + private EditText ozonText; + private EditText wbText; + + private void loadSettings() { + String ozonAddress = preferences.getString("ozon_printer_address", "default_value"); + String wbAddress = preferences.getString("wb_printer_address", "default_value"); + if (!ozonAddress.equals("default_value")) ozonText.setText(ozonAddress); + if (!wbAddress.equals("default_value")) wbText.setText(wbAddress); + } + + private void saveSettings() { + SharedPreferences.Editor editor = preferences.edit(); + editor.putString("ozon_printer_address", ozonText.getText().toString()); + editor.putString("wb_printer_address", wbText.getText().toString()); + editor.commit(); + } + + private void start() { + saveSettings(); + startService(new Intent(this, PrintingService.class)); + this.ozonText.setEnabled(false); + this.wbText.setEnabled(false); + this.button.setText("Остановить"); + this.isRunning = true; + } + + private void stop() { + stopService(new Intent(this, PrintingService.class)); + this.ozonText.setEnabled(true); + this.wbText.setEnabled(true); + this.button.setText("Запустить"); + this.isRunning = false; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + + super.onCreate(savedInstanceState); + + binding = ActivityMainBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + // Initializing controls + this.button = (Button) findViewById(R.id.startBtn); + this.ozonText = ((EditText) findViewById(R.id.ozonPrinterAddr)); + this.wbText = ((EditText) findViewById(R.id.wbPrinterAddr)); + this.preferences = getSharedPreferences("printers_settings", MODE_PRIVATE); + + this.loadSettings(); + + this.button.setOnClickListener(e -> { + if (!isRunning) { + start(); + } else { + stop(); + } + }); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/denco/assemblrprintingservice/NotificationUtils.java b/app/src/main/java/com/denco/assemblrprintingservice/NotificationUtils.java new file mode 100644 index 0000000..dae5043 --- /dev/null +++ b/app/src/main/java/com/denco/assemblrprintingservice/NotificationUtils.java @@ -0,0 +1,44 @@ +package com.denco.assemblrprintingservice; + +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.app.Service; +import android.content.Context; +import android.content.Intent; +import androidx.core.app.NotificationCompat; +import com.denco.assemblrprintingservice.MainActivity; +import com.denco.assemblrprintingservice.R; + +public class NotificationUtils { + private static final int NOTIFICATION_ID = 1; + private static final String NOTIFICATION_CHANNEL_ID = "Channel_Id"; + + public static void createNotificationChannel(Service service) { + CharSequence name = service.getString(R.string.channel_name); + String description = service.getString(R.string.channel_description); + int importance = NotificationManager.IMPORTANCE_DEFAULT; + NotificationChannel channel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, name, importance); + channel.setDescription(description); + NotificationManager notificationManager = service.getSystemService(NotificationManager.class); + notificationManager.createNotificationChannel(channel); + } + + public static void startForeground(Service service) { + Intent notificationIntent = new Intent(service, MainActivity.class); + + PendingIntent pendingIntent = PendingIntent.getActivity(service, 0, + notificationIntent, PendingIntent.FLAG_IMMUTABLE); + + android.app.Notification notification = new NotificationCompat.Builder(service, + NOTIFICATION_CHANNEL_ID) + .setOngoing(true) + .setSmallIcon(R.drawable.ic_notifications_black_24dp) + .setContentTitle(service.getString(R.string.app_name)) + .setContentText("Service is running background") + .setContentIntent(pendingIntent) + .build(); + + service.startForeground(NOTIFICATION_ID, notification); + } +} diff --git a/app/src/main/java/com/denco/assemblrprintingservice/PrintingController.java b/app/src/main/java/com/denco/assemblrprintingservice/PrintingController.java new file mode 100644 index 0000000..cb74c3f --- /dev/null +++ b/app/src/main/java/com/denco/assemblrprintingservice/PrintingController.java @@ -0,0 +1,83 @@ +package com.denco.assemblrprintingservice; + +import android.content.Context; + +import com.denco.assemblrprintingservice.printing.PrinterConnector; +import com.denco.assemblrprintingservice.printing.PrinterConnectorConfig; +import com.denco.assemblrprintingservice.server.PrintingServer; +import com.denco.assemblrprintingservice.server.PrintingServerConfig; +import com.denco.assemblrprintingservice.server.PrintingServerListener; + +import java.util.HashMap; +import java.util.Map; + + +public class PrintingController implements PrintingServerListener { + + private final Context context; + + private final PrinterConnectorConfig[] connectorConfigs; + + private final PrintingServerConfig serverConfig; + private PrintingServer printingServer; + + private final Map printerConnectorMap = new HashMap<>(); + + public PrintingController(Context context, PrinterConnectorConfig[] connectorConfigs, PrintingServerConfig serverConfig) { + this.connectorConfigs = connectorConfigs; + this.serverConfig = serverConfig; + this.context = context; + } + + public void initialize() { + this.initServer(); + this.initConnectors(); + } + + public void stop() { + this.printingServer.stop(); + for (PrinterConnector connector : this.printerConnectorMap.values()) { + connector.stop(); + } + } + + private void initServer() { + this.printingServer = new PrintingServer(this.serverConfig, this); + Thread printingServerThread = new Thread(() -> { + this.printingServer.start(); + }); + printingServerThread.start(); + } + + private void initConnectors() { + for (PrinterConnectorConfig connectorConfig : this.connectorConfigs) { + this.printerConnectorMap.put(connectorConfig.getName(), new PrinterConnector(this.context, connectorConfig)); + } + } + + + private boolean isPrinterReady(String printerName) { + if (!this.printerConnectorMap.containsKey(printerName)) return false; + // return this.printerConnectorMap.get(printerName).isReady(); + return true; + } + + @Override + public boolean onImageRequest(String printerName, byte[] imageData) { + if (!this.isPrinterReady(printerName)) return false; + PrinterConnector printer = this.printerConnectorMap.get(printerName); + printer.reconnect(); + printer.printImage(imageData); + return true; + } + + @Override + public boolean onPdfRequest(String printerName, byte[] pdfData) { + if (!this.isPrinterReady(printerName)) return false; + PrinterConnector printer = this.printerConnectorMap.get(printerName); + printer.reconnect(); + printer.printPdf(pdfData); + + return true; + } +} diff --git a/app/src/main/java/com/denco/assemblrprintingservice/PrintingService.java b/app/src/main/java/com/denco/assemblrprintingservice/PrintingService.java new file mode 100644 index 0000000..2389d39 --- /dev/null +++ b/app/src/main/java/com/denco/assemblrprintingservice/PrintingService.java @@ -0,0 +1,67 @@ +package com.denco.assemblrprintingservice; + +import android.app.Service; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.IBinder; +import android.util.Log; + +import androidx.annotation.Nullable; + +import com.denco.assemblrprintingservice.printing.Dimensions; +import com.denco.assemblrprintingservice.printing.PrinterConnector; +import com.denco.assemblrprintingservice.printing.PrinterConnectorConfig; +import com.denco.assemblrprintingservice.server.PrintingServerConfig; + +import java.util.List; + + +public class PrintingService extends Service { + private PrintingController printingController; + + private void initPrinterController() { + int listenPort = 2282; + PrintingServerConfig serverConfig = new PrintingServerConfig(listenPort); + + + SharedPreferences preferences = getSharedPreferences("printers_settings", MODE_PRIVATE); + String ozonAddress = preferences.getString("ozon_printer_address", "default_value"); + String wbAddress = preferences.getString("wb_printer_address", "default_value"); + + Dimensions wildberriesDimensions = new Dimensions(58, 40); + Dimensions ozonDimensions = new Dimensions(75, 120); + PrinterConnectorConfig wildberriesConfig = new PrinterConnectorConfig("wildberries", wbAddress, wildberriesDimensions, true); + PrinterConnectorConfig ozonConfig = new PrinterConnectorConfig("ozon", ozonAddress, ozonDimensions, true); + PrinterConnectorConfig[] configs = new PrinterConnectorConfig[]{wildberriesConfig, ozonConfig}; + this.printingController = new PrintingController(this, configs, serverConfig); + this.printingController.initialize(); + + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + NotificationUtils.createNotificationChannel(this); + NotificationUtils.startForeground(this); + this.initPrinterController(); + return super.onStartCommand(intent, flags, startId); + } + + @Override + public void onCreate() { + super.onCreate(); + } + + + @Nullable + @Override + public IBinder onBind(Intent intent) { + return null; + } + + @Override + public void onDestroy() { + + printingController.stop(); + super.onDestroy(); + } +} diff --git a/app/src/main/java/com/denco/assemblrprintingservice/printing/Dimensions.java b/app/src/main/java/com/denco/assemblrprintingservice/printing/Dimensions.java new file mode 100644 index 0000000..ee24844 --- /dev/null +++ b/app/src/main/java/com/denco/assemblrprintingservice/printing/Dimensions.java @@ -0,0 +1,32 @@ +package com.denco.assemblrprintingservice.printing; + +public class Dimensions { + private int width; + private int height; + + public Dimensions(int width, int height) { + this.width = width; + this.height = height; + } + + public int getWidth() { + return width; + } + + public int getHeight() { + return height; + } + + public void setWidth(int width) { + this.width = width; + } + + public void setHeight(int height) { + this.height = height; + } + + @Override + public String toString() { + return "Width: " + width + ", Height: " + height; + } +} diff --git a/app/src/main/java/com/denco/assemblrprintingservice/printing/PDFUtils.java b/app/src/main/java/com/denco/assemblrprintingservice/printing/PDFUtils.java new file mode 100644 index 0000000..7d384b0 --- /dev/null +++ b/app/src/main/java/com/denco/assemblrprintingservice/printing/PDFUtils.java @@ -0,0 +1,31 @@ +package com.denco.assemblrprintingservice.printing; + +import android.graphics.Bitmap; + +import androidx.annotation.NonNull; + +import java.util.Iterator; +import java.util.List; +import java.util.Spliterator; +import java.util.function.Consumer; + +public class PDFUtils implements Iterable { + + + @NonNull + @Override + public Iterator iterator() { + return null; + } + + @Override + public void forEach(@NonNull Consumer action) { + Iterable.super.forEach(action); + } + + @NonNull + @Override + public Spliterator spliterator() { + return Iterable.super.spliterator(); + } +} diff --git a/app/src/main/java/com/denco/assemblrprintingservice/printing/PrinterConnector.java b/app/src/main/java/com/denco/assemblrprintingservice/printing/PrinterConnector.java new file mode 100644 index 0000000..44248f5 --- /dev/null +++ b/app/src/main/java/com/denco/assemblrprintingservice/printing/PrinterConnector.java @@ -0,0 +1,130 @@ +package com.denco.assemblrprintingservice.printing; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.util.Log; + +import com.denco.assemblrprintingservice.printing.pdf.PdfToBitmapIterable; + +import net.posprinter.IDeviceConnection; +import net.posprinter.IPOSListener; +import net.posprinter.POSConnect; +import net.posprinter.TSCConst; +import net.posprinter.TSCPrinter; + +import java.util.WeakHashMap; + +public class PrinterConnector implements IPOSListener { + private final int PRINTER_DPI = 203; + private final Context context; + private final PrinterConnectorConfig config; + + private IDeviceConnection printerConnection; + private TSCPrinter printer; + private boolean isReady; + + public PrinterConnector(Context context, PrinterConnectorConfig config) { + this.context = context; + this.config = config; + this.initialize(); + } + + private void initialize() { + POSConnect.init(this.context); + this.connect(); + } + + public void stop() { + if (this.printerConnection.isConnect()) this.printerConnection.close(); + POSConnect.exit(); + } + + private void connect() { + this.printerConnection = POSConnect.createDevice(POSConnect.DEVICE_TYPE_ETHERNET); + this.printerConnection.connect(this.config.getIpAddress(), this); + } + + private void disconnect() { + printer = null; + this.printerConnection.close(); + + POSConnect.exit(); + } + + public void reconnect() { + this.disconnect(); + this.initialize(); + + } + + private int mmToDots(double mm) { + double inches = mm / 25.4; + return (int) (inches * this.PRINTER_DPI); + } + + public void printBitmap(Bitmap bitmap) { + + Dimensions dimensions = this.config.getDimensions(); + + int widthInDots = mmToDots(dimensions.getWidth()); + int heightInDots = mmToDots(dimensions.getHeight()); + bitmap = Bitmap.createScaledBitmap(bitmap, widthInDots, heightInDots, true); + printer.sizeMm(dimensions.getWidth(), dimensions.getHeight()) + .gapMm(0, 0) + .cls() + .bitmap(0, 0, TSCConst.BMP_MODE_OVERWRITE, widthInDots, bitmap) + .print(1); + + } + + public void printImage(byte[] imageData) { + Bitmap bitmap = BitmapFactory.decodeByteArray(imageData, 0, imageData.length); + this.printBitmap(bitmap); + } + + public void printPdf(byte[] pdfData) { + try { + + PdfToBitmapIterable pdfToBitmapIterable = new PdfToBitmapIterable(this.context, pdfData); + for (Bitmap bitmap : pdfToBitmapIterable) { + this.printBitmap(bitmap); + } + } catch (Exception ignored) { + + } + + } + + @Override + public void onStatus(int code, String description) { + String currentStatus = ""; + switch (code) { + case POSConnect.CONNECT_SUCCESS: + currentStatus = "Connection successful"; + this.printer = new TSCPrinter(this.printerConnection); + this.isReady = true; + break; + case POSConnect.CONNECT_FAIL: + currentStatus = "Connection failed"; + break; + case POSConnect.CONNECT_INTERRUPT: + currentStatus = "Connection has been interrupted"; + this.isReady = false; + if (this.config.isAutoReconnect()) { + this.reconnect(); + } + break; + case POSConnect.SEND_FAIL: + currentStatus = "Send failed"; + break; + default: + currentStatus = "Unknown status"; + break; + } + } + + public boolean isReady() { + return isReady; + } +} diff --git a/app/src/main/java/com/denco/assemblrprintingservice/printing/PrinterConnectorConfig.java b/app/src/main/java/com/denco/assemblrprintingservice/printing/PrinterConnectorConfig.java new file mode 100644 index 0000000..78c6b0a --- /dev/null +++ b/app/src/main/java/com/denco/assemblrprintingservice/printing/PrinterConnectorConfig.java @@ -0,0 +1,31 @@ +package com.denco.assemblrprintingservice.printing; + +public class PrinterConnectorConfig { + private final Dimensions dimensions; + private final String ipAddress; + private final boolean autoReconnect; + private final String name; + + public PrinterConnectorConfig(String name, String ipAddress, Dimensions dimensions, boolean autoReconnect) { + this.ipAddress = ipAddress; + this.dimensions = dimensions; + this.autoReconnect = autoReconnect; + this.name = name; + } + + public String getIpAddress() { + return ipAddress; + } + + public Dimensions getDimensions() { + return dimensions; + } + + public String getName() { + return name; + } + + public boolean isAutoReconnect() { + return autoReconnect; + } +} diff --git a/app/src/main/java/com/denco/assemblrprintingservice/printing/pdf/PdfToBitmapIterable.java b/app/src/main/java/com/denco/assemblrprintingservice/printing/pdf/PdfToBitmapIterable.java new file mode 100644 index 0000000..0fa010f --- /dev/null +++ b/app/src/main/java/com/denco/assemblrprintingservice/printing/pdf/PdfToBitmapIterable.java @@ -0,0 +1,60 @@ +package com.denco.assemblrprintingservice.printing.pdf; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.pdf.PdfRenderer; +import android.os.ParcelFileDescriptor; +import android.util.Log; + +import java.io.File; +import java.io.FileOutputStream; +import java.util.Iterator; + +public class PdfToBitmapIterable implements Iterable { + private final byte[] pdfBytes; + private final Context context; + + public PdfToBitmapIterable(Context context, byte[] pdfBytes) { + this.context = context; + this.pdfBytes = pdfBytes; + } + + @Override + public Iterator iterator() { + return new Iterator() { + private int currentIndex = 0; + private PdfRenderer pdfRenderer; + private PdfRenderer.Page currentPage; + + { + try { + File tempFile = File.createTempFile("tempPdf", ".pdf", context.getCacheDir()); + try (FileOutputStream fos = new FileOutputStream(tempFile)) { + fos.write(pdfBytes); + } + ParcelFileDescriptor fd = ParcelFileDescriptor.open(tempFile, ParcelFileDescriptor.MODE_READ_ONLY); + pdfRenderer = new PdfRenderer(fd); + } catch (Exception e) { + throw new RuntimeException("Failed to initialize PdfRenderer", e); + } + } + + @Override + public boolean hasNext() { + return currentIndex < pdfRenderer.getPageCount(); + } + + @Override + public Bitmap next() { + currentPage = pdfRenderer.openPage(currentIndex); + int scaleFactor = 2; + if (currentPage.getWidth() < 100) scaleFactor = 100; + Bitmap bitmap = Bitmap.createBitmap(currentPage.getWidth() * scaleFactor, currentPage.getHeight() * scaleFactor, Bitmap.Config.ARGB_8888); + currentPage.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY); + currentPage.close(); + currentIndex++; + return bitmap; + } + }; + } +} diff --git a/app/src/main/java/com/denco/assemblrprintingservice/server/PrintingServer.java b/app/src/main/java/com/denco/assemblrprintingservice/server/PrintingServer.java new file mode 100644 index 0000000..ac76aee --- /dev/null +++ b/app/src/main/java/com/denco/assemblrprintingservice/server/PrintingServer.java @@ -0,0 +1,76 @@ +package com.denco.assemblrprintingservice.server; + +import android.util.Log; + +import io.vertx.core.AbstractVerticle; +import io.vertx.core.Vertx; +import io.vertx.core.http.HttpMethod; +import io.vertx.core.http.HttpServer; +import io.vertx.core.json.JsonObject; +import io.vertx.ext.web.Router; + +public class PrintingServer extends AbstractVerticle { + private final PrintingServerConfig config; + HttpServer server; + Router router; + PrintingServerListener printingServerListener; + + public PrintingServer(PrintingServerConfig config, PrintingServerListener printingServerListener) { + this.vertx = Vertx.vertx(); + this.server = this.vertx.createHttpServer(); + this.router = Router.router(this.vertx); + this.printingServerListener = printingServerListener; + this.config = config; + + this.initialize(); + } + + private void initialize() { + this.server.requestHandler(this.router); + router.route(HttpMethod.POST, "/print/:printerName/image").handler(event -> { + event.request().body().onSuccess(requestBody -> { + boolean booleanResponse = false; + try { + + String printerName = event.request().getParam("printerName"); + byte[] imageBytes = requestBody.getBytes(); + boolean printerResponse = printingServerListener.onImageRequest(printerName, imageBytes); + } catch (Exception ignored) { + } + JsonObject response = new JsonObject().put("ok", booleanResponse); + + event.response().putHeader("content-type", "application/json") + .end(response.encode()); + }); + }); + router.route(HttpMethod.POST, "/print/:printerName/pdf").handler(event -> { + event.request().body().onSuccess(requestBody -> { + boolean booleanResponse = false; + try { + String printerName = event.request().getParam("printerName"); + byte[] pdfBytes = requestBody.getBytes(); + booleanResponse = printingServerListener.onPdfRequest(printerName, pdfBytes); + } catch (Exception ignored) { + } + + JsonObject response = new JsonObject().put("ok", booleanResponse); + + event.response().putHeader("content-type", "application/json") + .end(response.encode()); + }); + }); + + } + + public void start() { + this.server.listen(this.config.getListenPort()); + } + + public void stop() { + this.server.close(e -> { + Log.i("MY_LOG", "Server has been stopped"); + }); + } + + +} diff --git a/app/src/main/java/com/denco/assemblrprintingservice/server/PrintingServerConfig.java b/app/src/main/java/com/denco/assemblrprintingservice/server/PrintingServerConfig.java new file mode 100644 index 0000000..aa95a9b --- /dev/null +++ b/app/src/main/java/com/denco/assemblrprintingservice/server/PrintingServerConfig.java @@ -0,0 +1,14 @@ +package com.denco.assemblrprintingservice.server; + +public class PrintingServerConfig { + + private final int listenPort; + + public PrintingServerConfig(int listenPort) { + this.listenPort = listenPort; + } + + public int getListenPort() { + return listenPort; + } +} diff --git a/app/src/main/java/com/denco/assemblrprintingservice/server/PrintingServerListener.java b/app/src/main/java/com/denco/assemblrprintingservice/server/PrintingServerListener.java new file mode 100644 index 0000000..d8bcfd9 --- /dev/null +++ b/app/src/main/java/com/denco/assemblrprintingservice/server/PrintingServerListener.java @@ -0,0 +1,8 @@ +package com.denco.assemblrprintingservice.server; + +public interface PrintingServerListener { + boolean onImageRequest(String printerName, byte[] imageData); + + boolean onPdfRequest(String printerName, byte[] pdfData); + +} diff --git a/app/src/main/java/com/denco/assemblrprintingservice/ui/dashboard/DashboardFragment.java b/app/src/main/java/com/denco/assemblrprintingservice/ui/dashboard/DashboardFragment.java new file mode 100644 index 0000000..4037074 --- /dev/null +++ b/app/src/main/java/com/denco/assemblrprintingservice/ui/dashboard/DashboardFragment.java @@ -0,0 +1,37 @@ +package com.denco.assemblrprintingservice.ui.dashboard; + +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.denco.assemblrprintingservice.databinding.FragmentDashboardBinding; + +public class DashboardFragment extends Fragment { + + private FragmentDashboardBinding binding; + + public View onCreateView(@NonNull LayoutInflater inflater, + ViewGroup container, Bundle savedInstanceState) { + DashboardViewModel dashboardViewModel = + new ViewModelProvider(this).get(DashboardViewModel.class); + + binding = FragmentDashboardBinding.inflate(inflater, container, false); + View root = binding.getRoot(); + + final TextView textView = binding.textDashboard; + dashboardViewModel.getText().observe(getViewLifecycleOwner(), textView::setText); + return root; + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + binding = null; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/denco/assemblrprintingservice/ui/dashboard/DashboardViewModel.java b/app/src/main/java/com/denco/assemblrprintingservice/ui/dashboard/DashboardViewModel.java new file mode 100644 index 0000000..7a7548b --- /dev/null +++ b/app/src/main/java/com/denco/assemblrprintingservice/ui/dashboard/DashboardViewModel.java @@ -0,0 +1,19 @@ +package com.denco.assemblrprintingservice.ui.dashboard; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +public class DashboardViewModel extends ViewModel { + + private final MutableLiveData mText; + + public DashboardViewModel() { + mText = new MutableLiveData<>(); + mText.setValue("This is dashboard fragment"); + } + + public LiveData getText() { + return mText; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/denco/assemblrprintingservice/ui/home/HomeFragment.java b/app/src/main/java/com/denco/assemblrprintingservice/ui/home/HomeFragment.java new file mode 100644 index 0000000..af19f6e --- /dev/null +++ b/app/src/main/java/com/denco/assemblrprintingservice/ui/home/HomeFragment.java @@ -0,0 +1,37 @@ +package com.denco.assemblrprintingservice.ui.home; + +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.denco.assemblrprintingservice.databinding.FragmentHomeBinding; + +public class HomeFragment extends Fragment { + + private FragmentHomeBinding binding; + + public View onCreateView(@NonNull LayoutInflater inflater, + ViewGroup container, Bundle savedInstanceState) { + HomeViewModel homeViewModel = + new ViewModelProvider(this).get(HomeViewModel.class); + + binding = FragmentHomeBinding.inflate(inflater, container, false); + View root = binding.getRoot(); + + final TextView textView = binding.textHome; + homeViewModel.getText().observe(getViewLifecycleOwner(), textView::setText); + return root; + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + binding = null; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/denco/assemblrprintingservice/ui/home/HomeViewModel.java b/app/src/main/java/com/denco/assemblrprintingservice/ui/home/HomeViewModel.java new file mode 100644 index 0000000..72c0026 --- /dev/null +++ b/app/src/main/java/com/denco/assemblrprintingservice/ui/home/HomeViewModel.java @@ -0,0 +1,19 @@ +package com.denco.assemblrprintingservice.ui.home; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +public class HomeViewModel extends ViewModel { + + private final MutableLiveData mText; + + public HomeViewModel() { + mText = new MutableLiveData<>(); + mText.setValue("This is home fragment"); + } + + public LiveData getText() { + return mText; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/denco/assemblrprintingservice/ui/notifications/NotificationsFragment.java b/app/src/main/java/com/denco/assemblrprintingservice/ui/notifications/NotificationsFragment.java new file mode 100644 index 0000000..82b76ff --- /dev/null +++ b/app/src/main/java/com/denco/assemblrprintingservice/ui/notifications/NotificationsFragment.java @@ -0,0 +1,37 @@ +package com.denco.assemblrprintingservice.ui.notifications; + +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.denco.assemblrprintingservice.databinding.FragmentNotificationsBinding; + +public class NotificationsFragment extends Fragment { + + private FragmentNotificationsBinding binding; + + public View onCreateView(@NonNull LayoutInflater inflater, + ViewGroup container, Bundle savedInstanceState) { + NotificationsViewModel notificationsViewModel = + new ViewModelProvider(this).get(NotificationsViewModel.class); + + binding = FragmentNotificationsBinding.inflate(inflater, container, false); + View root = binding.getRoot(); + + final TextView textView = binding.textNotifications; + notificationsViewModel.getText().observe(getViewLifecycleOwner(), textView::setText); + return root; + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + binding = null; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/denco/assemblrprintingservice/ui/notifications/NotificationsViewModel.java b/app/src/main/java/com/denco/assemblrprintingservice/ui/notifications/NotificationsViewModel.java new file mode 100644 index 0000000..0b2579f --- /dev/null +++ b/app/src/main/java/com/denco/assemblrprintingservice/ui/notifications/NotificationsViewModel.java @@ -0,0 +1,19 @@ +package com.denco.assemblrprintingservice.ui.notifications; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +public class NotificationsViewModel extends ViewModel { + + private final MutableLiveData mText; + + public NotificationsViewModel() { + mText = new MutableLiveData<>(); + mText.setValue("This is notifications fragment"); + } + + public LiveData getText() { + return mText; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_dashboard_black_24dp.xml b/app/src/main/res/drawable/ic_dashboard_black_24dp.xml new file mode 100644 index 0000000..46fc8de --- /dev/null +++ b/app/src/main/res/drawable/ic_dashboard_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_home_black_24dp.xml b/app/src/main/res/drawable/ic_home_black_24dp.xml new file mode 100644 index 0000000..f8bb0b5 --- /dev/null +++ b/app/src/main/res/drawable/ic_home_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_notifications_black_24dp.xml b/app/src/main/res/drawable/ic_notifications_black_24dp.xml new file mode 100644 index 0000000..78b75c3 --- /dev/null +++ b/app/src/main/res/drawable/ic_notifications_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..e497992 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,44 @@ + + + + + + + + + +