瀏覽代碼

点击非输入框将隐藏键盘

ccc 2 月之前
父節點
當前提交
d7e499c085

+ 283 - 0
lib_base/src/main/res/values-de/strings.xml

@@ -0,0 +1,283 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="base_network_disconnected">Netzwerk getrennt</string>
+    <string name="base_network_connected">Netzwerk verbunden</string>
+
+    <string name="base_plc_debug_1">Sekundärer Kernpunkt 1</string>
+    <string name="base_plc_debug_2">Luftpumpe mit niedriger Drehzahl</string>
+    <string name="base_plc_debug_3">Luftpumpe mit mittlerer Drehzahl</string>
+    <string name="base_plc_debug_4">Luftpumpe mit hoher Drehzahl</string>
+    <string name="base_plc_debug_5">Heizdraht</string>
+    <string name="base_plc_debug_6">Motor für Mais vorwärts</string>
+    <string name="base_plc_debug_7">Motor für Mais rückwärts</string>
+    <string name="base_plc_debug_8">Motor für Salzmais vorwärts</string>
+    <string name="base_plc_debug_9">Rückwärtslauf des Salzkornmotors</string>
+    <string name="base_plc_debug_10">Becherabwurfmotor</string>
+    <string name="base_plc_debug_11">Schallwand</string>
+    <string name="base_plc_debug_12">Tür zur Lebensmittelaufnahme</string>
+    <string name="base_plc_debug_13">Sekundärkernposition 13</string>
+    <string name="base_plc_debug_14">Sekundärkernposition 14</string>
+    <string name="base_plc_debug_15">Sekundärkernposition 15</string>
+    <string name="base_plc_debug_16">Sekundärkernposition 16</string>
+    <string name="base_plc_debug_17">Sekundärkernposition 17</string>
+    <string name="base_plc_debug_18">Sekundärkernposition 18</string>
+    <string name="base_plc_debug_19">Sekundärkernposition 19</string>
+    <string name="base_plc_debug_20">Sekundärkernpunkt 20</string>
+    <string name="base_plc_debug_21"></string>
+    <string name="base_plc_debug_22"></string>
+    <string name="base_plc_debug_23"></string>
+
+    <string name="base_plc_param_1">Luftpumpe niedrige Drehzahl</string>
+    <string name="base_plc_param_2">Luftpumpe mittlere Drehzahl</string>
+    <string name="base_plc_param_3">Luftpumpe hohe Drehzahl</string>
+    <string name="base_plc_param_4">Zeit mit starkem Wind</string>
+    <string name="base_plc_param_5">Schließzeit der Blende</string>
+    <string name="base_plc_param_6">Temperatureinstellung</string>
+    <string name="base_plc_param_7">Heizzeit</string>
+    <string name="base_plc_param_8">Windgeschwindigkeit während der Produktion</string>
+    <string name="base_plc_param_9">Obere Grenze der Verdampferisolation</string>
+    <string name="base_plc_alarm_1">Mais poppt nicht</string>
+    <string name="base_plc_alarm_2">Becher fehlt</string>
+    <string name="base_plc_alarm_3">Salzmais fehlt</string>
+    <string name="base_plc_alarm_4">Zuckermais fehlt</string>
+    <string name="base_plc_alarm_5">Kein Temperaturanstieg</string>
+    <string name="base_plc_alarm_6">Temperatur zu hoch</string>
+    <string name="base_plc_alarm_7">Baffle-Reset fehlgeschlagen</string>
+    <string name="base_plc_alarm_8">Maiskolben steckt fest</string>
+
+    <string name="base_pro_01">Süßes Popcorn</string>
+    <string name="base_pro_02">Salziges Popcorn</string>
+    <string name="base_two_code">WeChat Alipay</string>
+    <string name="base_bill_coin">Banknoten und Münzen</string>
+    <string name="base_nayax">Nayax</string>
+    <string name="base_mdb_no_cash">MDB-Kreditkarte</string>
+    <string name="base_soepay">Soepay</string>
+    <string name="base_other1">Systemeinstellungen</string>
+    <string name="base_other2">Einstellungen der seriellen Schnittstelle</string>
+    <string name="base_other3">Funktion aktiviert</string>
+    <string name="base_other4">Warenkorbeinstellungen</string>
+    <string name="base_other5">Einstellungen ändern</string>
+    <string name="base_other6">Sonstige</string>
+    <string name="shopping_trolley">Einkaufswagen</string>
+    <string name="promotion_code">Aktionscode</string>
+    <string name="change">Funktion ändern</string>
+    <string name="agreement">Kommunikationsprotokoll</string>
+    <string name="bill_country">Auswahl nationaler Banknoten</string>
+    <string name="ttys_nayax">Serielle Nayax-Schnittstelle</string>
+    <string name="ttys_mdb">Serielle MDB-Schnittstelle</string>
+    <string name="ttys_plc">Serielle SPS-Schnittstelle</string>
+    <string name="nayax_mode">Nayax-Ruhemodus</string>
+    <string name="bill_collocation">MDB-Banknotenverwahrung</string>
+    <string name="mdb_level">MDB-L3-Ebene</string>
+    <string name="base_free_pay">Freie Produktion</string>
+    <string name="way_contacts">Kontakt:</string>
+    <string name="name_contacts">Kontakt:</string>
+
+    <string name="backstage_update_success">Update erfolgreich</string>
+    <string name="backstage_data_null_tips">Daten sind leer, können nicht bearbeitet werden</string>
+    <string name="backstage_check_update">Nach Updates suchen</string>
+    <string name="backstage_system_set">Systemeinstellungen</string>
+    <string name="backstage_setting_1">Produkteinstellungen</string>
+    <string name="backstage_setting_2">Parameteranpassung</string>
+    <string name="backstage_setting_3">Datenstatistik</string>
+    <string name="backstage_setting_4">Sprachumschaltung</string>
+    <string name="backstage_setting_5">Alarmaufzeichnung</string>
+    <string name="backstage_setting_6">Passwort zurücksetzen</string>
+    <string name="backstage_setting_6_1">Passwort zurücksetzend</string>
+    <string name="backstage_setting_7">Geplantes Ein- und Ausschalten</string>
+    <string name="backstage_setting_8">Berechtigungseinstellungen</string>
+    <string name="backstage_setting_9">Sonstige</string>
+    <string name="backstage_setting_10">Zahlungsmethode</string>
+    <string name="backstage_product_1">Produktpreisanpassung</string>
+    <string name="backstage_product_2">Produktinformationseinstellungen</string>
+    <string name="backstage_product_3">Produktname, Bildänderung</string>
+    <string name="backstage_product_4">Produkt-Debugging</string>
+    <string name="backstage_param_set_1">Debug-Seite</string>
+    <string name="backstage_param_set_2">Allgemeine Parameter</string>
+    <string name="backstage_param_set_3">Alarmabschirmung</string>
+    <string name="backstage_back">Rückgabe</string>
+    <string name="backstage_version">Versionsnummer:</string>
+    <string name="backstage_connected">Verbunden:</string>
+    <string name="backstage_open_dev_tips">Möchten Sie die Maschine sofort starten? </string>
+    <string name="backstage_start_dev">Jetzt starten</string>
+    <string name="backstage_cancle">Abbrechen</string>
+    <string name="backstage_quit_app">Klicken Sie erneut auf die Eingabetaste, um das Programm zu beenden</string>
+    <string name="backstage_latest_version">Dies ist die neueste Version.</string>
+    <string name="backstage_connecting">Verbindungsantrag</string>
+    <string name="backstage_update_price">Preisanpassung bestätigen</string>
+    <string name="backstage_connection_server">Mit Server verbinden</string>
+    <string name="backstage_connection_server_tips">Fernverbindungssystem beantragen</string>
+    <string name="backstage_connection_server_hint">Bitte geben Sie die Verwaltungssystem-ID ein</string>
+    <string name="backstage_connection_server_btn">Jetzt beantragen</string>
+    <string name="backstage_update_now">Jetzt aktualisieren</string>
+    <string name="backstage_new_version_discover">Neue Version Gefunden:</string>
+    <string name="backstage_down_progress">Download-Fortschritt:</string>
+    <string name="backstage_old_password">Altes Passwort</string>
+    <string name="backstage_old_password_input">Bitte geben Sie Ihr altes Passwort ein</string>
+    <string name="backstage_new_password">Neues Passwort</string>
+    <string name="backstage_new_password_input">Bitte geben Sie Ihr neues Passwort ein</string>
+    <string name="backstage_confirm_password">Passwort bestätigen</string>
+    <string name="backstage_confirm_password_input">Bitte geben Sie Ihr Bestätigungspasswort ein</string>
+    <string name="backstage_confirm">Bestätigen</string>
+    <string name="backstage_update_progress_init_status">Download-Fortschritt: 0 %</string>
+    <string name="backstage_update">Aktualisieren</string>
+    <string name="backstage_confirm_update">Änderungen bestätigen</string>
+    <string name="backstage_ok_dialog_title">Sind Sie sicher, dass Sie das tun möchten? </string>
+    <string name="backstage_search_hint">Bitte geben Sie den zu suchenden Inhalt ein</string>
+    <string name="backstage_steam_wendu">Dampftemperatur</string>
+    <string name="backstage_choose_time">Bitte geben Sie die Uhrzeit ein</string>
+    <string name="backstage_year_input">Bitte geben Sie das Jahr ein</string>
+    <string name="backstage_month_input">Bitte geben Sie den Monat ein</string>
+    <string name="backstage_day_input">Bitte geben Sie den Tag ein</string>
+    <string name="backstage_hour_input">Bitte geben Sie die Stunde ein</string>
+    <string name="backstage_ringht_month_input">Bitte geben Sie den korrekten Monat ein</string>
+    <string name="backstage_ringht_day_input">Bitte geben Sie den korrekten Tag ein</string>
+    <string name="backstage_ringht_hour_input">Bitte geben Sie die korrekte Stunde ein</string>
+    <string name="tian">Die Zeit darf nicht länger als zwei Tage sein</string>
+    <string name="yue">Die Uhrzeit darf einen Monat nicht überschreiten</string>
+    <string name="yues">Zeit darf 12 Monate nicht überschreiten</string>
+    <string name="sjcw">Zeitfehler</string>
+    <string name="nian">Zeit darf 10 Jahre nicht überschreiten</string>
+    <string name="open_sleep">Ruhezustand öffnen</string>
+    <string name="close_sleep">Ruhezustand schließen</string>
+    <string name="close_dev">Herunterfahren</string>
+    <string name="open_dev">Start</string>
+    <string name="sunday">So</string>
+    <string name="monday">Mo</string>
+    <string name="tuesday">Di</string>
+    <string name="wednesday">Mi</string>
+    <string name="thursday">Do</string>
+    <string name="friday">Fr</string>
+    <string name="saturday">Sa</string>
+    <string name="backstage_bar_chart_statistics">Balkendiagrammstatistik</string>
+    <string name="backstage_order_details">Bestelldetails</string>
+    <string name="backstage_add_lock">Alarm hinzufügen</string>
+    <string name="backstage_open_lock">Lokalen Alarm öffnen</string>
+
+    <string name="home_dev_id">Gerätenummer:</string>
+    <string name="home_steam_wendu">Dampftemperatur</string>
+    <string name="home_login">Anmelden</string>
+    <string name="home_back_user">Zurück zur Benutzeroberfläche</string>
+    <string name="home_login_tips_1">Bitte Kontopasswort überprüfen</string>
+    <string name="home_login_tips_2">Anmeldung erfolgreichssful</string>
+    <string name="home_tips_dialog_1">Maschinenkommunikation fehlgeschlagen</string>
+    <string name="home_tips_dialog_2">Bitte gehen Sie vor dem Kauf ins Backend, um die Maschine einzuschalten</string>
+    <string name="home_tips_dialog_3">Die Maschine hat einen Alarm ausgelöst. Nachdem Sie das Problem behoben haben, schalten Sie die Maschine bitte im Backend ein, bevor Sie kaufen.</string>
+    <string name="home_tips_dialog_4">Die Maschine startet, bitte warten.</string>
+    <string name="home_tips_dialog_5">Die Maschine bereitet vor. Bitte warten.</string>
+    <string name="home_confirm">Bestätigen</string>
+    <string name="home_cancle">Abbrechen</string>
+    <string name="home_make_success">Herstellung abgeschlossen</string>
+    <string name="home_make_success_tips">Bitte öffnen Sie die Tür unten, um das Popcorn zu entnehmen.</string>
+    <string name="home_residue_s">Verbleibende 40 Sekunden</string>
+    <string name="home_again_buy">Erneut kaufen</string>
+    <string name="home_quit_app">Klicken Sie erneut auf die Eingabetaste, um die App zu verlassen.</string>
+    <string name="home_choosepay_title">Zahlungsmethode auswählen</string>
+    <string name="home_tips_dialog_6">Bitte verbinden Sie sich vor der Verwendung mit dem Server</string>
+    <string name="home_shopping_cart_null">Es befinden sich keine Artikel im Warenkorb. Bitte wählen Sie zuerst Artikel aus</string>
+    <string name="alarm_message_01">Mais poppt nicht</string>
+    <string name="alarm_message_02">Becher fehlt</string>
+    <string name="alarm_message_03">Gesalzener Mais fehlt</string>
+    <string name="alarm_message_04">Zuckermais fehlt</string>
+    <string name="alarm_message_05">Kein Temperaturanstieg</string>
+    <string name="alarm_message_06">Temperatur zu hoch</string>
+    <string name="alarm_message_07">Rücksetzen der Blende fehlgeschlagen</string>
+    <string name="alarm_message_08">Maiskolben steckt fest</string>
+    <string name="heartbeat_temp">Generator Temperatur</string>
+    <string name="mqtt_con_state">mqtt ist noch nicht verbunden, bitte warten</string>
+    <string name="mdb_cash_sale">MDB-Barverkauf</string>
+    <string name="contact_way">Kontaktmethode</string>
+    <string name="auto_start_hotspot">Hotspot starten</string>
+    <string name="name_hotspot">Hotspot-Name</string>
+    <string name="long_click_show_status_bar">Statusleiste anzeigen</string>
+    <string name="pwd_hotspot">Hotspot-Passwort</string>
+    <string name="mdb_rate">MDB-Kurs</string>
+    <string name="card_text">Leitfaden für Verbraucher zum Kartenlesen</string>
+    <string name="bill_trust">Banknoten-Vertrauen</string>
+    <string name="make_clean_price">Betrag nach der Einzahlung löschen</string>
+    <string name="ad_rule">Werberegeln</string>
+    <string name="auto_return_home">Automatisch return(Minuten)</string>
+    <string name="sleep_text">Ruhetext</string>
+    <string name="shopping_cart_size">Warenkorbgröße</string>
+    <string name="two_price_discount">Rabatt für zweiten Artikel</string>
+    <string name="five_price_discount">Rabatt für fünften Artikel</string>
+    <string name="three_price_discount">Rabatt für dritten Artikel</string>
+    <string name="tips_discount_text">Rabatt-Trinkgeld</string>
+    <string name="discount_function">Rabattfunktion</string>
+    <string name="change_function">Wechselgeldfunktion</string>
+    <string name="change_bill">Wechselgeld</string>
+    <string name="change_coin">Wechselgeld</string>
+    <string name="change_dollar">Münzbetrag</string>
+    <string name="change_coin_rep">Wechselgeldbestand</string>
+    <string name="change_allow_number">Auf einmal erlaubtes Wechselgeld</string>
+    <string name="change_warning_number">Warnbestand ändern</string>
+    <string name="volume">Lautstärke</string>
+    <string name="luminance">Helligkeit</string>
+    <string name="logo_text">Symbol ändern</string>
+    <string name="sim">SIM</string>
+    <string name="sim_imei">SIM_IMEI</string>
+    <string name="cut_system_set">Systemeinstellungen wechseln</string>
+    <string name="contact">Kontaktname</string>
+    <string name="wifi_hotspot">WLAN-Hotspot</string>
+    <string name="staff_login">Mitarbeiter-Login</string>
+    <string name="backstage_operate">Betrieb</string>
+    <string name="coin_multiply">Münzimpulsmultiplikation</string>
+    <string name="coin_divide">Münzimpulsdivision</string>
+    <string name="not_selected">Nicht</string>
+    <string name="go_pay">Bezahlen</string>
+    <string name="have_banknotes">Banknoten \ninserted:</string>
+    <string name="have_coin">Münze \ninserted:</string>
+    <string name="contact_message">Kontaktinformationen</string>
+    <string name="unify_price">Preisänderung von Unify:</string>
+    <string name="software_version">Softwareversion</string>
+    <string name="body_version">Body-Version</string>
+    <string name="name">Name</string>
+    <string name="show">Anzeigen</string>
+    <string name="hide">Ausblenden</string>
+    <string name="image">Bild</string>
+    <string name="replace_picture">Klicken, um Produktbild zu ersetzen</string>
+    <string name="more_setup">Weitere Einstellungen</string>
+    <string name="start_time">Startzeit</string>
+    <string name="select_start_time">Wählen Siee start</string>
+    <string name="select_end_time">Ende auswählen</string>
+    <string name="end_time">Endzeit</string>
+    <string name="unit">Einheit</string>
+    <string name="time">Stunde</string>
+    <string name="date">Tag</string>
+    <string name="month">Monat</string>
+    <string name="year">Jahr</string>
+    <string name="filter">Filter</string>
+    <string name="clear_alarm_records">Alarmaufzeichnungen löschen</string>
+    <string name="period">Zeit</string>
+    <string name="no_order_data">Keine Auftragsdaten</string>
+    <string name="no_alarm_information">Keine Alarminformationen</string>
+    <string name="error_events">Fehlerereignisse</string>
+    <string name="rewrite">Nachfüllen</string>
+    <string name="open">Öffnen</string>
+    <string name="close">Schließen</string>
+    <string name="turn_on_sleep">Einschalten im Ruhezustand</string>
+    <string name="turn_off_sleep">Ruhezustand deaktivieren</string>
+    <string name="device_sleep">Gerät im Ruhezustand</string>
+    <string name="contact_details">Kontaktdaten</string>
+    <string name="custom_name">Benutzerdefinierter Name</string>
+    <string name="no_sales_data">Für diesen Zeitraum liegen keine Verkaufsdaten vor</string>
+    <string name="remark">Bemerkung</string>
+    <string name="ict_currency">ICT-Währung:</string>
+    <string name="customized_payment">Benutzerdefinierte Zahlung:</string>
+    <string name="init_success">Initialisierung erfolgreich</string>
+    <string name="init_fail">Initialisierung fehlgeschlagen</string>
+    <string name="warn_reminder">Warn-Erinnerung</string>
+    <string name="initializing">Initialisierung...</string>
+    <string name="second">Sekunde</string>
+    <string name="delete">Löschen</string>
+    <string name="clear">Leeren</string>
+    <string name="shopping_cart">Warenkorb</string>
+    <string name="total_amount">Gesamtbetrag</string>
+    <string name="univalent">Einzelpreis</string>
+    <string name="close_interface">Oberfläche schließen</string>
+    <string name="modific_success">Änderung erfolgreich</string>
+    <string name="modify">Ändern</string>
+    <string name="choose_time">Uhrzeit auswählen</string>
+    <string name="week">Woche</string>
+    <string name="type">Typ</string>
+</resources>

+ 1 - 1
lib_common/src/main/java/com/quyunshuo/androidbaseframemvvm/common/constant/MMKVName.kt

@@ -7,7 +7,7 @@ abstract class MMKVName {
 
     companion object {
 
-        var APP_VERSION: Int = 2 //区分国内外版本
+        var APP_VERSION: Int = 2 //区分国内外版本   国内1,国外2
 
         val PAY_TYPE: String
             get() = "PAY_TYPE"//支付方式

+ 46 - 90
lib_common/src/main/java/com/quyunshuo/androidbaseframemvvm/common/util/LanguageUtil.kt

@@ -1,7 +1,9 @@
 package com.quyunshuo.androidbaseframemvvm.common.util
 
+import android.content.Context
 import android.content.res.Configuration
 import android.content.res.Resources
+import android.os.Build
 import android.util.Log
 import com.quyunshuo.androidbaseframemvvm.base.BaseApplication
 import com.quyunshuo.androidbaseframemvvm.base.utils.SpUtils
@@ -60,9 +62,7 @@ object LanguageUtil {
         val latvia: String = language[31] //拉脱维亚
         val ricardoAmaro: String = language[32] //葡萄牙  Ricardo Amaro
         val eesti: String = language[33] //爱沙尼亚
-
         val mgy: String = language[34] //蒙古
-
         val bsy: String = language[35]
         val slwny: String = language[36] //斯洛文尼亚语
         val kldy: String = language[37] //克罗地亚语
@@ -154,92 +154,51 @@ object LanguageUtil {
         "(Bosanski)波斯尼亚语",
     ))
 
-    fun setLanguage():String {
-        var languageType = SpUtils.getInt(MMKVName.LANGUAGE_TYPE, -1)
-        var languageStr = ""
-        if (languageType == 1) {
-            languageStr = CHINESE
-        } else if (languageType == 2) {
-            languageStr = ENGLISH
-        } else if (languageType == 3) {
-            languageStr = GERMAN
-        } else if (languageType == 4) {
-            languageStr = RUSSIA
-        } else if (languageType == 5) {
-            languageStr = JAPANESE
-        } else if (languageType == 6) {
-            languageStr = SPANISH
-        } else if (languageType == 7) {
-            languageStr = FRENCH
-        } else if (languageType == 8) {
-            languageStr = BULGARIA
-        } else if (languageType == 9) {
-            languageStr = DanMai
-        } else if (languageType == 10) {
-            languageStr = FenLan
-        } else if (languageType == 11) {
-            languageStr = HeLan
-        } else if (languageType == 12) {
-            languageStr = JieKe
-        } else if (languageType == 13) {
-            languageStr = RouMaNiYa
-        } else if (languageType == 14) {
-            languageStr = NuoWei
-        } else if (languageType == 15) {
-            languageStr = PuTaoYa
-        } else if (languageType == 16) {
-            languageStr = RuiShi
-        } else if (languageType == 17) {
-            languageStr = SiFaLuoKe
-        } else if (languageType == 18) {
-            languageStr = XiongYaLi
-        } else if (languageType == 19) {
-            languageStr = YiDaLi
-        } else if (languageType == 20) {
-            languageStr = TaiWang
-        } else if (languageType == 21) {
-            languageStr = hangguo
-        } else if (languageType == 22) {
-            languageStr = bolan
-        } else if (languageType == 23) {
-            languageStr = wukelan
-        } else if (languageType == 24) {
-            languageStr = ymny
-        } else if (languageType == 25) {
-            languageStr = alb
-        } else if (languageType == 26) {
-            languageStr = tg
-        } else if (languageType == 27) {
-            languageStr = ysl
-        } else if (languageType == 28) {
-            languageStr = brazil
-        } else if (languageType == 29) {
-            languageStr = gljy
-        } else if (languageType == 30) {
-            languageStr = brazi2
-        } else if (languageType == 31) {
-            languageStr = turkey
-        } else if (languageType == 32) {
-            languageStr = latvia
-        } else if (languageType == 33) {
-            languageStr = ricardoAmaro
-        } else if (languageType == 34) {
-            languageStr = eesti
-        } else if (languageType == 35) {
-            languageStr = mgy
-        } else if (languageType == 36) {
-            languageStr = bsy
-        } else if (languageType == 37) {
-            languageStr = slwny
-        } else if (languageType == 38) {
-            languageStr = kldy
-        } else if (languageType == 39) {
-            languageStr = bsny
-        } else {
-            languageStr = CHINESE
-            SpUtils.putInt(MMKVName.LANGUAGE_TYPE, -1)
+    fun setLanguage(): String {
+        val languageType = SpUtils.getInt(MMKVName.LANGUAGE_TYPE, -1)
+        val languageStr = when (languageType) {
+            1 -> CHINESE
+            2 -> ENGLISH
+            3 -> GERMAN
+            4 -> RUSSIA
+            5 -> JAPANESE
+            6 -> SPANISH
+            7 -> FRENCH
+            8 -> BULGARIA
+            9 -> DanMai
+            10 -> FenLan
+            11 -> HeLan
+            12 -> JieKe
+            13 -> RouMaNiYa
+            14 -> NuoWei
+            15 -> PuTaoYa
+            16 -> RuiShi
+            17 -> SiFaLuoKe
+            18 -> XiongYaLi
+            19 -> YiDaLi
+            20 -> TaiWang
+            21 -> hangguo
+            22 -> bolan
+            23 -> wukelan
+            24 -> ymny
+            25 -> alb
+            26 -> tg
+            27 -> ysl
+            28 -> brazil
+            29 -> gljy
+            30 -> brazi2
+            31 -> turkey
+            32 -> latvia
+            33 -> ricardoAmaro
+            34 -> eesti
+            35 -> mgy
+            36 -> bsy
+            37 -> slwny
+            38 -> kldy
+            39 -> bsny
+            else -> CHINESE
         }
-        selectLanguage(languageStr)
+        selectLanguage(languageStr) // 调用设置语言方法
         Log.d(TAG, "setLanguage: "+languageStr)
         return languageStr
     }
@@ -271,7 +230,4 @@ object LanguageUtil {
 
 
     }
-
-
-
 }

+ 27 - 0
module_backstage/src/main/java/com/module/backstage/activity/setting/SettingActivity.kt

@@ -3,6 +3,7 @@ package com.module.backstage.activity.setting
 import android.annotation.SuppressLint
 import android.app.XzjhSystemManager
 import android.content.Context
+import android.content.res.Configuration
 import android.content.res.Resources
 import android.graphics.Color
 import android.os.Build
@@ -10,9 +11,12 @@ import android.os.Environment
 import android.os.Handler
 import android.util.Log
 import android.view.MenuItem
+import android.view.MotionEvent
 import android.view.View
 import android.view.View.VISIBLE
 import android.view.WindowManager
+import android.view.inputmethod.InputMethodManager
+import android.widget.EditText
 import android.widget.ImageView
 import android.widget.TextView
 import android.widget.Toast
@@ -645,4 +649,27 @@ class SettingActivity : BaseActivity<BackstageActivitySettingBinding, SettingVie
         loadingJob?.cancel()
         dialog?.dismiss()
     }
+
+    override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
+        if (ev.action == MotionEvent.ACTION_DOWN) {
+            val v = currentFocus
+            if (v is EditText) {
+                val l = IntArray(2)
+                v.getLocationOnScreen(l)
+                val x = ev.rawX + v.left - l[0]
+                val y = ev.rawY + v.top - l[1]
+                if (x < v.width && y < v.height) {
+                    return super.dispatchTouchEvent(ev)
+                } else {
+                    hideKeyboard(v)
+                }
+            }
+        }
+        return super.dispatchTouchEvent(ev)
+    }
+
+    private fun hideKeyboard(view: View) {
+        val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
+        imm.hideSoftInputFromWindow(view.windowToken, 0)
+    }
 }

