From 641171e30368056bd97fd53c8dade56889739bc3 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Sun, 14 Apr 2019 09:28:15 +0300 Subject: Working on TCC... --- .../Android_Studio/ColorCapture/app/build.gradle | 1 + .../Messages/ColorDetectedMessage.java | 19 ++ .../colorcapture/controls/CircleActionButton.java | 159 ++++++++++++++ .../twine/colorcapture/core/AnimationsHelper.java | 2 +- .../com/twine/colorcapture/core/CountUpTimer.java | 29 +++ .../java/com/twine/colorcapture/core/IAction.java | 2 +- .../java/com/twine/colorcapture/core/Task.java | 2 +- .../colorcapture/dagger/ApplicationComponent.java | 12 ++ .../twine/colorcapture/dagger/EventBusModule.java | 2 +- .../colorcapture/dagger/ViewModelsModule.java | 34 ++- .../dialogs/processing/ProcessingDialog.java | 23 ++ .../dialogs/processing/ProcessingDialogVM.java | 14 ++ .../dialogs/registering/RegisteringDialog.java | 22 ++ .../dialogs/registering/RegisteringDialogVM.java | 9 + .../dialogs/welcome/WelcomeDialog.java | 10 + .../com/twine/colorcapture/mvvm/DialogBase.java | 31 ++- .../colorcapture/mvvm/DialogViewModelBase.java | 2 +- .../com/twine/colorcapture/mvvm/RelayCommand.java | 1 + .../navigation/AndroidNavigationProvider.java | 86 ++++++-- .../navigation/INavigationObjectReceiver.java | 6 + .../navigation/INavigationProvider.java | 20 +- .../navigation/NavigationFragment.java | 3 + .../colorcapture/navigation/PreventHistory.java | 13 ++ .../twine/colorcapture/utils/ThreadingUtils.java | 15 ++ .../views/capture/CaptureFragment.java | 94 ++++---- .../views/capture/CaptureFragmentVM.java | 62 ++++-- .../views/loading/LoadingActivityVM.java | 2 + .../colorcapture/views/main/MainActivity.java | 2 +- .../colorcapture/views/main/MainActivityVM.java | 15 +- .../views/register/IRegisterFragment.java | 7 + .../views/register/RegisterFragment.java | 30 +++ .../views/register/RegisterFragmentVM.java | 71 ++++++ .../colorcapture/views/result/IResultFragment.java | 7 + .../colorcapture/views/result/ResultFragment.java | 28 +++ .../views/result/ResultFragmentVM.java | 74 +++++++ .../com/twine/colorcapture/web/ITCCService.java | 7 +- .../com/twine/colorcapture/web/IWebServiceAPI.java | 5 + .../com/twine/colorcapture/web/TCCService.java | 71 +++++- .../colorcapture/web/messages/DetectionColor.java | 18 ++ .../web/messages/MachineRegistrationRequest.java | 16 ++ .../web/messages/MachineRegistrationResponse.java | 24 +++ .../app/src/main/res/drawable-hdpi/down.png | Bin 0 -> 406 bytes .../app/src/main/res/drawable-hdpi/email.png | Bin 0 -> 2129 bytes .../app/src/main/res/drawable-hdpi/icon.png | Bin 0 -> 1868 bytes .../src/main/res/drawable-hdpi/icons_arrow_up.png | Bin 0 -> 413 bytes .../src/main/res/drawable-hdpi/icons_rename.png | Bin 0 -> 1664 bytes .../app/src/main/res/drawable-mdpi/down.png | Bin 0 -> 272 bytes .../app/src/main/res/drawable-mdpi/email.png | Bin 0 -> 1199 bytes .../app/src/main/res/drawable-mdpi/icon.png | Bin 0 -> 1260 bytes .../src/main/res/drawable-mdpi/icons_arrow_up.png | Bin 0 -> 270 bytes .../src/main/res/drawable-mdpi/icons_rename.png | Bin 0 -> 976 bytes .../app/src/main/res/drawable-xhdpi/down.png | Bin 0 -> 531 bytes .../app/src/main/res/drawable-xhdpi/email.png | Bin 0 -> 3051 bytes .../app/src/main/res/drawable-xhdpi/icon.png | Bin 0 -> 2545 bytes .../src/main/res/drawable-xhdpi/icons_arrow_up.png | Bin 0 -> 539 bytes .../src/main/res/drawable-xhdpi/icons_rename.png | Bin 0 -> 2382 bytes .../app/src/main/res/drawable-xxhdpi/down.png | Bin 0 -> 794 bytes .../app/src/main/res/drawable-xxhdpi/email.png | Bin 0 -> 5520 bytes .../app/src/main/res/drawable-xxhdpi/icon.png | Bin 0 -> 3805 bytes .../main/res/drawable-xxhdpi/icons_arrow_up.png | Bin 0 -> 804 bytes .../src/main/res/drawable-xxhdpi/icons_rename.png | Bin 0 -> 4474 bytes .../app/src/main/res/drawable-xxxhdpi/down.png | Bin 0 -> 972 bytes .../app/src/main/res/drawable-xxxhdpi/email.png | Bin 0 -> 7860 bytes .../app/src/main/res/drawable-xxxhdpi/icon.png | Bin 0 -> 5130 bytes .../main/res/drawable-xxxhdpi/icons_arrow_up.png | Bin 0 -> 880 bytes .../src/main/res/drawable-xxxhdpi/icons_rename.png | Bin 0 -> 6740 bytes .../res/drawable/border_primary_background.xml | 13 ++ .../src/main/res/drawable/button_empty_border.xml | 8 + .../drawable/button_transparent_fill_ripple.xml | 21 ++ .../app/src/main/res/layout/activity_loading.xml | 11 + .../src/main/res/layout/circle_action_button.xml | 81 +++++++ .../app/src/main/res/layout/dialog_processing.xml | 39 ++++ .../app/src/main/res/layout/dialog_registering.xml | 62 ++++++ .../app/src/main/res/layout/dialog_welcome.xml | 3 + .../app/src/main/res/layout/fragment_capture.xml | 28 --- .../app/src/main/res/layout/fragment_register.xml | 83 ++++++++ .../app/src/main/res/layout/fragment_result.xml | 237 +++++++++++++++++++++ .../app/src/main/res/values/colors.xml | 1 + .../app/src/main/res/values/strings.xml | 4 + .../app/src/main/res/values/styles.xml | 6 + 80 files changed, 1486 insertions(+), 161 deletions(-) create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/Messages/ColorDetectedMessage.java create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/controls/CircleActionButton.java create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/CountUpTimer.java create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/processing/ProcessingDialog.java create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/processing/ProcessingDialogVM.java create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/registering/RegisteringDialog.java create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/registering/RegisteringDialogVM.java create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/INavigationObjectReceiver.java create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/PreventHistory.java create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/utils/ThreadingUtils.java create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/register/IRegisterFragment.java create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/register/RegisterFragment.java create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/register/RegisterFragmentVM.java create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/result/IResultFragment.java create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/result/ResultFragment.java create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/result/ResultFragmentVM.java create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/messages/MachineRegistrationRequest.java create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/messages/MachineRegistrationResponse.java create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/down.png create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/email.png create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icon.png create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icons_arrow_up.png create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icons_rename.png create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/down.png create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/email.png create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icon.png create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icons_arrow_up.png create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icons_rename.png create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/down.png create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/email.png create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icon.png create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icons_arrow_up.png create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icons_rename.png create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/down.png create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/email.png create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icon.png create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icons_arrow_up.png create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icons_rename.png create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/down.png create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/email.png create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icon.png create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icons_arrow_up.png create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icons_rename.png create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable/border_primary_background.xml create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable/button_empty_border.xml create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable/button_transparent_fill_ripple.xml create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/layout/circle_action_button.xml create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/layout/dialog_processing.xml create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/layout/dialog_registering.xml create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_register.xml create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_result.xml (limited to 'Software/Android_Studio') diff --git a/Software/Android_Studio/ColorCapture/app/build.gradle b/Software/Android_Studio/ColorCapture/app/build.gradle index abe425ac7..7cfa48485 100644 --- a/Software/Android_Studio/ColorCapture/app/build.gradle +++ b/Software/Android_Studio/ColorCapture/app/build.gradle @@ -82,5 +82,6 @@ dependencies { compile 'com.squareup.retrofit2:converter-gson:2.1.0' implementation 'com.github.yoanngoular:bitmapconverter:0.2.0' compile 'com.github.CardinalNow:Android-CircleProgressIndicator:v0.2' + implementation 'com.github.florent37:shapeofview:1.3.2' } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/Messages/ColorDetectedMessage.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/Messages/ColorDetectedMessage.java new file mode 100644 index 000000000..f249335f7 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/Messages/ColorDetectedMessage.java @@ -0,0 +1,19 @@ +package com.twine.colorcapture.Messages; + +import com.twine.colorcapture.web.messages.DetectionColor; +import com.twine.colorcapture.web.messages.DetectionResponse; + +public class ColorDetectedMessage +{ + private DetectionResponse detectionResponse; + + public DetectionResponse getDetectionResponse() + { + return detectionResponse; + } + + public void setDetectionResponse(DetectionResponse detectionResponse) + { + this.detectionResponse = detectionResponse; + } +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/controls/CircleActionButton.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/controls/CircleActionButton.java new file mode 100644 index 000000000..424671341 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/controls/CircleActionButton.java @@ -0,0 +1,159 @@ +package com.twine.colorcapture.controls; + +import android.animation.Animator; +import android.animation.ValueAnimator; +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v7.widget.AppCompatTextView; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.ImageView; + +import com.github.florent37.shapeofview.shapes.RoundRectView; +import com.twine.colorcapture.R; + +public class CircleActionButton extends FrameLayout implements View.OnTouchListener +{ + private RoundRectView circleActionButton; + private Button btn; + private FrameLayout frameAfterPadding; + private int initial_circle_width; + private ValueAnimator animationDown; + private ValueAnimator animationUp; + private Drawable icon; + + public CircleActionButton(@NonNull Context context, @Nullable AttributeSet attrs) + { + super(context, attrs); + init(context,attrs); + } + + private void init(Context context,AttributeSet attrs) + { + inflate(context, R.layout.circle_action_button, this); + + btn = findViewById(R.id.actionButtonCircleButton); + circleActionButton = findViewById(R.id.actionButtonCircle); + frameAfterPadding = findViewById(R.id.frameAfterPadding); + ImageView imageView = findViewById(R.id.circleActionButtonImageView); + AppCompatTextView textView = findViewById(R.id.circleActionButtonTextView); + + btn.setOnTouchListener(this); + + TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.CircleActionButton); + + icon = getContext().getDrawable(a.getResourceId(R.styleable.CircleActionButton_src, 0)); + CharSequence text = a.getText(R.styleable.CircleActionButton_text); + + imageView.setImageDrawable(icon); + textView.setText(text); + + a.recycle(); + } + + @Override + public boolean onTouch(View view, MotionEvent motionEvent) + { + if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) + { + animateDown(); + } + else if (motionEvent.getAction() == MotionEvent.ACTION_UP) + { + animateUp(); + } + + return true; + } + + private void animateDown() + { + cancelAnimations(); + + if (initial_circle_width == 0) + { + initial_circle_width = circleActionButton.getMeasuredWidth(); + } + + ValueAnimator anim = ValueAnimator.ofInt(initial_circle_width, frameAfterPadding.getMeasuredWidth()); + animationDown = anim; + anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + int val = (Integer) valueAnimator.getAnimatedValue(); + ViewGroup.LayoutParams layoutParams = circleActionButton.getLayoutParams(); + layoutParams.width = val; + circleActionButton.setLayoutParams(layoutParams); + } + }); + anim.addListener(new Animator.AnimatorListener() + { + @Override + public void onAnimationStart(Animator animator) + { + + } + + @Override + public void onAnimationEnd(Animator animator) + { + + } + + @Override + public void onAnimationCancel(Animator animator) + { + + } + + @Override + public void onAnimationRepeat(Animator animator) + { + + } + }); + anim.setDuration(50); + anim.start(); + } + + private void animateUp() + { + cancelAnimations(); + ValueAnimator anim = ValueAnimator.ofInt(circleActionButton.getMeasuredWidth(), initial_circle_width); + animationUp = anim; + anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + int val = (Integer) valueAnimator.getAnimatedValue(); + ViewGroup.LayoutParams layoutParams = circleActionButton.getLayoutParams(); + layoutParams.width = val; + circleActionButton.setLayoutParams(layoutParams); + } + }); + anim.setDuration(300); + anim.setStartDelay(200); + anim.start(); + } + + private void cancelAnimations() + { + if (animationDown != null) + { + animationDown.cancel(); + animationDown = null; + } + + if (animationUp != null) + { + animationUp.cancel(); + animationUp = null; + } + } +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/AnimationsHelper.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/AnimationsHelper.java index f19571b06..219056c1b 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/AnimationsHelper.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/AnimationsHelper.java @@ -41,7 +41,7 @@ public class AnimationsHelper try { onCompleted.invoke(); - } catch (IOException e) + } catch (Exception e) { e.printStackTrace(); } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/CountUpTimer.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/CountUpTimer.java new file mode 100644 index 000000000..597b46430 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/CountUpTimer.java @@ -0,0 +1,29 @@ +package com.twine.colorcapture.core; + +import android.os.CountDownTimer; + +public abstract class CountUpTimer extends CountDownTimer +{ + private int duration; + + protected CountUpTimer(int durationMs, long interval) + { + super(durationMs, interval); + this.duration = durationMs; + } + + public abstract void onTick(float milli); + + @Override + public void onTick(long msUntilFinished) + { + float milli = (float) ((duration - msUntilFinished)); + onTick(milli); + } + + @Override + public void onFinish() + { + onTick((float)duration); + } +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/IAction.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/IAction.java index 35cf21cc4..2a6724efb 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/IAction.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/IAction.java @@ -10,5 +10,5 @@ public interface IAction /** * Invokes the action. */ - void invoke() throws IOException; + void invoke() throws Exception; } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/Task.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/Task.java index 407de37d3..5148b9e6f 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/Task.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/Task.java @@ -56,7 +56,7 @@ public class Task extends AsyncTask try { continueWithAction.invoke(); - } catch (IOException e) + } catch (Exception e) { e.printStackTrace(); } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dagger/ApplicationComponent.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dagger/ApplicationComponent.java index f52f30a53..a6216608f 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dagger/ApplicationComponent.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dagger/ApplicationComponent.java @@ -1,10 +1,14 @@ package com.twine.colorcapture.dagger; +import com.twine.colorcapture.dialogs.processing.ProcessingDialog; +import com.twine.colorcapture.dialogs.registering.RegisteringDialog; import com.twine.colorcapture.dialogs.welcome.WelcomeDialog; import com.twine.colorcapture.views.capture.CaptureFragment; import com.twine.colorcapture.views.mycolors.MyColorsFragment; import com.twine.colorcapture.views.loading.LoadingActivity; import com.twine.colorcapture.views.main.MainActivity; +import com.twine.colorcapture.views.register.RegisterFragment; +import com.twine.colorcapture.views.result.ResultFragment; import javax.inject.Singleton; @@ -27,4 +31,12 @@ public interface ApplicationComponent void inject(CaptureFragment view); void inject(WelcomeDialog welcomeDialog); + + void inject(ResultFragment resultFragment); + + void inject(ProcessingDialog processingDialog); + + void inject(RegisterFragment registerFragment); + + void inject(RegisteringDialog registeringDialog); } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dagger/EventBusModule.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dagger/EventBusModule.java index f76e91d70..3e785d304 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dagger/EventBusModule.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dagger/EventBusModule.java @@ -19,6 +19,6 @@ public class EventBusModule { @Singleton public Bus provideEventBus() { - return new Bus(ThreadEnforcer.MAIN); + return new Bus(ThreadEnforcer.ANY); } } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dagger/ViewModelsModule.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dagger/ViewModelsModule.java index 0fecad4d8..cb8290bb0 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dagger/ViewModelsModule.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dagger/ViewModelsModule.java @@ -1,6 +1,8 @@ package com.twine.colorcapture.dagger; import com.squareup.otto.Bus; +import com.twine.colorcapture.dialogs.processing.ProcessingDialogVM; +import com.twine.colorcapture.dialogs.registering.RegisteringDialogVM; import com.twine.colorcapture.dialogs.welcome.WelcomeDialogVM; import com.twine.colorcapture.navigation.INavigationProvider; import com.twine.colorcapture.notification.INotificationProvider; @@ -8,6 +10,8 @@ import com.twine.colorcapture.views.capture.CaptureFragmentVM; import com.twine.colorcapture.views.loading.LoadingActivityVM; import com.twine.colorcapture.views.mycolors.MyColorsFragmentVM; import com.twine.colorcapture.views.main.MainActivityVM; +import com.twine.colorcapture.views.register.RegisterFragmentVM; +import com.twine.colorcapture.views.result.ResultFragmentVM; import com.twine.colorcapture.web.ITCCService; import com.twine.colorcapture.web.IWebServiceAPI; @@ -49,7 +53,35 @@ public class ViewModelsModule @Singleton public CaptureFragmentVM provideCaptureFragmentVM(Bus eventBus, INotificationProvider notificationProvider, INavigationProvider navigationProvider, ITCCService tccService) { - return new CaptureFragmentVM(tccService, navigationProvider, notificationProvider); + return new CaptureFragmentVM(eventBus,tccService, navigationProvider, notificationProvider); + } + + @Provides + @Singleton + public ProcessingDialogVM provideProcessingDialogVM() + { + return new ProcessingDialogVM(); + } + + @Provides + @Singleton + public ResultFragmentVM provideResultFragmentVM(Bus eventBus,INavigationProvider navigationProvider) + { + return new ResultFragmentVM(eventBus,navigationProvider); + } + + @Provides + @Singleton + public RegisterFragmentVM provideRegisterFragmentVM(INotificationProvider notificationProvider,ITCCService tccService) + { + return new RegisterFragmentVM(notificationProvider,tccService); + } + + @Provides + @Singleton + public RegisteringDialogVM provideRegisteringDialogVM() + { + return new RegisteringDialogVM(); } @Provides diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/processing/ProcessingDialog.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/processing/ProcessingDialog.java new file mode 100644 index 000000000..eca58f720 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/processing/ProcessingDialog.java @@ -0,0 +1,23 @@ +package com.twine.colorcapture.dialogs.processing; + +import android.app.DialogFragment; + +import com.twine.colorcapture.App; +import com.twine.colorcapture.R; +import com.twine.colorcapture.databinding.DialogProcessingBinding; +import com.twine.colorcapture.mvvm.DialogBase; + +public class ProcessingDialog extends DialogBase +{ + @Override + public int getLayoutId() + { + return R.layout.dialog_processing; + } + + @Override + public void inject() + { + App.getComponent().inject(this); + } +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/processing/ProcessingDialogVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/processing/ProcessingDialogVM.java new file mode 100644 index 000000000..20848d357 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/processing/ProcessingDialogVM.java @@ -0,0 +1,14 @@ +package com.twine.colorcapture.dialogs.processing; + +import com.twine.colorcapture.mvvm.DialogViewModelBase; + +import javax.inject.Inject; + +public class ProcessingDialogVM extends DialogViewModelBase +{ + @Inject + public ProcessingDialogVM() + { + + } +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/registering/RegisteringDialog.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/registering/RegisteringDialog.java new file mode 100644 index 000000000..fa18b2fe2 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/registering/RegisteringDialog.java @@ -0,0 +1,22 @@ +package com.twine.colorcapture.dialogs.registering; + +import com.twine.colorcapture.App; +import com.twine.colorcapture.R; +import com.twine.colorcapture.databinding.DialogRegisteringBinding; +import com.twine.colorcapture.mvvm.DialogBase; + +public class RegisteringDialog extends DialogBase +{ + + @Override + public int getLayoutId() + { + return R.layout.dialog_registering; + } + + @Override + public void inject() + { + App.getComponent().inject(this); + } +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/registering/RegisteringDialogVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/registering/RegisteringDialogVM.java new file mode 100644 index 000000000..bae4b9bfb --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/registering/RegisteringDialogVM.java @@ -0,0 +1,9 @@ +package com.twine.colorcapture.dialogs.registering; + +import com.twine.colorcapture.mvvm.DialogViewModelBase; +import com.twine.colorcapture.web.ITCCService; + +public class RegisteringDialogVM extends DialogViewModelBase +{ + +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/welcome/WelcomeDialog.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/welcome/WelcomeDialog.java index 5f92fff0e..dbb7fbb0c 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/welcome/WelcomeDialog.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/welcome/WelcomeDialog.java @@ -1,10 +1,20 @@ package com.twine.colorcapture.dialogs.welcome; +import android.graphics.Interpolator; +import android.os.CountDownTimer; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; + import com.twine.colorcapture.App; import com.twine.colorcapture.R; +import com.twine.colorcapture.core.AnimationsHelper; +import com.twine.colorcapture.core.CountUpTimer; import com.twine.colorcapture.mvvm.DialogBase; import com.twine.colorcapture.databinding.DialogWelcomeBinding; +import java.util.Timer; + public class WelcomeDialog extends DialogBase { diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/DialogBase.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/DialogBase.java index 8fa1e7ba1..7f6dfe042 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/DialogBase.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/DialogBase.java @@ -10,20 +10,27 @@ import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; + import com.twine.colorcapture.R; +import com.twine.colorcapture.core.AnimationsHelper; +import com.twine.colorcapture.core.CountUpTimer; import com.twine.colorcapture.core.IAction1; import java.lang.reflect.Method; + import javax.inject.Inject; + import butterknife.ButterKnife; public abstract class DialogBase extends DialogFragment { private boolean isUserDismiss; private IAction1 onDismissListener; + private View rootView; /** @@ -54,7 +61,10 @@ public abstract class DialogBase + { + group.setAlpha(0); + + new CountUpTimer(500,30){ + @Override + public void onTick(float milli) + { + group.setAlpha(milli / 500f); + Log.d("ANIM", Float.toString(milli / 500f)); + } + }.start(); + }); } public abstract int getLayoutId(); diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/DialogViewModelBase.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/DialogViewModelBase.java index b1fe7b8ec..99ef24549 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/DialogViewModelBase.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/DialogViewModelBase.java @@ -13,7 +13,7 @@ public abstract class DialogViewModelBase extends ViewModelBase try { closeAction.invoke(); - } catch (IOException e) + } catch (Exception e) { e.printStackTrace(); } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/RelayCommand.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/RelayCommand.java index 9574c864f..f46b98c17 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/RelayCommand.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/RelayCommand.java @@ -1,6 +1,7 @@ package com.twine.colorcapture.mvvm; import android.databinding.BindingAdapter; +import android.graphics.Color; import android.view.View; public class RelayCommand diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/AndroidNavigationProvider.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/AndroidNavigationProvider.java index 96531ab20..923dc41b2 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/AndroidNavigationProvider.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/AndroidNavigationProvider.java @@ -14,6 +14,7 @@ import com.twine.colorcapture.mvvm.ExtendedObject; import com.twine.colorcapture.mvvm.FragmentBase; import com.twine.colorcapture.core.IAction1; +import java.lang.annotation.Annotation; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -52,21 +53,27 @@ public class AndroidNavigationProvider extends ExtendedObject implements INaviga } @Override - public void navigateTo(NavigationFragment fragmentValue, boolean addToHistory) + public void navigateTo(NavigationFragment fragmentValue, boolean pushCurrentToHistory, boolean pushNextToHistory) { - navigateTo(fragmentValue.name(), addToHistory); + navigateTo(fragmentValue.name(), pushCurrentToHistory, pushNextToHistory); } @Override - public void navigateTo(NavigationFragment fragmentValue, IAction1 onCreateListener, boolean addToHistory) + public void navigateWithObjectTo(NavigationFragment fragmentValue, boolean pushCurrentToHistory, boolean pushNextToHistory, T obj) { - navigateTo(fragmentValue.name(), onCreateListener, addToHistory); + navigateToInternal(fragmentValue.name(), null, pushCurrentToHistory, pushNextToHistory, obj); } @Override - public void navigateTo(String fragmentName, boolean addToHistory) + public void navigateTo(NavigationFragment fragmentValue, IAction1 onCreateListener, boolean pushCurrentToHistory, boolean pushNextToHistory) { - navigateTo(fragmentName, null, addToHistory); + navigateTo(fragmentValue.name(), onCreateListener, pushCurrentToHistory, pushNextToHistory); + } + + @Override + public void navigateTo(String fragmentName, boolean pushCurrentToHistory, boolean pushNextToHistory) + { + navigateTo(fragmentName, null, pushCurrentToHistory, pushNextToHistory); } @Override @@ -74,7 +81,7 @@ public class AndroidNavigationProvider extends ExtendedObject implements INaviga { if (canNavigateBack()) { - navigateTo(history.pop(), false); + navigateTo(history.pop(), false, false); } } @@ -109,7 +116,12 @@ public class AndroidNavigationProvider extends ExtendedObject implements INaviga } @Override - public void navigateTo(String fragmentName, IAction1 onCreateListener, boolean addToHistory) + public void navigateTo(String fragmentName, IAction1 onCreateListener, boolean pushCurrentToHistory, boolean pushNextToHistory) + { + navigateToInternal(fragmentName, onCreateListener, pushCurrentToHistory, pushNextToHistory, null); + } + + public void navigateToInternal(String fragmentName, IAction1 onCreateListener, boolean pushCurrentToHistory, boolean pushNextToHistory, Object navigationObject) { if (activity == null || fragmentName == currentFragmentName) { @@ -119,17 +131,39 @@ public class AndroidNavigationProvider extends ExtendedObject implements INaviga boolean reverseAnimation = false; + boolean preventCurrentHistory = false; + boolean preventNextHistory = false; - if (currentFragmentName != null) + try { - if (addToHistory) + if (currentFragmentName != null) { - if (!history.contains(NavigationFragment.valueOf(currentFragmentName))) - { - history.push(NavigationFragment.valueOf(currentFragmentName)); - } + preventCurrentHistory = NavigationFragment.class.getField(currentFragmentName).getAnnotations().length > 0; + } + preventNextHistory = NavigationFragment.class.getField(fragmentName).getAnnotations().length > 0; + } catch (NoSuchFieldException e) + { + e.printStackTrace(); + } + + if (pushCurrentToHistory && currentFragmentName != null && !preventCurrentHistory) + { + if (!history.contains(NavigationFragment.valueOf(currentFragmentName))) + { + history.push(NavigationFragment.valueOf(currentFragmentName)); } + } + if (pushNextToHistory && !preventNextHistory) + { + if (!history.contains(NavigationFragment.valueOf(fragmentName))) + { + history.push(NavigationFragment.valueOf(fragmentName)); + } + } + + if (currentFragmentName != null) + { List values = Arrays.asList(NavigationFragment.values()); int newIndex = values.indexOf(NavigationFragment.valueOf(fragmentName)); @@ -190,17 +224,26 @@ public class AndroidNavigationProvider extends ExtendedObject implements INaviga final FragmentBase fragmentTo = fragment; final FragmentBase fragmentFrom = currentFragment; - new Handler().postDelayed(() -> + activity.runOnUiThread(() -> { - - fragmentTo.getVM().notifyNavigatedTo(); - - if (fragmentFrom != null && !fragmentTo.getClass().getSimpleName().equals(fragmentFrom.getClass().getSimpleName())) + if (fragmentTo.getVM() instanceof INavigationObjectReceiver) { - fragmentFrom.getVM().notifyNavigatedFrom(); + ((INavigationObjectReceiver)fragmentTo.getVM()).onNavigationObjectReceived(navigationObject); } - }, 300); + new Handler().postDelayed(() -> + { + + fragmentTo.getVM().notifyNavigatedTo(); + + if (fragmentFrom != null && !fragmentTo.getClass().getSimpleName().equals(fragmentFrom.getClass().getSimpleName())) + { + fragmentFrom.getVM().notifyNavigatedFrom(); + } + + }, 300); + }); + // try // { @@ -220,7 +263,6 @@ public class AndroidNavigationProvider extends ExtendedObject implements INaviga { listener.onNavigated(f); } - } @Override diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/INavigationObjectReceiver.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/INavigationObjectReceiver.java new file mode 100644 index 000000000..1dad1d735 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/INavigationObjectReceiver.java @@ -0,0 +1,6 @@ +package com.twine.colorcapture.navigation; + +public interface INavigationObjectReceiver +{ + void onNavigationObjectReceived(T obj); +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/INavigationProvider.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/INavigationProvider.java index 6f42cfcfb..f5453bd89 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/INavigationProvider.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/INavigationProvider.java @@ -22,13 +22,13 @@ public interface INavigationProvider * @param fragmentContainerId the fragment container id */ void registerNavigationActivity(Activity activity, int fragmentContainerId); - + /** * Navigate to the specified fragment name. * * @param fragmentName the fragment name */ - void navigateTo(String fragmentName, boolean addToHistory); + void navigateTo(String fragmentName, boolean pushCurrentToHistory, boolean pushNextToHistory); /** * Navigates to the previous fragment. @@ -42,12 +42,14 @@ public interface INavigationProvider /** * Gets the current navigation fragment. + * * @return */ NavigationFragment getCurrentFragment(); /** * Gets a value determining whether there is any fragment to navigate back to in the history. + * * @return */ boolean canNavigateBack(); @@ -56,29 +58,31 @@ public interface INavigationProvider * Resets the navigation manager. (call on navigation activity destroyed) */ void reset(); - + /** * Navigate to to the specified fragment name. * * @param fragmentName the fragment name * @param onCreateListener the on create listener */ - void navigateTo(String fragmentName, IAction1 onCreateListener, boolean addToHistory); - + void navigateTo(String fragmentName, IAction1 onCreateListener, boolean pushCurrentToHistory, boolean pushNextToHistory); + /** * Navigate to to the specified enum value fragment name. * * @param fragmentValue the fragment value */ - void navigateTo(NavigationFragment fragmentValue, boolean addToHistory); - + void navigateTo(NavigationFragment fragmentValue, boolean pushCurrentToHistory, boolean pushNextToHistory); + + void navigateWithObjectTo(NavigationFragment fragmentValue, boolean pushCurrentToHistory, boolean pushNextToHistory, T obj); + /** * Navigate to to the specified enum value fragment name. * * @param fragmentValue the fragment value * @param onCreateListener the on create listener */ - void navigateTo(NavigationFragment fragmentValue, IAction1 onCreateListener, boolean addToHistory); + void navigateTo(NavigationFragment fragmentValue, IAction1 onCreateListener, boolean pushCurrentToHistory, boolean pushNextToHistory); void navigateTo(NavigationActivity activityValue, boolean addToHistory); diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/NavigationFragment.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/NavigationFragment.java index 65a6d38e7..2aab6c0fc 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/NavigationFragment.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/NavigationFragment.java @@ -4,4 +4,7 @@ public enum NavigationFragment { MyColors, Capture, + Result, + @PreventHistory + Register, } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/PreventHistory.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/PreventHistory.java new file mode 100644 index 000000000..331d13597 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/PreventHistory.java @@ -0,0 +1,13 @@ +package com.twine.colorcapture.navigation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD}) +public @interface PreventHistory +{ + +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/utils/ThreadingUtils.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/utils/ThreadingUtils.java new file mode 100644 index 000000000..bbb0fecf4 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/utils/ThreadingUtils.java @@ -0,0 +1,15 @@ +package com.twine.colorcapture.utils; + +public class ThreadingUtils +{ + public static void sleep(int millis) + { + try + { + Thread.sleep(millis); + } catch (InterruptedException e) + { + e.printStackTrace(); + } + } +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/CaptureFragment.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/CaptureFragment.java index bf5ff63a8..b9dddc6f2 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/CaptureFragment.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/CaptureFragment.java @@ -246,70 +246,64 @@ public class CaptureFragment extends FragmentBase + try { - - try + int numberOfCameras = Camera.getNumberOfCameras(); + for (int i = 0; i < numberOfCameras; i++) { - int numberOfCameras = Camera.getNumberOfCameras(); - for (int i = 0; i < numberOfCameras; i++) + CameraInfo info = new CameraInfo(); + Camera.getCameraInfo(i, info); + if (info.facing == CameraInfo.CAMERA_FACING_BACK) { - CameraInfo info = new CameraInfo(); - Camera.getCameraInfo(i, info); - if (info.facing == CameraInfo.CAMERA_FACING_BACK) - { - cameraId = i; - break; - } + cameraId = i; + break; } + } - camera = Camera.open(cameraId); + camera = Camera.open(cameraId); - camera.setPreviewDisplay(surfaceHolder); - camera.setPreviewCallback(this); + camera.setPreviewDisplay(surfaceHolder); + camera.setPreviewCallback(this); - Camera.Parameters parameters; + Camera.Parameters parameters; - setCameraDisplayOrientation(); + setCameraDisplayOrientation(); - parameters = camera.getParameters(); + parameters = camera.getParameters(); - List sizes = parameters.getSupportedPreviewSizes(); + List sizes = parameters.getSupportedPreviewSizes(); - for (Camera.Size size : parameters.getSupportedPreviewSizes()) + for (Camera.Size size : parameters.getSupportedPreviewSizes()) + { + if (size.width >= 1200 & size.width <= 1280) { - if (size.width >= 1200 & size.width <= 1280) - { - parameters.setPreviewSize(1280, 720); - parameters.setPictureSize(1280, 720); - break; - } + parameters.setPreviewSize(1280, 720); + parameters.setPictureSize(1280, 720); + break; } + } - imageFormat = parameters.getPreviewFormat(); - - parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE); - - camera.setParameters(parameters); + imageFormat = parameters.getPreviewFormat(); - parameters = camera.getParameters(); + parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE); - int width = parameters.getPreviewSize().width; - int height = parameters.getPreviewSize().height; + camera.setParameters(parameters); - listener.onPreviewSettingsAvailable(width, height); + parameters = camera.getParameters(); - camera.startPreview(); + int width = parameters.getPreviewSize().width; + int height = parameters.getPreviewSize().height; - isCameraStarted = true; - } catch (Exception ex) - { - camera.release(); - camera = null; - } + listener.onPreviewSettingsAvailable(width, height); - }).build().start(); + camera.startPreview(); + isCameraStarted = true; + } catch (Exception ex) + { + camera.release(); + camera = null; + } } }); } @@ -319,14 +313,12 @@ public class CaptureFragment extends FragmentBase - { - camera.setPreviewCallback(null); - camera.stopPreview(); - camera.release(); - camera = null; - isCameraStarted = false; - }).build().start(); + isCameraStarted = false; + + camera.setPreviewCallback(null); + camera.stopPreview(); + camera.release(); + camera = null; } } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/CaptureFragmentVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/CaptureFragmentVM.java index e566fe159..20ff070bf 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/CaptureFragmentVM.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/CaptureFragmentVM.java @@ -1,26 +1,32 @@ package com.twine.colorcapture.views.capture; import android.graphics.Bitmap; -import android.media.AudioManager; -import android.media.ToneGenerator; +import android.media.MediaActionSound; import android.util.Log; +import com.squareup.otto.Bus; +import com.twine.colorcapture.Messages.ColorDetectedMessage; import com.twine.colorcapture.core.Task.TaskBuilder; +import com.twine.colorcapture.dialogs.processing.ProcessingDialog; import com.twine.colorcapture.dialogs.welcome.WelcomeDialog; import com.twine.colorcapture.mvvm.DependencyProperty; import com.twine.colorcapture.mvvm.ViewModelBase; import com.twine.colorcapture.navigation.INavigationProvider; +import com.twine.colorcapture.navigation.NavigationFragment; import com.twine.colorcapture.notification.INotificationProvider; import com.twine.colorcapture.opencv.ImageProcessor; +import com.twine.colorcapture.utils.ThreadingUtils; import com.twine.colorcapture.views.capture.ICaptureFragment.ICaptureFragmentListener; import com.twine.colorcapture.web.ITCCService; import com.twine.colorcapture.web.messages.DefinitionResponse; +import com.twine.colorcapture.web.messages.DetectionResponse; import com.yanzhenjie.zbar.Image; import com.yanzhenjie.zbar.ImageScanner; import com.yanzhenjie.zbar.Symbol; import com.yanzhenjie.zbar.SymbolSet; import java.io.IOException; +import java.util.concurrent.atomic.AtomicBoolean; public class CaptureFragmentVM extends ViewModelBase implements ICaptureFragmentListener { @@ -40,12 +46,15 @@ public class CaptureFragmentVM extends ViewModelBase implement private INotificationProvider notificationProvider; private boolean startDialogShown; private boolean preventDetection; + private Bus eventBus; public DependencyProperty isCardDetected; public DependencyProperty isDetecting; - public CaptureFragmentVM(ITCCService tccService, INavigationProvider navigationProvider, INotificationProvider notificationProvider) + public CaptureFragmentVM(Bus eventBus, ITCCService tccService, INavigationProvider navigationProvider, INotificationProvider notificationProvider) { + this.eventBus = eventBus; + isCardDetected = new DependencyProperty(); isDetecting = new DependencyProperty(); this.navigationProvider = navigationProvider; @@ -56,7 +65,7 @@ public class CaptureFragmentVM extends ViewModelBase implement try { definition = tccService.getDefinition(); - } catch (IOException e) + } catch (Exception e) { e.printStackTrace(); } @@ -123,35 +132,44 @@ public class CaptureFragmentVM extends ViewModelBase implement Log.d("BARCODE", "Barcode text is: " + text); - ToneGenerator toneGen1 = new ToneGenerator(AudioManager.STREAM_MUSIC, 100); - toneGen1.startTone(ToneGenerator.TONE_CDMA_PIP,150); + //ToneGenerator toneGen1 = new ToneGenerator(AudioManager.STREAM_MUSIC, 100); + //toneGen1.startTone(ToneGenerator.TONE_CDMA_PIP, 150); + + MediaActionSound sound = new MediaActionSound(); + sound.play(MediaActionSound.SHUTTER_CLICK); isCardDetected.set(true); preventDetection = true; view.onFrameResult(frameBitmap, sampleBitmap, barcode); view.stopCamera(); - try - { - Thread.sleep(2000); - } catch (InterruptedException e) - { - e.printStackTrace(); - } + ThreadingUtils.sleep(1000); isDetecting.set(true); - //DetectionResponse response = tccService.detect(sampleBitmap, barcode); + AtomicBoolean abort = new AtomicBoolean(false); - try + notificationProvider.showDialog(new ProcessingDialog(), (vm) -> { - Thread.sleep(5000); - } catch (InterruptedException e) - { - e.printStackTrace(); - } + //TODO: Cancel and return to capture + abort.set(true); + }); + + DetectionResponse response = tccService.detect(sampleBitmap, barcode); + + ThreadingUtils.sleep(5000); isDetecting.set(false); + + if (!abort.get()) + { + notificationProvider.closeDialog(); + navigationProvider.navigateWithObjectTo(NavigationFragment.Result, true, false, response); + } + else + { + onNavigatedTo(); + } } } @@ -195,14 +213,14 @@ public class CaptureFragmentVM extends ViewModelBase implement notificationProvider.showDialog(new WelcomeDialog(), (vm) -> { - view.startCamera(); isCardDetected.set(false); + view.startCamera(); }); } else { - view.startCamera(); isCardDetected.set(false); + view.startCamera(); } } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/loading/LoadingActivityVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/loading/LoadingActivityVM.java index 8cf9c1ef6..99bb0846d 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/loading/LoadingActivityVM.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/loading/LoadingActivityVM.java @@ -14,6 +14,7 @@ import com.twine.colorcapture.navigation.INavigationProvider; import com.twine.colorcapture.navigation.NavigationActivity; import com.twine.colorcapture.navigation.NavigationFragment; import com.twine.colorcapture.notification.INotificationProvider; +import com.twine.colorcapture.utils.ThreadingUtils; import com.twine.colorcapture.web.ITCCService; import com.twine.colorcapture.web.IWebServiceAPI; import com.twine.colorcapture.web.WebApiFactory; @@ -58,6 +59,7 @@ public class LoadingActivityVM extends ViewModelBase new Task.TaskBuilder().setAction(() -> { tccService.getDefinition(); + ThreadingUtils.sleep(3000); }).setContinueWith(() -> { initialized = true; diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivity.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivity.java index 30b918f53..e0eaca38c 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivity.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivity.java @@ -67,7 +67,7 @@ public class MainActivity extends ActivityBase { this.navigationProvider = navigationProvider; this.notificationProvider = notificationProvider; - isMoreToggled = new DependencyProperty(false,this::onMoreToggled); - isCaptureToggled = new DependencyProperty(false,this::onCaptureToggled); - isMyColorsToggled = new DependencyProperty(false,this::onMyColorsToggled); + isMoreToggled = new DependencyProperty(false, this::onMoreToggled); + isCaptureToggled = new DependencyProperty(false, this::onCaptureToggled); + isMyColorsToggled = new DependencyProperty(false, this::onMyColorsToggled); currentTab = CurrentTab.Capture; setCurrentTab(currentTab); navigationProvider.addFragmentNavigationListener(this::onNavigation); @@ -42,7 +42,7 @@ public class MainActivityVM extends ViewModelBase private void onNavigation(NavigationFragment navigationFragment) { - if (navigationFragment == NavigationFragment.Capture && currentTab != CurrentTab.Capture) + if (navigationFragment == NavigationFragment.Capture || navigationFragment == NavigationFragment.Result && currentTab != CurrentTab.Capture) { isMoreToggled.setNoCallback(false); isMyColorsToggled.setNoCallback(false); @@ -90,16 +90,17 @@ public class MainActivityVM extends ViewModelBase { isMoreToggled.setNoCallback(false); isMyColorsToggled.setNoCallback(false); - navigationProvider.navigateTo(NavigationFragment.Capture,false); + navigationProvider.navigateTo(NavigationFragment.Capture, false, true); } isCaptureToggled.setNoCallback(true); } else if (tab == CurrentTab.MyColors) { - if (isMyColorsToggled.get()) { + if (isMyColorsToggled.get()) + { isMoreToggled.setNoCallback(false); isCaptureToggled.setNoCallback(false); - navigationProvider.navigateTo(NavigationFragment.MyColors,true); + navigationProvider.navigateTo(NavigationFragment.MyColors, true, false); } isMyColorsToggled.setNoCallback(true); } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/register/IRegisterFragment.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/register/IRegisterFragment.java new file mode 100644 index 000000000..7780bb52f --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/register/IRegisterFragment.java @@ -0,0 +1,7 @@ +package com.twine.colorcapture.views.register; + +import com.twine.colorcapture.mvvm.IView; + +public interface IRegisterFragment extends IView +{ +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/register/RegisterFragment.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/register/RegisterFragment.java new file mode 100644 index 000000000..afa551345 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/register/RegisterFragment.java @@ -0,0 +1,30 @@ +package com.twine.colorcapture.views.register; + +import android.app.Fragment; + +import com.twine.colorcapture.App; +import com.twine.colorcapture.R; +import com.twine.colorcapture.databinding.FragmentRegisterBinding; +import com.twine.colorcapture.mvvm.FragmentBase; + +public class RegisterFragment extends FragmentBase +{ + + @Override + protected int getLayoutId() + { + return R.layout.fragment_register; + } + + @Override + protected void inject() + { + App.getComponent().inject(this); + } + + @Override + public String getTitle() + { + return "Register"; + } +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/register/RegisterFragmentVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/register/RegisterFragmentVM.java new file mode 100644 index 000000000..79f02c866 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/register/RegisterFragmentVM.java @@ -0,0 +1,71 @@ +package com.twine.colorcapture.views.register; + +import android.util.Log; + +import com.twine.colorcapture.core.Task; +import com.twine.colorcapture.dialogs.registering.RegisteringDialog; +import com.twine.colorcapture.mvvm.DependencyProperty; +import com.twine.colorcapture.mvvm.RelayCommand; +import com.twine.colorcapture.mvvm.ViewModelBase; +import com.twine.colorcapture.notification.INotificationProvider; +import com.twine.colorcapture.views.result.IResultFragment; +import com.twine.colorcapture.web.ITCCService; + +import java.util.concurrent.atomic.AtomicBoolean; + +import javax.inject.Inject; + +public class RegisterFragmentVM extends ViewModelBase +{ + private INotificationProvider notificationProvider; + private ITCCService tccService; + public DependencyProperty serialNumber; + public RelayCommand registerCommand; + + @Inject + public RegisterFragmentVM(INotificationProvider notificationProvider, ITCCService tccService) + { + this.tccService = tccService; + this.notificationProvider = notificationProvider; + serialNumber = new DependencyProperty<>(""); + registerCommand = new RelayCommand(this::handleRegisterCommand); + } + + private void handleRegisterCommand() + { + AtomicBoolean abort = new AtomicBoolean(false); + + notificationProvider.showDialog(new RegisteringDialog(), (vm) -> + { + abort.set(true); + }); + + new Task.TaskBuilder().setAction(() -> + { + + try + { + tccService.register(serialNumber.get()); + + if (!abort.get()) + { + Log.i("REGISTER", "Registered !"); + } + else + { + Log.i("REGISTER", "Aborted !"); + } + } + catch (Exception ex) + { + //TODO: display error message! + Log.i("REGISTER", ex.getMessage()); + } + finally + { + notificationProvider.closeDialog(); + } + + }).build().start(); + } +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/result/IResultFragment.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/result/IResultFragment.java new file mode 100644 index 000000000..2b7c40414 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/result/IResultFragment.java @@ -0,0 +1,7 @@ +package com.twine.colorcapture.views.result; + +import com.twine.colorcapture.mvvm.IView; + +public interface IResultFragment extends IView +{ +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/result/ResultFragment.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/result/ResultFragment.java new file mode 100644 index 000000000..d634d2634 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/result/ResultFragment.java @@ -0,0 +1,28 @@ +package com.twine.colorcapture.views.result; + +import com.twine.colorcapture.App; +import com.twine.colorcapture.R; +import com.twine.colorcapture.databinding.FragmentResultBinding; +import com.twine.colorcapture.mvvm.FragmentBase; + +public class ResultFragment extends FragmentBase +{ + + @Override + protected int getLayoutId() + { + return R.layout.fragment_result; + } + + @Override + protected void inject() + { + App.getComponent().inject(this); + } + + @Override + public String getTitle() + { + return "Result"; + } +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/result/ResultFragmentVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/result/ResultFragmentVM.java new file mode 100644 index 000000000..63b0aa476 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/result/ResultFragmentVM.java @@ -0,0 +1,74 @@ +package com.twine.colorcapture.views.result; + +import android.util.Log; + +import com.squareup.otto.Bus; +import com.squareup.otto.Subscribe; +import com.twine.colorcapture.Messages.ColorDetectedMessage; +import com.twine.colorcapture.mvvm.DependencyProperty; +import com.twine.colorcapture.mvvm.RelayCommand; +import com.twine.colorcapture.mvvm.ViewModelBase; +import com.twine.colorcapture.navigation.INavigationObjectReceiver; +import com.twine.colorcapture.navigation.INavigationProvider; +import com.twine.colorcapture.navigation.NavigationFragment; +import com.twine.colorcapture.web.messages.DetectionResponse; + +import javax.inject.Inject; + +public class ResultFragmentVM extends ViewModelBase implements INavigationObjectReceiver +{ + private INavigationProvider navigationProvider; + + public DependencyProperty isCameraColorToggled; + public DependencyProperty detectionResponse; + public RelayCommand toggleCameraColorCommand; + public RelayCommand emailCommand; + public RelayCommand renameCommand; + public RelayCommand sendToMachineCommand; + public RelayCommand registerMachineCommand; + + @Inject + public ResultFragmentVM(Bus eventBus, INavigationProvider navigationProvider) + { + this.navigationProvider = navigationProvider; + + isCameraColorToggled = new DependencyProperty<>(false); + detectionResponse = new DependencyProperty<>(new DetectionResponse()); + toggleCameraColorCommand = new RelayCommand(this::toggleCameraColor); + emailCommand = new RelayCommand(this::handleEmailCommand); + renameCommand = new RelayCommand(this::handleRenameCommand); + sendToMachineCommand = new RelayCommand(this::handleSendToMachineCommand); + registerMachineCommand = new RelayCommand(this::handlerRegisterMachineCommand); + + eventBus.register(this); + } + + private void handlerRegisterMachineCommand() + { + navigationProvider.navigateTo(NavigationFragment.Register, true, false); + } + + private void handleSendToMachineCommand() + { + } + + private void handleRenameCommand() + { + } + + private void handleEmailCommand() + { + Log.d("RESULT", "handleEmailCommand: "); + } + + private void toggleCameraColor() + { + isCameraColorToggled.set(!isCameraColorToggled.get()); + } + + @Override + public void onNavigationObjectReceived(DetectionResponse detectionResponse) + { + this.detectionResponse.set(detectionResponse); + } +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/ITCCService.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/ITCCService.java index 065faf106..feefe86f8 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/ITCCService.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/ITCCService.java @@ -5,12 +5,15 @@ import android.graphics.Bitmap; import com.twine.colorcapture.web.messages.DefinitionResponse; import com.twine.colorcapture.web.messages.DetectionRequest; import com.twine.colorcapture.web.messages.DetectionResponse; +import com.twine.colorcapture.web.messages.MachineRegistrationResponse; import java.io.IOException; public interface ITCCService { - DefinitionResponse getDefinition() throws IOException; + DefinitionResponse getDefinition() throws Exception; - DetectionResponse detect(Bitmap bitmap, String barcode) throws IOException; + DetectionResponse detect(Bitmap bitmap, String barcode) throws Exception; + + MachineRegistrationResponse register(String serialNumber) throws Exception; } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/IWebServiceAPI.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/IWebServiceAPI.java index 6fa84c556..fe292a839 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/IWebServiceAPI.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/IWebServiceAPI.java @@ -6,6 +6,8 @@ import com.twine.colorcapture.web.messages.DetectionRequest; import com.twine.colorcapture.web.messages.DetectionResponse; import com.twine.colorcapture.web.messages.LoginRequest; import com.twine.colorcapture.web.messages.LoginResponse; +import com.twine.colorcapture.web.messages.MachineRegistrationRequest; +import com.twine.colorcapture.web.messages.MachineRegistrationResponse; import io.reactivex.Observable; import retrofit2.Call; @@ -22,4 +24,7 @@ public interface IWebServiceAPI @POST("ColorDetection/Detect") Call detect(@Body DetectionRequest request); + + @POST("ColorDetection/Register") + Call register(@Body MachineRegistrationRequest request); } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/TCCService.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/TCCService.java index 98000f3dd..6ecb815b7 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/TCCService.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/TCCService.java @@ -11,11 +11,16 @@ import com.twine.colorcapture.web.messages.DetectionRequest; import com.twine.colorcapture.web.messages.DetectionResponse; import com.twine.colorcapture.web.messages.LoginRequest; import com.twine.colorcapture.web.messages.LoginResponse; +import com.twine.colorcapture.web.messages.MachineRegistrationRequest; +import com.twine.colorcapture.web.messages.MachineRegistrationResponse; import java.io.IOException; import javax.inject.Inject; +import retrofit2.HttpException; +import retrofit2.Response; + public class TCCService implements ITCCService { private DefinitionResponse definition; @@ -29,20 +34,29 @@ public class TCCService implements ITCCService } @Override - public DefinitionResponse getDefinition() throws IOException + public DefinitionResponse getDefinition() throws Exception { ensureAuthenticated(); if (definition == null) { - definition = webAPI.getDefinition(new DefinitionRequest()).execute().body(); + Response response = webAPI.getDefinition(new DefinitionRequest()).execute(); + + if (response.isSuccessful()) + { + definition = webAPI.getDefinition(new DefinitionRequest()).execute().body(); + } + else + { + throw new Exception(response.message()); + } } return definition; } @Override - public DetectionResponse detect(Bitmap bitmap, String barcode) throws IOException + public DetectionResponse detect(Bitmap bitmap, String barcode) throws Exception { ensureAuthenticated(); @@ -51,12 +65,39 @@ public class TCCService implements ITCCService request.setBitmapString(BitmapUtils.getBitmapBase64String(bitmap)); request.setBarcode(barcode); - DetectionResponse response = webAPI.detect(request).execute().body(); + Response response = webAPI.detect(request).execute(); - return response; + if (response.isSuccessful()) + { + return response.body(); + } + else + { + throw new Exception(response.message()); + } } - private void ensureAuthenticated() throws IOException + @Override + public MachineRegistrationResponse register(String serialNumber) throws Exception + { + ensureAuthenticated(); + + MachineRegistrationRequest request = new MachineRegistrationRequest(); + request.setSerialnumber(serialNumber); + + Response response = webAPI.register(request).execute(); + + if (response.isSuccessful()) + { + return response.body(); + } + else + { + throw new Exception(response.message()); + } + } + + private void ensureAuthenticated() throws Exception { if (loginResponse == null) { @@ -64,13 +105,23 @@ public class TCCService implements ITCCService } } - private LoginResponse login() throws IOException + private LoginResponse login() throws Exception { LoginRequest request = new LoginRequest(); request.setAppId(BuildConfig.WEB_SERVICE_APP_ID); request.setDeviceId("1234"); - loginResponse = webAPI.login(request).execute().body(); - WebApiFactory.setAuthenticationToken(loginResponse.getAccessToken()); - return loginResponse; + + Response response = webAPI.login(request).execute(); + + if (response.isSuccessful()) + { + loginResponse = response.body(); + WebApiFactory.setAuthenticationToken(loginResponse.getAccessToken()); + return loginResponse; + } + else + { + throw new Exception(response.message()); + } } } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/messages/DetectionColor.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/messages/DetectionColor.java index 05e2d2c9f..f464b61a9 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/messages/DetectionColor.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/messages/DetectionColor.java @@ -1,5 +1,7 @@ package com.twine.colorcapture.web.messages; +import android.graphics.Color; + public class DetectionColor { private int r; @@ -35,4 +37,20 @@ public class DetectionColor { this.b = b; } + + public String getName() + { + return String.format("%d, %d, %d", r, g, b); + } + + @Override + public String toString() + { + return getName(); + } + + public int getColor() + { + return Color.rgb(r, g, b); + } } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/messages/MachineRegistrationRequest.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/messages/MachineRegistrationRequest.java new file mode 100644 index 000000000..1adb8b21b --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/messages/MachineRegistrationRequest.java @@ -0,0 +1,16 @@ +package com.twine.colorcapture.web.messages; + +public class MachineRegistrationRequest +{ + public String getSerialnumber() + { + return serialnumber; + } + + public void setSerialnumber(String serialnumber) + { + this.serialnumber = serialnumber; + } + + private String serialnumber; +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/messages/MachineRegistrationResponse.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/messages/MachineRegistrationResponse.java new file mode 100644 index 000000000..8430eab94 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/messages/MachineRegistrationResponse.java @@ -0,0 +1,24 @@ +package com.twine.colorcapture.web.messages; + +import java.util.ArrayList; +import java.util.List; + +public class MachineRegistrationResponse +{ + private List organizationMachines; + + public List getOrganizationMachines() + { + return organizationMachines; + } + + public void setOrganizationMachines(List organizationMachines) + { + this.organizationMachines = organizationMachines; + } + + public MachineRegistrationResponse() + { + organizationMachines = new ArrayList<>(); + } +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/down.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/down.png new file mode 100644 index 000000000..47438d35c Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/down.png differ diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/email.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/email.png new file mode 100644 index 000000000..d30bd11a9 Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/email.png differ diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icon.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icon.png new file mode 100644 index 000000000..5920654e4 Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icon.png differ diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icons_arrow_up.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icons_arrow_up.png new file mode 100644 index 000000000..0e55fd7af Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icons_arrow_up.png differ diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icons_rename.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icons_rename.png new file mode 100644 index 000000000..203838382 Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icons_rename.png differ diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/down.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/down.png new file mode 100644 index 000000000..833f12050 Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/down.png differ diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/email.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/email.png new file mode 100644 index 000000000..2220595bf Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/email.png differ diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icon.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icon.png new file mode 100644 index 000000000..f0889f9a3 Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icon.png differ diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icons_arrow_up.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icons_arrow_up.png new file mode 100644 index 000000000..ce8da1355 Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icons_arrow_up.png differ diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icons_rename.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icons_rename.png new file mode 100644 index 000000000..6c7dc083a Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icons_rename.png differ diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/down.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/down.png new file mode 100644 index 000000000..b1e67433d Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/down.png differ diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/email.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/email.png new file mode 100644 index 000000000..341d122a6 Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/email.png differ diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icon.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icon.png new file mode 100644 index 000000000..40e46cd1f Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icon.png differ diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icons_arrow_up.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icons_arrow_up.png new file mode 100644 index 000000000..dc4d23f98 Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icons_arrow_up.png differ diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icons_rename.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icons_rename.png new file mode 100644 index 000000000..070a2f6e7 Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icons_rename.png differ diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/down.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/down.png new file mode 100644 index 000000000..a9950dd2f Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/down.png differ diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/email.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/email.png new file mode 100644 index 000000000..390972794 Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/email.png differ diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icon.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icon.png new file mode 100644 index 000000000..968ebf639 Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icon.png differ diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icons_arrow_up.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icons_arrow_up.png new file mode 100644 index 000000000..610a339b8 Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icons_arrow_up.png differ diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icons_rename.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icons_rename.png new file mode 100644 index 000000000..eadb2e698 Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icons_rename.png differ diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/down.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/down.png new file mode 100644 index 000000000..357f74139 Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/down.png differ diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/email.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/email.png new file mode 100644 index 000000000..29a9ed75a Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/email.png differ diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icon.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icon.png new file mode 100644 index 000000000..25650a2ff Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icon.png differ diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icons_arrow_up.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icons_arrow_up.png new file mode 100644 index 000000000..4beb10f63 Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icons_arrow_up.png differ diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icons_rename.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icons_rename.png new file mode 100644 index 000000000..640161cce Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icons_rename.png differ diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/border_primary_background.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/border_primary_background.xml new file mode 100644 index 000000000..51861f9fe --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/border_primary_background.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/button_empty_border.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/button_empty_border.xml new file mode 100644 index 000000000..39d77fb44 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/button_empty_border.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/button_transparent_fill_ripple.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/button_transparent_fill_ripple.xml new file mode 100644 index 000000000..26f3f959c --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/button_transparent_fill_ripple.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/activity_loading.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/activity_loading.xml index 8ab79ffe2..4e6183a4a 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/activity_loading.xml +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/activity_loading.xml @@ -52,6 +52,17 @@ android:layout_centerInParent="true" android:layout_centerHorizontal="true" android:src="@drawable/twine_logo" /> + + diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/circle_action_button.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/circle_action_button.xml new file mode 100644 index 000000000..0f34acc8f --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/circle_action_button.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + +