Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file modified gradlew
100644 → 100755
Empty file.
10 changes: 10 additions & 0 deletions src/main/aidl/ru/evotor/tspiot/ITsPioTService.aidl
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package ru.evotor.tspiot;

import ru.evotor.tspiot.model.MarkingCode;
import ru.evotor.tspiot.result.TsPioTResult;

interface ITsPioTService {
TsPioTResult getKktInfo();

TsPioTResult getMarkedProductsInfo(in List<MarkingCode> codes);
}
3 changes: 3 additions & 0 deletions src/main/aidl/ru/evotor/tspiot/model/MarkingCode.aidl
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package ru.evotor.tspiot.model;

parcelable MarkingCode;
3 changes: 3 additions & 0 deletions src/main/aidl/ru/evotor/tspiot/result/TsPioTResult.aidl
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package ru.evotor.tspiot.result;

parcelable TsPioTResult;
64 changes: 64 additions & 0 deletions src/main/java/ru/evotor/tspiot/TsPioTServiceConnector.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package ru.evotor.tspiot;

import android.content.Context;
import android.os.DeadObjectException;
import java.util.concurrent.CopyOnWriteArrayList;
import ru.evotor.tspiot.exceptions.ServiceNotConnectedException;
import ru.evotor.tspiot.exceptions.TsPioTServiceOperationOnMainThreadException;
import ru.evotor.tspiot.exceptions.base.TsPioTServiceException;
import ru.evotor.tspiot.exceptions.TsPioTServiceRuntimeException;
import ru.evotor.tspiot.service.ITsPioTConnectionWrapper;
import ru.evotor.tspiot.service.ITsPioTServiceWrapper;
import ru.evotor.tspiot.service.TsPioTService;

public class TsPioTServiceConnector {

protected static final String TAG = "TsPioTServiceConnector";

public static final String ACTION_TSPIOT_SERVICE = "evotor.intent.action.TSPIOT_SERVICE";
public static final String TARGET_PACKAGE = "ru.esp.umesm";
public static final String TARGET_CLASS_NAME = "ru.esp.worker.worker.IntegrationMarksCheckService";

protected final static TsPioTService tsPioTService = new TsPioTService();

protected final static CopyOnWriteArrayList<ITsPioTConnectionWrapper> connectionWrappers = new CopyOnWriteArrayList<>();

public static CopyOnWriteArrayList<ITsPioTConnectionWrapper> getConnectionWrappers() {
return connectionWrappers;
}

public static void addConnectionWrapper(ITsPioTConnectionWrapper connectionWrapper) {
connectionWrappers.add(connectionWrapper);
}

public static void removeConnectionWrapper(ITsPioTConnectionWrapper connectionWrapper) {
connectionWrappers.remove(connectionWrapper);
}

public static void clearConnectionWrappers() {
connectionWrappers.clear();
}

public static ITsPioTServiceWrapper connectTsPioTService(Context context) throws TsPioTServiceException {
TsPioTServiceOperationOnMainThreadException.throwIfMainThread();

tsPioTService.connectService(context, false);
return tsPioTService;
}

public static void disconnectTsPioTService() throws TsPioTServiceException {
TsPioTServiceOperationOnMainThreadException.throwIfMainThread();

tsPioTService.disconnectService();
}

public static void processException(Exception exc) throws TsPioTServiceException {
if (exc instanceof DeadObjectException) {
tsPioTService.reconnectService();
throw new ServiceNotConnectedException(exc);
} else if (exc instanceof RuntimeException) {
throw new TsPioTServiceRuntimeException(exc);
}
exc.printStackTrace();
}
}
25 changes: 25 additions & 0 deletions src/main/java/ru/evotor/tspiot/Utils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package ru.evotor.tspiot;

import android.os.Parcel;
import androidx.annotation.Nullable;