+ 1 - 2
module_backstage/src/main/java/com/module/backstage/adapter/ProductAdapter.kt

@@ -42,9 +42,8 @@ class ProductAdapter(var productList:ArrayList<ProductDataBean>): RecyclerView.A
 //                    itemListener?.onClickListener(tvMakePro,layoutPosition,"MAKE")
 //                }
                 tvUpdatePic.setOnClickListener {
-                    ToastUtil.switchToastStyleToWarn("开发中")
+//                    ToastUtil.switchToastStyleToWarn("开发中")
                     itemListener?.onClickListener(tvUpdatePic,layoutPosition,"PIC")
-
                 }
             }
         }

+ 0 - 2
module_backstage/src/main/java/com/module/backstage/fragment/LanguageFragment.kt

@@ -41,9 +41,7 @@ class LanguageFragment : BaseFragment<BackstageFragmentLanguageBinding, Language
             SpUtils.putInt(MMKVName.LANGUAGE_TYPE,languageType)
             set(languageValue)
         }
-
     }
-
     override fun initObserve() {
     }
 

+ 23 - 3
module_backstage/src/main/java/com/module/backstage/fragment/PayFragment.kt

@@ -5,11 +5,13 @@ import android.util.Log
 import androidx.fragment.app.viewModels
 import androidx.recyclerview.widget.GridLayoutManager
 import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
 import com.module.backstage.R
 import com.module.backstage.adapter.PayAdapter
 import com.module.backstage.databinding.BackstageFragmentPayBinding
 import com.module.backstage.dialog.PayGoreSetDialog
 import com.module.backstage.vm.PayFragmentVM
