Commit ff37e1b7 authored by gandharyanto's avatar gandharyanto

[PROGRESS] Implementation

parent 9f0e02d7
...@@ -51,13 +51,13 @@ dependencies { ...@@ -51,13 +51,13 @@ dependencies {
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'io.reactivex.rxjava2:rxjava:2.2.10' implementation 'io.reactivex.rxjava2:rxjava:2.2.10'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0' implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'
implementation(group: 'com.mdd.payment', name: 'mybanklibrary-release', version: '3.3.4', ext: 'aar') implementation(group: 'com.mdd.payment', name: 'mybanklibrary-release', version: '3.5.8', ext: 'aar')
implementation(group: 'com.mdd.payment', name: 'nativecripto-release', version: '2.0.0', ext: 'aar') implementation(group: 'com.mdd.payment', name: 'nativecripto-release', version: '2.0.0', ext: 'aar')
implementation(group: 'com.mdd.payment', name: 'organicdrv-release', version: '2.1.0', ext: 'aar') implementation(group: 'com.mdd.payment', name: 'organicdrv-release', version: '2.1.0', ext: 'aar')
implementation(group: 'com.mdd.payment', name: 'isodeplibrary-release', version: '2.1.1', ext: 'aar') implementation(group: 'com.mdd.payment', name: 'isodeplibrary-release', version: '2.1.1', ext: 'aar')
implementation(group: 'com.mdd.payment', name: 'z91library-release', version: '2.1.0', ext: 'aar') implementation(group: 'com.mdd.payment', name: 'z91library-release', version: '2.1.0', ext: 'aar')
implementation(group: 'com.mdd.payment', name: 'aar-deviceid-release', version: '2.0.2', ext: 'aar') implementation(group: 'com.mdd.payment', name: 'aar-deviceid-release', version: '2.0.4', ext: 'aar')
implementation(group: 'com.mdd.service', name: 'partner-connect', version: '2.2.2', ext: 'aar') implementation(group: 'com.mdd.service', name: 'partner-connect', version: '2.2.5', ext: 'aar')
implementation(group: 'com.mdd.topup.unik', name: 'update-balance', version: '2.2.6', ext: 'aar') implementation(group: 'com.mdd.topup', name: 'update-balance', version: '2.3.5', ext: 'aar')
} }
\ No newline at end of file
package id.mdd.implementationpartnerconnect; package id.mdd.implementationpartnerconnect;
import android.Manifest; import android.Manifest;
import android.content.AsyncQueryHandler;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.nfc.NfcAdapter; import android.nfc.NfcAdapter;
import android.nfc.NfcManager; import android.nfc.NfcManager;
import android.nfc.Tag;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Message;
import android.util.Log; import android.util.Log;
import android.widget.Toast; import android.widget.Toast;
...@@ -19,20 +23,53 @@ import com.mdd.topupUnik.ubal.MainCardProcessor; ...@@ -19,20 +23,53 @@ import com.mdd.topupUnik.ubal.MainCardProcessor;
import com.mdd.topupUnik.ubal.SuccessUpdateBalance; import com.mdd.topupUnik.ubal.SuccessUpdateBalance;
import com.mdd.topupUnik.ubal.UpdateBalanceView; import com.mdd.topupUnik.ubal.UpdateBalanceView;
import com.mdd.topupUnik.ubal.lib.CardInfo; import com.mdd.topupUnik.ubal.lib.CardInfo;
import com.mdd.topupUnik.ubal.lib.CardInfoCommand;
import com.mdd.topupUnik.ubal.lib.CommandResult;
import com.mdd.topupUnik.ubal.lib.FindCardResponse;
import com.medicom.organicdrv.OrganicDriver;
import id.emhusnan.mdd.service.MDDCommand; import id.emhusnan.mdd.service.MDDCommand;
import id.emhusnan.mdd.service.MDDService;
import id.emhusnan.mdd.service.MDDUpdateBalanceView; import id.emhusnan.mdd.service.MDDUpdateBalanceView;
import id.emhusnan.mdd.service.UpdateBalanceUiMessageFactory;
import id.emhusnan.mdd.service.UpdateBalanceUiThreadHandler;
public class MainActivity extends AppCompatActivity implements MDDUpdateBalanceView { import static com.mdd.topupUnik.ubal.CardValidationError.ERROR_CARD_NOT_SUPPORTED;
import static com.mdd.topupUnik.ubal.CardValidationError.ERROR_DIFFERENT_ISSUER_CARD;
import static com.medicom.organicdrv.utilsLib.ByteArrayToHexString;
import static id.emhusnan.mdd.service.MDDCommand.COMMAND_GET_BALANCE;
import static id.emhusnan.mdd.service.MDDCommand.COMMAND_UPDATE_BALANCE;
public class MainActivity extends AppCompatActivity implements MDDUpdateBalanceView, NfcAdapter.ReaderCallback {
private String TAG = "MDDService"; private String TAG = "MDDService";
private int COMMAND = MDDCommand.COMMAND_GET_BALANCE; private int COMMAND = COMMAND_GET_BALANCE;
private InitReader reader; private InitReader reader;
private MainCardProcessor cardProcessor; private MainCardProcessor cardProcessor;
private boolean isProcessingTag;
private UpdateBalanceUiThreadHandler updateBalanceUiThreadHandler;
protected int getCommand() { protected int getCommand() {
return COMMAND; return COMMAND;
} }
CountDownTimer timer = new CountDownTimer(7000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
Log.d(TAG, "## ticker timed out remaining: " + millisUntilFinished / 1000 + "s");
}
@Override
public void onFinish() {
if (isProcessingTag) {
Message msg = UpdateBalanceUiMessageFactory.updateBalanceErrorMsg(
"Timed out"
);
sendToUI(msg);
}
}
};
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
// Here, thisActivity is the current activity // Here, thisActivity is the current activity
...@@ -61,36 +98,18 @@ public class MainActivity extends AppCompatActivity implements MDDUpdateBalanceV ...@@ -61,36 +98,18 @@ public class MainActivity extends AppCompatActivity implements MDDUpdateBalanceV
} }
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); setContentView(R.layout.activity_main);
updateBalanceUiThreadHandler = new UpdateBalanceUiThreadHandler(getMDDView());
reader = ((MyApp) getApplication()).getReader(); setCommand(COMMAND_GET_BALANCE);
cardProcessor = new MainCardProcessor(this, reader, new UpdateBalanceView() { enableReaderMode();
@Override
public void onUpdateBalanceSuccess(SuccessUpdateBalance successUpdateBalance) {
runOnUiThread(() -> onUpdateBalaceSuccess(successUpdateBalance));
}
@Override
public void onUpdateBalanceError(String reason) {
runOnUiThread(() -> onUpdateBalanceError(reason));
}
@Override
public void onCardDetected(CardInfo cardInfo) {
runOnUiThread(() -> onBalanceInfoAvailable(cardInfo));
}
@Override
public void onErrorNfcCardMsg(int errorCode) {
runOnUiThread(() -> onUpdateBalanceError(""));
}
});
} }
@Override @Override
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
setCommand(MDDCommand.COMMAND_GET_BALANCE); // FindCardResponse findCardResponse = cardProcessor.findCardUid();
// Log.e("findCardResponse", findCardResponse.getUid() + " " + findCardResponse.getCardType());
NfcManager manager = (NfcManager) getSystemService(Context.NFC_SERVICE); NfcManager manager = (NfcManager) getSystemService(Context.NFC_SERVICE);
NfcAdapter adapter = manager.getDefaultAdapter(); NfcAdapter adapter = manager.getDefaultAdapter();
...@@ -125,7 +144,7 @@ public class MainActivity extends AppCompatActivity implements MDDUpdateBalanceV ...@@ -125,7 +144,7 @@ public class MainActivity extends AppCompatActivity implements MDDUpdateBalanceV
public void onBalanceInfoAvailable(CardInfo cardInfo) { public void onBalanceInfoAvailable(CardInfo cardInfo) {
Log.d(TAG, "onBalanceInfoAvailable: " + cardInfo.getBalance()); Log.d(TAG, "onBalanceInfoAvailable: " + cardInfo.getBalance());
Toast.makeText(this, "Balance " + cardInfo.getBalance(), Toast.LENGTH_SHORT).show(); Toast.makeText(this, "Balance " + cardInfo.getBalance(), Toast.LENGTH_SHORT).show();
COMMAND = MDDCommand.COMMAND_UPDATE_BALANCE; COMMAND = COMMAND_UPDATE_BALANCE;
} }
@Override @Override
...@@ -142,6 +161,134 @@ public class MainActivity extends AppCompatActivity implements MDDUpdateBalanceV ...@@ -142,6 +161,134 @@ public class MainActivity extends AppCompatActivity implements MDDUpdateBalanceV
@Override @Override
public void onBeginOperation() { public void onBeginOperation() {
Log.d(TAG, "onBeginOperation: "); Log.d(TAG, "onBeginOperation: ");
}
@Override
public void onTagDiscovered(Tag tag) {
reader = MDDService.getInstance().getInitReader();
cardProcessor = new MainCardProcessor(this, reader, new UpdateBalanceView() {
@Override
public void onUpdateBalanceSuccess(SuccessUpdateBalance successUpdateBalance) {
runOnUiThread(() -> onUpdateBalaceSuccess(successUpdateBalance));
}
@Override
public void onUpdateBalanceError(String reason) {
runOnUiThread(() -> onUpdateBalanceError(reason));
}
@Override
public void onCardDetected(CardInfo cardInfo) {
runOnUiThread(() -> onBalanceInfoAvailable(cardInfo));
}
@Override
public void onErrorNfcCardMsg(int errorCode) {
runOnUiThread(() -> onUpdateBalanceError(""));
}
});
if(reader == null){
Toast.makeText(this, "please activate library", Toast.LENGTH_SHORT).show();
}else{
String cardUid = ByteArrayToHexString(tag.getId());
cardProcessor.lockIsoDepCard(tag);
boolean hasCardUid = !cardUid.isEmpty();
if (hasCardUid) {
Log.d(TAG, "---> UID : " + cardUid);
setProcessingTag();
// IsoDep iso = IsoDep.get(tag);
// try {
// iso.connect();
// } catch (IOException e) {
// e.printStackTrace();
// }
// iso.setTimeout(10000);
Log.d(TAG, "---> Send to UI Card Found");
// final Message msg = UpdateBalanceUiMessageFactory.nfcCardFoundMsg();
// sendToUI(msg);
CardInfoCommand command = new CardInfoCommand(reader.myReader);
FindCardResponse findCardResponse = new FindCardResponse();
findCardResponse.setUid(cardUid);
findCardResponse.setCardType(OrganicDriver.CARDTYPE_JAVA);
final CommandResult<CardInfo> execute = command.execute(findCardResponse);
CardInfo detectedCardInfo = execute.getResult();
if (execute.isSuccess()) {
switch (getCommand()) {
case COMMAND_GET_BALANCE:
Log.d(TAG, "getBalance");
cardProcessor.getBalance(detectedCardInfo);
break;
case COMMAND_UPDATE_BALANCE:
Log.d(TAG, "updateBalance");
cardProcessor.updateBalance(detectedCardInfo, 1);
break;
}
} else {
if (execute.getMessage().equals("27266")) {//27266 int of 6A82: Bank not activatated
sendToUI(UpdateBalanceUiMessageFactory.errorNfcCardMsg(ERROR_DIFFERENT_ISSUER_CARD));
} else {
sendToUI(UpdateBalanceUiMessageFactory.errorNfcCardMsg(ERROR_CARD_NOT_SUPPORTED));
}
setNotProcessingTag();
cardProcessor.unlockIsoDepCard();
}
} else {
sendToUI(UpdateBalanceUiMessageFactory.errorNfcCardMsg(ERROR_CARD_NOT_SUPPORTED));
setNotProcessingTag();
cardProcessor.unlockIsoDepCard();
}
}
}
protected void setNotProcessingTag() {
isProcessingTag = false;
Log.d(TAG, "--> Mark tag processing finish");
timer.cancel();
Log.d(TAG, "--> Cancel time out timer");
}
protected void setProcessingTag() {
isProcessingTag = true;
Log.d(TAG, "--> Mark tag on process");
timer.start();
Log.d(TAG, "--> Start countdown timer for timed out");
}
private void sendToUI(Message msg) {
updateBalanceUiThreadHandler.handleMessage(msg);
}
@Override
protected void onDestroy() {
super.onDestroy();
disableReaderMode();
}
private void enableReaderMode() {
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);
}
private void disableReaderMode() {
if (!isDestroyed()) {
NfcAdapter nfc = NfcAdapter.getDefaultAdapter(this);
if (nfc != null && nfc.isEnabled())
nfc.disableReaderMode(this);
}
} }
} }
\ No newline at end of file
...@@ -18,9 +18,9 @@ import id.emhusnan.mdd.service.ConfigService; ...@@ -18,9 +18,9 @@ import id.emhusnan.mdd.service.ConfigService;
import id.emhusnan.mdd.service.MDDService; import id.emhusnan.mdd.service.MDDService;
public class MyApp extends Application { public class MyApp extends Application {
String GIVE_MID = "1bdaf34aef1656dcb2abe461255d8f57"; // please ask us for credential String GIVE_MID = "ba7db816e59612f8ce1630a095ef01c5"; // please ask us for credential
String GIVE_TID = "0820517774";// please ask us for credential String GIVE_TID = "0820517774";// please ask us for credential
String GIVEN_TOKEN = "5f20a841498c683632da73317362e3cb";// please ask us for credential String GIVEN_TOKEN = "5b423ef49cb029340d7231cace0de201";// please ask us for credential
private final String accessToken = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJhdXRoLXNlcnZpY2U6MS4wLjAiLCJzdWIiOnsibmFtZSI6IlRlc3RQcm9kMyIsInVzZXJuYW1lIjoiVGVzdFByb2QzIiwiYXV0aF9sZXZlbCI6Ik1FUkNIQU5UIiwibWlkIjoiMWZiNTdmMTY2YTQ4MGU5N2JmN2EzZGNiZjkzMTkyOTMifSwiaWF0IjoxNTk3NzM3NzIxLCJleHAiOjE1OTc4MjQxMjEsIm5iZiI6MTU5NzczNzcyM30.CXM-5mCv91Yo17c9zHXQKPGR5gqAeu-LADta-_qnABYxzmnE4Dx0q7NQ9IYr6cYO6cXp40UW4s632fzVYmPCXH8f0RtSwLPqTT7_lWHK--fHCP-LZOmfgwUBxdNocYY9xAi-NyWqCmTnkjWx91lqh9S9Fcue6nO_KrBqngUpBPhpS0hPwgmkqHXX6yAdVs931NbfNM3cYW9PpGIw8K-OxoPDHByD61uAFxT9FCrTbca7vV3HFQnZEKpwxxdECu7DCQAsGTl7JqfbH2j5swe_t97rSDAGyE1HRzGX-SMqPULkC-XravF2m_HucosacYQuSdRaxAWfEIQvtQhAcRXwTA"; private final String accessToken = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJhdXRoLXNlcnZpY2U6MS4wLjAiLCJzdWIiOnsibmFtZSI6IlRlc3RQcm9kMyIsInVzZXJuYW1lIjoiVGVzdFByb2QzIiwiYXV0aF9sZXZlbCI6Ik1FUkNIQU5UIiwibWlkIjoiMWZiNTdmMTY2YTQ4MGU5N2JmN2EzZGNiZjkzMTkyOTMifSwiaWF0IjoxNTk3NzM3NzIxLCJleHAiOjE1OTc4MjQxMjEsIm5iZiI6MTU5NzczNzcyM30.CXM-5mCv91Yo17c9zHXQKPGR5gqAeu-LADta-_qnABYxzmnE4Dx0q7NQ9IYr6cYO6cXp40UW4s632fzVYmPCXH8f0RtSwLPqTT7_lWHK--fHCP-LZOmfgwUBxdNocYY9xAi-NyWqCmTnkjWx91lqh9S9Fcue6nO_KrBqngUpBPhpS0hPwgmkqHXX6yAdVs931NbfNM3cYW9PpGIw8K-OxoPDHByD61uAFxT9FCrTbca7vV3HFQnZEKpwxxdECu7DCQAsGTl7JqfbH2j5swe_t97rSDAGyE1HRzGX-SMqPULkC-XravF2m_HucosacYQuSdRaxAWfEIQvtQhAcRXwTA";
private InitReader reader; private InitReader reader;
...@@ -58,7 +58,10 @@ public class MyApp extends Application { ...@@ -58,7 +58,10 @@ public class MyApp extends Application {
MDDService initialize = MDDService.with(this, configService); MDDService initialize = MDDService.with(this, configService);
if (initialize.isValid()) { if (initialize.isValid()) {
reader = initialize.getInitReader(); reader = initialize.getInitReader();
if (reader != null)
Log.e("MyApp", "Aktivasi library sukses"); Log.e("MyApp", "Aktivasi library sukses");
else
Log.e("MyApp", "Library belum aktif reader null");
// Toast.makeText(this, "Aktivasi library sukses", Toast.LENGTH_SHORT).show(); // Toast.makeText(this, "Aktivasi library sukses", Toast.LENGTH_SHORT).show();
} else { } else {
Log.e("MyApp", "Library belum aktif"); Log.e("MyApp", "Library belum aktif");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment