aboutsummaryrefslogtreecommitdiffstats
path: root/Software
diff options
context:
space:
mode:
authorRoy Ben Shabat <roy@twine-s.com>2017-11-06 20:27:45 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2017-11-06 20:27:45 +0200
commit5781279aaa5b5f62fff4538fa1d4d7849603fbf3 (patch)
tree7d2351fa0468cc1e1675338f69e505520795d5ef /Software
parentf234e2dcc9ac38ba37b2874d25d34c77e4b47813 (diff)
downloadTango-5781279aaa5b5f62fff4538fa1d4d7849603fbf3.tar.gz
Tango-5781279aaa5b5f62fff4538fa1d4d7849603fbf3.zip
Implements base activity and fragment with embedded validation and
view binding. Implemented Paging.
Diffstat (limited to 'Software')
-rw-r--r--Software/Android-Studio/Tango.SharedUI/build.gradle4
-rw-r--r--Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/containers/ActivityBase.java100
-rw-r--r--Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/containers/FragmentBase.java107
-rw-r--r--Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/mvvm/ViewContract.java5
-rw-r--r--Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/paging/PagerAdapter.java30
-rw-r--r--Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/paging/TabFragment.java19
-rw-r--r--Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/validation/ViewValidator.java23
-rw-r--r--Software/Android-Studio/Tango.Stubs.UI/build.gradle2
-rw-r--r--Software/Android-Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ApplicationComponent.java9
-rw-r--r--Software/Android-Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ViewModelsModule.java15
-rw-r--r--Software/Android-Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/login/LoginActivity.java8
-rw-r--r--Software/Android-Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/login/LoginFragment.java32
-rw-r--r--Software/Android-Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/login/LoginFragmentContract.java10
-rw-r--r--Software/Android-Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/login/LoginFragmentVM.java13
-rw-r--r--Software/Android-Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/main/MainActivity.java54
-rw-r--r--Software/Android-Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/main/MainActivityVM.java15
-rw-r--r--Software/Android-Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/selection/SelectionFragment.java40
-rw-r--r--Software/Android-Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/selection/SelectionFragmentContract.java11
-rw-r--r--Software/Android-Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/selection/SelectionFragmentVM.java10
-rw-r--r--Software/Android-Studio/Tango.Stubs.UI/src/main/res/layout/activity_main.xml77
-rw-r--r--Software/Android-Studio/Tango.Stubs.UI/src/main/res/layout/fragment_login.xml20
-rw-r--r--Software/Android-Studio/Tango.Stubs.UI/src/main/res/layout/fragment_selection.xml20
-rw-r--r--Software/Android-Studio/Tango.Stubs.UI/src/main/res/values/strings.xml3
23 files changed, 531 insertions, 96 deletions
diff --git a/Software/Android-Studio/Tango.SharedUI/build.gradle b/Software/Android-Studio/Tango.SharedUI/build.gradle
index 7a8f36616..0d98d86d3 100644
--- a/Software/Android-Studio/Tango.SharedUI/build.gradle
+++ b/Software/Android-Studio/Tango.SharedUI/build.gradle
@@ -39,4 +39,8 @@ dependencies {
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
compile group: 'io.reactivex.rxjava2', name: 'rxjava', version: '2.1.2'
+ compile 'com.mobsandgeeks:android-saripaar:2.0.3'
+ compile 'javax.inject:javax.inject:1'
+ compile 'com.jakewharton:butterknife:8.7.0'
+ annotationProcessor 'com.jakewharton:butterknife-compiler:8.7.0'
}
diff --git a/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/containers/ActivityBase.java b/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/containers/ActivityBase.java
new file mode 100644
index 000000000..fab3a2897
--- /dev/null
+++ b/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/containers/ActivityBase.java
@@ -0,0 +1,100 @@
+package com.twine.tango.sharedui.containers;
+
+import android.databinding.DataBindingUtil;
+import android.databinding.ViewDataBinding;
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.Toast;
+import com.mobsandgeeks.saripaar.ValidationError;
+import com.mobsandgeeks.saripaar.Validator;
+import com.twine.tango.sharedui.mvvm.ViewContract;
+import com.twine.tango.sharedui.mvvm.ViewModelBase;
+import java.lang.reflect.Method;
+import java.util.List;
+import javax.inject.Inject;
+import butterknife.ButterKnife;
+import io.reactivex.functions.Consumer;
+
+public abstract class ActivityBase<BindingView extends ViewDataBinding, VM extends ViewModelBase> extends AppCompatActivity implements ViewContract, Validator.ValidationListener {
+
+ private Consumer<Boolean> lastValidationConsumer;
+ private Validator validator;
+
+ @Inject
+ public VM vm;
+
+ public BindingView binding;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ inject();
+ binding = DataBindingUtil.setContentView(this, getLayoutId());
+ try {
+
+ Method method = binding.getClass().getDeclaredMethod("setVm", vm.getClass());
+ method.invoke(binding, vm);
+
+ attachView();
+
+ ButterKnife.bind(this, binding.getRoot());
+
+ validator = new Validator(this);
+ validator.setValidationListener(this);
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public void attachView() {
+ vm.attachView(this);
+ }
+
+ @Override
+ public void validateFields(Consumer<Boolean> consumer) {
+ lastValidationConsumer = consumer;
+ validator.validate();
+ }
+
+ @Override
+ public void onValidationSucceeded() {
+ try {
+ lastValidationConsumer.accept(true);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void onValidationFailed(List<ValidationError> errors) {
+ for (ValidationError error : errors) {
+ View view = error.getView();
+ String message = error.getCollatedErrorMessage(this);
+
+ if (view instanceof EditText) {
+ view.requestFocus();
+ ((EditText) view).setError(message);
+ } else {
+ Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
+ }
+ }
+
+ if (lastValidationConsumer != null) {
+ try {
+ lastValidationConsumer.accept(false);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ protected abstract int getLayoutId();
+
+ protected abstract void inject();
+}
diff --git a/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/containers/FragmentBase.java b/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/containers/FragmentBase.java
new file mode 100644
index 000000000..1c116edc4
--- /dev/null
+++ b/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/containers/FragmentBase.java
@@ -0,0 +1,107 @@
+package com.twine.tango.sharedui.containers;
+
+import android.support.v4.app.Fragment;
+import android.databinding.DataBindingUtil;
+import android.databinding.ViewDataBinding;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.EditText;
+import android.widget.Toast;
+import com.mobsandgeeks.saripaar.ValidationError;
+import com.mobsandgeeks.saripaar.Validator;
+import com.twine.tango.sharedui.mvvm.ViewContract;
+import com.twine.tango.sharedui.mvvm.ViewModelBase;
+import java.lang.reflect.Method;
+import java.util.List;
+import javax.inject.Inject;
+import butterknife.ButterKnife;
+import io.reactivex.functions.Consumer;
+
+public abstract class FragmentBase<BindingView extends ViewDataBinding, VM extends ViewModelBase> extends Fragment implements ViewContract, Validator.ValidationListener {
+
+ private Consumer<Boolean> lastValidationConsumer;
+ private Validator validator;
+
+ @Inject
+ VM vm;
+
+ BindingView binding;
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+
+ inject();
+ binding = DataBindingUtil.inflate(inflater,getLayoutId(),container,false);
+
+ try {
+
+ Method method = binding.getClass().getDeclaredMethod("setVm", vm.getClass());
+ method.invoke(binding, vm);
+
+ attachView();
+
+ ButterKnife.bind(this, binding.getRoot());
+
+ validator = new Validator(this);
+ validator.setValidationListener(this);
+
+ return binding.getRoot();
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public void attachView() {
+ vm.attachView(this);
+ }
+
+ @Override
+ public void validateFields(Consumer<Boolean> consumer) {
+ lastValidationConsumer = consumer;
+ validator.validate();
+ }
+
+ @Override
+ public void onValidationSucceeded() {
+ try {
+ lastValidationConsumer.accept(true);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void onValidationFailed(List<ValidationError> errors) {
+ for (ValidationError error : errors) {
+ View view = error.getView();
+ String message = error.getCollatedErrorMessage(this.getContext());
+
+ if (view instanceof EditText) {
+ view.requestFocus();
+ ((EditText) view).setError(message);
+ } else {
+ Toast.makeText(this.getContext(), message, Toast.LENGTH_SHORT).show();
+ }
+ }
+
+ if (lastValidationConsumer != null) {
+ try {
+ lastValidationConsumer.accept(false);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ protected abstract int getLayoutId();
+
+ protected abstract void inject();
+
+ public abstract String getTitle();
+}
diff --git a/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/mvvm/ViewContract.java b/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/mvvm/ViewContract.java
index e83f882c9..89427070b 100644
--- a/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/mvvm/ViewContract.java
+++ b/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/mvvm/ViewContract.java
@@ -1,9 +1,8 @@
package com.twine.tango.sharedui.mvvm;
-/**
- * Created by Roy on 7/26/2017.
- */
+import io.reactivex.functions.Consumer;
public interface ViewContract {
void attachView();
+ void validateFields(Consumer<Boolean> consumer);
}
diff --git a/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/paging/PagerAdapter.java b/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/paging/PagerAdapter.java
index d32f5d2ee..d326402a3 100644
--- a/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/paging/PagerAdapter.java
+++ b/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/paging/PagerAdapter.java
@@ -3,6 +3,9 @@ package com.twine.tango.sharedui.paging;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
+
+import com.twine.tango.sharedui.containers.FragmentBase;
+
import java.util.ArrayList;
import java.util.List;
@@ -12,15 +15,23 @@ import java.util.List;
public class PagerAdapter extends FragmentPagerAdapter {
- private List<TabFragment> fragments = new ArrayList<>();
+ private List<FragmentBase> fragments;
private int currentPosition;
public PagerAdapter(FragmentManager fm) {
super(fm);
- fragments.clear();
-// fragments.add(new LoginFragment());
-// fragments.add(new ResultsFragment());
+ fragments = new ArrayList<>();
+ }
+
+ public void addFragment(FragmentBase fragment)
+ {
+ fragments.add(fragment);
+ }
+
+ public void removeFragment(FragmentBase fragment)
+ {
+ fragments.remove(fragment);
}
@Override
@@ -30,23 +41,20 @@ public class PagerAdapter extends FragmentPagerAdapter {
}
@SuppressWarnings("unchecked")
- public <T> T getCurrentFragment()
- {
- return (T)getItem(currentPosition);
+ public <T> T getCurrentFragment() {
+ return (T) getItem(currentPosition);
}
@Override
public int getCount() {
- return 2;
+ return fragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
if (fragments.get(position) != null) {
return fragments.get(position).getTitle();
- }
- else
- {
+ } else {
return "";
}
}
diff --git a/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/paging/TabFragment.java b/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/paging/TabFragment.java
deleted file mode 100644
index 7af47f069..000000000
--- a/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/paging/TabFragment.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.twine.tango.sharedui.paging;
-
-import android.support.v4.app.Fragment;
-
-/**
- * Created by Roy on 7/28/2017.
- */
-
-public class TabFragment extends Fragment {
- public String getTitle() {
- return title;
- }
-
- public void setTitle(String title) {
- this.title = title;
- }
-
- private String title;
-}
diff --git a/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/validation/ViewValidator.java b/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/validation/ViewValidator.java
new file mode 100644
index 000000000..4c62b7548
--- /dev/null
+++ b/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/validation/ViewValidator.java
@@ -0,0 +1,23 @@
+package com.twine.tango.sharedui.validation;
+
+import com.mobsandgeeks.saripaar.ValidationError;
+import com.mobsandgeeks.saripaar.Validator;
+
+import java.util.List;
+
+/**
+ * Created by Roy on 11/6/2017.
+ */
+
+public class ViewValidator implements Validator.ValidationListener {
+
+ @Override
+ public void onValidationSucceeded() {
+
+ }
+
+ @Override
+ public void onValidationFailed(List<ValidationError> errors) {
+
+ }
+}
diff --git a/Software/Android-Studio/Tango.Stubs.UI/build.gradle b/Software/Android-Studio/Tango.Stubs.UI/build.gradle
index 1b56d5146..20c6db803 100644
--- a/Software/Android-Studio/Tango.Stubs.UI/build.gradle
+++ b/Software/Android-Studio/Tango.Stubs.UI/build.gradle
@@ -36,6 +36,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'
+ implementation 'com.android.support:support-v4:26.1.0'
+ compile 'com.android.support:design: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'
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
index ba559d944..a45ab2973 100644
--- 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
@@ -1,7 +1,9 @@
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 javax.inject.Singleton;
@@ -15,8 +17,11 @@ import dagger.Component;
@Component(modules = {ApplicationModule.class, ViewModelsModule.class, EventBusModule.class, NotificationModule.class})
public interface ApplicationComponent {
- void inject(MainActivity mainActivity);
+ void inject(MainActivity view);
- MainActivityVM provideMainActivityVM();
+ void inject(LoginFragment view);
+
+ void inject(SelectionFragment view);
+ MainActivityVM provideMainActivityVM();
}
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
index fd9b26bfb..d8f7c84d4 100644
--- 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
@@ -2,7 +2,10 @@ package com.twine.tango.stubs.ui.dagger;
import com.squareup.otto.Bus;
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 javax.inject.Singleton;
@@ -21,4 +24,16 @@ public class ViewModelsModule {
public MainActivityVM provideMainActivityVM(Bus eventBus, NotificationProvider notificationProvider) {
return new MainActivityVM(eventBus, notificationProvider);
}
+
+ @Provides
+ @Singleton
+ public LoginFragmentVM provideLoginFragmentVM() {
+ return new LoginFragmentVM();
+ }
+
+ @Provides
+ @Singleton
+ public SelectionFragmentVM provideSelectionFragmentVM() {
+ return new SelectionFragmentVM();
+ }
}
diff --git a/Software/Android-Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/login/LoginActivity.java b/Software/Android-Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/login/LoginActivity.java
deleted file mode 100644
index 1b71cf194..000000000
--- a/Software/Android-Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/login/LoginActivity.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.twine.tango.stubs.ui.views.login;
-
-/**
- * Created by Roy on 11/6/2017.
- */
-
-public class LoginActivity {
-}
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..b646a7930
--- /dev/null
+++ b/Software/Android-Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/login/LoginFragment.java
@@ -0,0 +1,32 @@
+package com.twine.tango.stubs.ui.views.login;
+
+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.FragmentLoginBinding;
+
+/**
+ * A simple {@link Fragment} subclass.
+ */
+public class LoginFragment extends FragmentBase<FragmentLoginBinding, LoginFragmentVM> {
+
+ 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..fe0c67250
--- /dev/null
+++ b/Software/Android-Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/login/LoginFragmentVM.java
@@ -0,0 +1,13 @@
+package com.twine.tango.stubs.ui.views.login;
+
+import com.twine.tango.sharedui.mvvm.ViewModelBase;
+
+/**
+ * Created by Roy on 11/6/2017.
+ */
+
+public class LoginFragmentVM extends ViewModelBase<LoginFragmentContract> {
+
+
+
+}
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
index e2a9fa955..9854bed14 100644
--- 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
@@ -1,33 +1,61 @@
package com.twine.tango.stubs.ui.views.main;
import android.databinding.DataBindingUtil;
-import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
-
+import android.support.design.widget.TabLayout;
+import android.support.v4.view.ViewPager;
+import android.support.v7.app.ActionBarDrawerToggle;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.EditText;
+import com.mobsandgeeks.saripaar.annotation.NotEmpty;
+import com.twine.tango.sharedui.containers.ActivityBase;
+import com.twine.tango.sharedui.paging.PagerAdapter;
+import com.twine.tango.sharedui.paging.PagerZoomTransform;
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 javax.inject.Inject;
+import butterknife.BindView;
-public class MainActivity extends AppCompatActivity implements MainActivityContract {
+public class MainActivity extends ActivityBase<ActivityMainBinding,MainActivityVM> implements MainActivityContract {
- @Inject
- MainActivityVM vm;
- ActivityMainBinding binding;
+ ActionBarDrawerToggle mDrawerToggle;
+ public PagerAdapter pagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
- App.getComponent().inject(this);
- binding.setVm(vm);
- attachView();
+ ViewPager pager = binding.viewPager;
+ pager.setOnTouchListener(new View.OnTouchListener() { //Disable Swipe...
+ @Override
+ public boolean onTouch(View view, MotionEvent motionEvent) {
+ pager.setCurrentItem(pager.getCurrentItem());
+ return true;
+ }
+ });
+ pagerAdapter = new PagerAdapter(getSupportFragmentManager());
+ pagerAdapter.addFragment(new LoginFragment());
+ pagerAdapter.addFragment(new SelectionFragment());
+ pager.setAdapter(pagerAdapter);
+ pager.setPageTransformer(false, new PagerZoomTransform());
+ TabLayout tabLayout = binding.tabLayout;
+ tabLayout.setupWithViewPager(pager);
+
+ setSupportActionBar(findViewById(R.id.toolbar1));
+ //initializeSideMenu();
}
@Override
- public void attachView() {
- vm.attachView(this);
+ protected int getLayoutId() {
+ return R.layout.activity_main;
+ }
+
+ @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/main/MainActivityVM.java b/Software/Android-Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/main/MainActivityVM.java
index 56f25a540..1fe9426f4 100644
--- 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
@@ -7,13 +7,8 @@ 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 javax.inject.Inject;
-/**
- * Created by Roy on 11/6/2017.
- */
-
public class MainActivityVM extends ViewModelBase<MainActivityContract> {
private Bus eventBus;
@@ -31,6 +26,14 @@ public class MainActivityVM extends ViewModelBase<MainActivityContract> {
text1 = new DependencyProperty<>("Hello Roy");
text2 = FieldUtils.toField(FieldUtils.toObservable(text1).map(text -> text));
- testCommand = new RelayCommand(() -> notificationProvider.notify(text1.get()));
+ testCommand = new RelayCommand(() -> {
+
+ view.validateFields((valid) ->
+ {
+ if (valid) {
+ notificationProvider.notify(text1.get());
+ }
+ });
+ });
}
}
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..dda330d42
--- /dev/null
+++ b/Software/Android-Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/selection/SelectionFragment.java
@@ -0,0 +1,40 @@
+package com.twine.tango.stubs.ui.views.selection;
+
+
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+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;
+
+/**
+ * A simple {@link Fragment} subclass.
+ */
+public class SelectionFragment extends FragmentBase<FragmentSelectionBinding,SelectionFragmentVM> {
+
+
+ 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";
+ }
+
+}
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..86991c85b
--- /dev/null
+++ b/Software/Android-Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/selection/SelectionFragmentContract.java
@@ -0,0 +1,11 @@
+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 {
+
+}
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..e9facc8e9
--- /dev/null
+++ b/Software/Android-Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/selection/SelectionFragmentVM.java
@@ -0,0 +1,10 @@
+package com.twine.tango.stubs.ui.views.selection;
+
+import com.twine.tango.sharedui.mvvm.ViewModelBase;
+
+/**
+ * Created by Roy on 11/6/2017.
+ */
+
+public class SelectionFragmentVM extends ViewModelBase<SelectionFragmentContract> {
+}
diff --git a/Software/Android-Studio/Tango.Stubs.UI/src/main/res/layout/activity_main.xml b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/layout/activity_main.xml
index 905740c61..b96743542 100644
--- a/Software/Android-Studio/Tango.Stubs.UI/src/main/res/layout/activity_main.xml
+++ b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/layout/activity_main.xml
@@ -1,50 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
-<layout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:bind="http://schemas.android.com/apk/res-auto">
+<layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:bind="http://schemas.android.com/apk/res-auto">
<data>
+
<variable
name="vm"
type="com.twine.tango.stubs.ui.views.main.MainActivityVM" />
</data>
- <RelativeLayout
- xmlns:app="http://schemas.android.com/apk/res-auto"
- xmlns:tools="http://schemas.android.com/tools"
+ <android.support.v4.widget.DrawerLayout
+ android:id="@+id/drawerLayout"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context="com.twine.tango.stubs.ui.views.main.MainActivity">
+ android:layout_height="match_parent">
+
+ <!--Main Content-->
+ <RelativeLayout xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ tools:context="com.twine.tango.stubs.ui.views.main.MainActivity">
+
+ <android.support.v7.widget.Toolbar
+ android:id="@+id/toolbar1"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="?attr/colorPrimary"
+ android:minHeight="?attr/actionBarSize"
+ android:theme="?attr/actionBarTheme" />
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_below="@+id/toolbar1">
+
+ <android.support.design.widget.TabLayout
+ android:id="@+id/tabLayout"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ </android.support.design.widget.TabLayout>
+ <android.support.v4.view.ViewPager
+ android:id="@+id/viewPager"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_alignParentStart="true"
+ android:layout_below="@+id/tabLayout">
- <EditText
- android:id="@+id/editText"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentTop="true"
- android:layout_centerHorizontal="true"
- android:layout_marginTop="62dp"
- android:ems="10"
- android:inputType="textPersonName"
- android:text="@={vm.text1}" />
+ </android.support.v4.view.ViewPager>
+ </RelativeLayout>
+ </RelativeLayout>
- <TextView
- android:id="@+id/textView"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_below="@+id/editText"
- android:layout_centerHorizontal="true"
- android:layout_marginTop="65dp"
- android:text="@{vm.text2}" />
+ <!--Side Menu-->
+ <!--<include layout="@layout/side_menu" bind:vm="@{vm}" />-->
- <Button
- android:id="@+id/button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerHorizontal="true"
- android:layout_centerVertical="true"
- android:command="@{vm.testCommand}"
- android:text="TEST" />
- </RelativeLayout>
+ </android.support.v4.widget.DrawerLayout>
</layout>
diff --git a/Software/Android-Studio/Tango.Stubs.UI/src/main/res/layout/fragment_login.xml b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/layout/fragment_login.xml
new file mode 100644
index 000000000..fb3b154b3
--- /dev/null
+++ b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/layout/fragment_login.xml
@@ -0,0 +1,20 @@
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:bind="http://schemas.android.com/apk/res-auto">
+
+ <data>
+ <variable
+ name="vm"
+ type="com.twine.tango.stubs.ui.views.login.LoginFragmentVM" />
+ </data>
+
+ <RelativeLayout xmlns:tools="http://schemas.android.com/tools"
+ android:layoutDirection="ltr"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:paddingLeft="40dp"
+ android:paddingRight="40dp"
+ tools:context="com.twine.tango.stubs.ui.views.login.LoginFragment">
+
+
+ </RelativeLayout>
+</layout>
diff --git a/Software/Android-Studio/Tango.Stubs.UI/src/main/res/layout/fragment_selection.xml b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/layout/fragment_selection.xml
new file mode 100644
index 000000000..b8c467f40
--- /dev/null
+++ b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/layout/fragment_selection.xml
@@ -0,0 +1,20 @@
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:bind="http://schemas.android.com/apk/res-auto">
+
+ <data>
+ <variable
+ name="vm"
+ type="com.twine.tango.stubs.ui.views.selection.SelectionFragmentVM" />
+ </data>
+
+ <RelativeLayout xmlns:tools="http://schemas.android.com/tools"
+ android:layoutDirection="ltr"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:paddingLeft="40dp"
+ android:paddingRight="40dp"
+ tools:context="com.twine.tango.stubs.ui.views.selection.SelectionFragment">
+
+
+ </RelativeLayout>
+</layout>
diff --git a/Software/Android-Studio/Tango.Stubs.UI/src/main/res/values/strings.xml b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/values/strings.xml
index 6917728ef..e3910978c 100644
--- a/Software/Android-Studio/Tango.Stubs.UI/src/main/res/values/strings.xml
+++ b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/values/strings.xml
@@ -1,3 +1,6 @@
<resources>
<string name="app_name">Tango.Stubs.UI</string>
+
+ <!-- TODO: Remove or change this placeholder text -->
+ <string name="hello_blank_fragment">Hello blank fragment</string>
</resources>