diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2017-12-03 10:29:17 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2017-12-03 10:29:17 +0200 |
| commit | 05c7e42a8ce55a21c94338febad593bfbf638655 (patch) | |
| tree | 5465475f3565da1b724f4cd9bfcc0eb3b67fd167 /Software/Android_Studio | |
| parent | 3a70d596ada24ad6f92f729d564ab29c3e249f06 (diff) | |
| download | Tango-05c7e42a8ce55a21c94338febad593bfbf638655.tar.gz Tango-05c7e42a8ce55a21c94338febad593bfbf638655.zip | |
MERGE
Diffstat (limited to 'Software/Android_Studio')
71 files changed, 2150 insertions, 541 deletions
diff --git a/Software/Android_Studio/Tango.DAL/build.gradle b/Software/Android_Studio/Tango.DAL/build.gradle index c237ba6e4..efd90c7c5 100644 --- a/Software/Android_Studio/Tango.DAL/build.gradle +++ b/Software/Android_Studio/Tango.DAL/build.gradle @@ -21,13 +21,9 @@ android { } } - - sourceCompatibility = 1.7 - targetCompatibility = 1.7 - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } } @@ -53,12 +49,15 @@ dependencies { compile globalDependencies.logging compile globalDependencies.storage + + compile group: 'commons-io', name: 'commons-io', version: '2.4' } //Copy data base to assets folder. task copyFiles(type: Copy) { from "$projectDir\\..\\..\\DB\\Tango.db" - into "$projectDir/src\\main\\assets\\" + into "$projectDir/src\\main\\res\\raw" + rename ('Tango.db', 'tangodb') } preBuild.dependsOn(copyFiles)
\ No newline at end of file diff --git a/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/MyOpenHelper.java b/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/MyOpenHelper.java new file mode 100644 index 000000000..1a73883d3 --- /dev/null +++ b/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/MyOpenHelper.java @@ -0,0 +1,28 @@ +package com.twine.tango.dal; + +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +/** + * Created by Roy on 12/3/2017. + */ + +public class MyOpenHelper extends SQLiteOpenHelper +{ + MyOpenHelper(Context context,String database_path) { + super(context, database_path, null, 1); + } + + @Override + public void onCreate(SQLiteDatabase sqLiteDatabase) + { + + } + + @Override + public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) + { + + } +} diff --git a/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/TangoDB.java b/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/TangoDB.java index d878e72b2..4f81cc74d 100644 --- a/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/TangoDB.java +++ b/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/TangoDB.java @@ -1,6 +1,6 @@ package com.twine.tango.dal; -import android.content.Context; +import android.content.res.Resources; import android.os.Environment; import com.elvishew.xlog.XLog; @@ -17,7 +17,12 @@ import com.snatik.storage.Storage; import com.twine.tango.core.ContextFactory; import com.twine.tango.dal.entities.Organization; +import org.apache.commons.io.IOUtils; + +import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.IOException; +import java.io.InputStream; import java.util.List; /** @@ -29,23 +34,28 @@ public class TangoDB { private static DatabaseDefinition database; private static String database_path; + private static String database_name; public static void init() { + database_name = "Tango.db"; + database_path = Environment.getExternalStorageDirectory() + "/" + database_name; + + createIfNotFound(); + FlowManager.init(FlowConfig.builder(ContextFactory.getApplicationContext()) .addDatabaseConfig( DatabaseConfig.builder( TangoDB.class) - .databaseName("Tango") + .databaseName(database_name) .build()) .build()); database = FlowManager.getDatabase(TangoDB.class); - //Test - List<Organization> results = SQLite.select().from(Organization.class).queryList(); + List<Organization> orgs = SQLite.select().from(Organization.class).queryList(); - for (Organization org : results) + for (Organization org : orgs) { XLog.i(org.getName()); } @@ -53,15 +63,20 @@ public class TangoDB backup(); } - public static File getDataBasePath(String name) + public static String getDataBasePath() + { + return database_path; + } + + public static String getDataBasePath(String name) { - database_path = Environment.getExternalStorageDirectory() + "/" + name; - return new File(database_path); + return Environment.getExternalStorageDirectory() + "/" + name; } public static void close() { database.close(); + FlowManager.close(); } public static void backup() @@ -69,4 +84,46 @@ public class TangoDB Storage storage = new Storage(ContextFactory.getApplicationContext()); storage.copy(database_path,storage.getExternalStorageDirectory() + "/" + "backup.db"); } + + public static void replace(byte[] data) + { + close(); + Storage storage = new Storage(ContextFactory.getApplicationContext()); + storage.createFile(database_path,data); + init(); + } + + private static void createIfNotFound() + { + Storage storage = new Storage(ContextFactory.getApplicationContext()); + if (!storage.isFileExist(database_path)) + { + try + { + InputStream inputStream = ContextFactory.getApplicationContext().getResources().openRawResource(R.raw.tangodb); + boolean b = storage.createFile(database_path,IOUtils.toByteArray(inputStream)); + if (b) + { + XLog.i("success"); + } + inputStream.close(); + + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + + public static byte[] convertStreamToByteArray(InputStream is) throws IOException + { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte[] buff = new byte[10240]; + int i = Integer.MAX_VALUE; + while ((i = is.read(buff, 0, buff.length)) > 0) { + baos.write(buff, 0, i); + } + + return baos.toByteArray(); // be sure to close InputStream in calling function + } } diff --git a/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/dao/OrganizationsDAO.java b/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/dao/OrganizationsDAO.java new file mode 100644 index 000000000..2fb669bbb --- /dev/null +++ b/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/dao/OrganizationsDAO.java @@ -0,0 +1,18 @@ +package com.twine.tango.dal.dao; + +import com.raizlabs.android.dbflow.sql.language.SQLite; +import com.twine.tango.dal.entities.Organization; + +import java.util.List; + +/** + * Created by Roy on 12/2/2017. + */ + +public class OrganizationsDAO +{ + public static List<Organization> getAllOrganizations() + { + return SQLite.select().from(Organization.class).queryList(); + } +} diff --git a/Software/Android_Studio/Tango.DAL/src/main/assets/Tango.db b/Software/Android_Studio/Tango.DAL/src/main/res/raw/tangodb Binary files differindex 68ca3633d..f162394c0 100644 --- a/Software/Android_Studio/Tango.DAL/src/main/assets/Tango.db +++ b/Software/Android_Studio/Tango.DAL/src/main/res/raw/tangodb diff --git a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/IMachineIdentityProvider.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/IMachineIdentityProvider.java new file mode 100644 index 000000000..e4b033eb6 --- /dev/null +++ b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/IMachineIdentityProvider.java @@ -0,0 +1,10 @@ +package com.twine.tango.integration; + +/** + * Created by Roy on 12/2/2017. + */ + +public interface IMachineIdentityProvider +{ + String getSerialNumber(); +} diff --git a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/MachineIdentityProvider.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/MachineIdentityProvider.java new file mode 100644 index 000000000..7490908c6 --- /dev/null +++ b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/MachineIdentityProvider.java @@ -0,0 +1,14 @@ +package com.twine.tango.integration; + +/** + * Created by Roy on 12/2/2017. + */ + +public class MachineIdentityProvider implements IMachineIdentityProvider +{ + @Override + public String getSerialNumber() + { + return "1234"; + } +} diff --git a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/adapters/SerialAdapter.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/adapters/SerialAdapter.java deleted file mode 100644 index 5224a0729..000000000 --- a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/adapters/SerialAdapter.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.twine.tango.integration.adapters; - -import java.io.IOException; - -import io.reactivex.Observable; - -/** - * Created by Roy on 11/8/2017. - */ - -public interface SerialAdapter { - - void setAddress(String address); - String getAddress(); - void open() throws IOException; - void close() throws IOException; - void write(byte[] data) throws IOException; - Observable<byte[]> registerReceiveListener(); - boolean getIsOpen(); -} diff --git a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/adapters/TcpAdapter.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/adapters/TcpAdapter.java deleted file mode 100644 index 3858b2c5f..000000000 --- a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/adapters/TcpAdapter.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.twine.tango.integration.adapters; - -import android.os.SystemClock; -import com.elvishew.xlog.XLog; -import java.io.IOException; -import java.io.InputStream; -import java.net.Socket; -import io.reactivex.Observable; -import io.reactivex.schedulers.Schedulers; -import io.reactivex.subjects.PublishSubject; - -/** - * Created by Roy on 11/8/2017. - */ - -public class TcpAdapter implements SerialAdapter { - - private Socket socket; - private String address; - private boolean isOpen; - private static final int port = 9999; - private Thread receiveThread; - private PublishSubject<byte[]> subject; - - public TcpAdapter(String address) { - this.address = address; - } - - @Override - public void setAddress(String address) { - this.address = address; - } - - @Override - public String getAddress() { - return this.address; - } - - @Override - public void open() throws IOException { - socket = new Socket(address, port); - isOpen = true; - receiveThread = new Thread(this::receiveThreadMethod); - receiveThread.start(); - } - - @Override - public void close() throws IOException { - socket.close(); - isOpen = false; - } - - @Override - public void write(byte[] data) throws IOException { - socket.getOutputStream().write(data); - } - - @Override - public Observable<byte[]> registerReceiveListener() { - subject = PublishSubject.create(); - return subject.observeOn(Schedulers.io()); - } - - @Override - public boolean getIsOpen() { - return isOpen; - } - - private void receiveThreadMethod() { - while (isOpen) { - - try { - - InputStream stream = socket.getInputStream(); - - if (stream.available() > 0) - { - byte[] data = new byte[stream.available()]; - int read = stream.read(data); - if (subject != null && read > 0) subject.onNext(data); - } - - } catch (Exception e) { - isOpen = false; - XLog.e(e); - if (subject != null) subject.onError(e); - } - - SystemClock.sleep(10); - } - } -} diff --git a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/machine/MachineOperator.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/machine/MachineOperator.java deleted file mode 100644 index 33a7d40ff..000000000 --- a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/machine/MachineOperator.java +++ /dev/null @@ -1,244 +0,0 @@ -package com.twine.tango.integration.machine; - -import android.os.SystemClock; -import com.elvishew.xlog.XLog; -import com.google.protobuf.GeneratedMessageV3; -import com.google.protobuf.InvalidProtocolBufferException; -import com.twine.tango.integration.adapters.SerialAdapter; -import com.twine.tango.pmr.MessageFactory; -import com.twine.tango.pmr.TangoMessage; -import com.twine.tango.pmr.common.MessageContainerOuterClass.MessageContainer; -import java.io.IOException; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; -import java.util.Locale; -import java.util.UUID; -import java.util.concurrent.ConcurrentLinkedQueue; - -import javax.inject.Inject; - -import io.reactivex.Observable; -import io.reactivex.Scheduler; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.schedulers.Schedulers; -import io.reactivex.subjects.PublishSubject; - -/** - * Created by Roy on 11/8/2017. - */ - -public class MachineOperator implements MachineOperatorInterface { - - private SerialAdapter channel; - private Calendar calendar; - private DateFormat dateFormatter; - private ConcurrentLinkedQueue<RequestMessage> requestsQueue; - private List<RequestMessage> pendingRequests; - private ConcurrentLinkedQueue<ResponseMessage> responsesQueue; - private PublishSubject<byte[]> receiveDataSubject; - private Thread pushThread; - private Thread pullThread; - private boolean isConnected; - private Scheduler ioScheduler; - private Scheduler uiScheduler; - - @Inject - public MachineOperator(SerialAdapter channel) { - - ioScheduler = Schedulers.io(); - uiScheduler = AndroidSchedulers.mainThread(); - calendar = Calendar.getInstance(); - dateFormatter = new SimpleDateFormat("HH:mm:ss.SSS", Locale.US); - requestsQueue = new ConcurrentLinkedQueue<>(); - pendingRequests = new ArrayList<>(); - responsesQueue = new ConcurrentLinkedQueue<>(); - - setCommunicationChannel(channel); - - connect().subscribe(); - } - - private void setCommunicationChannel(SerialAdapter channel) { - if (channel.getIsOpen()) { - try { - channel.close(); - } catch (IOException e) { - XLog.e(e); - } - } - - boolean reconnect = false; - - if (isConnected) { - reconnect = true; - disconnect(); - } - - this.channel = channel; - this.channel.registerReceiveListener().subscribe((data) -> - { - - try { - MessageContainer container = MessageContainer.parseFrom(data); - - RequestMessage pendingRequest = Observable.fromIterable(pendingRequests).filter(x -> x.getToken().equals(container.getToken())).blockingFirst(null); - - if (pendingRequest != null) { - pendingRequests.remove(pendingRequest); - responsesQueue.add(new ResponseMessage(pendingRequest.getSubject(), pendingRequest.getResponseClass(), data)); - } else { - XLog.w("Could not find matching request for response: %s", container.getType().toString()); - } - } catch (InvalidProtocolBufferException e) { - XLog.e(e); - } - - if (receiveDataSubject != null) - { - receiveDataSubject.onNext(data); - } - - }); - - if (reconnect) { - connect(); - } - } - - public <Request extends GeneratedMessageV3, Response extends GeneratedMessageV3> Observable<Response> send(TangoMessage<Request> message, Class<Response> className) { - - PublishSubject<Response> subject = PublishSubject.create(); - requestsQueue.add(new RequestMessage<>(subject, message, className, UUID.randomUUID().toString(), calendar.getTime())); - return subject.subscribeOn(ioScheduler).observeOn(uiScheduler); - } - - - @Override - public Observable connect() { - - return Observable.create((x) -> - { - try { - channel.open(); - isConnected = true; - startThreads(); - x.onComplete(); - } catch (Exception e) { - XLog.e("Could not connect to Tango machine.", e); - x.onError(e); - } - - }).subscribeOn(ioScheduler).observeOn(uiScheduler); - - } - - @Override - public Observable disconnect() { - - return Observable.create((x) -> - { - try { - channel.close(); - isConnected = false; - x.onComplete(); - stopThreads(); - } catch (Exception e) { - XLog.e("Could not disconnect from Tango machine.", e); - x.onError(e); - } - - }).subscribeOn(ioScheduler).observeOn(uiScheduler); - - } - - private void startThreads() { - pushThread = new Thread(this::pushThreadMethod, "Push Thread"); - pushThread.start(); - - pullThread = new Thread(this::pullThreadMethod, "Pull Thread"); - pullThread.start(); - } - - private void stopThreads() { - isConnected = false; - pullThread.interrupt(); - pushThread.interrupt(); - } - - public void writeData(byte[] data) - { - try { - channel.write(data); - } catch (IOException e) { - XLog.e(e); - } - } - - @Override - public Observable<byte[]> receiveData() { - receiveDataSubject = PublishSubject.create(); - return receiveDataSubject.observeOn(uiScheduler).subscribeOn(ioScheduler); - } - - private void pushThreadMethod() { - - while (isConnected) { - - if (requestsQueue.size() > 0) { - RequestMessage request = requestsQueue.poll(); - if (request != null) { - pendingRequests.add(request); - try { - channel.write(request.getMessage().toBytes()); - } catch (IOException e) { - isConnected = false; - XLog.e(e); - } - } - } - - SystemClock.sleep(10); - } - } - - private void pullThreadMethod() { - while (isConnected) { - - if (responsesQueue.size() > 0) { - ResponseMessage response = responsesQueue.poll(); - if (response != null) { - - try { - TangoMessage message = MessageFactory.parseTangoMessage(response.getData()); - response.getSubject().onNext(message); - response.getSubject().onComplete(); - } catch (Exception e) { - response.getSubject().onError(e); - XLog.e("Could not parse response.", e); - } - - } - } - - SystemClock.sleep(10); - } - } - - private void postRequest(RequestMessage request) { - -// SystemClock.sleep(5000); -// -// TangoMessage<Job> jobTangoMessage = MessageFactory.createTangoMessage(Job.class); -// -// jobTangoMessage.setMessage(Job.newBuilder().setName("Result Job").build()); -// -// XLog.d("Posting result for request: %s TIME: %s", request.token, dateFormatter.format(request.dateTime)); -// -// request.subject.onNext(jobTangoMessage.getMessage()); -// -// request.subject.onComplete(); - } -} diff --git a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/machine/MachineOperatorInterface.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/machine/MachineOperatorInterface.java deleted file mode 100644 index 39e7e31d7..000000000 --- a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/machine/MachineOperatorInterface.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.twine.tango.integration.machine; - -import com.google.protobuf.GeneratedMessageV3; -import com.twine.tango.pmr.TangoMessage; - -import io.reactivex.Observable; - -/** - * Created by Roy on 11/8/2017. - */ - -public interface MachineOperatorInterface { - - <Request extends GeneratedMessageV3, Response extends GeneratedMessageV3> Observable<Response> send(TangoMessage<Request> message,Class<Response> className); - Observable connect(); - Observable disconnect(); - void writeData(byte[] data); - Observable<byte[]> receiveData(); -} diff --git a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/machine/MessageBase.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/machine/MessageBase.java deleted file mode 100644 index c34e3653a..000000000 --- a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/machine/MessageBase.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.twine.tango.integration.machine; - -import io.reactivex.subjects.PublishSubject; - -/** - * Created by Roy on 11/8/2017. - */ - -public class MessageBase { - - private PublishSubject subject; - - public PublishSubject getSubject() { - return subject; - } - - public void setSubject(PublishSubject subject) { - this.subject = subject; - } - - public MessageBase(PublishSubject subject) { - this.subject = subject; - } -} diff --git a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/machine/RequestMessage.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/machine/RequestMessage.java deleted file mode 100644 index dde1ff765..000000000 --- a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/machine/RequestMessage.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.twine.tango.integration.machine; - -import com.google.protobuf.GeneratedMessageV3; -import com.twine.tango.pmr.TangoMessage; - -import java.util.Date; - -import io.reactivex.subjects.PublishSubject; - -/** - * Created by Roy on 11/8/2017. - */ -public class RequestMessage<T extends GeneratedMessageV3,Response extends GeneratedMessageV3> extends MessageBase { - - private String token; - private Date dateTime; - private TangoMessage<T> message; - private Class<Response> responseClass; - - public String getToken() { - return token; - } - - public void setToken(String token) { - this.token = token; - } - - public Date getDateTime() { - return dateTime; - } - - public void setDateTime(Date dateTime) { - this.dateTime = dateTime; - } - - public TangoMessage<T> getMessage() { - return message; - } - - public void setMessage(TangoMessage<T> message) { - this.message = message; - } - - public Class<Response> getResponseClass() { - return responseClass; - } - - public void setResponseClass(Class<Response> responseClass) { - this.responseClass = responseClass; - } - - public RequestMessage(PublishSubject subject, TangoMessage<T> message, Class<Response> responseClass, String token, Date time) { - super(subject); - this.message = message; - this.token = token; - this.dateTime = time; - this.responseClass = responseClass; - } -} diff --git a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/machine/ResponseMessage.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/machine/ResponseMessage.java deleted file mode 100644 index 13de24286..000000000 --- a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/machine/ResponseMessage.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.twine.tango.integration.machine; - -import com.twine.tango.pmr.TangoMessage; - -import io.reactivex.subjects.PublishSubject; - -/** - * Created by Roy on 11/8/2017. - */ - -public class ResponseMessage extends MessageBase { - - private byte[] data; - private Class<?> responseClass; - - public byte[] getData() { - return data; - } - - public void setData(byte[] data) { - this.data = data; - } - - public Class<?> getResponseClass() { - return responseClass; - } - - public void setResponseClass(Class<?> responseClass) { - this.responseClass = responseClass; - } - - public ResponseMessage(PublishSubject subject, Class<?> responseClass, byte[] data) { - super(subject); - this.data = data; - this.responseClass = responseClass; - } -} diff --git a/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/synchronization/SynchronizeDBRequestOuterClass.java b/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/synchronization/SynchronizeDBRequestOuterClass.java new file mode 100644 index 000000000..d9dfa19e4 --- /dev/null +++ b/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/synchronization/SynchronizeDBRequestOuterClass.java @@ -0,0 +1,646 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: SynchronizeDBRequest.proto + +package com.twine.tango.pmr.synchronization; + +public final class SynchronizeDBRequestOuterClass { + private SynchronizeDBRequestOuterClass() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + public interface SynchronizeDBRequestOrBuilder extends + // @@protoc_insertion_point(interface_extends:Tango.PMR.Synchronization.SynchronizeDBRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * <code>string SerialNumber = 1;</code> + */ + java.lang.String getSerialNumber(); + /** + * <code>string SerialNumber = 1;</code> + */ + com.google.protobuf.ByteString + getSerialNumberBytes(); + + /** + * <code>bytes LocalDB = 2;</code> + */ + com.google.protobuf.ByteString getLocalDB(); + } + /** + * Protobuf type {@code Tango.PMR.Synchronization.SynchronizeDBRequest} + */ + public static final class SynchronizeDBRequest extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:Tango.PMR.Synchronization.SynchronizeDBRequest) + SynchronizeDBRequestOrBuilder { + private static final long serialVersionUID = 0L; + // Use SynchronizeDBRequest.newBuilder() to construct. + private SynchronizeDBRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { + super(builder); + } + private SynchronizeDBRequest() { + serialNumber_ = ""; + localDB_ = com.google.protobuf.ByteString.EMPTY; + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private SynchronizeDBRequest( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownFieldProto3( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + + serialNumber_ = s; + break; + } + case 18: { + + localDB_ = input.readBytes(); + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.internal_static_Tango_PMR_Synchronization_SynchronizeDBRequest_descriptor; + } + + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.internal_static_Tango_PMR_Synchronization_SynchronizeDBRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest.class, com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest.Builder.class); + } + + public static final int SERIALNUMBER_FIELD_NUMBER = 1; + private volatile java.lang.Object serialNumber_; + /** + * <code>string SerialNumber = 1;</code> + */ + public java.lang.String getSerialNumber() { + java.lang.Object ref = serialNumber_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + serialNumber_ = s; + return s; + } + } + /** + * <code>string SerialNumber = 1;</code> + */ + public com.google.protobuf.ByteString + getSerialNumberBytes() { + java.lang.Object ref = serialNumber_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + serialNumber_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int LOCALDB_FIELD_NUMBER = 2; + private com.google.protobuf.ByteString localDB_; + /** + * <code>bytes LocalDB = 2;</code> + */ + public com.google.protobuf.ByteString getLocalDB() { + return localDB_; + } + + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!getSerialNumberBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, serialNumber_); + } + if (!localDB_.isEmpty()) { + output.writeBytes(2, localDB_); + } + unknownFields.writeTo(output); + } + + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!getSerialNumberBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, serialNumber_); + } + if (!localDB_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(2, localDB_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest)) { + return super.equals(obj); + } + com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest other = (com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest) obj; + + boolean result = true; + result = result && getSerialNumber() + .equals(other.getSerialNumber()); + result = result && getLocalDB() + .equals(other.getLocalDB()); + result = result && unknownFields.equals(other.unknownFields); + return result; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SERIALNUMBER_FIELD_NUMBER; + hash = (53 * hash) + getSerialNumber().hashCode(); + hash = (37 * hash) + LOCALDB_FIELD_NUMBER; + hash = (53 * hash) + getLocalDB().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code Tango.PMR.Synchronization.SynchronizeDBRequest} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements + // @@protoc_insertion_point(builder_implements:Tango.PMR.Synchronization.SynchronizeDBRequest) + com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.internal_static_Tango_PMR_Synchronization_SynchronizeDBRequest_descriptor; + } + + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.internal_static_Tango_PMR_Synchronization_SynchronizeDBRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest.class, com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest.Builder.class); + } + + // Construct using com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + public Builder clear() { + super.clear(); + serialNumber_ = ""; + + localDB_ = com.google.protobuf.ByteString.EMPTY; + + return this; + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.internal_static_Tango_PMR_Synchronization_SynchronizeDBRequest_descriptor; + } + + public com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest getDefaultInstanceForType() { + return com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest.getDefaultInstance(); + } + + public com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest build() { + com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest buildPartial() { + com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest result = new com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest(this); + result.serialNumber_ = serialNumber_; + result.localDB_ = localDB_; + onBuilt(); + return result; + } + + public Builder clone() { + return (Builder) super.clone(); + } + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return (Builder) super.setField(field, value); + } + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return (Builder) super.clearField(field); + } + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return (Builder) super.clearOneof(oneof); + } + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return (Builder) super.setRepeatedField(field, index, value); + } + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return (Builder) super.addRepeatedField(field, value); + } + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest) { + return mergeFrom((com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest other) { + if (other == com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest.getDefaultInstance()) return this; + if (!other.getSerialNumber().isEmpty()) { + serialNumber_ = other.serialNumber_; + onChanged(); + } + if (other.getLocalDB() != com.google.protobuf.ByteString.EMPTY) { + setLocalDB(other.getLocalDB()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + public final boolean isInitialized() { + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private java.lang.Object serialNumber_ = ""; + /** + * <code>string SerialNumber = 1;</code> + */ + public java.lang.String getSerialNumber() { + java.lang.Object ref = serialNumber_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + serialNumber_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * <code>string SerialNumber = 1;</code> + */ + public com.google.protobuf.ByteString + getSerialNumberBytes() { + java.lang.Object ref = serialNumber_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + serialNumber_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * <code>string SerialNumber = 1;</code> + */ + public Builder setSerialNumber( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + serialNumber_ = value; + onChanged(); + return this; + } + /** + * <code>string SerialNumber = 1;</code> + */ + public Builder clearSerialNumber() { + + serialNumber_ = getDefaultInstance().getSerialNumber(); + onChanged(); + return this; + } + /** + * <code>string SerialNumber = 1;</code> + */ + public Builder setSerialNumberBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + serialNumber_ = value; + onChanged(); + return this; + } + + private com.google.protobuf.ByteString localDB_ = com.google.protobuf.ByteString.EMPTY; + /** + * <code>bytes LocalDB = 2;</code> + */ + public com.google.protobuf.ByteString getLocalDB() { + return localDB_; + } + /** + * <code>bytes LocalDB = 2;</code> + */ + public Builder setLocalDB(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + + localDB_ = value; + onChanged(); + return this; + } + /** + * <code>bytes LocalDB = 2;</code> + */ + public Builder clearLocalDB() { + + localDB_ = getDefaultInstance().getLocalDB(); + onChanged(); + return this; + } + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFieldsProto3(unknownFields); + } + + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:Tango.PMR.Synchronization.SynchronizeDBRequest) + } + + // @@protoc_insertion_point(class_scope:Tango.PMR.Synchronization.SynchronizeDBRequest) + private static final com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest(); + } + + public static com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser<SynchronizeDBRequest> + PARSER = new com.google.protobuf.AbstractParser<SynchronizeDBRequest>() { + public SynchronizeDBRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new SynchronizeDBRequest(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser<SynchronizeDBRequest> parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser<SynchronizeDBRequest> getParserForType() { + return PARSER; + } + + public com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_Tango_PMR_Synchronization_SynchronizeDBRequest_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_Tango_PMR_Synchronization_SynchronizeDBRequest_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\032SynchronizeDBRequest.proto\022\031Tango.PMR." + + "Synchronization\"=\n\024SynchronizeDBRequest\022" + + "\024\n\014SerialNumber\030\001 \001(\t\022\017\n\007LocalDB\030\002 \001(\014B%" + + "\n#com.twine.tango.pmr.synchronizationb\006p" + + "roto3" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }, assigner); + internal_static_Tango_PMR_Synchronization_SynchronizeDBRequest_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_Tango_PMR_Synchronization_SynchronizeDBRequest_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_Tango_PMR_Synchronization_SynchronizeDBRequest_descriptor, + new java.lang.String[] { "SerialNumber", "LocalDB", }); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/synchronization/SynchronizeDBResponseOuterClass.java b/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/synchronization/SynchronizeDBResponseOuterClass.java new file mode 100644 index 000000000..653befd01 --- /dev/null +++ b/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/synchronization/SynchronizeDBResponseOuterClass.java @@ -0,0 +1,508 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: SynchronizeDBResponse.proto + +package com.twine.tango.pmr.synchronization; + +public final class SynchronizeDBResponseOuterClass { + private SynchronizeDBResponseOuterClass() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + public interface SynchronizeDBResponseOrBuilder extends + // @@protoc_insertion_point(interface_extends:Tango.PMR.Synchronization.SynchronizeDBResponse) + com.google.protobuf.MessageOrBuilder { + + /** + * <code>bytes RemoteDB = 1;</code> + */ + com.google.protobuf.ByteString getRemoteDB(); + } + /** + * Protobuf type {@code Tango.PMR.Synchronization.SynchronizeDBResponse} + */ + public static final class SynchronizeDBResponse extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:Tango.PMR.Synchronization.SynchronizeDBResponse) + SynchronizeDBResponseOrBuilder { + private static final long serialVersionUID = 0L; + // Use SynchronizeDBResponse.newBuilder() to construct. + private SynchronizeDBResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { + super(builder); + } + private SynchronizeDBResponse() { + remoteDB_ = com.google.protobuf.ByteString.EMPTY; + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private SynchronizeDBResponse( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownFieldProto3( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + case 10: { + + remoteDB_ = input.readBytes(); + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.internal_static_Tango_PMR_Synchronization_SynchronizeDBResponse_descriptor; + } + + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.internal_static_Tango_PMR_Synchronization_SynchronizeDBResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse.class, com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse.Builder.class); + } + + public static final int REMOTEDB_FIELD_NUMBER = 1; + private com.google.protobuf.ByteString remoteDB_; + /** + * <code>bytes RemoteDB = 1;</code> + */ + public com.google.protobuf.ByteString getRemoteDB() { + return remoteDB_; + } + + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!remoteDB_.isEmpty()) { + output.writeBytes(1, remoteDB_); + } + unknownFields.writeTo(output); + } + + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!remoteDB_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, remoteDB_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse)) { + return super.equals(obj); + } + com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse other = (com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse) obj; + + boolean result = true; + result = result && getRemoteDB() + .equals(other.getRemoteDB()); + result = result && unknownFields.equals(other.unknownFields); + return result; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + REMOTEDB_FIELD_NUMBER; + hash = (53 * hash) + getRemoteDB().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code Tango.PMR.Synchronization.SynchronizeDBResponse} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements + // @@protoc_insertion_point(builder_implements:Tango.PMR.Synchronization.SynchronizeDBResponse) + com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.internal_static_Tango_PMR_Synchronization_SynchronizeDBResponse_descriptor; + } + + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.internal_static_Tango_PMR_Synchronization_SynchronizeDBResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse.class, com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse.Builder.class); + } + + // Construct using com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + public Builder clear() { + super.clear(); + remoteDB_ = com.google.protobuf.ByteString.EMPTY; + + return this; + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.internal_static_Tango_PMR_Synchronization_SynchronizeDBResponse_descriptor; + } + + public com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse getDefaultInstanceForType() { + return com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse.getDefaultInstance(); + } + + public com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse build() { + com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse buildPartial() { + com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse result = new com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse(this); + result.remoteDB_ = remoteDB_; + onBuilt(); + return result; + } + + public Builder clone() { + return (Builder) super.clone(); + } + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return (Builder) super.setField(field, value); + } + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return (Builder) super.clearField(field); + } + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return (Builder) super.clearOneof(oneof); + } + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return (Builder) super.setRepeatedField(field, index, value); + } + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return (Builder) super.addRepeatedField(field, value); + } + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse) { + return mergeFrom((com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse other) { + if (other == com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse.getDefaultInstance()) return this; + if (other.getRemoteDB() != com.google.protobuf.ByteString.EMPTY) { + setRemoteDB(other.getRemoteDB()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + public final boolean isInitialized() { + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private com.google.protobuf.ByteString remoteDB_ = com.google.protobuf.ByteString.EMPTY; + /** + * <code>bytes RemoteDB = 1;</code> + */ + public com.google.protobuf.ByteString getRemoteDB() { + return remoteDB_; + } + /** + * <code>bytes RemoteDB = 1;</code> + */ + public Builder setRemoteDB(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + + remoteDB_ = value; + onChanged(); + return this; + } + /** + * <code>bytes RemoteDB = 1;</code> + */ + public Builder clearRemoteDB() { + + remoteDB_ = getDefaultInstance().getRemoteDB(); + onChanged(); + return this; + } + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFieldsProto3(unknownFields); + } + + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:Tango.PMR.Synchronization.SynchronizeDBResponse) + } + + // @@protoc_insertion_point(class_scope:Tango.PMR.Synchronization.SynchronizeDBResponse) + private static final com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse(); + } + + public static com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser<SynchronizeDBResponse> + PARSER = new com.google.protobuf.AbstractParser<SynchronizeDBResponse>() { + public SynchronizeDBResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new SynchronizeDBResponse(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser<SynchronizeDBResponse> parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser<SynchronizeDBResponse> getParserForType() { + return PARSER; + } + + public com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_Tango_PMR_Synchronization_SynchronizeDBResponse_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_Tango_PMR_Synchronization_SynchronizeDBResponse_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\033SynchronizeDBResponse.proto\022\031Tango.PMR" + + ".Synchronization\")\n\025SynchronizeDBRespons" + + "e\022\020\n\010RemoteDB\030\001 \001(\014B%\n#com.twine.tango.p" + + "mr.synchronizationb\006proto3" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }, assigner); + internal_static_Tango_PMR_Synchronization_SynchronizeDBResponse_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_Tango_PMR_Synchronization_SynchronizeDBResponse_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_Tango_PMR_Synchronization_SynchronizeDBResponse_descriptor, + new java.lang.String[] { "RemoteDB", }); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/Software/Android_Studio/Tango.PMR/src/main/res/raw/packages.txt b/Software/Android_Studio/Tango.PMR/src/main/res/raw/packages.txt index f332c1ed6..803095d92 100644 --- a/Software/Android_Studio/Tango.PMR/src/main/res/raw/packages.txt +++ b/Software/Android_Studio/Tango.PMR/src/main/res/raw/packages.txt @@ -1,3 +1,4 @@ common jobs stubs +synchronization diff --git a/Software/Android_Studio/Tango.SharedUI/build.gradle b/Software/Android_Studio/Tango.SharedUI/build.gradle index f86545f9b..7eadccff2 100644 --- a/Software/Android_Studio/Tango.SharedUI/build.gradle +++ b/Software/Android_Studio/Tango.SharedUI/build.gradle @@ -49,6 +49,13 @@ dependencies { annotationProcessor 'com.jakewharton:butterknife-compiler:8.7.0' implementation globalDependencies.logging implementation project(':Tango.Core') - compile 'com.hrules:horizontalnumberpicker:1.1.1' + //Extensions + compile 'me.tatarka.bindingcollectionadapter2:bindingcollectionadapter:2.2.0' + compile 'me.tatarka.bindingcollectionadapter2:bindingcollectionadapter-recyclerview:2.2.0' + compile globalDependencies.joda + implementation project(':Tango.Core') + implementation project(':Tango.DAL') + compile globalDependencies.protobuf + implementation project(':Tango.PMR') } diff --git a/Software/Android_Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/AppInitializer.java b/Software/Android_Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/AppInitializer.java new file mode 100644 index 000000000..a177517db --- /dev/null +++ b/Software/Android_Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/AppInitializer.java @@ -0,0 +1,58 @@ +package com.twine.tango.sharedui; + +import android.content.Context; + +import com.elvishew.xlog.LogConfiguration; +import com.elvishew.xlog.LogLevel; +import com.elvishew.xlog.XLog; +import com.elvishew.xlog.printer.AndroidPrinter; +import com.elvishew.xlog.printer.Printer; +import com.elvishew.xlog.printer.file.FilePrinter; +import com.elvishew.xlog.printer.file.backup.FileSizeBackupStrategy; +import com.elvishew.xlog.printer.file.naming.DateFileNameGenerator; +import com.google.protobuf.GeneratedMessageV3; +import com.twine.tango.core.ContextFactory; +import com.twine.tango.dal.TangoDB; +import com.twine.tango.pmr.MessageFactory; + +import net.danlew.android.joda.JodaTimeAndroid; + +import java.io.File; + +/** + * Created by Roy on 12/2/2017. + */ + +public class AppInitializer +{ + public static void init(Context context) + { + JodaTimeAndroid.init(context); + ContextFactory.init(context); + + LogConfiguration config = new LogConfiguration.Builder() + .logLevel(LogLevel.ALL) + .tag("Tango") + .t() + .st(1) +// .b() + .addObjectFormatter(GeneratedMessageV3.class, msg -> msg.toString()).build(); + + File sdcard = context.getFilesDir(); + File dir = new File(sdcard.getAbsolutePath() + "/logs"); + boolean b = dir.mkdirs(); + + Printer androidPrinter = new AndroidPrinter(); + Printer filePrinter = new FilePrinter.Builder(dir.getPath()) + .fileNameGenerator(new DateFileNameGenerator()) + .backupStrategy(new FileSizeBackupStrategy(1024 * 1024)) + .build(); + + XLog.init(config, androidPrinter, filePrinter); + XLog.i("Logger Initialized. logs will be saved to: " + dir.getAbsolutePath()); + + + TangoDB.init(); + MessageFactory.init(); + } +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/App.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/App.java index 3937735cf..69e4c7b22 100644 --- a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/App.java +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/App.java @@ -15,6 +15,7 @@ import com.elvishew.xlog.printer.file.naming.DateFileNameGenerator; import com.google.protobuf.GeneratedMessageV3; import com.twine.tango.core.ContextFactory; import com.twine.tango.dal.TangoDB; +import com.twine.tango.sharedui.AppInitializer; import com.twine.tango.stubs.ui.dagger.ApplicationComponent; import com.twine.tango.stubs.ui.dagger.ApplicationModule; import com.twine.tango.stubs.ui.dagger.DaggerApplicationComponent; @@ -43,42 +44,17 @@ public class App extends Application { @Override public File getDatabasePath(String name) { - return TangoDB.getDataBasePath(name); + return new File(TangoDB.getDataBasePath()); } @Override public void onCreate() { super.onCreate(); - - JodaTimeAndroid.init(this); - + appComponent = initDagger(this); context = getApplicationContext(); - ContextFactory.init(context); - - LogConfiguration config = new LogConfiguration.Builder() - .logLevel(LogLevel.ALL) - .tag("Tango") - .t() - .st(1) -// .b() - .addObjectFormatter(GeneratedMessageV3.class, msg -> msg.toString()).build(); - - File sdcard = context.getFilesDir(); - File dir = new File(sdcard.getAbsolutePath() + "/logs"); - boolean b = dir.mkdirs(); - - Printer androidPrinter = new AndroidPrinter(); - Printer filePrinter = new FilePrinter.Builder(dir.getPath()) - .fileNameGenerator(new DateFileNameGenerator()) - .backupStrategy(new FileSizeBackupStrategy(1024 * 1024)) - .build(); - - XLog.init(config, androidPrinter, filePrinter); - XLog.i("Logger Initialized. logs will be saved to: " + dir.getAbsolutePath()); - - TangoDB.init(); + AppInitializer.init(context); Thread.setDefaultUncaughtExceptionHandler((thread, throwable) -> { diff --git a/Software/Android_Studio/Tango.Synchronization/.gitignore b/Software/Android_Studio/Tango.Synchronization/.gitignore new file mode 100644 index 000000000..796b96d1c --- /dev/null +++ b/Software/Android_Studio/Tango.Synchronization/.gitignore @@ -0,0 +1 @@ +/build diff --git a/Software/Android_Studio/Tango.Synchronization/build.gradle b/Software/Android_Studio/Tango.Synchronization/build.gradle new file mode 100644 index 000000000..7134933aa --- /dev/null +++ b/Software/Android_Studio/Tango.Synchronization/build.gradle @@ -0,0 +1,49 @@ +apply plugin: 'com.android.library' + +android { + compileSdkVersion 26 + buildToolsVersion "26.0.1" + + + defaultConfig { + minSdkVersion 22 + targetSdkVersion 26 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + + multiDexEnabled true + + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation 'com.android.support:appcompat-v7:26.1.0' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' + implementation project(':Tango.PMR') + implementation project(':Tango.Web') + compile globalDependencies.logging + compile globalDependencies.storage + compile globalDependencies.dagger + compile globalDependencies.daggerAndroid + implementation project(':Tango.DAL') + implementation project(':Tango.Integration') + + compile globalDependencies.rxJava + compile globalDependencies.rxJavaAndroid +} diff --git a/Software/Android_Studio/Tango.Synchronization/proguard-rules.pro b/Software/Android_Studio/Tango.Synchronization/proguard-rules.pro new file mode 100644 index 000000000..a0eef131a --- /dev/null +++ b/Software/Android_Studio/Tango.Synchronization/proguard-rules.pro @@ -0,0 +1,25 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in C:\Users\Roy\AppData\Local\Android\Sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/Software/Android_Studio/Tango.Synchronization/src/androidTest/java/com/twine/tango/synchronization/ExampleInstrumentedTest.java b/Software/Android_Studio/Tango.Synchronization/src/androidTest/java/com/twine/tango/synchronization/ExampleInstrumentedTest.java new file mode 100644 index 000000000..4ecda40dd --- /dev/null +++ b/Software/Android_Studio/Tango.Synchronization/src/androidTest/java/com/twine/tango/synchronization/ExampleInstrumentedTest.java @@ -0,0 +1,32 @@ +package com.twine.tango.synchronization; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import com.twine.tango.core.ContextFactory; +import com.twine.tango.integration.MachineIdentityProvider; +import com.twine.tango.web.APIFactory; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest +{ + @Test + public void useAppContext() throws Exception + { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.twine.tango.synchronization.test", appContext.getPackageName()); + } +} diff --git a/Software/Android_Studio/Tango.Synchronization/src/main/AndroidManifest.xml b/Software/Android_Studio/Tango.Synchronization/src/main/AndroidManifest.xml new file mode 100644 index 000000000..0f9821a96 --- /dev/null +++ b/Software/Android_Studio/Tango.Synchronization/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.twine.tango.synchronization" /> diff --git a/Software/Android_Studio/Tango.Synchronization/src/main/java/com/twine/tango/synchronization/ITangoSynchronizer.java b/Software/Android_Studio/Tango.Synchronization/src/main/java/com/twine/tango/synchronization/ITangoSynchronizer.java new file mode 100644 index 000000000..1b61a29aa --- /dev/null +++ b/Software/Android_Studio/Tango.Synchronization/src/main/java/com/twine/tango/synchronization/ITangoSynchronizer.java @@ -0,0 +1,12 @@ +package com.twine.tango.synchronization; + +import com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse; + +import io.reactivex.Completable; +import io.reactivex.Single; + + +public interface ITangoSynchronizer +{ + Completable synchronize(); +} diff --git a/Software/Android_Studio/Tango.Synchronization/src/main/java/com/twine/tango/synchronization/TangoSynchronizer.java b/Software/Android_Studio/Tango.Synchronization/src/main/java/com/twine/tango/synchronization/TangoSynchronizer.java new file mode 100644 index 000000000..555e4f01c --- /dev/null +++ b/Software/Android_Studio/Tango.Synchronization/src/main/java/com/twine/tango/synchronization/TangoSynchronizer.java @@ -0,0 +1,65 @@ +package com.twine.tango.synchronization; + +import com.elvishew.xlog.XLog; +import com.google.protobuf.ByteString; +import com.snatik.storage.Storage; +import com.twine.tango.core.ContextFactory; +import com.twine.tango.dal.TangoDB; +import com.twine.tango.integration.IMachineIdentityProvider; +import com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest; +import com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse; +import com.twine.tango.web.APIFactory; +import com.twine.tango.web.ISynchronizationAPI; + +import io.reactivex.Completable; +import io.reactivex.Single; + +public class TangoSynchronizer implements ITangoSynchronizer +{ + private APIFactory api; + private IMachineIdentityProvider machineIdentityProvider; + + public TangoSynchronizer(APIFactory api, IMachineIdentityProvider machineIdentityProvider) + { + this.api = api; + this.machineIdentityProvider = machineIdentityProvider; + } + + @Override + public Completable synchronize() + { + return Completable.create((emitter) -> + { + + //Backup DataBase. + TangoDB.backup(); + + Storage storage = new Storage(ContextFactory.getApplicationContext()); + + //Read current DB file bytes. + byte[] data = storage.readFile(TangoDB.getDataBasePath()); + + //Create synchronization web api. + ISynchronizationAPI synchAPI = api.getSynchronizationAPI(); + + //Create synchronization response. + SynchronizeDBRequest request = SynchronizeDBRequest.newBuilder() + .setSerialNumber(machineIdentityProvider.getSerialNumber()) + .setLocalDB(ByteString.copyFrom(data)) + .build(); + + synchAPI.synchronize(request).singleOrError().subscribe((response) -> + { + + TangoDB.replace(response.getRemoteDB().toByteArray()); + emitter.onComplete(); + + },(ex) -> + { + XLog.e(ex); + emitter.onError(ex); + }); + + }); + } +} diff --git a/Software/Android_Studio/Tango.Synchronization/src/main/res/values/strings.xml b/Software/Android_Studio/Tango.Synchronization/src/main/res/values/strings.xml new file mode 100644 index 000000000..f4a346f34 --- /dev/null +++ b/Software/Android_Studio/Tango.Synchronization/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ +<resources> + <string name="app_name">Tango.Synchronization</string> +</resources> diff --git a/Software/Android_Studio/Tango.Synchronization/src/test/java/com/twine/tango/synchronization/ExampleUnitTest.java b/Software/Android_Studio/Tango.Synchronization/src/test/java/com/twine/tango/synchronization/ExampleUnitTest.java new file mode 100644 index 000000000..f7e3d9bad --- /dev/null +++ b/Software/Android_Studio/Tango.Synchronization/src/test/java/com/twine/tango/synchronization/ExampleUnitTest.java @@ -0,0 +1,19 @@ +package com.twine.tango.synchronization; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> + */ +public class ExampleUnitTest +{ + @Test + public void addition_isCorrect() throws Exception + { + assertEquals(4, 2 + 2); + } +}
\ No newline at end of file diff --git a/Software/Android_Studio/Tango.UnitTesting/.gitignore b/Software/Android_Studio/Tango.UnitTesting/.gitignore new file mode 100644 index 000000000..796b96d1c --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/.gitignore @@ -0,0 +1 @@ +/build diff --git a/Software/Android_Studio/Tango.UnitTesting/build.gradle b/Software/Android_Studio/Tango.UnitTesting/build.gradle new file mode 100644 index 000000000..f1b2b0ab3 --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/build.gradle @@ -0,0 +1,48 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 26 + buildToolsVersion "26.0.1" + + + defaultConfig { + applicationId "com.twine.tango.unittesting" + minSdkVersion 22 + targetSdkVersion 26 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + + multiDexEnabled true + + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation 'com.android.support:appcompat-v7:26.1.0' + implementation 'com.android.support.constraint:constraint-layout:1.0.2' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' + implementation project(':Tango.Core') + implementation project(':Tango.DAL') + implementation project(':Tango.Integration') + implementation project(':Tango.SharedUI') + implementation project(':Tango.Stubs') + implementation project(':Tango.Synchronization') + implementation project(':Tango.Transport') + implementation project(':Tango.Web') +} diff --git a/Software/Android_Studio/Tango.UnitTesting/proguard-rules.pro b/Software/Android_Studio/Tango.UnitTesting/proguard-rules.pro new file mode 100644 index 000000000..a0eef131a --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/proguard-rules.pro @@ -0,0 +1,25 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in C:\Users\Roy\AppData\Local\Android\Sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/Software/Android_Studio/Tango.UnitTesting/src/androidTest/java/com/twine/tango/unittesting/Synchronization_TST.java b/Software/Android_Studio/Tango.UnitTesting/src/androidTest/java/com/twine/tango/unittesting/Synchronization_TST.java new file mode 100644 index 000000000..7353fd0d4 --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/androidTest/java/com/twine/tango/unittesting/Synchronization_TST.java @@ -0,0 +1,71 @@ +package com.twine.tango.unittesting; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import com.elvishew.xlog.XLog; +import com.raizlabs.android.dbflow.config.FlowManager; +import com.raizlabs.android.dbflow.sql.language.SQLite; +import com.twine.tango.dal.TangoDB; +import com.twine.tango.dal.dao.OrganizationsDAO; +import com.twine.tango.dal.entities.Organization; +import com.twine.tango.integration.MachineIdentityProvider; +import com.twine.tango.sharedui.AppInitializer; +import com.twine.tango.synchronization.ITangoSynchronizer; +import com.twine.tango.synchronization.TangoSynchronizer; +import com.twine.tango.web.APIFactory; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> + */ +@RunWith(AndroidJUnit4.class) +public class Synchronization_TST +{ + @Test + public void useAppContext() throws Exception + { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.twine.tango.unittesting", appContext.getPackageName()); + } + + @Test + public void performSynchronization() + { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + AppInitializer.init(appContext); + + + + for (Organization org : OrganizationsDAO.getAllOrganizations()) + { + XLog.i(org.getName()); + } + + + ITangoSynchronizer synchronizer = new TangoSynchronizer(new APIFactory("http://10.0.2.2:45455/api/"), new MachineIdentityProvider()); + + synchronizer.synchronize().subscribe(() -> + { + for (Organization org : OrganizationsDAO.getAllOrganizations()) + { + XLog.i(org.getName()); + } + + }, (ex) -> + { + ex.printStackTrace(); + }); + } +} diff --git a/Software/Android_Studio/Tango.UnitTesting/src/main/AndroidManifest.xml b/Software/Android_Studio/Tango.UnitTesting/src/main/AndroidManifest.xml new file mode 100644 index 000000000..89fc2427a --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/main/AndroidManifest.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.twine.tango.unittesting"> + + <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> + + <application + android:name=".App" + android:allowBackup="true" + android:icon="@mipmap/ic_launcher" + android:label="@string/app_name" + android:roundIcon="@mipmap/ic_launcher_round" + android:supportsRtl="true" + android:theme="@style/AppTheme"> + <activity android:name=".MainActivity"> + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + + <category android:name="android.intent.category.LAUNCHER" /> + </intent-filter> + </activity> + </application> + +</manifest>
\ No newline at end of file diff --git a/Software/Android_Studio/Tango.UnitTesting/src/main/java/com/twine/tango/unittesting/App.java b/Software/Android_Studio/Tango.UnitTesting/src/main/java/com/twine/tango/unittesting/App.java new file mode 100644 index 000000000..51ba62de8 --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/main/java/com/twine/tango/unittesting/App.java @@ -0,0 +1,20 @@ +package com.twine.tango.unittesting; + +import android.app.Application; + +import com.twine.tango.dal.TangoDB; + +import java.io.File; + +/** + * Created by Roy on 12/2/2017. + */ + +public class App extends Application +{ + @Override + public File getDatabasePath(String name) + { + return new File(TangoDB.getDataBasePath(name)); + } +} diff --git a/Software/Android_Studio/Tango.UnitTesting/src/main/java/com/twine/tango/unittesting/MainActivity.java b/Software/Android_Studio/Tango.UnitTesting/src/main/java/com/twine/tango/unittesting/MainActivity.java new file mode 100644 index 000000000..4be88237d --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/main/java/com/twine/tango/unittesting/MainActivity.java @@ -0,0 +1,15 @@ +package com.twine.tango.unittesting; + +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; + +public class MainActivity extends AppCompatActivity +{ + + @Override + protected void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + } +} diff --git a/Software/Android_Studio/Tango.UnitTesting/src/main/res/drawable/ic_launcher_background.xml b/Software/Android_Studio/Tango.UnitTesting/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 000000000..1cd2a3665 --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,113 @@ +<?xml version="1.0" encoding="utf-8"?> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportHeight="108.0" + android:viewportWidth="108.0"> + <path + android:fillColor="#26A69A" + android:pathData="M0,0h108v108h-108z" + android:strokeColor="#66FFFFFF" + android:strokeWidth="0.8" /> + <path + android:fillColor="#00000000" + android:pathData="M19,0L19,108" + android:strokeColor="#33FFFFFF" + android:strokeWidth="0.8" /> + <path + android:fillColor="#00000000" + android:pathData="M9,0L9,108" + android:strokeColor="#66FFFFFF" + android:strokeWidth="0.8" /> + <path + android:fillColor="#00000000" + android:pathData="M39,0L39,108" + android:strokeColor="#66FFFFFF" + android:strokeWidth="0.8" /> + <path + android:fillColor="#00000000" + android:pathData="M29,0L29,108" + android:strokeColor="#66FFFFFF" + android:strokeWidth="0.8" /> + <path + android:fillColor="#00000000" + android:pathData="M59,0L59,108" + android:strokeColor="#66FFFFFF" + android:strokeWidth="0.8" /> + <path + android:fillColor="#00000000" + android:pathData="M49,0L49,108" + android:strokeColor="#66FFFFFF" + android:strokeWidth="0.8" /> + <path + android:fillColor="#00000000" + android:pathData="M79,0L79,108" + android:strokeColor="#66FFFFFF" + android:strokeWidth="0.8" /> + <path + android:fillColor="#00000000" + android:pathData="M69,0L69,108" + android:strokeColor="#66FFFFFF" + android:strokeWidth="0.8" /> + <path + android:fillColor="#00000000" + android:pathData="M89,0L89,108" + android:strokeColor="#33FFFFFF" + android:strokeWidth="0.8" /> + <path + android:fillColor="#00000000" + android:pathData="M99,0L99,108" + android:strokeColor="#66FFFFFF" + android:strokeWidth="0.8" /> + <path + android:fillColor="#00000000" + android:pathData="M0,89L108,89" + android:strokeColor="#33FFFFFF" + android:strokeWidth="0.8" /> + <path + android:fillColor="#00000000" + android:pathData="M0,99L108,99" + android:strokeColor="#66FFFFFF" + android:strokeWidth="0.8" /> + <path + android:fillColor="#00000000" + android:pathData="M0,69L108,69" + android:strokeColor="#66FFFFFF" + android:strokeWidth="0.8" /> + <path + android:fillColor="#00000000" + android:pathData="M0,79L108,79" + android:strokeColor="#66FFFFFF" + android:strokeWidth="0.8" /> + <path + android:fillColor="#00000000" + android:pathData="M0,49L108,49" + android:strokeColor="#66FFFFFF" + android:strokeWidth="0.8" /> + <path + android:fillColor="#00000000" + android:pathData="M0,59L108,59" + android:strokeColor="#66FFFFFF" + android:strokeWidth="0.8" /> + <path + android:fillColor="#00000000" + android:pathData="M0,29L108,29" + android:strokeColor="#66FFFFFF" + android:strokeWidth="0.8" /> + <path + android:fillColor="#00000000" + android:pathData="M0,39L108,39" + android:strokeColor="#66FFFFFF" + android:strokeWidth="0.8" /> + <path + android:fillColor="#00000000" + android:pathData="M0,19L108,19" + android:strokeColor="#33FFFFFF" + android:strokeWidth="0.8" /> + <path + android:fillColor="#00000000" + android:pathData="M0,9L108,9" + android:strokeColor="#66FFFFFF" + android:strokeWidth="0.8" /> +</vector> + diff --git a/Software/Android_Studio/Tango.UnitTesting/src/main/res/layout/activity_main.xml b/Software/Android_Studio/Tango.UnitTesting/src/main/res/layout/activity_main.xml new file mode 100644 index 000000000..22c2d005c --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/main/res/layout/activity_main.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context="com.twine.tango.unittesting.MainActivity"> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Hello World!" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + +</android.support.constraint.ConstraintLayout> diff --git a/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 000000000..00f9eaaf3 --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> + <background android:drawable="@drawable/ic_launcher_background" /> + <foreground android:drawable="@mipmap/ic_launcher_foreground" /> +</adaptive-icon>
\ No newline at end of file diff --git a/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 000000000..00f9eaaf3 --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> + <background android:drawable="@drawable/ic_launcher_background" /> + <foreground android:drawable="@mipmap/ic_launcher_foreground" /> +</adaptive-icon>
\ No newline at end of file diff --git a/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-hdpi/ic_launcher.png b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-hdpi/ic_launcher.png Binary files differnew file mode 100644 index 000000000..550730310 --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-hdpi/ic_launcher_foreground.png Binary files differnew file mode 100644 index 000000000..4e526c95b --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-hdpi/ic_launcher_foreground.png diff --git a/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-hdpi/ic_launcher_round.png b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-hdpi/ic_launcher_round.png Binary files differnew file mode 100644 index 000000000..8fab6a3a5 --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-hdpi/ic_launcher_round.png diff --git a/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-mdpi/ic_launcher.png b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-mdpi/ic_launcher.png Binary files differnew file mode 100644 index 000000000..6bc7fcd6f --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-mdpi/ic_launcher_foreground.png Binary files differnew file mode 100644 index 000000000..2c38c7190 --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-mdpi/ic_launcher_foreground.png diff --git a/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-mdpi/ic_launcher_round.png b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-mdpi/ic_launcher_round.png Binary files differnew file mode 100644 index 000000000..1eecc0e7d --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-mdpi/ic_launcher_round.png diff --git a/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xhdpi/ic_launcher.png b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xhdpi/ic_launcher.png Binary files differnew file mode 100644 index 000000000..ec87dcebe --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png Binary files differnew file mode 100644 index 000000000..072467eaa --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png diff --git a/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xhdpi/ic_launcher_round.png Binary files differnew file mode 100644 index 000000000..05ca079ca --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xhdpi/ic_launcher_round.png diff --git a/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xxhdpi/ic_launcher.png b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xxhdpi/ic_launcher.png Binary files differnew file mode 100644 index 000000000..6f67f21ba --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png Binary files differnew file mode 100644 index 000000000..78a6b7a34 --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png diff --git a/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xxhdpi/ic_launcher_round.png Binary files differnew file mode 100644 index 000000000..8bac0f274 --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xxhdpi/ic_launcher_round.png diff --git a/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xxxhdpi/ic_launcher.png Binary files differnew file mode 100644 index 000000000..0327e13fa --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png Binary files differnew file mode 100644 index 000000000..68ebe33fe --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png diff --git a/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png Binary files differnew file mode 100644 index 000000000..bacd3e758 --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png diff --git a/Software/Android_Studio/Tango.UnitTesting/src/main/res/values/colors.xml b/Software/Android_Studio/Tango.UnitTesting/src/main/res/values/colors.xml new file mode 100644 index 000000000..3ab3e9cbc --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <color name="colorPrimary">#3F51B5</color> + <color name="colorPrimaryDark">#303F9F</color> + <color name="colorAccent">#FF4081</color> +</resources> diff --git a/Software/Android_Studio/Tango.UnitTesting/src/main/res/values/strings.xml b/Software/Android_Studio/Tango.UnitTesting/src/main/res/values/strings.xml new file mode 100644 index 000000000..76b425acf --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ +<resources> + <string name="app_name">Tango.UnitTesting</string> +</resources> diff --git a/Software/Android_Studio/Tango.UnitTesting/src/main/res/values/styles.xml b/Software/Android_Studio/Tango.UnitTesting/src/main/res/values/styles.xml new file mode 100644 index 000000000..5885930df --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/main/res/values/styles.xml @@ -0,0 +1,11 @@ +<resources> + + <!-- Base application theme. --> + <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> + <!-- Customize your theme here. --> + <item name="colorPrimary">@color/colorPrimary</item> + <item name="colorPrimaryDark">@color/colorPrimaryDark</item> + <item name="colorAccent">@color/colorAccent</item> + </style> + +</resources> diff --git a/Software/Android_Studio/Tango.UnitTesting/src/test/java/com/twine/tango/unittesting/ExampleUnitTest.java b/Software/Android_Studio/Tango.UnitTesting/src/test/java/com/twine/tango/unittesting/ExampleUnitTest.java new file mode 100644 index 000000000..9c8cf8626 --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTesting/src/test/java/com/twine/tango/unittesting/ExampleUnitTest.java @@ -0,0 +1,19 @@ +package com.twine.tango.unittesting; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> + */ +public class ExampleUnitTest +{ + @Test + public void addition_isCorrect() throws Exception + { + assertEquals(4, 2 + 2); + } +}
\ No newline at end of file diff --git a/Software/Android_Studio/Tango.UnitTests/build/intermediates/incremental/compileDebugAidl/dependency.store b/Software/Android_Studio/Tango.UnitTests/build/intermediates/incremental/compileDebugAidl/dependency.store Binary files differnew file mode 100644 index 000000000..8b8400dcf --- /dev/null +++ b/Software/Android_Studio/Tango.UnitTests/build/intermediates/incremental/compileDebugAidl/dependency.store diff --git a/Software/Android_Studio/Tango.Web/.gitignore b/Software/Android_Studio/Tango.Web/.gitignore new file mode 100644 index 000000000..796b96d1c --- /dev/null +++ b/Software/Android_Studio/Tango.Web/.gitignore @@ -0,0 +1 @@ +/build diff --git a/Software/Android_Studio/Tango.Web/build.gradle b/Software/Android_Studio/Tango.Web/build.gradle new file mode 100644 index 000000000..f064794e1 --- /dev/null +++ b/Software/Android_Studio/Tango.Web/build.gradle @@ -0,0 +1,43 @@ +apply plugin: 'com.android.library' + +android { + compileSdkVersion 26 + buildToolsVersion "26.0.1" + + + defaultConfig { + minSdkVersion 22 + targetSdkVersion 26 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + + multiDexEnabled true + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation 'com.android.support:appcompat-v7:26.1.0' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' + compile globalDependencies.rxJava + compile globalDependencies.rxJavaAndroid + compile globalDependencies.retrofit + compile globalDependencies.retrofit_protobuf + compile globalDependencies.retrofit_rxJava + implementation project(':Tango.PMR') +} diff --git a/Software/Android_Studio/Tango.Web/proguard-rules.pro b/Software/Android_Studio/Tango.Web/proguard-rules.pro new file mode 100644 index 000000000..a0eef131a --- /dev/null +++ b/Software/Android_Studio/Tango.Web/proguard-rules.pro @@ -0,0 +1,25 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in C:\Users\Roy\AppData\Local\Android\Sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/Software/Android_Studio/Tango.Web/src/androidTest/java/com/twine/tango/web/ExampleInstrumentedTest.java b/Software/Android_Studio/Tango.Web/src/androidTest/java/com/twine/tango/web/ExampleInstrumentedTest.java new file mode 100644 index 000000000..8551911d6 --- /dev/null +++ b/Software/Android_Studio/Tango.Web/src/androidTest/java/com/twine/tango/web/ExampleInstrumentedTest.java @@ -0,0 +1,31 @@ +package com.twine.tango.web; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; +import android.util.Log; + +import com.twine.tango.pmr.stubs.CalculateRequestOuterClass.CalculateRequest; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest +{ + @Test + public void useAppContext() throws Exception + { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.twine.tango.web.test", appContext.getPackageName()); + } +} diff --git a/Software/Android_Studio/Tango.Web/src/main/AndroidManifest.xml b/Software/Android_Studio/Tango.Web/src/main/AndroidManifest.xml new file mode 100644 index 000000000..8978fcb47 --- /dev/null +++ b/Software/Android_Studio/Tango.Web/src/main/AndroidManifest.xml @@ -0,0 +1,6 @@ +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.twine.tango.web"> + + <uses-permission android:name="android.permission.INTERNET" /> + +</manifest> diff --git a/Software/Android_Studio/Tango.Web/src/main/java/com/twine/tango/web/APIFactory.java b/Software/Android_Studio/Tango.Web/src/main/java/com/twine/tango/web/APIFactory.java new file mode 100644 index 000000000..d244a99c8 --- /dev/null +++ b/Software/Android_Studio/Tango.Web/src/main/java/com/twine/tango/web/APIFactory.java @@ -0,0 +1,39 @@ +package com.twine.tango.web; + +import java.util.concurrent.TimeUnit; + +import okhttp3.OkHttpClient; +import retrofit2.Retrofit; +import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; +import retrofit2.converter.protobuf.ProtoConverterFactory; + + +public class APIFactory +{ + private String base_url; + + public APIFactory(String base_url) + { + this.base_url = base_url; + } + + public ISynchronizationAPI getSynchronizationAPI() + { + return createAPI(ISynchronizationAPI.class, 60); + } + + private <T> T createAPI(Class<?> cls, int timeout) + { + Retrofit retrofit = new Retrofit.Builder() + .baseUrl(base_url) + .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) + .addConverterFactory(ProtoConverterFactory.create()) + .client(new OkHttpClient.Builder() + .readTimeout(timeout, TimeUnit.SECONDS) + .writeTimeout(timeout, TimeUnit.SECONDS) + .build()) + .build(); + + return (T) retrofit.create(cls); + } +} diff --git a/Software/Android_Studio/Tango.Web/src/main/java/com/twine/tango/web/ISynchronizationAPI.java b/Software/Android_Studio/Tango.Web/src/main/java/com/twine/tango/web/ISynchronizationAPI.java new file mode 100644 index 000000000..3a3d34c3a --- /dev/null +++ b/Software/Android_Studio/Tango.Web/src/main/java/com/twine/tango/web/ISynchronizationAPI.java @@ -0,0 +1,20 @@ +package com.twine.tango.web; + +import com.twine.tango.pmr.stubs.CalculateRequestOuterClass.CalculateRequest; +import com.twine.tango.pmr.stubs.CalculateResponseOuterClass.CalculateResponse; +import com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest; +import com.twine.tango.pmr.synchronization.SynchronizeDBResponseOuterClass.SynchronizeDBResponse; + +import io.reactivex.Observable; +import retrofit2.http.Body; +import retrofit2.http.POST; + +/** + * Created by Roy on 11/30/2017. + */ + +public interface ISynchronizationAPI +{ + @POST("Synchronization/Synchronize") + Observable<SynchronizeDBResponse> synchronize(@Body SynchronizeDBRequest request); +} diff --git a/Software/Android_Studio/Tango.Web/src/main/res/values/strings.xml b/Software/Android_Studio/Tango.Web/src/main/res/values/strings.xml new file mode 100644 index 000000000..5ca3432a7 --- /dev/null +++ b/Software/Android_Studio/Tango.Web/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ +<resources> + <string name="app_name">Tango.Web</string> +</resources> diff --git a/Software/Android_Studio/Tango.Web/src/test/java/com/twine/tango/web/ExampleUnitTest.java b/Software/Android_Studio/Tango.Web/src/test/java/com/twine/tango/web/ExampleUnitTest.java new file mode 100644 index 000000000..1b13bdc8e --- /dev/null +++ b/Software/Android_Studio/Tango.Web/src/test/java/com/twine/tango/web/ExampleUnitTest.java @@ -0,0 +1,19 @@ +package com.twine.tango.web; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> + */ +public class ExampleUnitTest +{ + @Test + public void addition_isCorrect() throws Exception + { + assertEquals(4, 2 + 2); + } +}
\ No newline at end of file diff --git a/Software/Android_Studio/build.gradle b/Software/Android_Studio/build.gradle index 37278df02..73b52173e 100644 --- a/Software/Android_Studio/build.gradle +++ b/Software/Android_Studio/build.gradle @@ -39,7 +39,10 @@ ext { joda: 'net.danlew:android.joda:2.9.9.1', stream: 'net.sourceforge.streamsupport:streamsupport:1.5.6', linq: 'br.com.zbra:android-linq:1.1.0', - storage: 'com.snatik:storage:2.1.0' + storage: 'com.snatik:storage:2.1.0', + retrofit: 'com.squareup.retrofit2:retrofit:2.3.0', + retrofit_protobuf: 'com.squareup.retrofit2:converter-protobuf:2.3.0', + retrofit_rxJava: 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' ] } diff --git a/Software/Android_Studio/settings.gradle b/Software/Android_Studio/settings.gradle index 8c9325ba4..9c10194eb 100644 --- a/Software/Android_Studio/settings.gradle +++ b/Software/Android_Studio/settings.gradle @@ -1 +1 @@ -include ':app', ':Tango.BL', ':Tango.Stubs.UI', ':Tango.SharedUI', ':Tango.Models', ':Tango.Stubs', ':Tango.Integration', ':Tango.Transport', ':Tango.Core', ':Tango.PMR', ':Tango.DAL' +include ':app', ':Tango.BL', ':Tango.Stubs.UI', ':Tango.SharedUI', ':Tango.Models', ':Tango.Stubs', ':Tango.Integration', ':Tango.Transport', ':Tango.Core', ':Tango.PMR', ':Tango.DAL', ':Tango.Web', ':Tango.Synchronization', ':Tango.UnitTesting' |
