TTLockClient.getDefault().createCustomPasscode(passcode, startDate, endDate, mCurrentLock.getLockData(), mCurrentLock.getLockMac(), new CreateCustomPasscodeCallback() {
    @Override
    public void onCreateCustomPasscodeSuccess(String passcode) {
        makeToast(" passcode is created : " + passcode + " you can try it on lock now");
    }

    @Override
    public void onFail(LockError error) {
        makeErrorToast(error);
    }
});

TTLockClient.getDefault().modifyPasscode(originalPasscode, newPasscode, newStartDate, newEndDate, mCurrentLock.getLockData(), mCurrentLock.getLockMac(), new ModifyPasscodeCallback() {
    @Override
    public void onModifyPasscodeSuccess() {
        makeToast("passcode is modified success");
    }

    @Override
    public void onFail(LockError error) {
        makeErrorToast(error);
    }
});

TTLockClient.getDefault().deletePasscode(passcode, mCurrentLock.getLockData(), mCurrentLock.getLockMac(), new DeletePasscodeCallback() {
    @Override
    public void onDeletePasscodeSuccess() {
        makeToast(" passcode is deleted");
    }

    @Override
    public void onFail(LockError error) {
        makeErrorToast(error);
    }
});

TTLockClient.getDefault().resetPasscode(mCurrentLock.getLockData(), mCurrentLock.getLockMac(), new ResetPasscodeCallback() {
    @Override
    public void onResetPasscodeSuccess(String pwdInfo, long timestamp) {
        //this must be done after callback success,or the lock passcode would be work well.
        uploadResetPasscodeResult2Server(pwdInfo,timestamp);
    }

    @Override
    public void onFail(LockError error) {
        makeErrorToast(error);
    }
});