package com.bgy.autosale.ui; import static com.hboxs.base_library.util.ToastUtil.showToast; import android.Manifest; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.ActivityCompat; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.ProgressBar; import android.widget.TextView; import com.bgy.autosale.App; import com.bgy.autosale.Constant; import com.bgy.autosale.IceCreamDeviceConstants; import com.bgy.autosale.R; import com.bgy.autosale.entitys.ContactBean; import com.bgy.autosale.entitys.DosugarBean; import com.bgy.autosale.entitys.MakeIceCreamBean; import com.bgy.autosale.entitys.Result; import com.bgy.autosale.helpers.CleanScheduleHelper; import com.bgy.autosale.helpers.CommunicationHelper; import com.bgy.autosale.helpers.ErrorViewHelper; import com.bgy.autosale.helpers.NetTimeClock; import com.bgy.autosale.helpers.ResourceDownloadHelper; import com.bgy.autosale.helpers.SQLiteHelper; import com.bgy.autosale.helpers.UISoundHelper; import com.bgy.autosale.interfaces.Callback; import com.bgy.autosale.interfaces.SendCallback; import com.bgy.autosale.payutil.GeTuiUtil; import com.bgy.autosale.payutil.MyIntentService; import com.bgy.autosale.ui.base.BaseFragment; import com.bgy.autosale.ui.base.BaseScanGunActivity; import com.bgy.autosale.ui.consumer.MainFragment; import com.bgy.autosale.ui.consumer.PaySuccessFragment; import com.bgy.autosale.ui.consumer.ServiceFragment; import com.bgy.autosale.ui.operator.AuthNumberActivity; import com.bgy.autosale.ui.operator.LockActivity; import com.bgy.autosale.ui.operator.SnSettingActivity; import com.bgy.autosale.utils.CacheFileUtil; import com.bgy.autosale.utils.PlcLog; import com.bgy.autosale.utils.ReadCacheInfoUtils; import com.bgy.autosale.utils.SPUtils; import com.example.FaPiaoUtils; import com.example.offpay.nayax.CreditCardPresenter; import com.google.gson.Gson; import com.hboxs.base_library.base.BaseApplication; import com.hboxs.base_library.base.IView; import com.hboxs.base_library.constant.Global; import com.hboxs.base_library.constant.Heartbeat; import com.hboxs.base_library.constant.Name; import com.hboxs.base_library.event.ApiMessageEvent; import com.hboxs.base_library.http.NoPayOrderStringApi; import com.hboxs.base_library.http.observer.HttpResultNotActivityObserver; import com.hboxs.base_library.http.response.HttpResult; import com.hboxs.base_library.http.response.HttpResultHandler; import com.hboxs.base_library.util.FileUtil; import com.hboxs.base_library.util.LanguageUtil; import com.hboxs.base_library.util.LogUtil; import com.hboxs.base_library.util.LogUtils; import com.hboxs.base_library.util.SharedPreferencesUtils; import com.hboxs.base_library.util.ToastUtil; import com.igexin.sdk.PushManager; import com.orhanobut.hawk.Hawk; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.io.File; import java.lang.reflect.Field; import java.util.Arrays; import java.util.HashMap; import java.util.LinkedList; import java.util.Locale; import java.util.Map; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.Disposable; import io.reactivex.observers.DisposableObserver; import io.reactivex.schedulers.Schedulers; import top.keepempty.sph.library.SerialPortHelper; public class MainActivity extends BaseScanGunActivity implements SendCallback, Callback { private final String TAG = "MainActivity"; public static MainActivity instance; private final int REQUEST_PERMISSION_CODE = 1000; private static String[] PERMISSIONS_STORAGE = { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}; protected TextView initView; protected TextView snView; private View progressBarBg; private ProgressBar progressBar; private MainFragment mainFragment; private boolean mainViewAllReady = false; private int clickCount = 0; private long prevClickTime = 0L; public boolean isVisible = true; private boolean isDestroy = false; private Disposable checkDisposable; int isSleep = (int) SharedPreferencesUtils.getParam("sleep", -1); @Override protected void onCreate(Bundle savedInstanceState) { instance = this; if (isSleep == 0) { //锁机 Intent intent = new Intent(this, LockActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } App.app.language = SPUtils.getInstance(App.app).getString(Constant.APP_LANGUAGE, Constant.LANGUAGE_ZH); Heartbeat.deviceId = FileUtil.getDeviceId().trim(); Log.d("openService", "run: " + Heartbeat.deviceId + ":" + FileUtil.getDeviceId()); String[] language = App.app.language.split("-"); // Locale locale = new Locale(language[0], language.length > 1 ? language[1] : ""); int i = (int) SharedPreferencesUtils.getParam(Name.LANGUAGE_TYPE, 0) - 1; if (i>=0) { String s = LanguageUtil.language[i]; Locale locale = new Locale(s); Log.d(TAG, "DynamicActivity onCreate: "+s); App.app.forceLocale(locale, this); } GeTuiUtil geTuiUtil = new GeTuiUtil(this); geTuiUtil.geTui(); if (Global.isVersions == 1) { App.app.payChannel = SPUtils.getInstance(App.app).getInt(Constant.PAY_CHANNEL, Constant.PAY_ONLINE); App.app.runMode = SPUtils.getInstance(App.app).getInt(Constant.RUN_MODE, Constant.RUN_ONLINE); App.app.currencySymbol = getString(R.string.price_unit); } else { App.app.payChannel = SPUtils.getInstance(App.app).getInt(Constant.PAY_CHANNEL, Constant.PAY_FREE); App.app.runMode = SPUtils.getInstance(App.app).getInt(Constant.RUN_MODE, Constant.RUN_OFFLINE); App.app.specMultipleChoices = SPUtils.getInstance(App.app).getBoolean(ServiceFragment.SHARED_PREFERENCE_FLAVOR_MULTIPLE, true); App.app.currencySymbol = Hawk.get(Name.UNIT_OF_CURRENCY_TIME,""); } super.onCreate(savedInstanceState); EventBus.getDefault().register(this); setContentView(R.layout.activity_main); initView = findViewById(R.id.main_init_tip); snView = findViewById(R.id.device_sn); progressBarBg = findViewById(R.id.progress_bg); progressBarBg.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); progressBar = findViewById(R.id.progress_main); snView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (clickCount == 1) { clickCount = 0; AuthNumberActivity.startActivity(MainActivity.this); } else { long current = System.currentTimeMillis(); if (current - prevClickTime > 2000) { clickCount = 0; } else { clickCount++; } prevClickTime = current; } } }); initView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { finish(); return false; } }); if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) { if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, PERMISSIONS_STORAGE, REQUEST_PERMISSION_CODE); } else { init(); } } else { init(); } NetTimeClock.getInstance(); if (Hawk.get("nayax", false)) { Log.d(TAG, "onCreate: ALWAYS_IDLEaaaa"); initCreditCardDriver(); Log.d(TAG, "onCreate: ALWAYS_IDLEbbb"); } if (Hawk.get("MDB_COIN", false)/*&&Hawk.get(Name.CASH_PAY, true)*/) { openSerialPortA(); } } public static SerialPortHelper openSerialPortA() { return FaPiaoUtils.getInstance().getSerialPortHelper(); } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { PushManager.getInstance().initialize(this.getApplicationContext(), MyIntentService.class); super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == REQUEST_PERMISSION_CODE) { boolean flagt = false; for (int i = 0; i < permissions.length; i++) { Log.i("MainActivity", "申请的权限为:" + permissions[i] + ",申请结果:" + grantResults[i]); if (grantResults[i] != 0) { flagt = true; } } if (flagt) {//授权失败 finish(); } else { init(); } } } @Override public boolean scanResult(String code, String source) { if (code.equals(Constant.FACTORY_RESET_MODE)) { factoryReset(); } return true; } @Override protected void onResume() { super.onResume(); isVisible = true; setScanCodeListener(this); hideNavKey(this); if (mainViewAllReady) { if (!mainFragment.isAdded()) { getSupportFragmentManager().beginTransaction().add(R.id.main_fragment, mainFragment).commitNow(); } } } @Override protected void onPause() { super.onPause(); isVisible = false; } @Subscribe(threadMode = ThreadMode.MAIN) public void event(ApiMessageEvent messageEvent) { // 进行刷新操作 switch (messageEvent.getName()) { case "makeicecream": LinkedList iceCreamOrders = new LinkedList<>(); MakeIceCreamBean detail = new MakeIceCreamBean(); String kindData= (String) messageEvent.getData(); Log.d(TAG, "makeicecreamevent: makeicecream0 "+kindData); Gson gson = new Gson(); DosugarBean dosugarBean = gson.fromJson(kindData, DosugarBean.class); Log.d(TAG, "makeicecreamevent: makeicecream1"+dosugarBean); String[] stringArray = dosugarBean.getMakeCodes().replaceAll("[\\[\\] ]", "").split(","); Log.d(TAG, "makeicecreamevent: makeicecream2"+stringArray); detail.makeCodes= Arrays.stream(stringArray) .mapToInt(Integer::parseInt) .toArray(); iceCreamOrders.add(detail); Log.d(TAG, "getMessage: dosugar"+iceCreamOrders); LogUtils.logWrite("远程制作雪糕"); CommunicationHelper.getInstance().setMakingIceCreams(iceCreamOrders); CommunicationHelper.getInstance().setDishStatusListener(this, isManualMake ? IceCreamDeviceConstants.ORDER_MAKE_ORDER : -1); // make(); Map sugarDoStatus = new HashMap<>(); sugarDoStatus.put("clientId", Heartbeat.deviceId); sugarDoStatus.put("status", "1"); sugarDoStatus.put("no", dosugarBean.getNo()); updateSugarDoStatus(sugarDoStatus); break; } } private IView view; private void updateSugarDoStatus(Map sugarDoStatus) { addSubscriptionNew(NoPayOrderStringApi.api.updateSugarDoStatus(sugarDoStatus), String.class, new HttpResultNotActivityObserver(view, getApplicationContext()) { @Override public void onNext(String data) { Log.d(TAG, "onNextupdateSugarDoStatus: "+data); LogUtils.logWrite("远程制作成功:"); } @Override public void onError(Throwable t) { super.onError(t); t.printStackTrace(); Log.d(TAG, "onNextupdateSugarDoStatus: "+t.getMessage()); LogUtils.logWrite("远程制作失败:" + t.getMessage()); } }); } private boolean isManualMake = false; private boolean isManualMode() { return App.app.payChannel != Constant.PAY_FREE; } private void make(){ FragmentManager fragmentManager = getSupportFragmentManager(); // Fragment fragment = PaySuccessFragment.getFragment(CommunicationHelper.getInstance().getMakingIceCreams().size(), isManualMode()); Fragment fragment = PaySuccessFragment.getFragment(1, isManualMode()); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.replace(R.id.main_fragment, fragment); transaction.addToBackStack("main"); transaction.commit(); } @Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this); isDestroy = true; instance = null; if (checkDisposable != null) { checkDisposable.dispose(); checkDisposable = null; } CleanScheduleHelper.getInstance().destroy(); CommunicationHelper.getInstance().destroy(); } public static boolean isAlive() { return instance != null; } @Override public void onBackPressed() { } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); } protected void init() { SQLiteHelper.getInstance().init(App.app); CommunicationHelper.getInstance(); String path = CacheFileUtil.getInstance().getFilePath(); PlcLog.getInstance().initLogFile(this, "", new File(path).getParent()); // String sn = ReadCacheInfoUtils.getInstance().getSN(); // if (sn == null || TextUtils.isEmpty(sn)) { // SnSettingActivity.startActivity(this, false); //// DeviceManagerActivity.startActivity(this, false); // return; // } // String sn="AB0001"; final String secondarySN = "AB0001"; final String secondarySN2 = "AB0002"; // Constant.isSecondary = sn.startsWith(secondarySN) || sn.startsWith(secondarySN2); // TextView view = findViewById(R.id.test_mode); // if (sn.startsWith("CJX-")) { // view.setText("专属测试模式"); // view.setVisibility(View.VISIBLE); // } // view.setOnClickListener(new View.OnClickListener() { // @Override // public void onClick(View v) { // String t = view.getText().toString(); // t = t + "\n忽略机台异常"; // view.setText(t); // CommunicationHelper.getInstance().changeTestMode(); // } // }); if (Heartbeat.deviceId!=null && Heartbeat.deviceId.length() > 6){ snView.setText("SN:" + Heartbeat.deviceId.substring(Heartbeat.deviceId.length()-6)); } initComplete(); } public void initComplete() { if (checkDisposable != null) { checkDisposable.dispose(); checkDisposable = null; } if (isDestroy) { return; } if (mainFragment != null) { mainFragment.checkData(); return; } mainFragment = MainFragment.getFragment(); PlcLog.getInstance().e_s(TAG, "payChannel" + App.app.payChannel); downloadResources(); } // 下载广告、资源文件 private void downloadResources() { new ResourceDownloadHelper(new ResourceDownloadHelper.ResourceDownloadCallback() { @Override public void complete() { if (isFinishing() || isDestroy) { return; } initProgress(App.app.getString(R.string.init_complete)); initMainView(); } @Override public void initProgress(String message) { if (initView == null) { return; } if (isFinishing() || isDestroy) { return; } initView.setText(message); } }); } protected void showLoadView(boolean show) { if (show) { progressBarBg.setVisibility(View.VISIBLE); progressBar.setVisibility(View.VISIBLE); } else { progressBarBg.setVisibility(View.GONE); progressBar.setVisibility(View.GONE); } } private void initMainView() { mainViewAllReady = true; PlcLog.getInstance().e_s(TAG, "initMainView"); UISoundHelper.getInstance(); findViewById(R.id.main_fragment).setVisibility(View.VISIBLE); if (!SPUtils.getInstance(App.app).getBoolean(Constant.LOCK_IN_ERROR, false)) { App.app.initDeviceStateListener();//是否开机 Log.d(TAG, "initMainView: "); } if (initView != null) { ViewGroup group = (ViewGroup) initView.getParent(); group.removeView(initView); group.removeView(snView); initView = null; snView = null; } PlcLog.getInstance().e_s(TAG, "mainFragment.isAdded() " + mainFragment.isAdded()); try { if (!mainFragment.isAdded()) { getSupportFragmentManager().beginTransaction().add(R.id.main_fragment, mainFragment).commitNow(); } } catch (Exception e) { PlcLog.getInstance().e_s(TAG, e); } initContactView(); CleanScheduleHelper.getInstance().initCleanScheduleParams(); } private void initContactView() { initServerPhone(); } private void initServerPhone() { if (App.app.contactBean == null) { App.app.contactBean = new ContactBean(); App.app.contactBean.environmentMode = 1; } if (App.app.contactBean.hotServicePhone == null) { App.app.contactBean.hotServicePhone=Hawk.get(Name.CONTACTS_NAME,""); } if (App.app.contactBean.hotServiceTime == null) { App.app.contactBean.hotServiceTime =Hawk.get(Name.CONTACTS_NUM,"");//默认 } if (App.app.contactBean.serviceWechatPlatform == null) { App.app.contactBean.serviceWechatPlatform = "http://qx-device-manage.oss-cn-shenzhen.aliyuncs.com/photo/20211020141937.jpg";//默认 } } // 恢复出厂设置 private void factoryReset() { ReadCacheInfoUtils.getInstance().saveSN(null); ReadCacheInfoUtils.getInstance().saveAuthEntity(null); showToast(getString(R.string.setting_technology_system_reset)); finish(); } private CreditCardPresenter mCreditCardPresenter; public void initCreditCardDriver() { //以下代码实现信用卡串口通信 //使用此代码只需要: //1.实例化一个CreditCardPresenter mCreditCardPresenter = CreditCardPresenter.getCreditCardContract(); new Handler().postDelayed(new Runnable() { @Override public void run() { if (mCreditCardPresenter != null) { if (!mCreditCardPresenter.is_ready()) { LogUtil.d(TAG, "initCreditCardDriver1: "); mCreditCardPresenter.StartCommunication(4); } LogUtil.d(TAG, "initCreditCardDriver2: "); } } }, 5000); //1.开始通信 } @Override public void onResult(Result result) { AndroidSchedulers.mainThread().scheduleDirect(new Runnable() { @Override public void run() { Log.d(TAG, "AndroidSchedulers run1: "+result); Log.d(TAG, "AndroidSchedulers run2: "+result.code); Log.d(TAG, "AndroidSchedulers run3: "+result.message); Log.d(TAG, "AndroidSchedulers run4: "+result.data); switch (result.code) { } } }); } @Override public void callBack(boolean ok, int[] result) { AndroidSchedulers.mainThread().scheduleDirect(new Runnable() { @Override public void run() { showToast(ok ? App.app.getString(R.string.setting_plc_send_success) : App.app.getString(R.string.setting_plc_send_fail)); } }); } private CompositeDisposable mDisposables; protected void addSubscriptionNew(Observable observable, Class clazz, DisposableObserver observer) { if (mDisposables == null) { mDisposables = new CompositeDisposable(); } if (clazz == HttpResult.class) { observable = observable.compose(HttpResultHandler.transformer()); } observable .unsubscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(observer); mDisposables.add(observer); } }