diff options
| author | Roy Ben Shabat <roy@twine-s.com> | 2017-11-07 19:37:57 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2017-11-07 19:37:57 +0200 |
| commit | d615c26b41af480dae0bf478133c9333c319a6ce (patch) | |
| tree | a78d0dcc986d2420c59d114f969271f0bb95b482 /Software | |
| parent | d36b6e931d1b55ca9a33cb8f138d284eb9c6d517 (diff) | |
| download | Tango-d615c26b41af480dae0bf478133c9333c319a6ce.tar.gz Tango-d615c26b41af480dae0bf478133c9333c319a6ce.zip | |
Implemented basic stubs UI design architecture.
Diffstat (limited to 'Software')
52 files changed, 1151 insertions, 74 deletions
diff --git a/Software/Android-Studio/Tango.Models/.gitignore b/Software/Android-Studio/Tango.Models/.gitignore new file mode 100644 index 000000000..796b96d1c --- /dev/null +++ b/Software/Android-Studio/Tango.Models/.gitignore @@ -0,0 +1 @@ +/build diff --git a/Software/Android-Studio/Tango.Models/build.gradle b/Software/Android-Studio/Tango.Models/build.gradle new file mode 100644 index 000000000..127943df7 --- /dev/null +++ b/Software/Android-Studio/Tango.Models/build.gradle @@ -0,0 +1,41 @@ +apply plugin: 'com.android.library' + +android { + compileSdkVersion 26 + buildToolsVersion "26.0.1" + + + defaultConfig { + minSdkVersion 22 + targetSdkVersion 26 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + + dataBinding { + enabled = true + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + + implementation 'com.android.support:appcompat-v7:26.1.0' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' +} diff --git a/Software/Android-Studio/Tango.Models/proguard-rules.pro b/Software/Android-Studio/Tango.Models/proguard-rules.pro new file mode 100644 index 000000000..a0eef131a --- /dev/null +++ b/Software/Android-Studio/Tango.Models/proguard-rules.pro @@ -0,0 +1,25 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in C:\Users\Roy\AppData\Local\Android\Sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/Software/Android-Studio/Tango.Models/src/androidTest/java/com/twine/tango/models/ExampleInstrumentedTest.java b/Software/Android-Studio/Tango.Models/src/androidTest/java/com/twine/tango/models/ExampleInstrumentedTest.java new file mode 100644 index 000000000..ffdb40c47 --- /dev/null +++ b/Software/Android-Studio/Tango.Models/src/androidTest/java/com/twine/tango/models/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.twine.tango.models; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.twine.tango.models.test", appContext.getPackageName()); + } +} diff --git a/Software/Android-Studio/Tango.Models/src/main/AndroidManifest.xml b/Software/Android-Studio/Tango.Models/src/main/AndroidManifest.xml new file mode 100644 index 000000000..85096ec75 --- /dev/null +++ b/Software/Android-Studio/Tango.Models/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.twine.tango.models" /> diff --git a/Software/Android-Studio/Tango.Models/src/main/java/com/twine/tango/models/User.java b/Software/Android-Studio/Tango.Models/src/main/java/com/twine/tango/models/User.java new file mode 100644 index 000000000..41ea672e4 --- /dev/null +++ b/Software/Android-Studio/Tango.Models/src/main/java/com/twine/tango/models/User.java @@ -0,0 +1,39 @@ +package com.twine.tango.models; + +import android.databinding.BaseObservable; +import android.databinding.Bindable; + +/** + * Created by Roy on 11/7/2017. + */ + +public class User extends BaseObservable { + + private String email; + private String password; + + public User(String email, String password) { + this.email = email; + this.password = password; + } + + @Bindable + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + notifyPropertyChanged(BR.email); + } + + @Bindable + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + notifyPropertyChanged(BR.password); + } +} diff --git a/Software/Android-Studio/Tango.Models/src/main/java/com/twine/tango/models/stubs/Stub.java b/Software/Android-Studio/Tango.Models/src/main/java/com/twine/tango/models/stubs/Stub.java new file mode 100644 index 000000000..397c4b4e4 --- /dev/null +++ b/Software/Android-Studio/Tango.Models/src/main/java/com/twine/tango/models/stubs/Stub.java @@ -0,0 +1,35 @@ +package com.twine.tango.models.stubs; + +import android.databinding.BaseObservable; +import android.databinding.Bindable; +import com.twine.tango.models.BR; + +/** + * Created by Roy on 11/7/2017. + */ + +public class Stub extends BaseObservable { + + private String name; + private String description; + + @Bindable + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + notifyPropertyChanged(BR.name); + } + + @Bindable + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + notifyPropertyChanged(BR.description); + } +} diff --git a/Software/Android-Studio/Tango.Models/src/main/res/values/strings.xml b/Software/Android-Studio/Tango.Models/src/main/res/values/strings.xml new file mode 100644 index 000000000..8caa8d0fd --- /dev/null +++ b/Software/Android-Studio/Tango.Models/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ +<resources> + <string name="app_name">Tango.Models</string> +</resources> diff --git a/Software/Android-Studio/Tango.Models/src/test/java/com/twine/tango/models/ExampleUnitTest.java b/Software/Android-Studio/Tango.Models/src/test/java/com/twine/tango/models/ExampleUnitTest.java new file mode 100644 index 000000000..f00a91cc0 --- /dev/null +++ b/Software/Android-Studio/Tango.Models/src/test/java/com/twine/tango/models/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.twine.tango.models; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() throws Exception { + assertEquals(4, 2 + 2); + } +}
\ No newline at end of file diff --git a/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/binding_adapters/BindingAdapters.java b/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/binding_adapters/BindingAdapters.java new file mode 100644 index 000000000..04d1ea5e7 --- /dev/null +++ b/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/binding_adapters/BindingAdapters.java @@ -0,0 +1,34 @@ +package com.twine.tango.sharedui.binding_adapters; + +import android.databinding.BindingAdapter; +import android.graphics.Bitmap; +import android.widget.ImageView; +import android.widget.ListView; + +/** + * Created by Roy on 11/7/2017. + */ + +public class BindingAdapters { + + @BindingAdapter("android:memory_bitmap") + public static void bitmapAdapter(ImageView view, Bitmap bitmap) { + if (bitmap != null) { + view.setImageBitmap(bitmap); + } + } + + @BindingAdapter("android:onItemClick") + public static void listViewClickAdapter(ListView view, ListView.OnItemClickListener listener) { + if (view != null && listener != null) { + view.setOnItemClickListener(listener); + } + } + + @BindingAdapter("android:selectedItemPosition") + public static void listViewSelectedItemPosition(ListView view, int position) { + if (view != null) { + view.setItemChecked(position, true); + } + } +} 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 index fab3a2897..7f52ffae6 100644 --- 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 @@ -1,5 +1,6 @@ package com.twine.tango.sharedui.containers; +import android.content.Intent; import android.databinding.DataBindingUtil; import android.databinding.ViewDataBinding; import android.os.Bundle; @@ -7,18 +8,25 @@ 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 java.util.concurrent.Callable; + 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 { + protected static final String ACTIVITY_CALLBACK_INTENT = "ACTIVITY_CALLBACK_INTENT"; + private Consumer<Boolean> lastValidationConsumer; private Validator validator; @@ -45,6 +53,11 @@ public abstract class ActivityBase<BindingView extends ViewDataBinding, VM exten validator = new Validator(this); validator.setValidationListener(this); + String key = getIntent().getStringExtra(ACTIVITY_CALLBACK_INTENT); + if (key != null && !key.isEmpty()) { + ActivityCallbackEngine.getInstance().runAndRemove(key); + } + } catch (Exception e) { e.printStackTrace(); } @@ -97,4 +110,12 @@ public abstract class ActivityBase<BindingView extends ViewDataBinding, VM exten protected abstract int getLayoutId(); protected abstract void inject(); + + public void startActivityNotify(Class<?> activity, Runnable callback) { + + String key = ActivityCallbackEngine.getInstance().putCallback(callback); + Intent i = new Intent(getApplicationContext(), activity); + i.putExtra(ACTIVITY_CALLBACK_INTENT, key); + startActivity(i); + } } diff --git a/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/containers/ActivityCallbackEngine.java b/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/containers/ActivityCallbackEngine.java new file mode 100644 index 000000000..5aec7852a --- /dev/null +++ b/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/containers/ActivityCallbackEngine.java @@ -0,0 +1,55 @@ +package com.twine.tango.sharedui.containers; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +/** + * Created by Roy on 11/7/2017. + */ + +public class ActivityCallbackEngine { + + private static ActivityCallbackEngine instance; + + private Map<String, Runnable> callbacks; + + private ActivityCallbackEngine() { + callbacks = new HashMap<>(); + } + + public static ActivityCallbackEngine getInstance() { + if (instance == null) { + instance = new ActivityCallbackEngine(); + } + + return instance; + } + + public void putCallback(String key, Runnable callback) { + callbacks.put(key,callback); + } + + public String putCallback(Runnable callback) { + + String key = UUID.randomUUID().toString(); + callbacks.put(key,callback); + return key; + } + + public void removeCallback(String key) + { + callbacks.remove(key); + } + + public void run(String key) + { + callbacks.get(key).run(); + } + + public void runAndRemove(String key) + { + callbacks.get(key).run(); + removeCallback(key); + } +} 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 index 1c116edc4..19d472e24 100644 --- 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 @@ -1,6 +1,6 @@ package com.twine.tango.sharedui.containers; -import android.support.v4.app.Fragment; +import android.app.Fragment; import android.databinding.DataBindingUtil; import android.databinding.ViewDataBinding; import android.os.Bundle; @@ -9,13 +9,17 @@ 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; @@ -80,13 +84,13 @@ public abstract class FragmentBase<BindingView extends ViewDataBinding, VM exten public void onValidationFailed(List<ValidationError> errors) { for (ValidationError error : errors) { View view = error.getView(); - String message = error.getCollatedErrorMessage(this.getContext()); + String message = error.getCollatedErrorMessage(this.getActivity().getBaseContext()); if (view instanceof EditText) { view.requestFocus(); ((EditText) view).setError(message); } else { - Toast.makeText(this.getContext(), message, Toast.LENGTH_SHORT).show(); + Toast.makeText(this.getActivity().getBaseContext(), message, Toast.LENGTH_SHORT).show(); } } diff --git a/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/containers/FragmentBaseV4.java b/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/containers/FragmentBaseV4.java new file mode 100644 index 000000000..7f56dd49e --- /dev/null +++ b/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/containers/FragmentBaseV4.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 FragmentBaseV4<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/paging/PagerAdapter.java b/Software/Android-Studio/Tango.SharedUI/src/main/java/com/twine/tango/sharedui/paging/PagerAdapter.java index d326402a3..2e151cc01 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 @@ -4,7 +4,7 @@ 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 com.twine.tango.sharedui.containers.FragmentBaseV4; import java.util.ArrayList; import java.util.List; @@ -15,7 +15,7 @@ import java.util.List; public class PagerAdapter extends FragmentPagerAdapter { - private List<FragmentBase> fragments; + private List<FragmentBaseV4> fragments; private int currentPosition; public PagerAdapter(FragmentManager fm) { @@ -24,12 +24,12 @@ public class PagerAdapter extends FragmentPagerAdapter { fragments = new ArrayList<>(); } - public void addFragment(FragmentBase fragment) + public void addFragment(FragmentBaseV4 fragment) { fragments.add(fragment); } - public void removeFragment(FragmentBase fragment) + public void removeFragment(FragmentBaseV4 fragment) { fragments.remove(fragment); } diff --git a/Software/Android-Studio/Tango.Stubs.UI/build.gradle b/Software/Android-Studio/Tango.Stubs.UI/build.gradle index ae2d7b443..3dbe0dcd8 100644 --- a/Software/Android-Studio/Tango.Stubs.UI/build.gradle +++ b/Software/Android-Studio/Tango.Stubs.UI/build.gradle @@ -11,6 +11,7 @@ android { targetSdkVersion 26 versionCode 1 versionName "1.0" + vectorDrawables.useSupportLibrary = true testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -58,4 +59,5 @@ dependencies { compile 'com.jakewharton:butterknife:8.7.0' annotationProcessor 'com.jakewharton:butterknife-compiler:8.7.0' compile project(path: ':Tango.SharedUI') + implementation project(':Tango.Models') } diff --git a/Software/Android-Studio/Tango.Stubs.UI/src/main/AndroidManifest.xml b/Software/Android-Studio/Tango.Stubs.UI/src/main/AndroidManifest.xml index 14db2fd2e..172ff0b37 100644 --- a/Software/Android-Studio/Tango.Stubs.UI/src/main/AndroidManifest.xml +++ b/Software/Android-Studio/Tango.Stubs.UI/src/main/AndroidManifest.xml @@ -17,6 +17,8 @@ <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> + <activity android:name=".views.stubs.StubsActivity" /> + <activity android:name=".views.stub.StubActivity"></activity> </application> </manifest>
\ No newline at end of file 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..095971534 --- /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.models.stubs.Stub; + +/** + * Created by Roy on 11/7/2017. + */ + +public class StubSelectedEvent { + + private Stub stub; + + public Stub getStub() { + return stub; + } + + public void setStub(Stub stub) { + this.stub = stub; + } + + public StubSelectedEvent(Stub 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 index a45ab2973..70eb8d8c3 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 @@ -4,6 +4,8 @@ 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; @@ -23,5 +25,9 @@ public interface ApplicationComponent { 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/ViewModelsModule.java b/Software/Android-Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ViewModelsModule.java index d8f7c84d4..f684e2015 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 @@ -6,6 +6,8 @@ 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 javax.inject.Singleton; @@ -27,8 +29,8 @@ public class ViewModelsModule { @Provides @Singleton - public LoginFragmentVM provideLoginFragmentVM() { - return new LoginFragmentVM(); + public LoginFragmentVM provideLoginFragmentVM(Bus eventBus, NotificationProvider notificationProvider) { + return new LoginFragmentVM(eventBus, notificationProvider); } @Provides @@ -36,4 +38,16 @@ public class ViewModelsModule { 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) { + return new StubActivityVM(eventBus, notificationProvider); + } } 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 index b646a7930..4a8e32afd 100644 --- 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 @@ -1,15 +1,29 @@ 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<FragmentLoginBinding, LoginFragmentVM> { +public class LoginFragment extends FragmentBase<FragmentLoginBinding, LoginFragmentVM> 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 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 index fe0c67250..ae454465e 100644 --- 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 @@ -1,6 +1,16 @@ 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. @@ -8,6 +18,34 @@ import com.twine.tango.sharedui.mvvm.ViewModelBase; public class LoginFragmentVM extends ViewModelBase<LoginFragmentContract> { + private Bus eventBus; + private NotificationProvider notificationProvider; + + public DependencyProperty<String> email; + public DependencyProperty<String> 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 index 9854bed14..ee8a04a70 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,49 +1,31 @@ package com.twine.tango.stubs.ui.views.main; -import android.databinding.DataBindingUtil; +import android.app.Fragment; +import android.app.FragmentManager; +import android.app.FragmentTransaction; +import android.content.Intent; 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.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 butterknife.BindView; - -public class MainActivity extends ActivityBase<ActivityMainBinding,MainActivityVM> implements MainActivityContract { +public class MainActivity extends ActivityBase<ActivityMainBinding, MainActivityVM> implements MainActivityContract { ActionBarDrawerToggle mDrawerToggle; - public PagerAdapter pagerAdapter; + private Fragment currentFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - 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); + //Load login fragment. + navigateTo(Navigation.LOGIN); setSupportActionBar(findViewById(R.id.toolbar1)); //initializeSideMenu(); @@ -58,4 +40,27 @@ public class MainActivity extends ActivityBase<ActivityMainBinding,MainActivityV 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 index 944763c9f..3f27e29d9 100644 --- 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 @@ -8,4 +8,11 @@ import com.twine.tango.sharedui.mvvm.ViewContract; 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 index 1fe9426f4..7a6fe2a1f 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 @@ -1,39 +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<MainActivityContract> { private Bus eventBus; + private User currentUser; private NotificationProvider notificationProvider; - public DependencyProperty<String> text1; - public ReadOnlyField<String> text2; - public RelayCommand testCommand; - @Inject public MainActivityVM(Bus eventBus, NotificationProvider notificationProvider) { this.eventBus = eventBus; this.notificationProvider = notificationProvider; + this.eventBus.register(this); + } - text1 = new DependencyProperty<>("Hello Roy"); - text2 = FieldUtils.toField(FieldUtils.toObservable(text1).map(text -> text)); - testCommand = new RelayCommand(() -> { - - view.validateFields((valid) -> - { - if (valid) { - notificationProvider.notify(text1.get()); - } - }); - }); + @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 index dda330d42..171aa562d 100644 --- 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 @@ -1,21 +1,19 @@ package com.twine.tango.stubs.ui.views.selection; -import android.os.Bundle; +import android.content.Intent; 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; +import com.twine.tango.stubs.ui.views.stubs.StubsActivity; /** * A simple {@link Fragment} subclass. */ -public class SelectionFragment extends FragmentBase<FragmentSelectionBinding,SelectionFragmentVM> { +public class SelectionFragment extends FragmentBase<FragmentSelectionBinding, SelectionFragmentVM> implements SelectionFragmentContract { public SelectionFragment() { @@ -37,4 +35,15 @@ public class SelectionFragment extends FragmentBase<FragmentSelectionBinding,Sel 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 index 86991c85b..0a00a9d5b 100644 --- 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 @@ -8,4 +8,11 @@ import com.twine.tango.sharedui.mvvm.ViewContract; 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 index e9facc8e9..989ab5083 100644 --- 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 @@ -1,10 +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<SelectionFragmentContract> { + + 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<ActivityStubBinding,StubActivityVM> { + + @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..16fc1eafc --- /dev/null +++ b/Software/Android-Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stub/StubActivityVM.java @@ -0,0 +1,40 @@ +package com.twine.tango.stubs.ui.views.stub; + +import com.squareup.otto.Bus; +import com.squareup.otto.Subscribe; +import com.twine.tango.models.stubs.Stub; +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.ui.Events.StubSelectedEvent; + +import javax.inject.Inject; + +/** + * Created by Roy on 11/7/2017. + */ + +public class StubActivityVM extends ViewModelBase<StubActivityContract> +{ + private Bus eventBus; + private NotificationProvider notificationProvider; + + public DependencyProperty<Stub> stub; + public DependencyProperty<String> ss; + + @Inject + public StubActivityVM(Bus eventBus, NotificationProvider notificationProvider) { + + stub = new DependencyProperty<>(); + ss = new DependencyProperty<>("Hi ROy"); + this.eventBus = eventBus; + this.notificationProvider = notificationProvider; + this.eventBus.register(this); + } + + @Subscribe + public void handleStubSelectedEvent(StubSelectedEvent e) + { + stub.set(e.getStub()); + } +} 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<ActivityStubsBinding, StubsActivityVM> 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..fb189be32 --- /dev/null +++ b/Software/Android-Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stubs/StubsActivityContract.java @@ -0,0 +1,14 @@ +package com.twine.tango.stubs.ui.views.stubs; + +import com.twine.tango.models.stubs.Stub; +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..a22684698 --- /dev/null +++ b/Software/Android-Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stubs/StubsActivityVM.java @@ -0,0 +1,63 @@ +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.squareup.otto.Subscribe; +import com.twine.tango.models.stubs.Stub; +import com.twine.tango.sharedui.mvvm.FieldUtils; +import com.twine.tango.sharedui.mvvm.ViewModelBase; +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<StubsActivityContract> { + + private Bus eventBus; + + public ObservableList<Stub> stubs; + public ItemBinding<String> stubBinding; + public ObservableField<Stub> selectedStub; + public ObservableField<Integer> 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))); + + for (int i = 0; i < 20; i++) { + Stub s = new Stub(); + s.setName("Stub " + i); + s.setDescription("Description " + i); + stubs.add(s); + } + } + + public void onStubSelected(AdapterView<?> adapterView, View view, int i, long l) { + selectedStub.set((Stub) 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())); + }); + } +} diff --git a/Software/Android-Studio/Tango.Stubs.UI/src/main/res/drawable/database.png b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/drawable/database.png Binary files differnew file mode 100644 index 000000000..4263288e8 --- /dev/null +++ b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/drawable/database.png diff --git a/Software/Android-Studio/Tango.Stubs.UI/src/main/res/drawable/ic_database.xml b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/drawable/ic_database.xml new file mode 100644 index 000000000..010978dae --- /dev/null +++ b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/drawable/ic_database.xml @@ -0,0 +1,17 @@ +<vector android:height="64dp" android:viewportHeight="57.0" + android:viewportWidth="57.0" android:width="64dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillColor="#545E73" android:pathData="M49.46,8L49.46,8C48.72,3.54 38.28,0 25.5,0S2.28,3.54 1.54,8l0,0H1.5v0.5V20v0.5V21v11v0.5V33v12h0.05c0.73,4.46 11.18,8 23.95,8s23.22,-3.54 23.95,-8H49.5V33v-0.5V32V21v-0.5V20V8.5V8H49.46z"/> + <path android:fillColor="#38454F" android:pathData="M25.5,41c-13.26,0 -24,-3.81 -24,-8.5V45h0.05c0.73,4.46 11.18,8 23.95,8s23.22,-3.54 23.95,-8H49.5V32.5C49.5,37.19 38.76,41 25.5,41z"/> + <path android:fillColor="#38454F" android:pathData="M1.5,32v0.5c0,-0.17 0.02,-0.33 0.05,-0.5H1.5z"/> + <path android:fillColor="#38454F" android:pathData="M49.46,32c0.03,0.17 0.05,0.33 0.05,0.5V32H49.46z"/> + <path android:fillColor="#556080" android:pathData="M25.5,29c-13.26,0 -24,-3.81 -24,-8.5V33h0.05c0.73,4.46 11.18,8 23.95,8s23.22,-3.54 23.95,-8H49.5V20.5C49.5,25.19 38.76,29 25.5,29z"/> + <path android:fillColor="#556080" android:pathData="M1.5,20v0.5c0,-0.17 0.02,-0.33 0.05,-0.5H1.5z"/> + <path android:fillColor="#556080" android:pathData="M49.46,20c0.03,0.17 0.05,0.33 0.05,0.5V20H49.46z"/> + <path android:fillColor="#91BAE1" android:pathData="M1.5,8.5a24,8.5 0,1 0,48 0a24,8.5 0,1 0,-48 0z"/> + <path android:fillColor="#8697CB" android:pathData="M25.5,17c-13.26,0 -24,-3.81 -24,-8.5V21h0.05c0.73,4.46 11.18,8 23.95,8s23.22,-3.54 23.95,-8H49.5V8.5C49.5,13.19 38.76,17 25.5,17z"/> + <path android:fillColor="#8697CB" android:pathData="M1.5,8v0.5c0,-0.17 0.02,-0.33 0.05,-0.5H1.5z"/> + <path android:fillColor="#8697CB" android:pathData="M49.46,8C49.48,8.17 49.5,8.33 49.5,8.5V8H49.46z"/> + <path android:fillColor="#BDC3C7" android:pathData="M55.5,43.85l-1.44,-0.28c-2.14,-0.41 -3.13,-2.92 -1.84,-4.68l0.91,-1.24l-1.96,-1.96l-1.22,0.82c-1.81,1.22 -4.27,0.15 -4.6,-2.01L45.12,33h-2.77l-0.36,1.87c-0.4,2.1 -2.82,3.1 -4.59,1.9l-1.57,-1.07l-1.96,1.96l0.91,1.24c1.29,1.76 0.31,4.26 -1.84,4.68L31.5,43.85v2.77l1.51,0.23c2.16,0.33 3.23,2.8 2.01,4.6l-0.82,1.22l1.96,1.96l1.24,-0.91c1.76,-1.29 4.26,-0.31 4.68,1.84L42.35,57h2.77l0.16,-1.07c0.34,-2.2 2.9,-3.26 4.69,-1.94l0.87,0.64l1.96,-1.96l-0.82,-1.22c-1.22,-1.81 -0.15,-4.27 2.01,-4.6l1.51,-0.23V43.85z"/> + <path android:fillColor="#FFFFFF" android:pathData="M43.5,45m-4,0a4,4 0,1 1,8 0a4,4 0,1 1,-8 0"/> + <path android:fillColor="#ECF0F1" android:pathData="M43.5,50c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5s5,2.24 5,5S46.26,50 43.5,50zM43.5,42c-1.65,0 -3,1.35 -3,3s1.35,3 3,3s3,-1.35 3,-3S45.15,42 43.5,42z"/> +</vector> diff --git a/Software/Android-Studio/Tango.Stubs.UI/src/main/res/drawable/ic_play.xml b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/drawable/ic_play.xml new file mode 100644 index 000000000..63c765d2b --- /dev/null +++ b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/drawable/ic_play.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="32dp" + android:height="32dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="#FF000000" + android:pathData="M8,5v14l11,-7z"/> +</vector> diff --git a/Software/Android-Studio/Tango.Stubs.UI/src/main/res/drawable/ic_stop.xml b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/drawable/ic_stop.xml new file mode 100644 index 000000000..bd94ea32f --- /dev/null +++ b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/drawable/ic_stop.xml @@ -0,0 +1,4 @@ +<vector android:height="32dp" android:viewportHeight="24.0" + android:viewportWidth="24.0" android:width="32dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillColor="#FF000000" android:pathData="M6,6h12v12H6z"/> +</vector> diff --git a/Software/Android-Studio/Tango.Stubs.UI/src/main/res/drawable/ic_stubs.xml b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/drawable/ic_stubs.xml new file mode 100644 index 000000000..8eea0f836 --- /dev/null +++ b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/drawable/ic_stubs.xml @@ -0,0 +1,6 @@ +<vector android:height="64dp" android:viewportHeight="504.123" + android:viewportWidth="504.123" android:width="64dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillColor="#415F6F" android:pathData="M486,355.4l18.1,-10.2c-1.2,-6.7 -2.8,-13.4 -5.1,-20.1h-20.9l-11.4,-20.1l10.6,-18.1c-4.3,-5.1 -9.1,-10.2 -14.6,-14.6l-18.1,10.2l-20.1,-11.8v-20.9c-0.4,0 -0.8,-0.4 -1.6,-0.4c-5.9,-2 -12.2,-3.9 -18.5,-5.1l-10.6,18.1h-23.2l-10.2,-18.1c-6.7,1.2 -13.4,2.8 -20.1,5.1v20.9l-20.1,11.4l-18.1,-10.6c-5.1,4.3 -10.2,9.1 -14.6,14.6l10.2,18.1l-11.8,20.1h-20.9c-2.4,6.7 -4.3,13 -5.5,19.7l18.1,10.6v23.2l-18.1,10.2c1.2,6.7 2.8,13.4 5.1,20.1h20.9l11.4,20.1l-10.6,18.1c4.3,5.1 9.1,10.2 14.6,14.6l18.1,-10.2l20.1,11.8v20.9c0.4,0 0.8,0.4 1.6,0.4c5.9,2 12.2,3.9 18.5,5.1l10.6,-18.1h23.2l10.2,18.1c6.7,-1.2 13.4,-2.8 20.1,-5.1v-20.9l20.1,-11.4l18.1,10.6c5.1,-4.3 10.2,-9.1 14.6,-14.6l-10.2,-18.1l11.8,-20.1h20.9c2.4,-6.7 4.3,-13 5.5,-19.7l-18.1,-10.6V355.4zM382,435c-37.8,0 -68.9,-30.7 -68.9,-68.5s30.7,-68.9 68.9,-68.9c37.8,0 68.9,30.7 68.9,68.5S419.8,435 382,435z"/> + <path android:fillColor="#26A6D1" android:pathData="M274.9,240c0,-7.5 -0.4,-15.4 -1.6,-22.8l-22.4,-4.7l-8.3,-24.4l15.4,-17.3c-3.5,-6.7 -7.9,-13 -12.6,-18.9l-22.1,7.5l-19.3,-16.9l4.7,-22.8c-6.7,-3.9 -13.4,-7.5 -20.5,-10.2l-15,17.3l-25.2,-5.1l-7.5,-22.1c-7.5,0 -15.4,0.4 -22.8,1.6l-4.7,22.4l-24.4,8.3l-17.3,-15.4c-6.7,3.5 -13,7.9 -18.9,12.6l7.5,22.1l-16.9,19.3l-22.8,-4.7c-3.9,6.7 -7.5,13.4 -10.2,20.5l17.3,15.4l-5.1,25.2L0,233.7c0,7.5 0.4,15.4 1.6,22.8l22.8,4.7l8.3,24.4l-15.4,17.3c3.5,6.7 7.9,13 12.6,18.9l22.1,-7.5l19.3,16.9l-5.1,22.8c6.7,3.9 13.4,7.5 20.5,10.2l15.4,-17.3l25.2,5.1l7.5,22.1c7.5,0 15.4,-0.4 22.8,-1.6l4.7,-22.4l24.4,-8.3l17.3,15.4c6.7,-3.5 13,-7.9 18.9,-12.6l-7.5,-22.1l16.9,-19.3l22.8,4.7c3.9,-6.7 7.5,-13.4 10.2,-20.5l-17.3,-15.4l5.1,-25.2L274.9,240L274.9,240zM137.5,312.9c-42.1,0 -76.4,-34.3 -76.4,-76.4s34.3,-76.4 76.4,-76.4s76.4,34.3 76.4,76.4S179.6,312.9 137.5,312.9z"/> + <path android:fillColor="#638090" android:pathData="M456.9,125l16.5,-6.7c-0.4,-5.9 -1.2,-11.8 -2.4,-17.7l-17.7,-2.4l-7.5,-18.5l11,-14.2c-3.2,-5.1 -6.7,-9.8 -10.6,-14.2l-16.5,6.7l-15.8,-12.2l2.4,-17.7l-1.2,-0.8c-5.1,-2.4 -10.2,-4.7 -15.4,-6.3l-11,14.2l-19.7,-2.8l-6.7,-16.9c-5.9,0.4 -11.8,0.8 -17.7,2l-2.4,17.7l-18.9,7.9L309.2,32.1c-5.1,3.2 -9.8,6.7 -14.2,10.6l6.7,16.5l-12.2,15.8l-17.7,-2.4c-2.8,5.1 -5.1,10.6 -7.1,16.5l14.2,11l-2.8,19.7l-16.5,6.7c0.4,5.9 1.2,11.8 2.4,17.7l17.7,2.4l7.5,18.5l-11,14.2c3.2,5.1 6.7,9.8 10.6,14.2l16.5,-6.7l15.8,12.2l-2.4,17.7l1.2,0.8c5.1,2.4 10.2,4.7 15.4,6.3l11,-14.2l19.7,2.8l6.7,16.5c5.9,-0.4 11.8,-0.8 17.7,-2.4l2.4,-17.7l18.5,-7.5l14.2,11c5.1,-3.2 9.8,-6.7 14.2,-10.6l-6.7,-16.5l12.2,-15.8l17.7,2.4c2.8,-5.1 5.1,-10.6 7.1,-16.5l-14.2,-11C453.7,144.3 456.9,125 456.9,125zM366.7,183.3c-33.9,0 -61,-27.2 -61,-61s27.2,-61 61,-61s61,27.2 61,61S400.5,183.3 366.7,183.3z"/> +</vector> diff --git a/Software/Android-Studio/Tango.Stubs.UI/src/main/res/drawable/list_view_selectable.xml b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/drawable/list_view_selectable.xml new file mode 100644 index 000000000..8895ad0ae --- /dev/null +++ b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/drawable/list_view_selectable.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:drawable="@color/colorAccent" android:state_activated="true" /> +</selector>
\ No newline at end of file diff --git a/Software/Android-Studio/Tango.Stubs.UI/src/main/res/drawable/stubs.png b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/drawable/stubs.png Binary files differnew file mode 100644 index 000000000..5d6249d61 --- /dev/null +++ b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/drawable/stubs.png diff --git a/Software/Android-Studio/Tango.Stubs.UI/src/main/res/drawable/user.png b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/drawable/user.png Binary files differnew file mode 100644 index 000000000..8d700439a --- /dev/null +++ b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/drawable/user.png 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 b96743542..2a3ae6a77 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 @@ -31,23 +31,18 @@ <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_below="@+id/toolbar1"> + android:layout_below="@+id/toolbar1" + android:layout_alignParentStart="true"> - <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" + <FrameLayout + android:id="@+id/fragment_container" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_alignParentStart="true" - android:layout_below="@+id/tabLayout"> + android:layout_centerHorizontal="true" + android:layout_centerVertical="true"> - </android.support.v4.view.ViewPager> + </FrameLayout> </RelativeLayout> </RelativeLayout> diff --git a/Software/Android-Studio/Tango.Stubs.UI/src/main/res/layout/activity_stub.xml b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/layout/activity_stub.xml new file mode 100644 index 000000000..fb9891f69 --- /dev/null +++ b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/layout/activity_stub.xml @@ -0,0 +1,145 @@ +<layout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:bind="http://schemas.android.com/apk/res-auto"> + + <data> + + <variable + name="vm" + type="com.twine.tango.stubs.ui.views.stub.StubActivityVM" /> + </data> + + <RelativeLayout xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layoutDirection="ltr" + tools:context="com.twine.tango.stubs.ui.views.stub.StubActivity"> + + <RelativeLayout + android:id="@+id/top_bar" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="?attr/colorPrimary"> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:padding="10dp"> + + <ImageView + android:id="@+id/imageView" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_weight="1" + bind:srcCompat="@drawable/stubs" /> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_margin="10dp" + android:layout_weight="1" + android:orientation="vertical"> + + <TextView + android:id="@+id/textView3" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="Stub Name" + android:textSize="18sp" /> + + <TextView + android:id="@+id/textView4" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="Description" /> + </LinearLayout> + </LinearLayout> + </RelativeLayout> + + <FrameLayout + android:id="@+id/frame_params" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_above="@+id/frame_response" + android:layout_alignParentBottom="false" + android:layout_alignParentEnd="false" + android:layout_alignParentStart="false" + android:layout_alignParentTop="false" + android:layout_below="@+id/top_bar"> + + </FrameLayout> + + <FrameLayout + android:id="@+id/frame_response" + android:layout_width="match_parent" + android:layout_height="150dp" + android:layout_above="@+id/bottom_bar" + android:paddingLeft="5dp" + android:paddingRight="5dp"> + + <RelativeLayout + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <TextView + android:id="@+id/textView5" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_alignParentStart="true" + android:layout_alignParentTop="true" + android:background="@android:drawable/alert_dark_frame" + android:paddingLeft="20dp" + android:paddingTop="12dp" + android:text="Log" /> + + <EditText + android:id="@+id/editText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_alignParentBottom="true" + android:layout_alignParentTop="true" + android:layout_centerHorizontal="true" + android:layout_marginBottom="5dp" + android:layout_marginLeft="20dp" + android:layout_marginTop="45dp" + android:background="@android:color/black" + android:ems="10" + android:gravity="top" + android:inputType="textMultiLine" + android:text="@android:string/defaultMsisdnAlphaTag" + android:textSize="12sp" /> + </RelativeLayout> + </FrameLayout> + + <RelativeLayout + android:id="@+id/bottom_bar" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_alignParentBottom="true" + android:layout_centerHorizontal="true" + android:layout_marginBottom="0dp" + android:background="?attr/colorPrimary" + android:padding="5dp"> + + <ImageButton + android:id="@+id/imageButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentEnd="true" + android:layout_alignParentTop="true" + android:tint="@color/colorPlay" + bind:srcCompat="@drawable/ic_play" /> + + <ImageButton + android:id="@+id/imageButton2" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentTop="true" + android:layout_toStartOf="@+id/imageButton" + android:tint="@color/colorStop" + bind:srcCompat="@drawable/ic_stop" /> + + </RelativeLayout> + </RelativeLayout> +</layout> diff --git a/Software/Android-Studio/Tango.Stubs.UI/src/main/res/layout/activity_stubs.xml b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/layout/activity_stubs.xml new file mode 100644 index 000000000..bb0598073 --- /dev/null +++ b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/layout/activity_stubs.xml @@ -0,0 +1,31 @@ +<layout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:bind="http://schemas.android.com/apk/res-auto"> + + <data> + <variable + name="vm" + type="com.twine.tango.stubs.ui.views.stubs.StubsActivityVM" /> + </data> + + <RelativeLayout xmlns:tools="http://schemas.android.com/tools" + android:layoutDirection="ltr" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context="com.twine.tango.stubs.ui.views.stubs.StubsActivity"> + + + <ListView + android:id="@+id/listResults" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_centerHorizontal="true" + android:layout_centerVertical="true" + android:onItemClick="@{vm::onStubSelected}" + android:selectedItemPosition="@{vm.selectedStubIndex}" + android:choiceMode="singleChoice" + app:items="@{vm.stubs}" + app:itemBinding="@{vm.stubBinding}"/> + + </RelativeLayout> +</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 index fb3b154b3..db174541a 100644 --- 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 @@ -1,4 +1,5 @@ <layout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:bind="http://schemas.android.com/apk/res-auto"> <data> @@ -15,6 +16,52 @@ android:paddingRight="40dp" tools:context="com.twine.tango.stubs.ui.views.login.LoginFragment"> + <ImageView + android:id="@+id/imageView2" + android:layout_width="150dp" + android:layout_height="150dp" + android:layout_alignParentTop="true" + android:layout_centerHorizontal="true" + android:layout_marginTop="34dp" + app:srcCompat="@drawable/user" /> + + <EditText + android:id="@+id/txtEmail" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_alignParentStart="true" + android:layout_below="@+id/imageView2" + android:layout_marginTop="41dp" + android:ems="10" + android:hint="Email" + android:inputType="textEmailAddress" + android:text="@={vm.email}" /> + + <EditText + android:textDirection="ltr" + android:layoutDirection="ltr" + android:id="@+id/txtPassword" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_alignParentStart="true" + android:layout_below="@+id/txtEmail" + android:layout_marginTop="40dp" + android:ems="10" + android:hint="Password" + android:inputType="textPassword" + android:text="@={vm.password}" /> + + <Button + android:id="@+id/btnLogin" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentEnd="true" + android:layout_alignParentStart="true" + android:layout_marginTop="20dp" + android:layout_below="@id/txtPassword" + android:command="@{vm.loginCommand}" + android:padding="20dp" + android:text="LOGIN" /> </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 index b8c467f40..938f06e32 100644 --- 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 @@ -1,4 +1,5 @@ <layout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:bind="http://schemas.android.com/apk/res-auto"> <data> @@ -11,10 +12,52 @@ 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"> + <TextView + android:id="@+id/textView" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="40dp" + android:gravity="center" + android:text="Select Test Category" + android:textSize="24sp" /> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_below="@+id/textView" + android:layout_centerHorizontal="true" + android:layout_centerVertical="true" + android:gravity="center" + android:orientation="vertical"> + + <Button + android:id="@+id/btnStubs" + android:layout_width="match_parent" + android:layout_height="100dp" + android:layout_marginBottom="10dp" + android:layout_marginLeft="50dp" + android:layout_marginRight="50dp" + android:drawablePadding="-30dp" + android:drawableStart="@drawable/ic_stubs" + android:text="STUBS" + android:command="@{vm.openStubsCommand}" + android:textSize="18sp" /> + + <Button + android:id="@+id/btnDB" + android:layout_width="match_parent" + android:layout_height="100dp" + android:layout_marginLeft="50dp" + android:layout_marginRight="50dp" + android:drawablePadding="-30dp" + android:drawableStart="@drawable/ic_database" + android:command="@{vm.openDataBaseCommand}" + android:text="DATA BASE" + android:textSize="18sp" /> + + </LinearLayout> </RelativeLayout> </layout> diff --git a/Software/Android-Studio/Tango.Stubs.UI/src/main/res/layout/stubs_listview_item.xml b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/layout/stubs_listview_item.xml new file mode 100644 index 000000000..62edcb607 --- /dev/null +++ b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/layout/stubs_listview_item.xml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="utf-8"?> + +<layout xmlns:android="http://schemas.android.com/apk/res/android"> + + <data> + <variable + name="stub" + type="com.twine.tango.models.stubs.Stub"/> + </data> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + android:background="@drawable/list_view_selectable" + android:padding="5dp"> + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@{stub.name}" + android:textSize="18sp" /> + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:text="@{stub.description}" /> + </LinearLayout> +</layout>
\ No newline at end of file diff --git a/Software/Android-Studio/Tango.Stubs.UI/src/main/res/values/colors.xml b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/values/colors.xml index 3ab3e9cbc..29b840969 100644 --- a/Software/Android-Studio/Tango.Stubs.UI/src/main/res/values/colors.xml +++ b/Software/Android-Studio/Tango.Stubs.UI/src/main/res/values/colors.xml @@ -3,4 +3,6 @@ <color name="colorPrimary">#3F51B5</color> <color name="colorPrimaryDark">#303F9F</color> <color name="colorAccent">#FF4081</color> + <color name="colorPlay">#5df15d</color> + <color name="colorStop">#f24954</color> </resources> 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 e3910978c..7160cf9f5 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,5 +1,5 @@ <resources> - <string name="app_name">Tango.Stubs.UI</string> + <string name="app_name">Tango Machine Tester</string> <!-- TODO: Remove or change this placeholder text --> <string name="hello_blank_fragment">Hello blank fragment</string> diff --git a/Software/Android-Studio/settings.gradle b/Software/Android-Studio/settings.gradle index 5e745d3e5..4a207ac0e 100644 --- a/Software/Android-Studio/settings.gradle +++ b/Software/Android-Studio/settings.gradle @@ -1 +1 @@ -include ':app', ':Tango.PMR', ':Tango.BL', ':Tango.Stubs.UI', ':Tango.Core', ':Tango.SharedUI', ':Tango.DAL' +include ':app', ':Tango.PMR', ':Tango.BL', ':Tango.Stubs.UI', ':Tango.Core', ':Tango.SharedUI', ':Tango.DAL', ':Tango.Models' |
