From 914f4db513477d9aff726546bac47545195a3e37 Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Thu, 16 Nov 2017 13:38:56 +0200 Subject: Rename "Visual Studio" to "Visual_Studio" Rename "External Repositories" to "External_Repositories". --- .../main/java/com/twine/tango/stubs/ui/App.java | 91 ++++++++++++++++++++++ .../twine/tango/stubs/ui/Events/LoginEvent.java | 24 ++++++ .../tango/stubs/ui/Events/StubSelectedEvent.java | 24 ++++++ .../stubs/ui/dagger/ApplicationComponent.java | 33 ++++++++ .../tango/stubs/ui/dagger/ApplicationModule.java | 30 +++++++ .../tango/stubs/ui/dagger/EventBusModule.java | 24 ++++++ .../tango/stubs/ui/dagger/NotificationModule.java | 27 +++++++ .../tango/stubs/ui/dagger/ServicesModule.java | 8 ++ .../tango/stubs/ui/dagger/TransportModule.java | 33 ++++++++ .../tango/stubs/ui/dagger/ViewModelsModule.java | 62 +++++++++++++++ .../tango/stubs/ui/views/login/LoginFragment.java | 46 +++++++++++ .../ui/views/login/LoginFragmentContract.java | 10 +++ .../stubs/ui/views/login/LoginFragmentVM.java | 51 ++++++++++++ .../tango/stubs/ui/views/main/MainActivity.java | 80 +++++++++++++++++++ .../stubs/ui/views/main/MainActivityContract.java | 18 +++++ .../tango/stubs/ui/views/main/MainActivityVM.java | 37 +++++++++ .../ui/views/selection/SelectionFragment.java | 49 ++++++++++++ .../views/selection/SelectionFragmentContract.java | 18 +++++ .../ui/views/selection/SelectionFragmentVM.java | 23 ++++++ .../tango/stubs/ui/views/stub/StubActivity.java | 19 +++++ .../stubs/ui/views/stub/StubActivityContract.java | 10 +++ .../tango/stubs/ui/views/stub/StubActivityVM.java | 78 +++++++++++++++++++ .../tango/stubs/ui/views/stubs/StubsActivity.java | 25 ++++++ .../ui/views/stubs/StubsActivityContract.java | 13 ++++ .../stubs/ui/views/stubs/StubsActivityVM.java | 60 ++++++++++++++ 25 files changed, 893 insertions(+) create mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/App.java create mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/Events/LoginEvent.java create mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/Events/StubSelectedEvent.java create mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ApplicationComponent.java create mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ApplicationModule.java create mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/EventBusModule.java create mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/NotificationModule.java create mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ServicesModule.java create mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/TransportModule.java create mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ViewModelsModule.java create mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/login/LoginFragment.java create mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/login/LoginFragmentContract.java create mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/login/LoginFragmentVM.java create mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/main/MainActivity.java create mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/main/MainActivityContract.java create mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/main/MainActivityVM.java create mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/selection/SelectionFragment.java create mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/selection/SelectionFragmentContract.java create mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/selection/SelectionFragmentVM.java create mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stub/StubActivity.java create mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stub/StubActivityContract.java create mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stub/StubActivityVM.java create mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stubs/StubsActivity.java create mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stubs/StubsActivityContract.java create mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stubs/StubsActivityVM.java (limited to 'Software/Android_Studio/Tango.Stubs.UI/src/main/java') 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 new file mode 100644 index 000000000..f0c71477f --- /dev/null +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/App.java @@ -0,0 +1,91 @@ +package com.twine.tango.stubs.ui; + +import android.app.Application; +import android.content.Context; +import android.os.Environment; + +import com.elvishew.xlog.LogConfiguration; +import com.elvishew.xlog.LogLevel; +import com.elvishew.xlog.XLog; +import com.elvishew.xlog.formatter.message.object.ObjectFormatter; +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.pmr.MessageFactory; +import com.twine.tango.stubs.ui.dagger.ApplicationComponent; +import com.twine.tango.stubs.ui.dagger.ApplicationModule; +import com.twine.tango.stubs.ui.dagger.DaggerApplicationComponent; + +import net.danlew.android.joda.JodaTimeAndroid; + +import java.io.File; + +/** + * Created by Roy on 11/6/2017. + */ + +public class App extends Application { + private static Context context; + + private ApplicationComponent appComponent; + + public ApplicationComponent getAppComponent() { + return appComponent; + } + + protected ApplicationComponent initDagger(App application) { + return DaggerApplicationComponent.builder().applicationModule(new ApplicationModule(application)).build(); + } + + @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()); + + + Thread.setDefaultUncaughtExceptionHandler((thread, throwable) -> { + + XLog.e(throwable); + System.exit(1); + }); + } + + public static ApplicationComponent getComponent() { + return ((App) context).getAppComponent(); + } + + public static Context getContext() { + return context; + } +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/Events/LoginEvent.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/Events/LoginEvent.java new file mode 100644 index 000000000..da5f62124 --- /dev/null +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/Events/LoginEvent.java @@ -0,0 +1,24 @@ +package com.twine.tango.stubs.ui.Events; + +import com.twine.tango.models.User; + +/** + * Created by Roy on 11/7/2017. + */ + +public class LoginEvent { + + private User user; + + public LoginEvent(User user) { + this.user = user; + } + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/Events/StubSelectedEvent.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/Events/StubSelectedEvent.java new file mode 100644 index 000000000..1c2826c25 --- /dev/null +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/Events/StubSelectedEvent.java @@ -0,0 +1,24 @@ +package com.twine.tango.stubs.ui.Events; + +import com.twine.tango.stubs.AvailableStub; + +/** + * Created by Roy on 11/7/2017. + */ + +public class StubSelectedEvent { + + private AvailableStub stub; + + public AvailableStub getStub() { + return stub; + } + + public void setStub(AvailableStub stub) { + this.stub = stub; + } + + public StubSelectedEvent(AvailableStub stub) { + this.stub = stub; + } +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ApplicationComponent.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ApplicationComponent.java new file mode 100644 index 000000000..e9a3d65de --- /dev/null +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ApplicationComponent.java @@ -0,0 +1,33 @@ +package com.twine.tango.stubs.ui.dagger; + +import com.twine.tango.stubs.ui.views.login.LoginFragment; +import com.twine.tango.stubs.ui.views.main.MainActivity; +import com.twine.tango.stubs.ui.views.main.MainActivityVM; +import com.twine.tango.stubs.ui.views.selection.SelectionFragment; +import com.twine.tango.stubs.ui.views.stub.StubActivity; +import com.twine.tango.stubs.ui.views.stubs.StubsActivity; + +import javax.inject.Singleton; + +import dagger.Component; + +/** + * Created by Roy on 11/6/2017. + */ + +@Singleton +@Component(modules = {ApplicationModule.class, ViewModelsModule.class, EventBusModule.class, NotificationModule.class, TransportModule.class}) +public interface ApplicationComponent { + + void inject(MainActivity view); + + void inject(LoginFragment view); + + void inject(SelectionFragment view); + + void inject(StubsActivity view); + + void inject(StubActivity view); + + MainActivityVM provideMainActivityVM(); +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ApplicationModule.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ApplicationModule.java new file mode 100644 index 000000000..ce664f835 --- /dev/null +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ApplicationModule.java @@ -0,0 +1,30 @@ +package com.twine.tango.stubs.ui.dagger; + +import android.app.Application; +import android.content.Context; + +import javax.inject.Singleton; + +import dagger.Module; +import dagger.Provides; + +/** + * Created by Roy on 11/6/2017. + */ + +@Module +public class ApplicationModule { + + private Application application; + + public ApplicationModule(Application application) { + this.application = application; + } + + @Provides + @Singleton + public Context provideContext() + { + return application; + } +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/EventBusModule.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/EventBusModule.java new file mode 100644 index 000000000..3aeb461f7 --- /dev/null +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/EventBusModule.java @@ -0,0 +1,24 @@ +package com.twine.tango.stubs.ui.dagger; + +import com.squareup.otto.Bus; +import com.squareup.otto.ThreadEnforcer; + +import javax.inject.Singleton; + +import dagger.Module; +import dagger.Provides; + +/** + * Created by Roy on 11/6/2017. + */ + +@Module +public class EventBusModule { + + @Provides + @Singleton + public Bus provideEventBus() + { + return new Bus(ThreadEnforcer.MAIN); + } +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/NotificationModule.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/NotificationModule.java new file mode 100644 index 000000000..900080c25 --- /dev/null +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/NotificationModule.java @@ -0,0 +1,27 @@ +package com.twine.tango.stubs.ui.dagger; + +import android.content.Context; + +import com.twine.tango.sharedui.notifications.AndroidNotificationProvider; +import com.twine.tango.sharedui.notifications.NotificationProvider; + +import javax.inject.Singleton; + +import dagger.Module; +import dagger.Provides; + +/** + * Created by Roy on 11/6/2017. + */ + +@Module +public class NotificationModule { + + @Provides + @Singleton + public NotificationProvider provideNotificationProvider(Context context) + { + return new AndroidNotificationProvider(context); + } + +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ServicesModule.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ServicesModule.java new file mode 100644 index 000000000..2227cbf1e --- /dev/null +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ServicesModule.java @@ -0,0 +1,8 @@ +package com.twine.tango.stubs.ui.dagger; + +/** + * Created by Roy on 11/6/2017. + */ + +public class ServicesModule { +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/TransportModule.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/TransportModule.java new file mode 100644 index 000000000..7c4babd1f --- /dev/null +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/TransportModule.java @@ -0,0 +1,33 @@ +package com.twine.tango.stubs.ui.dagger; + +import com.twine.tango.transport.ITransportAdapter; +import com.twine.tango.transport.ITransporter; +import com.twine.tango.transport.adapters.TcpTransportAdapter; +import com.twine.tango.transport.transporters.ProtoTransporter; +import javax.inject.Singleton; +import dagger.Module; +import dagger.Provides; + +/** + * Created by Roy on 11/14/2017. + */ + +@Module +public class TransportModule +{ + + @Provides + @Singleton + public ITransporter provideTransporter(ITransportAdapter adapter) + { + return new ProtoTransporter(adapter); + } + + @Provides + @Singleton + public ITransportAdapter provideAdapter() + { + return new TcpTransportAdapter("10.0.2.2", 9999); + } + +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ViewModelsModule.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ViewModelsModule.java new file mode 100644 index 000000000..55fece908 --- /dev/null +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ViewModelsModule.java @@ -0,0 +1,62 @@ +package com.twine.tango.stubs.ui.dagger; + +import com.squareup.otto.Bus; +import com.twine.tango.integration.machine.MachineOperatorInterface; +import com.twine.tango.sharedui.notifications.NotificationProvider; +import com.twine.tango.stubs.ui.views.login.LoginFragment; +import com.twine.tango.stubs.ui.views.login.LoginFragmentVM; +import com.twine.tango.stubs.ui.views.main.MainActivityVM; +import com.twine.tango.stubs.ui.views.selection.SelectionFragmentVM; +import com.twine.tango.stubs.ui.views.stub.StubActivityVM; +import com.twine.tango.stubs.ui.views.stubs.StubsActivityVM; +import com.twine.tango.transport.ITransportAdapter; +import com.twine.tango.transport.ITransporter; + +import javax.inject.Singleton; + +import dagger.Module; +import dagger.Provides; + +/** + * Created by Roy on 11/6/2017. + */ + +@Module +public class ViewModelsModule +{ + + @Provides + @Singleton + public MainActivityVM provideMainActivityVM(Bus eventBus, NotificationProvider notificationProvider) + { + return new MainActivityVM(eventBus, notificationProvider); + } + + @Provides + @Singleton + public LoginFragmentVM provideLoginFragmentVM(Bus eventBus, NotificationProvider notificationProvider) + { + return new LoginFragmentVM(eventBus, notificationProvider); + } + + @Provides + @Singleton + public SelectionFragmentVM provideSelectionFragmentVM() + { + return new SelectionFragmentVM(); + } + + @Provides + @Singleton + public StubsActivityVM provideStubsActivityVM(Bus eventBus) + { + return new StubsActivityVM(eventBus); + } + + @Provides + @Singleton + public StubActivityVM provideStubActivityVM(Bus eventBus, NotificationProvider notificationProvider, ITransporter transporter, ITransportAdapter adapter) + { + return new StubActivityVM(eventBus, notificationProvider, transporter, adapter); + } +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/login/LoginFragment.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/login/LoginFragment.java new file mode 100644 index 000000000..4a8e32afd --- /dev/null +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/login/LoginFragment.java @@ -0,0 +1,46 @@ +package com.twine.tango.stubs.ui.views.login; + +import android.support.v4.app.Fragment; +import android.widget.EditText; + +import com.mobsandgeeks.saripaar.annotation.Email; +import com.mobsandgeeks.saripaar.annotation.Password; +import com.twine.tango.sharedui.containers.FragmentBase; +import com.twine.tango.stubs.ui.App; +import com.twine.tango.stubs.ui.R; +import com.twine.tango.stubs.ui.databinding.FragmentLoginBinding; + +import butterknife.BindView; + +/** + * A simple {@link Fragment} subclass. + */ +public class LoginFragment extends FragmentBase implements LoginFragmentContract { + + @BindView(R.id.txtEmail) + @Email(message = "Please enter a valid email address") + EditText txtEmail; + + @BindView(R.id.txtPassword) + @Password(message = "Please enter a valid password", scheme = Password.Scheme.NUMERIC, min = 4) + EditText txtPassword; + + public LoginFragment() { + // Required empty public constructor + } + + @Override + protected int getLayoutId() { + return R.layout.fragment_login; + } + + @Override + protected void inject() { + App.getComponent().inject(this); + } + + @Override + public String getTitle() { + return "LOGIN"; + } +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/login/LoginFragmentContract.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/login/LoginFragmentContract.java new file mode 100644 index 000000000..d28e67b25 --- /dev/null +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/login/LoginFragmentContract.java @@ -0,0 +1,10 @@ +package com.twine.tango.stubs.ui.views.login; + +import com.twine.tango.sharedui.mvvm.ViewContract; + +/** + * Created by Roy on 11/6/2017. + */ + +public interface LoginFragmentContract extends ViewContract { +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/login/LoginFragmentVM.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/login/LoginFragmentVM.java new file mode 100644 index 000000000..ae454465e --- /dev/null +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/login/LoginFragmentVM.java @@ -0,0 +1,51 @@ +package com.twine.tango.stubs.ui.views.login; + +import android.util.Log; + +import com.squareup.otto.Bus; +import com.twine.tango.models.User; +import com.twine.tango.sharedui.mvvm.DependencyProperty; +import com.twine.tango.sharedui.mvvm.RelayCommand; +import com.twine.tango.sharedui.mvvm.ViewModelBase; +import com.twine.tango.sharedui.notifications.NotificationProvider; +import com.twine.tango.stubs.ui.Events.LoginEvent; + +import javax.inject.Inject; + +/** + * Created by Roy on 11/6/2017. + */ + +public class LoginFragmentVM extends ViewModelBase { + + private Bus eventBus; + private NotificationProvider notificationProvider; + + public DependencyProperty email; + public DependencyProperty password; + + public RelayCommand loginCommand; + + @Inject + public LoginFragmentVM(Bus eventBus, NotificationProvider notificationProvider) { + this.eventBus = eventBus; + this.notificationProvider = notificationProvider; + + email = new DependencyProperty<>("", (dp, value) -> loginCommand.invalidateCommand()); + password = new DependencyProperty<>("", (dp, value) -> loginCommand.invalidateCommand()); + loginCommand = new RelayCommand(this::login, () -> !email.get().isEmpty() && !password.get().isEmpty()); + + this.eventBus.register(this); + } + + private void login() { + + view.validateFields((valid) -> { + + if (valid) { + eventBus.post(new LoginEvent(new User(email.get(), password.get()))); + } + + }); + } +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/main/MainActivity.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/main/MainActivity.java new file mode 100644 index 000000000..d31f2b525 --- /dev/null +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/main/MainActivity.java @@ -0,0 +1,80 @@ +package com.twine.tango.stubs.ui.views.main; + +import android.app.Fragment; +import android.app.FragmentManager; +import android.app.FragmentTransaction; +import android.content.Intent; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.os.Bundle; +import android.support.v7.app.ActionBarDrawerToggle; +import android.util.Log; + +import com.twine.tango.pmr.MessageFactory; +import com.twine.tango.sharedui.containers.ActivityBase; +import com.twine.tango.sharedui.containers.FragmentBase; +import com.twine.tango.stubs.ui.App; +import com.twine.tango.stubs.ui.R; +import com.twine.tango.stubs.ui.databinding.ActivityMainBinding; +import com.twine.tango.stubs.ui.views.login.LoginFragment; +import com.twine.tango.stubs.ui.views.selection.SelectionFragment; +import com.twine.tango.stubs.ui.views.stubs.StubsActivity; + +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; + +import dalvik.system.DexFile; + +public class MainActivity extends ActivityBase implements MainActivityContract { + + ActionBarDrawerToggle mDrawerToggle; + private Fragment currentFragment; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + //Load login fragment. + navigateTo(Navigation.MAIN); + + setSupportActionBar(findViewById(R.id.toolbar1)); + //initializeSideMenu(); + } + + @Override + protected int getLayoutId() { + return R.layout.activity_main; + } + + @Override + protected void inject() { + App.getComponent().inject(this); + } + + @Override + public void navigateTo(Navigation navigation) { + + FragmentManager fragmentManager = getFragmentManager(); + FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); + FragmentBase fragment = null; + + switch (navigation) + { + case LOGIN: + fragment = new LoginFragment(); + break; + case MAIN: + fragment = new SelectionFragment(); + break; + } + + if (currentFragment != null) fragmentTransaction.remove(currentFragment); + currentFragment = fragment; + fragmentTransaction.add(R.id.fragment_container, fragment); + fragmentTransaction.commit(); + } +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/main/MainActivityContract.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/main/MainActivityContract.java new file mode 100644 index 000000000..3f27e29d9 --- /dev/null +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/main/MainActivityContract.java @@ -0,0 +1,18 @@ +package com.twine.tango.stubs.ui.views.main; + +import com.twine.tango.sharedui.mvvm.ViewContract; + +/** + * Created by Roy on 11/6/2017. + */ + +public interface MainActivityContract extends ViewContract { + + enum Navigation + { + LOGIN, + MAIN, + } + + void navigateTo(Navigation navigation); +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/main/MainActivityVM.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/main/MainActivityVM.java new file mode 100644 index 000000000..7a6fe2a1f --- /dev/null +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/main/MainActivityVM.java @@ -0,0 +1,37 @@ +package com.twine.tango.stubs.ui.views.main; + +import com.squareup.otto.Bus; +import com.squareup.otto.Subscribe; +import com.twine.tango.models.User; +import com.twine.tango.sharedui.mvvm.DependencyProperty; +import com.twine.tango.sharedui.mvvm.FieldUtils; +import com.twine.tango.sharedui.mvvm.ReadOnlyField; +import com.twine.tango.sharedui.mvvm.RelayCommand; +import com.twine.tango.sharedui.mvvm.ViewModelBase; +import com.twine.tango.sharedui.notifications.NotificationProvider; +import com.twine.tango.stubs.ui.Events.LoginEvent; + +import javax.inject.Inject; + +public class MainActivityVM extends ViewModelBase { + + private Bus eventBus; + private User currentUser; + private NotificationProvider notificationProvider; + + + @Inject + public MainActivityVM(Bus eventBus, NotificationProvider notificationProvider) { + this.eventBus = eventBus; + this.notificationProvider = notificationProvider; + this.eventBus.register(this); + } + + @Subscribe + public void loginEventHandler(LoginEvent e) + { + currentUser = e.getUser(); + view.navigateTo(MainActivityContract.Navigation.MAIN); + notificationProvider.notify(currentUser.getEmail() + " Log In!"); + } +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/selection/SelectionFragment.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/selection/SelectionFragment.java new file mode 100644 index 000000000..171aa562d --- /dev/null +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/selection/SelectionFragment.java @@ -0,0 +1,49 @@ +package com.twine.tango.stubs.ui.views.selection; + + +import android.content.Intent; +import android.support.v4.app.Fragment; + +import com.twine.tango.sharedui.containers.FragmentBase; +import com.twine.tango.stubs.ui.App; +import com.twine.tango.stubs.ui.R; +import com.twine.tango.stubs.ui.databinding.FragmentSelectionBinding; +import com.twine.tango.stubs.ui.views.stubs.StubsActivity; + +/** + * A simple {@link Fragment} subclass. + */ +public class SelectionFragment extends FragmentBase implements SelectionFragmentContract { + + + public SelectionFragment() { + // Required empty public constructor + } + + @Override + protected int getLayoutId() { + return R.layout.fragment_selection; + } + + @Override + protected void inject() { + App.getComponent().inject(this); + } + + @Override + public String getTitle() { + return "SELECTION"; + } + + @Override + public void navigateTo(Navigation navigation) { + + switch (navigation) { + case Stubs: + startActivity(new Intent(this.getActivity(), StubsActivity.class)); + break; + case DataBase: + break; + } + } +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/selection/SelectionFragmentContract.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/selection/SelectionFragmentContract.java new file mode 100644 index 000000000..0a00a9d5b --- /dev/null +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/selection/SelectionFragmentContract.java @@ -0,0 +1,18 @@ +package com.twine.tango.stubs.ui.views.selection; + +import com.twine.tango.sharedui.mvvm.ViewContract; + +/** + * Created by Roy on 11/6/2017. + */ + +public interface SelectionFragmentContract extends ViewContract { + + enum Navigation + { + Stubs, + DataBase, + } + + void navigateTo(Navigation navigation); +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/selection/SelectionFragmentVM.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/selection/SelectionFragmentVM.java new file mode 100644 index 000000000..989ab5083 --- /dev/null +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/selection/SelectionFragmentVM.java @@ -0,0 +1,23 @@ +package com.twine.tango.stubs.ui.views.selection; + +import com.twine.tango.sharedui.mvvm.RelayCommand; +import com.twine.tango.sharedui.mvvm.ViewModelBase; + +import javax.inject.Inject; + +/** + * Created by Roy on 11/6/2017. + */ + +public class SelectionFragmentVM extends ViewModelBase { + + public RelayCommand openStubsCommand; + public RelayCommand openDataBaseCommand; + + @Inject + public SelectionFragmentVM() { + + openStubsCommand = new RelayCommand(() -> view.navigateTo(SelectionFragmentContract.Navigation.Stubs)); + openDataBaseCommand = new RelayCommand(() -> view.navigateTo(SelectionFragmentContract.Navigation.DataBase)); + } +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stub/StubActivity.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stub/StubActivity.java new file mode 100644 index 000000000..3b4e8f1a1 --- /dev/null +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stub/StubActivity.java @@ -0,0 +1,19 @@ +package com.twine.tango.stubs.ui.views.stub; + +import com.twine.tango.sharedui.containers.ActivityBase; +import com.twine.tango.stubs.ui.App; +import com.twine.tango.stubs.ui.R; +import com.twine.tango.stubs.ui.databinding.ActivityStubBinding; + +public class StubActivity extends ActivityBase { + + @Override + protected int getLayoutId() { + return R.layout.activity_stub; + } + + @Override + protected void inject() { + App.getComponent().inject(this); + } +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stub/StubActivityContract.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stub/StubActivityContract.java new file mode 100644 index 000000000..e2fc7fb94 --- /dev/null +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stub/StubActivityContract.java @@ -0,0 +1,10 @@ +package com.twine.tango.stubs.ui.views.stub; + +import com.twine.tango.sharedui.mvvm.ViewContract; + +/** + * Created by Roy on 11/7/2017. + */ + +public interface StubActivityContract extends ViewContract { +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stub/StubActivityVM.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stub/StubActivityVM.java new file mode 100644 index 000000000..d95420dd5 --- /dev/null +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stub/StubActivityVM.java @@ -0,0 +1,78 @@ +package com.twine.tango.stubs.ui.views.stub; + +import com.elvishew.xlog.XLog; +import com.squareup.otto.Bus; +import com.squareup.otto.Subscribe; +import com.twine.tango.core.ObjectDisposedException; +import com.twine.tango.integration.machine.MachineOperatorInterface; +import com.twine.tango.sharedui.mvvm.RelayCommand; +import com.twine.tango.stubs.AvailableStub; +import com.twine.tango.sharedui.mvvm.DependencyProperty; +import com.twine.tango.sharedui.mvvm.ViewModelBase; +import com.twine.tango.sharedui.notifications.NotificationProvider; +import com.twine.tango.stubs.StubBase; +import com.twine.tango.stubs.ui.Events.StubSelectedEvent; +import com.twine.tango.transport.ITransportAdapter; +import com.twine.tango.transport.ITransporter; +import com.twine.tango.transport.TransportComponentState; + +import javax.inject.Inject; + +import io.reactivex.android.schedulers.AndroidSchedulers; + +/** + * Created by Roy on 11/7/2017. + */ + +public class StubActivityVM extends ViewModelBase +{ + private Bus eventBus; + private NotificationProvider notificationProvider; + private ITransporter transporter; + private ITransportAdapter adapter; + public DependencyProperty stub; + public RelayCommand runCommand; + + @Inject + public StubActivityVM(Bus eventBus, NotificationProvider notificationProvider, ITransporter transporter, ITransportAdapter adapter) + { + + stub = new DependencyProperty<>(); + this.eventBus = eventBus; + this.transporter = transporter; + this.adapter = adapter; + this.notificationProvider = notificationProvider; + this.eventBus.register(this); + + if (transporter.getState() != TransportComponentState.Connected) + { + try + { + transporter.connect().subscribe(); + } catch (ObjectDisposedException e) + { + e.printStackTrace(); + } + } + + runCommand = new RelayCommand(this::runSelectedStub); + } + + @Subscribe + public void handleStubSelectedEvent(StubSelectedEvent e) + { + stub.set(e.getStub()); + } + + private void runSelectedStub() + { + StubBase stub = this.stub.get().createInstance(transporter); + stub.run().observeOn(AndroidSchedulers.mainThread()).subscribe((response) -> + { + XLog.i(response); + }, (ex) -> + { + XLog.e(ex); + }); + } +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stubs/StubsActivity.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stubs/StubsActivity.java new file mode 100644 index 000000000..eba516754 --- /dev/null +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stubs/StubsActivity.java @@ -0,0 +1,25 @@ +package com.twine.tango.stubs.ui.views.stubs; + +import com.twine.tango.sharedui.containers.ActivityBase; +import com.twine.tango.stubs.ui.App; +import com.twine.tango.stubs.ui.R; +import com.twine.tango.stubs.ui.databinding.ActivityStubsBinding; +import com.twine.tango.stubs.ui.views.stub.StubActivity; + +public class StubsActivity extends ActivityBase implements StubsActivityContract { + + @Override + protected int getLayoutId() { + return R.layout.activity_stubs; + } + + @Override + protected void inject() { + App.getComponent().inject(this); + } + + @Override + public void navigateToStab(Runnable callback) { + startActivityNotify(StubActivity.class, callback); + } +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stubs/StubsActivityContract.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stubs/StubsActivityContract.java new file mode 100644 index 000000000..52bfaa36f --- /dev/null +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stubs/StubsActivityContract.java @@ -0,0 +1,13 @@ +package com.twine.tango.stubs.ui.views.stubs; + +import com.twine.tango.sharedui.mvvm.ViewContract; + +/** + * Created by Roy on 11/7/2017. + */ + +public interface StubsActivityContract extends ViewContract { + + void navigateToStab(Runnable callback); + +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stubs/StubsActivityVM.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stubs/StubsActivityVM.java new file mode 100644 index 000000000..4afc1ed67 --- /dev/null +++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stubs/StubsActivityVM.java @@ -0,0 +1,60 @@ +package com.twine.tango.stubs.ui.views.stubs; + +import android.databinding.ObservableArrayList; +import android.databinding.ObservableField; +import android.databinding.ObservableList; +import android.util.Log; +import android.view.View; +import android.widget.AdapterView; + +import com.squareup.otto.Bus; +import com.twine.tango.sharedui.mvvm.RelayCommand; +import com.twine.tango.stubs.AvailableStub; +import com.twine.tango.sharedui.mvvm.FieldUtils; +import com.twine.tango.sharedui.mvvm.ViewModelBase; +import com.twine.tango.stubs.StubBase; +import com.twine.tango.stubs.StubDirection; +import com.twine.tango.stubs.ui.BR; +import com.twine.tango.stubs.ui.Events.StubSelectedEvent; +import com.twine.tango.stubs.ui.R; + +import javax.inject.Inject; + +import me.tatarka.bindingcollectionadapter2.ItemBinding; + +/** + * Created by Roy on 11/7/2017. + */ + +public class StubsActivityVM extends ViewModelBase { + + private Bus eventBus; + + public ObservableList stubs; + public ItemBinding stubBinding; + public ObservableField selectedStub; + public ObservableField selectedStubIndex; + + @Inject + public StubsActivityVM(Bus eventBus) { + + this.eventBus = eventBus; + + stubs = new ObservableArrayList<>(); + stubBinding = ItemBinding.of(BR.stub, R.layout.stubs_listview_item); + selectedStub = new ObservableField<>(); + selectedStubIndex = FieldUtils.toField(FieldUtils.toObservable(selectedStub).map(stub -> stubs.indexOf(stub))); + + stubs.addAll(StubBase.getAllStubs(StubDirection.ToMachine)); + } + + public void onStubSelected(AdapterView adapterView, View view, int i, long l) { + selectedStub.set((AvailableStub) adapterView.getAdapter().getItem(i)); + Log.i("Results", "Stub clicked: " + selectedStub.get().getName()); + Log.i("Results","Selected User Index: " + selectedStubIndex.get()); + this.view.navigateToStab(() -> + { + eventBus.post(new StubSelectedEvent(selectedStub.get())); + }); + } +} -- cgit v1.3.1