public final class Utils {

@Nullable
public static Integer readInteger(Parcel parcel) {
try {
return (Integer) parcel.readValue(Integer.class.getClassLoader());
} catch (Exception ex) {
return null;
}
}

@Nullable
public static Boolean readBoolean(Parcel parcel) {
try {
return (Boolean) parcel.readValue(Boolean.class.getClassLoader());
} catch (Exception ex) {
return null;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package ru.evotor.tspiot.exceptions;

import ru.evotor.tspiot.exceptions.base.TsPioTServiceException;

public class NullContextException extends TsPioTServiceException { }
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package ru.evotor.tspiot.exceptions;

import ru.evotor.tspiot.exceptions.base.TsPioTServiceException;

public class ServiceAlreadyConnectedException extends TsPioTServiceException { }
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package ru.evotor.tspiot.exceptions;

import ru.evotor.tspiot.exceptions.base.TsPioTServiceException;

public class ServiceNotConnectedException extends TsPioTServiceException {

public ServiceNotConnectedException(Exception ex) { super(ex); }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package ru.evotor.tspiot.exceptions;

import ru.evotor.tspiot.exceptions.base.TsPioTServiceException;
import ru.evotor.tspiot.result.Errors;

/** Исключение обёртка для передачи ошибок от драйвера ТС ПИоТ */
public class TsPioTErrorHolderException extends TsPioTServiceException {

public final Errors code;

public final String message;

public TsPioTErrorHolderException(Errors code, String message) {
super();
this.code = code;
this.message = message;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package ru.evotor.tspiot.exceptions;

import android.os.Looper;
import ru.evotor.tspiot.exceptions.base.TsPioTServiceException;

public class TsPioTServiceOperationOnMainThreadException extends TsPioTServiceException {
public TsPioTServiceOperationOnMainThreadException() {
super("It is forbidden to perform operations with TS PIoT service in the main thread, it can be time-consuming");
}

public static void throwIfMainThread() throws TsPioTServiceOperationOnMainThreadException {
if (Looper.getMainLooper() == Looper.myLooper()) {
throw new TsPioTServiceOperationOnMainThreadException();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package ru.evotor.tspiot.exceptions;

import ru.evotor.tspiot.exceptions.base.TsPioTServiceException;

public class TsPioTServiceRuntimeException extends TsPioTServiceException {

public TsPioTServiceRuntimeException(Exception ex) { super(ex); }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package ru.evotor.tspiot.exceptions;

import ru.evotor.tspiot.exceptions.base.TsPioTServiceException;

public class UnknownException extends TsPioTServiceException {

public UnknownException(String message) { super(message); }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package ru.evotor.tspiot.exceptions.base;

/** Базовый класс для исключений, которые могу возникнуть на стороне клиента ТС ПИоТ*/
public class TsPioTServiceException extends Exception {

public TsPioTServiceException() {
super();
}

public TsPioTServiceException(String message) {
super(message);
}

public TsPioTServiceException(Exception e) {
super(e);
}
}
56 changes: 56 additions & 0 deletions src/main/java/ru/evotor/tspiot/model/MarkingCode.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package ru.evotor.tspiot.model;

import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.Nullable;
import ru.evotor.tspiot.Utils;

public class MarkingCode implements Parcelable {

/** Версия MarkingCode */
private static final int VERSION = 1;

/** Код маркировки */
private final String cis;

/** Опциональный параметр идентификатора товарной группы */
@Nullable private final Integer productType;

public MarkingCode(String cis, @Nullable Integer productType) {
this.cis = cis;
this.productType = productType;
}

private MarkingCode(Parcel parcel) {
int version = parcel.readInt();
this.cis = parcel.readString();
this.productType = Utils.readInteger(parcel);
}

public String getCis() { return cis; }

@Nullable
public Integer getProductType() { return productType; }

@Override
public int describeContents() { return 0; }

@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeInt(VERSION);
parcel.writeString(cis);
parcel.writeValue(productType);
}

public static Creator<MarkingCode> CREATOR = new Creator<>() {
@Override
public MarkingCode createFromParcel(Parcel parcel) {
return new MarkingCode(parcel);
}

@Override
public MarkingCode[] newArray(int i) {
return new MarkingCode[i];
}
};
}
Loading