Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.mdd.unikpay.mainmenu;
- import android.Manifest;
- import android.annotation.SuppressLint;
- import android.app.Activity;
- import android.content.ClipData;
- import android.content.Context;
- import android.content.Intent;
- import android.content.pm.PackageManager;
- import android.content.res.Configuration;
- import android.graphics.Bitmap;
- import android.net.Uri;
- import android.nfc.NfcAdapter;
- import android.nfc.NfcManager;
- import android.nfc.Tag;
- import android.os.AsyncTask;
- import android.os.Build;
- import android.os.Bundle;
- import android.os.CountDownTimer;
- import android.os.Environment;
- import android.os.StrictMode;
- import android.provider.MediaStore;
- import android.provider.Settings;
- import android.util.Base64;
- import android.util.Log;
- import android.view.KeyEvent;
- import android.view.View;
- import android.view.WindowManager;
- import android.webkit.JavascriptInterface;
- import android.webkit.ValueCallback;
- import android.webkit.WebChromeClient;
- import android.webkit.WebView;
- import android.webkit.WebViewClient;
- import android.widget.Toast;
- import androidx.annotation.NonNull;
- import androidx.appcompat.app.AppCompatActivity;
- import androidx.core.app.ActivityCompat;
- import androidx.core.content.ContextCompat;
- import com.google.gson.Gson;
- import com.mdd.aar.deviceid.AarDeviceId;
- import com.mdd.aar.deviceid.DeviceEnvironment;
- import com.mdd.aar.deviceid.exceptions.DeviceNotRegisteredException;
- import com.mdd.topupUnik.ubal.ApiUtils;
- import com.mdd.topupUnik.ubal.InitDebugCertificate;
- import com.mdd.topupUnik.ubal.InitReader;
- import com.mdd.topupUnik.ubal.MainCardProcessor;
- import com.mdd.topupUnik.ubal.SuccessUpdateBalance;
- import com.mdd.topupUnik.ubal.UpdateBalanceView;
- import com.mdd.topupUnik.ubal.lib.CardInfo;
- import com.mdd.topupUnik.ubal.lib.CardInfoCommand;
- import com.mdd.topupUnik.ubal.lib.CommandResult;
- import com.mdd.unikpay.R;
- import com.mdd.unikpay.devices.DevicePrinter;
- import com.mdd.unikpay.features.debitkredit.app.TradeApplication;
- import com.mdd.unikpay.helpers.UpdateBalanceErrorModel;
- import com.mdd.unikpay.mobile.InitListener;
- import com.mdd.unikpay.pojos.CalbackModel;
- import com.mdd.unikpay.receipt.ReceiptFactory;
- import com.medicom.dudikov.mybanklibrary.nativeLib;
- import java.io.File;
- import java.io.IOException;
- import java.net.InetAddress;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.List;
- import java.util.Timer;
- import java.util.TimerTask;
- import id.emhusnan.mdd.service.LibraryConfig;
- import id.emhusnan.mdd.service.MDDCommand;
- import id.emhusnan.mdd.service.MDDUpdateBalanceView;
- import static com.medicom.organicdrv.utilsLib.ByteArrayToHexString;
- //import android.util.Base64;
- public class MainWebView extends AppCompatActivity implements MDDUpdateBalanceView, InitListener, NfcAdapter.ReaderCallback {
- public static final String CALLBACK_DATA = "CALLBACK";
- private int COMMAND = MDDCommand.COMMAND_GET_BALANCE;
- WebView webView;
- protected Context context;
- private InitReader reader;
- private MainCardProcessor cardProcessor;
- private int MY_PERMISSIONS_REQUEST_READ_CONTACTS = 1;
- private String TAG = "MDDService";
- public String status = "getBalance";
- public String cardNumberNow;
- public String exCardNumber;
- public String updateBalanceSuccessInfo;
- public String cardInfo = "6032986092844892";
- boolean hasPendingOperation = false;
- // public String urLCompany = "https://kasirkuweb-dev.multidaya.id/";
- public String urLCompany = "http://192.168.7.169:8000/";
- public String callbackData;
- UpdateBalanceErrorModel ubalError;
- CalbackModel callback;
- List<CalbackModel.itemDetail> detailItem;
- private static String file_type = "image/*"; // file types to be allowed for upload
- private boolean multiple_files = true; // allowing multiple file upload
- private static final String TAG_WEB = MainWebView.class.getSimpleName();
- private String cam_file_data = null; // for storing camera file information
- private ValueCallback<Uri> file_data; // data/header received after file selection
- private ValueCallback<Uri[]> file_path; // received file(s) temp. location
- private final static int file_req_code = 1;
- private String accessToken = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJhdXRoLXNlcnZpY2U6MS4wLjAiLCJzdWIiOnsibmFtZSI6IlRlc3RQcm9kMyIsInVzZXJuYW1lIjoiVGVzdFByb2QzIiwiYXV0aF9sZXZlbCI6Ik1FUkNIQU5UIiwibWlkIjoiMWZiNTdmMTY2YTQ4MGU5N2JmN2EzZGNiZjkzMTkyOTMifSwiaWF0IjoxNTk3NzM3NzIxLCJleHAiOjE1OTc4MjQxMjEsIm5iZiI6MTU5NzczNzcyM30.CXM-5mCv91Yo17c9zHXQKPGR5gqAeu-LADta-_qnABYxzmnE4Dx0q7NQ9IYr6cYO6cXp40UW4s632fzVYmPCXH8f0RtSwLPqTT7_lWHK--fHCP-LZOmfgwUBxdNocYY9xAi-NyWqCmTnkjWx91lqh9S9Fcue6nO_KrBqngUpBPhpS0hPwgmkqHXX6yAdVs931NbfNM3cYW9PpGIw8K-OxoPDHByD61uAFxT9FCrTbca7vV3HFQnZEKpwxxdECu7DCQAsGTl7JqfbH2j5swe_t97rSDAGyE1HRzGX-SMqPULkC-XravF2m_HucosacYQuSdRaxAWfEIQvtQhAcRXwTA";
- private LibraryConfig mConfig;
- private Timer timer;
- private String deviceBrand = "";
- private int idxDriver = 0;
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
- super.onActivityResult(requestCode, resultCode, intent);
- if (Build.VERSION.SDK_INT >= 21) {
- Uri[] results = null;
- /*-- if file request cancelled; exited camera. we need to send null value to make future attempts workable --*/
- if (resultCode == Activity.RESULT_CANCELED) {
- if (requestCode == file_req_code) {
- file_path.onReceiveValue(null);
- return;
- }
- }
- /*-- continue if response is positive --*/
- if (resultCode == Activity.RESULT_OK) {
- if (requestCode == file_req_code) {
- if (null == file_path) {
- return;
- }
- ClipData clipData;
- String stringData;
- try {
- clipData = intent.getClipData();
- stringData = intent.getDataString();
- } catch (Exception e) {
- clipData = null;
- stringData = null;
- }
- if (clipData == null && stringData == null && cam_file_data != null) {
- results = new Uri[]{Uri.parse(cam_file_data)};
- } else {
- if (clipData != null) { // checking if multiple files selected or not
- final int numSelectedFiles = clipData.getItemCount();
- results = new Uri[numSelectedFiles];
- for (int i = 0; i < clipData.getItemCount(); i++) {
- results[i] = clipData.getItemAt(i).getUri();
- }
- } else {
- results = new Uri[]{Uri.parse(stringData)};
- }
- }
- }
- }
- file_path.onReceiveValue(results);
- file_path = null;
- } else {
- if (requestCode == file_req_code) {
- if (null == file_data) return;
- Uri result = intent == null || resultCode != RESULT_OK ? null : intent.getData();
- file_data.onReceiveValue(result);
- file_data = null;
- }
- }
- }
- @SuppressLint({"SetJavaScriptEnabled", "WrongViewCast"})
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main_web_view);
- webView = findViewById(R.id.webViewMain);
- webView.getSettings().setDomStorageEnabled(true);
- webView.getSettings().setLoadsImagesAutomatically(true);
- webView.getSettings().setJavaScriptEnabled(true);
- webView.addJavascriptInterface(new JSBridge(this, cardInfo), "JSBridge");
- // webView.getSettings().setUserAgentString("(Linux; Android SUNMI.P2;) Mobile ");
- // webView.getSettings().setUserAgentString("Mozilla/5.0 (Linux; Android 5.1.1; Nexus 5 Build/LMY48B; wv) AppleWebKit/537.36 (KHTML, like Gecko)" +
- // " Version/4.0 Chrome/74.0.3729.136 Mobile Safari/537.36\n");
- // webView.getSettings().setUserAgentString(System.getProperty("http.agent"));
- Log.d("user-agent", ""+System.getProperty("http.agent"));
- webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
- webView.setWebViewClient(new WebViewClient() {
- @Override
- public void onPageFinished(WebView view, String url) {
- webView.setVisibility(View.VISIBLE);
- if (getSupportActionBar() != null)
- getSupportActionBar().setTitle("Multidaya Dinamika");
- }
- });
- webView.loadUrl(urLCompany);
- webView.setWebChromeClient(new WebChromeClient() {
- public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
- if (file_permission() && Build.VERSION.SDK_INT >= 21) {
- file_path = filePathCallback;
- Intent takePictureIntent = null;
- Intent takeVideoIntent = null;
- boolean includeVideo = false;
- boolean includePhoto = false;
- /*-- checking the accept parameter to determine which intent(s) to include --*/
- paramCheck:
- for (String acceptTypes : fileChooserParams.getAcceptTypes()) {
- String[] splitTypes = acceptTypes.split(", ?+"); // although it's an array, it still seems to be the whole value; split it out into chunks so that we can detect multiple values
- for (String acceptType : splitTypes) {
- switch (acceptType) {
- case "*/*":
- includePhoto = true;
- includeVideo = true;
- break paramCheck;
- case "image/*":
- includePhoto = true;
- break;
- case "video/*":
- includeVideo = true;
- break;
- }
- }
- }
- if (fileChooserParams.getAcceptTypes().length == 0) { //no `accept` parameter was specified, allow both photo and video
- includePhoto = true;
- includeVideo = true;
- }
- if (includePhoto) {
- takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
- if (takePictureIntent.resolveActivity(MainWebView.this.getPackageManager()) != null) {
- File photoFile = null;
- try {
- photoFile = create_image();
- takePictureIntent.putExtra("PhotoPath", cam_file_data);
- } catch (IOException ex) {
- Log.e(TAG_WEB, "Image file creation failed", ex);
- }
- if (photoFile != null) {
- cam_file_data = "file:" + photoFile.getAbsolutePath();
- takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
- } else {
- cam_file_data = null;
- takePictureIntent = null;
- }
- }
- }
- if (includeVideo) {
- takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
- if (takeVideoIntent.resolveActivity(MainWebView.this.getPackageManager()) != null) {
- File videoFile = null;
- try {
- videoFile = create_video();
- } catch (IOException ex) {
- Log.e(TAG_WEB, "Video file creation failed", ex);
- }
- if (videoFile != null) {
- cam_file_data = "file:" + videoFile.getAbsolutePath();
- takeVideoIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(videoFile));
- } else {
- cam_file_data = null;
- takeVideoIntent = null;
- }
- }
- }
- Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT);
- contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE);
- contentSelectionIntent.setType(file_type);
- if (multiple_files) {
- contentSelectionIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
- }
- Intent[] intentArray;
- if (takePictureIntent != null && takeVideoIntent != null) {
- intentArray = new Intent[]{takePictureIntent, takeVideoIntent};
- } else if (takePictureIntent != null) {
- intentArray = new Intent[]{takePictureIntent};
- } else if (takeVideoIntent != null) {
- intentArray = new Intent[]{takeVideoIntent};
- } else {
- intentArray = new Intent[0];
- }
- Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);
- chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent);
- chooserIntent.putExtra(Intent.EXTRA_TITLE, "File chooser");
- chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray);
- startActivityForResult(chooserIntent, file_req_code);
- return true;
- } else {
- return false;
- }
- }
- });
- }
- public class Callback extends WebViewClient {
- public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
- Toast.makeText(getApplicationContext(), "Failed loading app!", Toast.LENGTH_SHORT).show();
- }
- }
- /*-- checking and asking for required file permissions --*/
- public boolean file_permission() {
- if (Build.VERSION.SDK_INT >= 23 && (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)) {
- ActivityCompat.requestPermissions(MainWebView.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}, 1);
- return false;
- } else {
- return true;
- }
- }
- /*-- creating new image file here --*/
- private File create_image() throws IOException {
- @SuppressLint("SimpleDateFormat") String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
- String imageFileName = "img_" + timeStamp + "_";
- File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
- return File.createTempFile(imageFileName, ".jpg", storageDir);
- }
- /*-- creating new video file here --*/
- private File create_video() throws IOException {
- @SuppressLint("SimpleDateFormat")
- String file_name = new SimpleDateFormat("yyyy_mm_ss").format(new Date());
- String new_name = "file_" + file_name + "_";
- File sd_directory = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
- return File.createTempFile(new_name, ".3gp", sd_directory);
- }
- /*-- back/down key handling --*/
- @Override
- public boolean onKeyDown(int keyCode, @NonNull KeyEvent event) {
- if (event.getAction() == KeyEvent.ACTION_DOWN) {
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- if (webView.canGoBack()) {
- webView.goBack();
- } else {
- finish();
- }
- return true;
- }
- }
- return super.onKeyDown(keyCode, event);
- }
- @Override
- public void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- }
- public void checkNfc() {
- // if (isInternetAvailable()) {
- NfcManager manager = (NfcManager) getSystemService(Context.NFC_SERVICE);
- NfcAdapter adapter = manager.getDefaultAdapter();
- Log.d(TAG, "adapter:" + adapter + "," + Build.MODEL + "," + Build.BRAND);
- Tag tagFromIntent = getIntent().getParcelableExtra(NfcAdapter.EXTRA_TAG);
- if (tagFromIntent != null) {
- onTagDiscovered(tagFromIntent);
- }
- if (adapter == null || !adapter.isEnabled()) {
- runOnUiThread(() -> {
- webView.evaluateJavascript("javascript: " + "ifNfcFound(\"" + "false" + "\")", null);
- webView.evaluateJavascript("javascript: " + "getBrand(\"" + deviceBrand + "\")", null);
- Log.d("brand", deviceBrand);
- });
- } else {
- runOnUiThread(() -> {
- webView.evaluateJavascript("javascript: " + "ifNfcFound(\"" + "true" + "\")", null);
- validateHasPermissions();
- });
- }
- String imei = Settings.Secure.getString(getContentResolver(), "android_id");
- Log.e("imei", imei);
- // }
- }
- private void validateHasPermissions() {
- StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
- StrictMode.setThreadPolicy(policy);
- // permission READ_PHONE_STATE
- if (ContextCompat.checkSelfPermission(this,
- Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
- Toast.makeText(this, "Please grant permission", Toast.LENGTH_SHORT).show();
- if (ActivityCompat.shouldShowRequestPermissionRationale(this,
- Manifest.permission.READ_PHONE_STATE)) {
- } else {
- ActivityCompat.requestPermissions(this,
- new String[]{Manifest.permission.READ_PHONE_STATE,
- Manifest.permission.INTERNET,
- Manifest.permission.READ_EXTERNAL_STORAGE},
- MY_PERMISSIONS_REQUEST_READ_CONTACTS);
- }
- } else {
- Log.d("validate", "Mau init niih");
- if (!deviceBrand.equalsIgnoreCase("sunmi"))
- ((TradeApplication) getApplication()).initAar(this);
- else {
- AarDeviceId aarDeviceId = new AarDeviceId(this);
- try {
- aarDeviceId.getDeviceId();
- } catch (DeviceNotRegisteredException e) {
- aarDeviceId.init(accessToken, DeviceEnvironment.PROD);
- }
- try {
- mConfig = new LibraryConfig(
- "ba7db816e59612f8ce1630a095ef01c5",
- aarDeviceId.getDeviceId(),
- "5b423ef49cb029340d7231cace0de201",
- accessToken,
- 1
- );
- } catch (DeviceNotRegisteredException e) {
- e.printStackTrace();
- }
- final nativeLib[] nativeLibrary = new nativeLib[1];
- InitDebugCertificate initDebugCertificate = new InitDebugCertificate();
- AsyncTask.execute(new Runnable() {
- @Override
- public void run() {
- try {
- nativeLibrary[0] = new nativeLib(getApplicationContext(), idxDriver);
- reader = initDebugCertificate.getDebug(nativeLibrary[0], getApplicationContext(), idxDriver, mConfig, true);
- onInitReaderComplete(reader);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- });
- }// execute(null);
- // cardProcessor.getBalance();
- }
- }
- @Override
- public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults);
- Log.e("requestPermissionResult", "reqCode " + requestCode + " permission " + permissions + " grantResults " + grantResults);
- // ((TradeApplication) getApplication()).initAar(this);
- }
- @Override
- protected void onResume() {
- Log.e("onResume", "onresume");
- super.onResume();
- deviceBrand = Build.BRAND;
- Log.d("Brand", deviceBrand);
- if (deviceBrand.equalsIgnoreCase("sunmi")) {
- idxDriver = nativeLib.USE_SunMi_ENGGINE;
- validateHasPermissions();
- } else
- checkNfc();
- }
- private void setCommand(int commandUpdateBalance) {
- COMMAND = commandUpdateBalance;
- // btnUpdateBalance.setText(COMMAND == MDDCommand.COMMAND_UPDATE_BALANCE ? "Update Balance" : "Cek Balance");
- }
- @Override
- protected void onPause() {
- super.onPause();
- NfcManager manager = (NfcManager) getSystemService(Context.NFC_SERVICE);
- NfcAdapter adapter = manager.getDefaultAdapter();
- if (adapter != null && adapter.isEnabled()) {
- adapter.disableReaderMode(this);
- }
- }
- @Override
- public void onTagDiscovered(Tag tag) {
- execute(tag);
- }
- @Override
- public void onInitReaderComplete(InitReader reader) {
- this.reader = reader;
- if (!deviceBrand.equalsIgnoreCase("sunmi"))
- enableReaderMode();
- cardProcessor = new MainCardProcessor(MainWebView.this, reader, new UpdateBalanceView() {
- @Override
- public void onUpdateBalanceSuccess(SuccessUpdateBalance successUpdateBalance) {
- runOnUiThread(() -> MainWebView.this.onUpdateBalaceSuccess(successUpdateBalance));
- }
- @Override
- public void onUpdateBalanceError(String reason) {
- runOnUiThread(() -> MainWebView.this.onUpdateBalanceError(reason));
- }
- @Override
- public void onCardDetected(CardInfo cardInfo) {
- runOnUiThread(() -> MainWebView.this.onBalanceInfoAvailable(cardInfo));
- }
- @Override
- public void onErrorNfcCardMsg(int errorCode) {
- runOnUiThread(() -> MainWebView.this.onUpdateBalanceError(""));
- }
- }, ApiUtils.prod_environment);
- // if (deviceBrand.equalsIgnoreCase("sunmi")) {
- // timer = new Timer();
- // timer.schedule(new TimerTask() {
- // @Override
- // public void run() {
- // execute(null);
- // }
- // }, 0, 5000);
- // }
- }
- @Override
- public void onNFcCardNotSupported(int i) {
- hasPendingOperation = false;
- }
- @Override
- public void onNfcCardFound() {
- hasPendingOperation = true;
- runOnUiThread(this::sendCardDetected);
- }
- @Override
- public void onFinishOperation() {
- hasPendingOperation = false;
- }
- @Override
- public void onBalanceInfoAvailable(CardInfo cardInfo1) {
- hasPendingOperation = false;
- //
- // if (deviceBrand.equalsIgnoreCase("sunmi")) {
- // timer = new Timer();
- // timer.schedule(new TimerTask() {
- // @Override
- // public void run() {
- // execute(null);
- // }
- // }, 0, 5000);
- // }
- // cardInfo = new Gson().toJson(cardInfo1);
- // runOnUiThread(MainWebView.this::sendCardNumber, sendCardBalance);
- // runOnUiThread(this::sendCardInfo);
- Log.d("CardInfoBoy", cardInfo);
- }
- @Override
- public void onUpdateBalaceSuccess(SuccessUpdateBalance successUpdateBalance) {
- updateBalanceSuccessInfo = new Gson().toJson(successUpdateBalance);
- runOnUiThread(this::sendUbal);
- status = "getBalance";
- Log.d("status_sekarang", status);
- Log.d("updatesuccesscoyy", updateBalanceSuccessInfo);
- }
- @Override
- public void onUpdateBalanceError(String s) {
- status = "getBalance";
- ubalError = new UpdateBalanceErrorModel();
- ubalError.setCardNumber(cardNumberNow);
- ubalError.setMessage(s);
- runOnUiThread(this::sendUbalError);
- Log.d("ubalError", s);
- }
- @Override
- public void onBeginOperation() {
- hasPendingOperation = true;
- getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
- }
- public class JSBridge {
- Context context;
- String data;
- public JSBridge(Context context, String data) {
- this.context = context;
- this.data = data;
- }
- @JavascriptInterface
- public void printReceipt(String message) throws Exception {
- callbackData = message;
- Log.d("yg diprint", callbackData);
- callback = new Gson().fromJson(callbackData, CalbackModel.class);
- detailItem = callback.getItemDetail();
- Bitmap bitmap = ReceiptFactory.getPOSReceipt(context, callback, detailItem);
- DevicePrinter.printReceipt(context, bitmap);
- runOnUiThread(() -> {
- webView.evaluateJavascript("javascript: " + "successPrint(\"" + "" + "\")", null);
- });
- }
- @JavascriptInterface
- public void sendCardNumber(String cardNumber) {
- exCardNumber = cardNumber;
- Log.d("CardNumberDariWeb", exCardNumber);
- Log.d("CardNumberSekarang", cardNumberNow);
- }
- @JavascriptInterface
- public void executeSunmi(){
- // runOnUiThread(MainWebView.this::getCardNumberinSunmi);
- runOnUiThread(()->{
- MainWebView.this.execute(null);
- });
- }
- @JavascriptInterface
- public void isNfcFound() {
- runOnUiThread(MainWebView.this::checkNfc);
- }
- @JavascriptInterface
- public void getStatus(String message) {
- status = message;
- //
- // if (deviceBrand.equalsIgnoreCase("sunmi")) {
- // timer = new Timer();
- // timer.schedule(new TimerTask() {
- // @Override
- // public void run() {
- // execute(null);
- // }
- // }, 0, 5000);
- // }
- Log.d("status_dari_web", status);
- }
- }
- public void sendCardDetected() {
- String scriptCardDetected = "javascript:cardDetected('cardDetected')";
- webView.evaluateJavascript(scriptCardDetected, null);
- }
- public void sendUbalError() {
- String scriptUbal = "javascript:updateBalance('%s')";
- String sendError = new Gson().toJson(ubalError);
- Log.d("ubalError", sendError);
- String dataUbal = Base64.encodeToString(sendError.getBytes(), Base64.DEFAULT);
- dataUbal = dataUbal.replace("\n", "");
- String sendData = String.format(scriptUbal, dataUbal);
- webView.evaluateJavascript(sendData, null);
- }
- public void sendUbal() {
- String scriptUbal = "javascript:updateBalance('%s')";
- String dataUbal = Base64.encodeToString(updateBalanceSuccessInfo.getBytes(), Base64.DEFAULT);
- dataUbal = dataUbal.replace("\n", "");
- String sendData = String.format(scriptUbal, dataUbal);
- webView.evaluateJavascript(sendData, null);
- }
- public void getCardNumber() {
- String scriptCardInfo = "javascript:setCard('%s')";
- Log.d("kirimwebcardinfo", cardInfo);
- String dataCard = Base64.encodeToString(cardInfo.getBytes(), Base64.DEFAULT);
- // try {
- // String dataCard2 = EncryptLib.encrypt(context, cardInfo, "");
- // }catch (Exception e) {
- // e.printStackTrace();
- // }
- dataCard = dataCard.replace("\n", "");
- Log.d("kirimwebcardstring", dataCard);
- String sendCard = String.format(scriptCardInfo, dataCard);
- Log.d("kirimweb", sendCard);
- webView.evaluateJavascript(sendCard, null);
- }
- public void getCardNumberinSunmi() {
- execute(null);
- String scriptCardInfo = "javascript:setCard('%s')";
- Log.d("kirimwebcardinfo", cardInfo);
- String dataCard = Base64.encodeToString(cardInfo.getBytes(), Base64.DEFAULT);
- // try {
- // String dataCard2 = EncryptLib.encrypt(context, cardInfo, "");
- // }catch (Exception e) {
- // e.printStackTrace();
- // }
- dataCard = dataCard.replace("\n", "");
- Log.d("kirimwebcardstring", dataCard);
- String sendCard = String.format(scriptCardInfo, dataCard);
- Log.d("kirimweb", sendCard);
- webView.evaluateJavascript(sendCard, null);
- }
- private void execute(Tag tag) {
- Log.d("Execute", "execute dipanggil");
- if (reader != null) {
- if (!deviceBrand.equalsIgnoreCase("sunmi")) {
- cardProcessor.lockIsoDepCard(tag);
- String cardUid = ByteArrayToHexString(tag.getId());
- Log.d("TagFromIntent", cardUid);
- boolean hasCardUid = !cardUid.isEmpty();
- if (hasCardUid) {
- Log.d(TAG, "---> Send to UI Card Found");
- runOnUiThread(() -> onNfcCardFound());
- CardInfoCommand command = new CardInfoCommand(reader.myReader);
- Log.e("myReader", "Myreader : " + reader.myReader);
- final CommandResult<CardInfo> execute = command.execute(cardUid);
- CardInfo detectedCardInfo = execute.getResult();
- Log.d("cardInfo", "ini card infonnya bro : " + detectedCardInfo.toString());
- Log.d("executeSuccess", "executeIsSuccess = " + execute.isSuccess());
- if (execute.isSuccess()) {
- cardNumberNow = detectedCardInfo.getCardNumber();
- cardInfo = new Gson().toJson(detectedCardInfo);
- runOnUiThread(this::getCardNumber);
- if (detectedCardInfo.getBankType().toLowerCase().contains("dki")
- || detectedCardInfo.getBankType().toLowerCase().contains("bca")) {
- runOnUiThread(() -> {
- MainWebView.this.onBalanceInfoAvailable(detectedCardInfo);
- });
- } else {
- if (exCardNumber != null) {
- if (!exCardNumber.equalsIgnoreCase(detectedCardInfo.getCardNumber())) {
- Log.d("cardsekarang", detectedCardInfo.getCardNumber());
- runOnUiThread(() -> {
- webView.evaluateJavascript("javascript: " + "ifCardNotSame(\"" + "" + "\")", null);
- });
- } else {
- cardProcessor.updateBalance(detectedCardInfo, 1, null);
- // runOnUiThread(this::sendUbal);
- }
- }
- if (status.equals("updateBalance")) {
- // cardProcessor.getBalance(detectedCardInfo);
- cardProcessor.updateBalance(detectedCardInfo, 1, null);
- } else {
- cardProcessor.getBalance(detectedCardInfo, null);
- }
- }
- } else {
- runOnUiThread(() -> {
- Log.e("error", "Messagenya : " + execute.getMessage());
- MainWebView.this.onUpdateBalanceError("Kartu tidak terdeteksi");
- cardProcessor.unlockIsoDepCard();
- });
- }
- cardProcessor.unlockIsoDepCard();
- } else {
- //wrong card type
- cardProcessor.unlockIsoDepCard();
- }
- } else {
- // cardProcessor.getBalance();
- String cardUid = cardProcessor.findCardUid();
- Log.d("TagFromIntent", cardUid);
- boolean hasCardUid = !cardUid.isEmpty();
- if (hasCardUid) {
- Log.d(TAG, "---> Send to UI Card Found");
- runOnUiThread(this::onNfcCardFound);
- // timer.cancel();
- CardInfoCommand command = new CardInfoCommand(reader.myReader);
- Log.e("myReader", "Myreader : " + reader.myReader);
- final CommandResult<CardInfo> execute = command.execute(cardUid);
- CardInfo detectedCardInfo = execute.getResult();
- // Log.d("cardInfo", "ini card infonnya bro : " + detectedCardInfo.toString());
- Log.d("executeSuccess", "executeIsSuccess = " + execute.isSuccess());
- if (execute.isSuccess()) {
- cardNumberNow = detectedCardInfo.getCardNumber();
- cardInfo = new Gson().toJson(detectedCardInfo);
- runOnUiThread(this::getCardNumber);
- if (detectedCardInfo.getBankType().toLowerCase().contains("dki")
- || detectedCardInfo.getBankType().toLowerCase().contains("bca")) {
- runOnUiThread(() -> {
- MainWebView.this.onBalanceInfoAvailable(detectedCardInfo);
- });
- } else {
- if (status.equals("updateBalance")) {
- // cardProcessor.getBalance(detectedCardInfo);
- cardProcessor.updateBalance(detectedCardInfo, 1, null);
- } else {
- cardProcessor.getBalance(detectedCardInfo, null);
- }
- }
- } else {
- runOnUiThread(() -> {
- Log.e("error", "Messagenya : " + execute.getMessage());
- MainWebView.this.onUpdateBalanceError("Kartu tidak terdeteksi");
- });
- }
- }
- }
- }
- }
- public boolean isInternetAvailable() {
- try {
- InetAddress ipAddr = InetAddress.getByName("google.com");
- return !ipAddr.equals("");
- } catch (Exception e) {
- return false;
- }
- }
- private void enableReaderMode() {
- // Recommend NfcAdapter flags for reading from other Android devices. Indicates that this
- // activity is interested in NFC-A devices (including other Android devices), and that the
- // system should not check for the presence of NDEF-formatted data (e.g. Android Beam).
- //final int READER_FLAGS = NfcAdapter.FLAG_READER_NFC_A | NfcAdapter.FLAG_READER_NFC_B | NfcAdapter.FLAG_READER_NFC_F | NfcAdapter.FLAG_READER_NFC_V | NfcAdapter.FLAG_READER_NFC_BARCODE | NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK;
- final int READER_FLAGS = NfcAdapter.FLAG_READER_NFC_A | NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK;
- ;
- NfcAdapter nfc = NfcAdapter.getDefaultAdapter(this);
- if (nfc != null && nfc.isEnabled()) {
- nfc.enableReaderMode(this, this, READER_FLAGS, null);
- Log.i(TAG, "Enabling reader mode");
- }
- }
- }
Add Comment
Please, Sign In to add comment