+import com.quyunshuo.androidbaseframemvvm.base.addressenum.PayEnum
 import com.quyunshuo.androidbaseframemvvm.base.utils.SpUtils
 import com.quyunshuo.androidbaseframemvvm.common.bean.LocalAlarmClockBean
 import com.quyunshuo.androidbaseframemvvm.common.constant.MMKVName
@@ -53,9 +55,27 @@ class PayFragment : BaseFragment<BackstageFragmentPayBinding, PayFragmentVM>() {
 
     private fun savePayType() {
         if (priceAdapter?.arrayListState?.size!! >0){
-            SpUtils.put(MMKVName.PAY_TYPE,Gson().toJson(priceAdapter?.arrayListState))
-            Log.d(TAG, "savePayType: "+Gson().toJson(priceAdapter?.arrayListState))
-            ToastUtil.switchToastStyleToSuccess(UiUtil.getStringRes(R.string.modific_success))
+            val gson = Gson()
+            val payTypeMap: MutableMap<String, Map<String, Any>> = gson.fromJson(
+                Gson().toJson(priceAdapter?.arrayListState),
+                object : TypeToken<MutableMap<String, Map<String, Any>>>() {}.type
+            )
+            if (MMKVName.APP_VERSION == 2) {
+                // 将 arrayListState 从 JSON 字符串转换为 Map
+                payTypeMap.remove("TwoCode")
+                // 保存修改后的数据
+                SpUtils.put(MMKVName.PAY_TYPE, gson.toJson(payTypeMap))
+                Log.d(TAG, "savePayType: " + gson.toJson(payTypeMap))
+                ToastUtil.switchToastStyleToSuccess(UiUtil.getStringRes(R.string.modific_success))
+            } else {
+                val keysToRemove = payTypeMap.keys.filter { it != "TwoCode" && it != "Free" }
+                for (key in keysToRemove) {
+                    payTypeMap.remove(key)
+                }
+                SpUtils.put(MMKVName.PAY_TYPE, Gson().toJson(priceAdapter?.arrayListState))
+                Log.d(TAG, "savePayType: " + Gson().toJson(priceAdapter?.arrayListState))
+                ToastUtil.switchToastStyleToSuccess(UiUtil.getStringRes(R.string.modific_success))
+            }
         }
 
     }

+ 113 - 12
module_backstage/src/main/java/com/module/backstage/fragment/product/ShowProductFragment.kt

@@ -1,7 +1,14 @@
 package com.module.backstage.fragment.product
 
+import android.Manifest
+import android.app.Activity
+import android.content.Intent
+import android.content.pm.PackageManager
+import android.net.Uri
+import android.provider.MediaStore
 import android.util.Log
 import android.view.View
+import androidx.core.content.ContextCompat
 import androidx.fragment.app.viewModels
 import androidx.recyclerview.widget.GridLayoutManager
 import com.google.gson.Gson
@@ -10,7 +17,9 @@ import com.module.backstage.R
 import com.module.backstage.adapter.ProductAdapter
 import com.module.backstage.databinding.BackstageFragmentShowProductBinding
 import com.module.backstage.dialog.OKCancelDialog
+import com.module.backstage.utils.ReaderUtils
 import com.module.backstage.vm.ShowProductFragmentVM
+import com.orhanobut.hawk.Hawk
 import com.quyunshuo.androidbaseframemvvm.base.utils.SpUtils
 import com.quyunshuo.androidbaseframemvvm.common.constant.MMKVName
 import com.quyunshuo.androidbaseframemvvm.common.listener.AdapterClickListener
@@ -18,6 +27,7 @@ import com.quyunshuo.androidbaseframemvvm.common.ui.BaseFragment
 import com.quyunshuo.androidbaseframemvvm.common.util.ToastUtil
 import com.quyunshuo.androidbaseframemvvm.common.util.UiUtil
 import dagger.hilt.android.AndroidEntryPoint
+import java.io.File
 
 /**
  * 显示花型Fragment
@@ -38,7 +48,12 @@ class ShowProductFragment : BaseFragment<BackstageFragmentShowProductBinding, Sh
         with(priceRvProduct) {
             //设置布局排列方式,默认垂直排列
             val gridLayoutManager: GridLayoutManager =
-                GridLayoutManager(this@ShowProductFragment.context, 1, GridLayoutManager.VERTICAL, false)
+                GridLayoutManager(
+                    this@ShowProductFragment.context,
+                    1,
+                    GridLayoutManager.VERTICAL,
+                    false
+                )
             layoutManager = gridLayoutManager
 
             productAdapter = ProductAdapter(mViewModel.getPriceData())
@@ -49,7 +64,7 @@ class ShowProductFragment : BaseFragment<BackstageFragmentShowProductBinding, Sh
 //                        showOkCancelDialog(data)
 //                    }else if(data =="PIC"){
 //                        切换图片
-                        showOkCancelDialog(data!!)
+                    showOkCancelDialog(data!!)
 //                    }
                 }
             })
@@ -57,23 +72,27 @@ class ShowProductFragment : BaseFragment<BackstageFragmentShowProductBinding, Sh
         }
         tvConfirm.setOnClickListener {
             for (i in 0 until mBinding.priceRvProduct.getLayoutManager()!!.getChildCount()) {
-                val holder = mBinding.priceRvProduct.findViewHolderForAdapterPosition(i) as ProductAdapter.MyViewHolder
-                Log.d(TAG, "holder.mBinding.rbClose.isChecked initView: "+holder.mBinding.rbClose.isChecked)
+                val holder =
+                    mBinding.priceRvProduct.findViewHolderForAdapterPosition(i) as ProductAdapter.MyViewHolder
+                Log.d(
+                    TAG,
+                    "holder.mBinding.rbClose.isChecked initView: " + holder.mBinding.rbClose.isChecked
+                )
                 //显示和隐藏
                 if (holder.mBinding.rbClose.isChecked) {
-                    productAdapter?.productList!![i].isSelected =true
-                }else{
-                    productAdapter?.productList!![i].isSelected =false
+                    productAdapter?.productList!![i].isSelected = true
+                } else {
+                    productAdapter?.productList!![i].isSelected = false
                 }
                 //是否自定义名字 :需要上传到服务器。要做好处理。超过10个请求,就要分批。
                 val customName = holder.mBinding.etSugarprice.text.toString().trim()
-                    productAdapter?.productList!![i].customName = customName
+                productAdapter?.productList!![i].customName = customName
                 //自定义图片
 
             }
 
             val toJson = Gson().toJson(productAdapter?.productList)
-            Log.d(TAG, "toJson : "+toJson)
+            Log.d(TAG, "toJson : " + toJson)
             SpUtils.putString(MMKVName.PRODUCT_DATA, toJson)
             ToastUtil.switchToastStyleToSuccess(UiUtil.getStringRes(R.string.backstage_update_success))
         }
@@ -84,22 +103,25 @@ class ShowProductFragment : BaseFragment<BackstageFragmentShowProductBinding, Sh
 
     override fun initRequestData() {
     }
+
     private fun showOkCancelDialog(data: String) {
         if (okCancelDialog == null) {
             okCancelDialog = this@ShowProductFragment.context?.let { OKCancelDialog(it) }
         }
-        okCancelDialog?.setListener(object: DialogClickListener {
+        okCancelDialog?.setListener(object : DialogClickListener {
             override fun onClickListener(type: Int, text: String?) {
                 when (type) {
-                    okCancelDialog?.type1-> {
+                    okCancelDialog?.type1 -> {
                         okCancelDialog?.dismiss()
                         //是否确认操作
                         if (data == "MAKE") {
                             //开始制作的逻辑
-                        }else if(data =="PIC"){
+                        } else if (data == "PIC") {
                             //切换图片
+                            permissions()
                         }
                     }
+
                     else -> {}
                 }
             }
@@ -113,4 +135,83 @@ class ShowProductFragment : BaseFragment<BackstageFragmentShowProductBinding, Sh
         mBinding.priceRvProduct.adapter = null
         super.onDestroyView()
     }
+
+    private val PHOTO = 100
+    private var mUri: Uri? = null
+    private var path: File? = null
+    private var isFilePathWithExtension = false
+    private val picture = mutableMapOf<String, File>()
+    private var currentPosition = 0
+
+    /**
+     * 获取系统系统相册权限
+     */
+    private fun permissions() {
+        if (ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
+            // 请求权限
+            requestPermissions(arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), PHOTO)
+        } else {
+            // 已经有权限,直接打开系统相册
+            choosePhoto()
+        }
+    }
+
+    private fun choosePhoto() {
+        // 打开系统相册
+        Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
+//        startActivityForResult(picture, 2) // 这里传入的请求码为2
+    }
+
+
+    /**
+     * 申请权限回调方法
+     *
+     * @param requestCode
+     * @param permissions
+     * @param grantResults
+     */
+    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
+        if (requestCode == PHOTO) {
+            if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+                choosePhoto()
+            } else {
+                // 权限被拒绝,提示用户
+//                Toast.makeText(context, "权限被拒绝,无法打开相册", Toast.LENGTH_SHORT).show()
+            }
+        }
+    }
+
+    /**
+     * 资源路径回调方法
+     * @param requestCode
+     * @param resultCode
+     * @param data
+     */
+    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+//        super.onActivityResult(requestCode, resultCode, data)
+
+        if (requestCode == 2 && resultCode == Activity.RESULT_OK && data != null) {
+            val uri = data.data // 获取路径
+            val str = uri?.path
+            isFilePathWithExtension = ReaderUtils.isFilePathWithExtension(str)
+            if (!isFilePathWithExtension) {
+                // 获取文件路径
+                path = File(ReaderUtils.getRealPathFromUri(requireContext(), uri))
+                Log.d("YourFragment", "onActivityResult: 当前位置: path"+path)
+                Log.d("YourFragment", "onActivityResult: 商品名: {goodsBean.nameChinese}")
+
+                // 将文件路径存入 Map
+//                picture[goodsBean.nameChinese] = path!!
+                // 更新 URI
+                mUri = Uri.fromFile(path)
+
+                // 将选择的图片路径保存到 Hawk 中
+//                Hawk.put("image", picture)
+
+                // 刷新适配器
+                mBinding.priceRvProduct.adapter?.notifyItemChanged(currentPosition)
+            }
+        }
+    }
 }

