From a895c48616d94c8be0ef33f0ce58d9457d5dfd1b Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Tue, 7 May 2019 08:15:17 +0300 Subject: Working on TCC... --- .../Android_Studio/ColorCapture/app/build.gradle | 5 +- .../ColorCapture/app/src/main/AndroidManifest.xml | 2 +- .../twine/colorcapture/core/AnimationsHelper.java | 4 +- .../colorcapture/dagger/ApplicationComponent.java | 4 +- .../colorcapture/dagger/ViewModelsModule.java | 10 +- .../com/twine/colorcapture/mvvm/FragmentBase.java | 3 +- .../com/twine/colorcapture/mvvm/ViewModelBase.java | 33 ++-- .../navigation/AndroidNavigationProvider.java | 62 +++++++- .../twine/colorcapture/navigation/HideHeader.java | 12 ++ .../navigation/INavigationProvider.java | 6 +- .../navigation/NavigationActivity.java | 1 - .../navigation/NavigationFragment.java | 6 +- .../colorcapture/settings/SettingsManager.java | 18 +++ .../colorcapture/views/main/MainActivity.java | 1 + .../views/register/RegisterFragmentVM.java | 14 +- .../colorcapture/views/result/IResultFragment.java | 2 + .../colorcapture/views/result/ResultFragment.java | 51 +++++- .../views/result/ResultFragmentVM.java | 41 +++-- .../views/sendtoemail/ISendToEmailActivity.java | 7 - .../views/sendtoemail/ISendToEmailFragment.java | 8 + .../views/sendtoemail/SendToEmailActivity.java | 36 ----- .../views/sendtoemail/SendToEmailActivityVM.java | 91 ----------- .../views/sendtoemail/SendToEmailFragment.java | 57 +++++++ .../views/sendtoemail/SendToEmailFragmentVM.java | 106 +++++++++++++ .../com/twine/colorcapture/web/ITCCService.java | 4 + .../com/twine/colorcapture/web/TCCService.java | 10 ++ .../src/main/res/layout/activity_send_to_email.xml | 163 ------------------- .../app/src/main/res/layout/email_list_item.xml | 15 ++ .../src/main/res/layout/fragment_send_to_email.xml | 176 +++++++++++++++++++++ .../app/src/main/res/values/styles.xml | 15 +- 30 files changed, 615 insertions(+), 348 deletions(-) create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/HideHeader.java delete mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/ISendToEmailActivity.java create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/ISendToEmailFragment.java delete mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/SendToEmailActivity.java delete mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/SendToEmailActivityVM.java create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/SendToEmailFragment.java create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/SendToEmailFragmentVM.java delete mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/layout/activity_send_to_email.xml create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/layout/email_list_item.xml create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_send_to_email.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 00eadc9a6..8a0752b39 100644 --- a/Software/Android_Studio/ColorCapture/app/build.gradle +++ b/Software/Android_Studio/ColorCapture/app/build.gradle @@ -23,7 +23,7 @@ android { buildTypes { debug { - buildConfigField "String", "WEB_SERVICE_ADDRESS", "\"http://192.168.1.229:45455/api/\"" + buildConfigField "String", "WEB_SERVICE_ADDRESS", "\"http://10.100.102.88:45455/api/\"" buildConfigField "String", "WEB_SERVICE_APP_ID", "\"Tdf793i4ughsiduf8749509237885ehgfdlkghlT\"" } @@ -115,6 +115,7 @@ dependencies { implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support.constraint:constraint-layout:1.1.3' implementation 'com.android.support:support-v4:27.1.1' + compile 'com.android.support:design:27.1.1' implementation 'android.arch.lifecycle:extensions:1.1.1' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' @@ -140,6 +141,8 @@ dependencies { implementation 'com.github.yoanngoular:bitmapconverter:0.2.0' compile 'com.github.CardinalNow:Android-CircleProgressIndicator:v0.2' implementation 'com.github.florent37:shapeofview:1.3.2' + compile 'com.google.android.gms:play-services-gcm:16.1.0' + compile 'com.google.android.gms:play-services-auth:16.0.1' } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/AndroidManifest.xml b/Software/Android_Studio/ColorCapture/app/src/main/AndroidManifest.xml index 441817928..bbea0549e 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/AndroidManifest.xml +++ b/Software/Android_Studio/ColorCapture/app/src/main/AndroidManifest.xml @@ -46,7 +46,7 @@ - + \ No newline at end of file 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 219056c1b..da640fffe 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 @@ -19,8 +19,8 @@ public class AnimationsHelper public static void animateScale(View v, float startScale, float endScale, int duration, boolean keepResult, IAction onCompleted) { Animation anim = new ScaleAnimation( - startScale, endScale, // Start and end values for the X axis scaling - 1f, 1f, // Start and end values for the Y axis scaling + 1f, 1f, // Start and end values for the X axis scaling + startScale, endScale, // Start and end values for the Y axis scaling Animation.RELATIVE_TO_SELF, 0f, // Pivot point of X scaling Animation.RELATIVE_TO_SELF, 0f); // Pivot point of Y scaling anim.setFillAfter(keepResult); // Needed to keep the result of the animation 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 db2848fa1..63852f2bc 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 @@ -13,7 +13,7 @@ import com.twine.colorcapture.views.main.MainActivity; import com.twine.colorcapture.views.register.RegisterFragment; import com.twine.colorcapture.views.rename.RenameFragment; import com.twine.colorcapture.views.result.ResultFragment; -import com.twine.colorcapture.views.sendtoemail.SendToEmailActivity; +import com.twine.colorcapture.views.sendtoemail.SendToEmailFragment; import com.twine.colorcapture.views.sendtomachine.SendToMachineFragment; import javax.inject.Singleton; @@ -56,5 +56,5 @@ public interface ApplicationComponent void inject(RenameFragment renameFragment); - void inject(SendToEmailActivity sendToEmailActivity); + void inject(SendToEmailFragment sendToEmailFragment); } 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 6b99d7ead..8b43a5cec 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 @@ -16,7 +16,7 @@ import com.twine.colorcapture.views.main.MainActivityVM; import com.twine.colorcapture.views.register.RegisterFragmentVM; import com.twine.colorcapture.views.rename.RenameFragmentVM; import com.twine.colorcapture.views.result.ResultFragmentVM; -import com.twine.colorcapture.views.sendtoemail.SendToEmailActivityVM; +import com.twine.colorcapture.views.sendtoemail.SendToEmailFragmentVM; import com.twine.colorcapture.views.sendtomachine.SendToMachineFragmentVM; import com.twine.colorcapture.web.ITCCService; @@ -49,9 +49,9 @@ public class ViewModelsModule @Provides @Singleton - public SendToEmailActivityVM provideSendToEmailActivityVM(Bus eventBus, INotificationProvider notificationProvider, INavigationProvider navigationProvider, ITCCService tccService) + public SendToEmailFragmentVM provideSendToEmailFragmentVM(Bus eventBus, INotificationProvider notificationProvider, INavigationProvider navigationProvider, ITCCService tccService) { - return new SendToEmailActivityVM(eventBus, navigationProvider, notificationProvider, tccService); + return new SendToEmailFragmentVM(eventBus, navigationProvider, notificationProvider, tccService); } @Provides @@ -77,9 +77,9 @@ public class ViewModelsModule @Provides @Singleton - public ResultFragmentVM provideResultFragmentVM(Bus eventBus, INavigationProvider navigationProvider, ITCCService tccService) + public ResultFragmentVM provideResultFragmentVM(Bus eventBus, INavigationProvider navigationProvider, INotificationProvider notificationProvider, ITCCService tccService) { - return new ResultFragmentVM(eventBus, navigationProvider, tccService); + return new ResultFragmentVM(eventBus, navigationProvider, notificationProvider, tccService); } @Provides diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/FragmentBase.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/FragmentBase.java index 12520c28e..00b07dbba 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/FragmentBase.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/FragmentBase.java @@ -73,7 +73,8 @@ public abstract class FragmentBase { diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/ViewModelBase.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/ViewModelBase.java index a9f0550c0..c19baa1e6 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/ViewModelBase.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/ViewModelBase.java @@ -19,26 +19,28 @@ public abstract class ViewModelBase extends ExtendedObject * The View. */ public T view; //TODO: Maybe use WeakReference to not prevent garbage collector from disposing the activity ? - + /** * Attach view. * * @param view the view */ - public void attachView(T view) { + public void attachView(T view) + { this.view = view; onViewAttached(view); } - + /** * On view attached. * * @param view the view */ - protected void onViewAttached(T view) { - Log.i("MVVM",view.getClass().getSimpleName() + " attached to " + this.getClass().getSimpleName()); + protected void onViewAttached(T view) + { + Log.i("MVVM", view.getClass().getSimpleName() + " attached to " + this.getClass().getSimpleName()); } - + /** * Invalidate commands. */ @@ -50,8 +52,9 @@ public abstract class ViewModelBase extends ExtendedObject { try { - ((RelayCommand)field.get(this)).invalidateCommand(); - } catch (IllegalAccessException e) + ((RelayCommand) field.get(this)).invalidateCommand(); + } + catch (IllegalAccessException e) { e.printStackTrace(); } @@ -62,8 +65,10 @@ public abstract class ViewModelBase extends ExtendedObject protected void invokeUI(IAction action) { Handler handler = new Handler(Looper.getMainLooper()); - handler.post(new Runnable() { - public void run() { + handler.post(new Runnable() + { + public void run() + { try { action.invoke(); @@ -95,4 +100,12 @@ public abstract class ViewModelBase extends ExtendedObject { onNavigatedFrom(); } + + protected void closeActivity() + { + if (view instanceof ActivityBase) + { + ((ActivityBase) view).finish(); + } + } } 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 17904623a..a5c885a59 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 @@ -1,5 +1,6 @@ package com.twine.colorcapture.navigation; +import android.animation.ValueAnimator; import android.app.Activity; import android.app.ActivityManager; import android.app.FragmentManager; @@ -9,8 +10,12 @@ import android.content.Intent; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.util.Log; +import android.view.View; +import android.view.ViewGroup; import com.twine.colorcapture.R; +import com.twine.colorcapture.core.AnimationsHelper; +import com.twine.colorcapture.logging.LogManager; import com.twine.colorcapture.mvvm.ActivityBase; import com.twine.colorcapture.mvvm.ExtendedObject; import com.twine.colorcapture.mvvm.FragmentBase; @@ -22,6 +27,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Stack; +import java.util.concurrent.atomic.AtomicBoolean; import javax.inject.Inject; @@ -30,7 +36,7 @@ import javax.inject.Inject; */ public class AndroidNavigationProvider extends ExtendedObject implements INavigationProvider { - private Activity activity; + private ActivityBase activity; private FragmentBase currentFragment; private String currentFragmentName; private int fragment_container; @@ -39,6 +45,8 @@ public class AndroidNavigationProvider extends ExtendedObject implements INaviga private Context context; private List fragmentNavigatedListeners; private Stack history; + private View headerView; + private int headerHeight; @Inject public AndroidNavigationProvider(Context context) @@ -49,12 +57,18 @@ public class AndroidNavigationProvider extends ExtendedObject implements INaviga } @Override - public void registerNavigationActivity(Activity activity, int fragmentContainerId) + public void registerNavigationActivity(ActivityBase activity, int fragmentContainerId) { this.activity = activity; this.fragment_container = fragmentContainerId; } + @Override + public void registerHeader(View view) + { + headerView = view; + } + @Override public void navigateTo(NavigationFragment fragmentValue, boolean pushCurrentToHistory, boolean pushNextToHistory) { @@ -136,14 +150,16 @@ public class AndroidNavigationProvider extends ExtendedObject implements INaviga boolean preventCurrentHistory = false; boolean preventNextHistory = false; + AtomicBoolean hideHeader = new AtomicBoolean(false); try { if (currentFragmentName != null) { - preventCurrentHistory = NavigationFragment.class.getField(currentFragmentName).getAnnotations().length > 0; + preventCurrentHistory = NavigationFragment.class.getField(currentFragmentName).getAnnotation(PreventHistory.class) != null; } - preventNextHistory = NavigationFragment.class.getField(fragmentName).getAnnotations().length > 0; + preventNextHistory = NavigationFragment.class.getField(fragmentName).getAnnotation(PreventHistory.class) != null; + hideHeader.set(NavigationFragment.class.getField(fragmentName).getAnnotation(HideHeader.class) != null); } catch (NoSuchFieldException e) { @@ -238,6 +254,44 @@ public class AndroidNavigationProvider extends ExtendedObject implements INaviga ((INavigationObjectReceiver) fragmentTo.getVM()).onNavigationObjectReceived(navigationObject); } + if (headerHeight == 0) + { + headerHeight = headerView.getMeasuredHeight(); + LogManager.log("Height is: " + headerHeight); + } + + if (headerHeight > 0) + { + if (hideHeader.get()) + { + int height = headerView.getMeasuredHeight(); + ValueAnimator anim = ValueAnimator.ofInt(height, 0); + anim.addUpdateListener(valueAnimator -> + { + int val = (Integer) valueAnimator.getAnimatedValue(); + ViewGroup.LayoutParams layoutParams = headerView.getLayoutParams(); + layoutParams.height = val; + headerView.setLayoutParams(layoutParams); + }); + anim.setDuration(300); + anim.start(); + } + else + { + int height = headerView.getMeasuredHeight(); + ValueAnimator anim = ValueAnimator.ofInt(height, headerHeight); + anim.addUpdateListener(valueAnimator -> + { + int val = (Integer) valueAnimator.getAnimatedValue(); + ViewGroup.LayoutParams layoutParams = headerView.getLayoutParams(); + layoutParams.height = val; + headerView.setLayoutParams(layoutParams); + }); + anim.setDuration(300); + anim.start(); + } + } + new Handler().postDelayed(() -> { diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/HideHeader.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/HideHeader.java new file mode 100644 index 000000000..b4fc25efb --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/HideHeader.java @@ -0,0 +1,12 @@ +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 HideHeader +{ +} 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 da696cf6a..e25b7e50e 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 @@ -1,7 +1,9 @@ package com.twine.colorcapture.navigation; import android.app.Activity; +import android.view.View; +import com.twine.colorcapture.mvvm.ActivityBase; import com.twine.colorcapture.mvvm.FragmentBase; import com.twine.colorcapture.core.IAction1; @@ -21,7 +23,9 @@ public interface INavigationProvider * @param activity the activity * @param fragmentContainerId the fragment container id */ - void registerNavigationActivity(Activity activity, int fragmentContainerId); + void registerNavigationActivity(ActivityBase activity, int fragmentContainerId); + + void registerHeader(View view); /** * Navigate to the specified fragment name. diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/NavigationActivity.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/NavigationActivity.java index 760e0f8b6..b03f688bc 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/NavigationActivity.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/NavigationActivity.java @@ -4,5 +4,4 @@ public enum NavigationActivity { Loading, Main, - SendToEmail, } 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 0731287e8..0d54f2bf4 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 @@ -10,6 +10,8 @@ public enum NavigationFragment @PreventHistory SendToMachine, @PreventHistory - Rename - + Rename, + @PreventHistory + @HideHeader + SendToEmail, } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/settings/SettingsManager.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/settings/SettingsManager.java index b90f11a13..502c9f297 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/settings/SettingsManager.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/settings/SettingsManager.java @@ -18,6 +18,23 @@ public class SettingsManager private static SettingsManager instance; private boolean isWelcomeScreenShown; private List results; + private String email; + private List lastEmails; + + public List getLastEmails() + { + return lastEmails; + } + + public String getEmail() + { + return email; + } + + public void setEmail(String email) + { + this.email = email; + } public boolean isWelcomeScreenShown() { @@ -92,5 +109,6 @@ public class SettingsManager public SettingsManager() { results = new ArrayList<>(); + lastEmails = new ArrayList<>(); } } 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 f40b78a4b..4190175ce 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 @@ -58,6 +58,7 @@ public class MainActivity extends ActivityBase { AtomicBoolean abort = new AtomicBoolean(false); - ProgressDialogVM pVM = notificationProvider.showProgress("Register your system","Please wait while we register\nyour system...", (vm) -> + ProgressDialogVM pVM = notificationProvider.showProgress("Register your system", "Please wait while we register\nyour system...", (vm) -> { abort.set(true); }); @@ -65,11 +66,10 @@ public class RegisterFragmentVM extends ViewModelBase Log.i("REGISTER", "Registered !"); - notificationProvider.showSuccess("Registering your system","Your device has been succesfully\nregistred.",(e) -> + notificationProvider.showSuccess("Registering your system", "Your device has been successfully\nregistered.", (e) -> { - MachineRegisteredMessage msg = new MachineRegisteredMessage(); - msg.setMachineRegistrationResponse(response); - eventBus.post(msg); + tccService.setRegistered(true); + tccService.setOrganizationMachines(response.getOrganizationMachines()); navigationProvider.navigateBack(); }); } @@ -81,7 +81,9 @@ public class RegisterFragmentVM extends ViewModelBase catch (Exception ex) { pVM.close(); - notificationProvider.showError("Registering your system","Device registration failed.\nPlease check your serial number.",(e) -> {}); + notificationProvider.showError("Registering your system", "Device registration failed.\nPlease verify your serial number.", (e) -> + { + }); Log.i("REGISTER", ex.getMessage()); } 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 index 2b7c40414..ea0e10604 100644 --- 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 @@ -1,7 +1,9 @@ package com.twine.colorcapture.views.result; +import com.twine.colorcapture.core.IAction1; import com.twine.colorcapture.mvvm.IView; public interface IResultFragment extends IView { + void getEmailAddress(IAction1 callback); } 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 index d634d2634..35aefd3d3 100644 --- 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 @@ -1,12 +1,24 @@ package com.twine.colorcapture.views.result; +import android.accounts.AccountManager; +import android.content.ActivityNotFoundException; +import android.content.Intent; + +import com.google.android.gms.auth.GoogleAuthUtil; +import com.google.android.gms.common.AccountPicker; import com.twine.colorcapture.App; import com.twine.colorcapture.R; +import com.twine.colorcapture.core.IAction1; import com.twine.colorcapture.databinding.FragmentResultBinding; +import com.twine.colorcapture.logging.LogManager; import com.twine.colorcapture.mvvm.FragmentBase; -public class ResultFragment extends FragmentBase +import static android.app.Activity.RESULT_OK; + +public class ResultFragment extends FragmentBase implements IResultFragment { + private static final int REQUEST_CODE_EMAIL = 1; + private IAction1 emailAddressCallback; @Override protected int getLayoutId() @@ -25,4 +37,41 @@ public class ResultFragment extends FragmentBase callback) + { + emailAddressCallback = callback; + + try + { + Intent intent = AccountPicker.newChooseAccountIntent(null, null, + new String[]{GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE}, false, null, null, null, null); + startActivityForResult(intent, REQUEST_CODE_EMAIL); + } + catch (ActivityNotFoundException e) + { + emailAddressCallback.invoke("error"); + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) + { + super.onActivityResult(requestCode, resultCode, data); + + try + { + if (requestCode == REQUEST_CODE_EMAIL && resultCode == RESULT_OK) + { + String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME); + emailAddressCallback.invoke(accountName); + } + } + catch (Exception ex) + { + LogManager.log(ex, "Error while trying to parse email address result."); + emailAddressCallback.invoke("error"); + } + } } 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 index 4709cd532..a4b1bd2e7 100644 --- 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 @@ -4,6 +4,7 @@ import android.util.Log; import com.squareup.otto.Bus; import com.squareup.otto.Subscribe; +import com.twine.colorcapture.logging.LogManager; import com.twine.colorcapture.messages.MachineRegisteredMessage; import com.twine.colorcapture.models.ColorResult; import com.twine.colorcapture.models.ColorResultVM; @@ -16,6 +17,7 @@ import com.twine.colorcapture.navigation.NavigationActivity; import com.twine.colorcapture.navigation.NavigationFragment; import com.twine.colorcapture.navigation.TabState; import com.twine.colorcapture.navigation.TabStateManager; +import com.twine.colorcapture.notification.INotificationProvider; import com.twine.colorcapture.settings.SettingsManager; import com.twine.colorcapture.web.ITCCService; import com.twine.colorcapture.web.messages.DetectionResponse; @@ -31,6 +33,7 @@ import javax.inject.Inject; public class ResultFragmentVM extends ViewModelBase implements INavigationObjectReceiver { private INavigationProvider navigationProvider; + private INotificationProvider notificationProvider; private ITCCService tccService; private Bus eventBus; public ColorResult colorResult; @@ -46,9 +49,10 @@ public class ResultFragmentVM extends ViewModelBase implements @Inject - public ResultFragmentVM(Bus eventBus, INavigationProvider navigationProvider, ITCCService tccService) + public ResultFragmentVM(Bus eventBus, INavigationProvider navigationProvider, INotificationProvider notificationProvider, ITCCService tccService) { this.navigationProvider = navigationProvider; + this.notificationProvider = notificationProvider; this.tccService = tccService; isCameraColorToggled = new DependencyProperty<>(false); @@ -61,13 +65,6 @@ public class ResultFragmentVM extends ViewModelBase implements registerMachineCommand = new RelayCommand(this::handlerRegisterMachineCommand); this.eventBus = eventBus; - eventBus.register(this); - } - - @Subscribe - public void handleMachineRegisteredMessage(MachineRegisteredMessage msg) - { - isMachineRegistred.set(true); } private void handlerRegisterMachineCommand() @@ -87,7 +84,32 @@ public class ResultFragmentVM extends ViewModelBase implements private void handleEmailCommand() { - navigationProvider.navigateWithObjectTo(NavigationActivity.SendToEmail, false, colorResult); + if (SettingsManager.getInstance().getEmail() == null) + { + view.getEmailAddress((address) -> + { + LogManager.log("Got email address: " + address); + + if (address != null) + { + if (address.equals("error")) + { + notificationProvider.showError("Send to email", "An error occurred while trying to set your email address", (x) -> + { + }); + return; + } + + SettingsManager.getInstance().setEmail(address); + SettingsManager.save(); + navigationProvider.navigateWithObjectTo(NavigationFragment.SendToEmail, true, false, colorResult); + } + }); + } + else + { + navigationProvider.navigateWithObjectTo(NavigationFragment.SendToEmail, true, false, colorResult); + } } private void toggleCameraColor() @@ -110,6 +132,7 @@ public class ResultFragmentVM extends ViewModelBase implements try { isMachineRegistred.set(tccService.getDefinition().isRegistered()); + boolean a = isMachineRegistred.get(); } catch (Exception e) { diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/ISendToEmailActivity.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/ISendToEmailActivity.java deleted file mode 100644 index 980d2eb49..000000000 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/ISendToEmailActivity.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.twine.colorcapture.views.sendtoemail; - -import com.twine.colorcapture.mvvm.IView; - -public interface ISendToEmailActivity extends IView -{ -} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/ISendToEmailFragment.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/ISendToEmailFragment.java new file mode 100644 index 000000000..c102f370d --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/ISendToEmailFragment.java @@ -0,0 +1,8 @@ +package com.twine.colorcapture.views.sendtoemail; + +import com.twine.colorcapture.mvvm.IView; + +public interface ISendToEmailFragment extends IView +{ + +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/SendToEmailActivity.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/SendToEmailActivity.java deleted file mode 100644 index deff5b244..000000000 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/SendToEmailActivity.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.twine.colorcapture.views.sendtoemail; - -import android.app.Activity; -import android.os.Bundle; - -import com.twine.colorcapture.App; -import com.twine.colorcapture.R; -import com.twine.colorcapture.databinding.ActivitySendToEmailBinding; -import com.twine.colorcapture.mvvm.ActivityBase; -import com.twine.colorcapture.notification.INotificationProvider; - -import javax.inject.Inject; - -public class SendToEmailActivity extends ActivityBase implements ISendToEmailActivity -{ - @Inject - public INotificationProvider notificationProvider; - - @Override - protected void onCreating(Bundle savedInstanceState) - { - notificationProvider.registerMainActivity(this); - } - - @Override - protected int getLayoutId() - { - return R.layout.activity_send_to_email; - } - - @Override - protected void inject() - { - App.getComponent().inject(this); - } -} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/SendToEmailActivityVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/SendToEmailActivityVM.java deleted file mode 100644 index 6e17dc12d..000000000 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/SendToEmailActivityVM.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.twine.colorcapture.views.sendtoemail; - -import com.squareup.otto.Bus; -import com.squareup.otto.Subscribe; -import com.twine.colorcapture.core.Task; -import com.twine.colorcapture.dialogs.progress.ProgressDialogVM; -import com.twine.colorcapture.models.ColorResult; -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.notification.INotificationProvider; -import com.twine.colorcapture.web.ITCCService; -import com.twine.colorcapture.web.messages.ResultByEmailRequest; - -import java.util.concurrent.atomic.AtomicBoolean; - -public class SendToEmailActivityVM extends ViewModelBase implements INavigationObjectReceiver -{ - private INavigationProvider navigationProvider; - private INotificationProvider notificationProvider; - private ITCCService tccService; - - public RelayCommand sendCommand; - public ColorResult colorResult; - public DependencyProperty to; - public DependencyProperty from; - public DependencyProperty message; - - public SendToEmailActivityVM(Bus eventBus, INavigationProvider navigationProvider, INotificationProvider notificationProvider, ITCCService tccService) - { - this.navigationProvider = navigationProvider; - this.notificationProvider = notificationProvider; - this.tccService = tccService; - - to = new DependencyProperty<>(""); - from = new DependencyProperty<>(""); - message = new DependencyProperty<>(""); - - sendCommand = new RelayCommand(this::handleSendCommand); - } - - private void handleSendCommand() - { - AtomicBoolean abort = new AtomicBoolean(); - - ProgressDialogVM vm = notificationProvider.showProgress("Send to email", "Sending color result to " + to.get(), (x) -> - { - abort.set(true); - }); - - new Task.TaskBuilder().setAction(() -> - { - ResultByEmailRequest request = new ResultByEmailRequest(); - request.setDetectionResponse(colorResult.getDetectionResponse()); - request.setTo(to.get()); - request.setFrom(from.get()); - request.setMessage(message.get()); - tccService.sendResultByEmail(request); - }).setError((ex) -> - { - if (!abort.get()) - { - invokeUI(() -> - { - vm.close(); - notificationProvider.showError("Send to email", "An error occurred. Please try again later.", (x) -> - { - }); - }); - } - }).setContinueWith(() -> - { - if (!abort.get()) - { - vm.close(); - notificationProvider.showSuccess("Send to email", "Color result sent successfully", (x) -> - { - }); - navigationProvider.navigateBack(); - } - }).build().start(); - } - - @Override - public void onNavigationObjectReceived(ColorResult colorResult) - { - this.colorResult = colorResult; - } -} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/SendToEmailFragment.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/SendToEmailFragment.java new file mode 100644 index 000000000..c34c3e71c --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/SendToEmailFragment.java @@ -0,0 +1,57 @@ +package com.twine.colorcapture.views.sendtoemail; + +import android.support.v7.widget.AppCompatAutoCompleteTextView; +import android.widget.ArrayAdapter; + +import com.mobsandgeeks.saripaar.annotation.Email; +import com.mobsandgeeks.saripaar.annotation.NotEmpty; +import com.twine.colorcapture.App; +import com.twine.colorcapture.R; +import com.twine.colorcapture.databinding.FragmentSendToEmailBinding; +import com.twine.colorcapture.mvvm.FragmentBase; +import com.twine.colorcapture.notification.INotificationProvider; +import com.twine.colorcapture.settings.SettingsManager; + +import java.util.List; + +import javax.inject.Inject; + +import butterknife.BindView; + +public class SendToEmailFragment extends FragmentBase implements ISendToEmailFragment +{ + @Inject + public INotificationProvider notificationProvider; + + @BindView(R.id.txtEmailTo) + @NotEmpty + @Email(message = "Please enter a valid email address") + AppCompatAutoCompleteTextView txtEmailTo; + + @Override + protected void onCreated() + { + super.onCreated(); + List arr = SettingsManager.getInstance().getLastEmails(); + ArrayAdapter adapter = new ArrayAdapter<>(this.getActivity(), R.layout.email_list_item, arr); + txtEmailTo.setAdapter(adapter); + } + + @Override + protected int getLayoutId() + { + return R.layout.fragment_send_to_email; + } + + @Override + protected void inject() + { + App.getComponent().inject(this); + } + + @Override + public String getTitle() + { + return "Send To Email"; + } +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/SendToEmailFragmentVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/SendToEmailFragmentVM.java new file mode 100644 index 000000000..8638f8719 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/SendToEmailFragmentVM.java @@ -0,0 +1,106 @@ +package com.twine.colorcapture.views.sendtoemail; + +import com.squareup.otto.Bus; +import com.twine.colorcapture.core.Task; +import com.twine.colorcapture.dialogs.progress.ProgressDialogVM; +import com.twine.colorcapture.models.ColorResult; +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.notification.INotificationProvider; +import com.twine.colorcapture.settings.SettingsManager; +import com.twine.colorcapture.web.ITCCService; +import com.twine.colorcapture.web.messages.ResultByEmailRequest; + +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; + +import static br.com.zbra.androidlinq.Linq.stream; + +public class SendToEmailFragmentVM extends ViewModelBase implements INavigationObjectReceiver +{ + private INavigationProvider navigationProvider; + private INotificationProvider notificationProvider; + private ITCCService tccService; + + public RelayCommand sendCommand; + public ColorResult colorResult; + public DependencyProperty to; + public DependencyProperty message; + + public SendToEmailFragmentVM(Bus eventBus, INavigationProvider navigationProvider, INotificationProvider notificationProvider, ITCCService tccService) + { + this.navigationProvider = navigationProvider; + this.notificationProvider = notificationProvider; + this.tccService = tccService; + + to = new DependencyProperty<>(""); + message = new DependencyProperty<>(""); + + sendCommand = new RelayCommand(this::handleSendCommand); + } + + private void handleSendCommand() + { + view.validateFields((valid) -> + { + if (valid) + { + AtomicBoolean abort = new AtomicBoolean(); + + ProgressDialogVM vm = notificationProvider.showProgress("Send to email", "Sending color result to " + to.get(), (x) -> + { + abort.set(true); + }); + + new Task.TaskBuilder().setAction(() -> + { + ResultByEmailRequest request = new ResultByEmailRequest(); + request.setDetectionResponse(colorResult.getDetectionResponse()); + request.setTo(to.get()); + request.setFrom(SettingsManager.getInstance().getEmail()); + request.setMessage(message.get()); + tccService.sendResultByEmail(request); + }).setError((ex) -> + { + if (!abort.get()) + { + invokeUI(() -> + { + vm.close(); + notificationProvider.showError("Send to email", "Something bad happened. Please try again later.", (x) -> + { + }); + }); + } + }).setContinueWith(() -> + { + if (!abort.get()) + { + List emails = SettingsManager.getInstance().getLastEmails(); + + if (!stream(emails).any(x -> x.equals(to.get().trim()))) + { + emails.add(to.get().trim()); + SettingsManager.save(); + } + + vm.close(); + notificationProvider.showSuccess("Send to email", "Your detected color result is on its way!", (x) -> + { + closeActivity(); + }); + } + }).build().start(); + } + }); + } + + @Override + public void onNavigationObjectReceived(ColorResult colorResult) + { + this.colorResult = colorResult; + } +} 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 48f2f7a28..8e39fff8e 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 @@ -25,4 +25,8 @@ public interface ITCCService boolean isRegistered(); List getOrganizationMachines(); + + void setRegistered(boolean registered); + + void setOrganizationMachines(List organizationMachines); } 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 13a27bd34..b56eead39 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 @@ -219,4 +219,14 @@ public class TCCService implements ITCCService { return organizationMachines; } + + public void setRegistered(boolean registered) + { + isRegistered = registered; + } + + public void setOrganizationMachines(List organizationMachines) + { + this.organizationMachines = organizationMachines; + } } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/activity_send_to_email.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/activity_send_to_email.xml deleted file mode 100644 index 22daa7b14..000000000 --- a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/activity_send_to_email.xml +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/email_list_item.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/email_list_item.xml new file mode 100644 index 000000000..b88603a1a --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/email_list_item.xml @@ -0,0 +1,15 @@ + + + \ No newline at end of file diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_send_to_email.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_send_to_email.xml new file mode 100644 index 000000000..f1c00d44e --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_send_to_email.xml @@ -0,0 +1,176 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/values/styles.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/values/styles.xml index aaf895d46..c283a135d 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/res/values/styles.xml +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/values/styles.xml @@ -11,11 +11,16 @@ - - - - - #ffffffff + + @color/colorPrimaryBackground + @color/colorDarkBackground + @color/colorGradientAccent2 + @color/white + + + -- cgit v1.3.1