diff options
| author | Roy Ben Shabat <roy@twine-s.com> | 2017-11-06 20:27:45 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2017-11-06 20:27:45 +0200 |
| commit | 5781279aaa5b5f62fff4538fa1d4d7849603fbf3 (patch) | |
| tree | 7d2351fa0468cc1e1675338f69e505520795d5ef /Software | |
| parent | f234e2dcc9ac38ba37b2874d25d34c77e4b47813 (diff) | |
| download | Tango-5781279aaa5b5f62fff4538fa1d4d7849603fbf3.tar.gz Tango-5781279aaa5b5f62fff4538fa1d4d7849603fbf3.zip | |
Implements base activity and fragment with embedded validation and
view binding.
Implemented Paging.
Diffstat (limited to 'Software')
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> |