+ 50 - 0
module_backstage/src/main/java/com/module/backstage/utils/ReaderUtils.java

@@ -0,0 +1,50 @@
+package com.module.backstage.utils;
+
+
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.MediaStore;
+
+import java.io.File;
+
+/**
+ * 资源路径转为真实路径的工具类
+ */
+public class ReaderUtils {
+    
+    public static String getRealPathFromUri(Context context, Uri contentUri) {
+        Cursor cursor = null;
+        try {
+            String[] proj = {MediaStore.Images.Media.DATA};
+            cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
+            if (cursor != null && cursor.getColumnCount() > 0) {
+                cursor.moveToFirst();
+                int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
+                String path = cursor.getString(column_index);
+                return path;
+            } else {
+            }
+        } catch (Exception e) {
+        } finally {
+            if (cursor != null) {
+                cursor.close();
+            }
+        }
+        return "";
+    }
+
+    public static String getFilenameWithExtension(String filePath) {
+        if (filePath == null || filePath.length() == 0) {
+            return "";
+        }
+        int lastIndex = filePath.lastIndexOf(File.separator);
+        String filename = filePath.substring(lastIndex + 1);
+        return filename;
+    }
+
+    public static boolean isFilePathWithExtension(String filePath) {
+        String filename = getFilenameWithExtension(filePath);
+        return filename.contains(".");
+    }
+}

+ 1 - 2
module_home/src/main/java/com/quyunshuo/module/home/dialog/PayChooseDialogFragment.kt

@@ -95,8 +95,7 @@ class PayChooseDialogFragment :
                 if (MMKVName.APP_VERSION==1) {
                     arrayListState[PayEnum.TWO_CODE.code] = PayTypeBean(PayEnum.TWO_CODE.code, true)
                 } else {
-                    arrayListState[PayEnum.BILL_COIN.code] =
-                        PayTypeBean(PayEnum.BILL_COIN.code, true)
+                    arrayListState[PayEnum.BILL_COIN.code] = PayTypeBean(PayEnum.BILL_COIN.code, true)
                 }
             }
             Log.d("arrayListState", "arrayListState initView: " + arrayListState.size)

+ 1 - 0
module_home/src/main/java/com/quyunshuo/module/home/service/GlobalService.kt

@@ -196,6 +196,7 @@ class GlobalService :LifecycleService() {
      * 报警 弹窗提醒
      */
     private fun showWarringDialog(content: String) {
+        XLogUtil.d(content)
         if (warringDialog == null) {
             warringDialog = this@GlobalService.baseContext?.let { WarringDialog(it) }
         }

+ 0 - 4
module_home/src/main/res/values-en/strings.xml

@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
-</resources>