aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Android_Studio
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2019-04-11 19:39:56 +0300
committerRoy Ben-Shabat <Roy@Twine-s.com>2019-04-11 19:39:56 +0300
commit2aa2afca5b09d465e8bf683af232cfe366abf7d4 (patch)
tree20749d38e1200ddb89271c0670dbb51e9b5af71f /Software/Android_Studio
parentbb2090f2156464ad5a075666e69ec27e23dad23a (diff)
downloadTango-2aa2afca5b09d465e8bf683af232cfe366abf7d4.tar.gz
Tango-2aa2afca5b09d465e8bf683af232cfe366abf7d4.zip
Working on TCC..
Diffstat (limited to 'Software/Android_Studio')
-rw-r--r--Software/Android_Studio/ColorCapture/app/build.gradle1
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dagger/ViewModelsModule.java6
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/welcome/WelcomeDialogVM.java10
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/DialogBase.java49
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/DialogViewModelBase.java30
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/FragmentBase.java5
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/ViewModelBase.java20
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/AndroidNavigationProvider.java91
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/notification/AndroidNotificationProvider.java7
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/notification/INotificationProvider.java5
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/CaptureFragment.java248
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/CaptureFragmentVM.java83
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/ICaptureFragment.java6
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivity.java1
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivityVM.java1
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/got_it.pngbin0 -> 8625 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/got_it.pngbin0 -> 5061 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/got_it.pngbin0 -> 12540 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/got_it.pngbin0 -> 21131 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/got_it.pngbin0 -> 31440 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable/border_gradient.xml8
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable/progress_ring_background.xml28
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_capture.xml60
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/values/colors.xml12
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/values/strings.xml2
-rw-r--r--Software/Android_Studio/ColorCapture/settings.gradle2
26 files changed, 476 insertions, 199 deletions
diff --git a/Software/Android_Studio/ColorCapture/app/build.gradle b/Software/Android_Studio/ColorCapture/app/build.gradle
index 6f56df4f6..e9f386b96 100644
--- a/Software/Android_Studio/ColorCapture/app/build.gradle
+++ b/Software/Android_Studio/ColorCapture/app/build.gradle
@@ -81,5 +81,6 @@ dependencies {
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
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'
}
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 188089553..0fecad4d8 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
@@ -49,13 +49,13 @@ public class ViewModelsModule
@Singleton
public CaptureFragmentVM provideCaptureFragmentVM(Bus eventBus, INotificationProvider notificationProvider, INavigationProvider navigationProvider, ITCCService tccService)
{
- return new CaptureFragmentVM(tccService, navigationProvider);
+ return new CaptureFragmentVM(tccService, navigationProvider, notificationProvider);
}
@Provides
@Singleton
- public WelcomeDialogVM provideWelcomeDialogVM(INotificationProvider notificationProvider)
+ public WelcomeDialogVM provideWelcomeDialogVM()
{
- return new WelcomeDialogVM(notificationProvider);
+ return new WelcomeDialogVM();
}
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/welcome/WelcomeDialogVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/welcome/WelcomeDialogVM.java
index f89ef2559..acfc08e05 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/welcome/WelcomeDialogVM.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/welcome/WelcomeDialogVM.java
@@ -2,7 +2,6 @@ package com.twine.colorcapture.dialogs.welcome;
import com.twine.colorcapture.mvvm.DialogViewModelBase;
import com.twine.colorcapture.mvvm.RelayCommand;
-import com.twine.colorcapture.notification.INotificationProvider;
import javax.inject.Inject;
@@ -11,9 +10,8 @@ public class WelcomeDialogVM extends DialogViewModelBase
public RelayCommand startCommand;
@Inject
- public WelcomeDialogVM(INotificationProvider notificationProvider)
+ public WelcomeDialogVM()
{
- super(notificationProvider);
startCommand = new RelayCommand(this::close);
}
@@ -21,4 +19,10 @@ public class WelcomeDialogVM extends DialogViewModelBase
{
return "Hi Roy";
}
+
+ @Override
+ protected void onBackPressed()
+ {
+ super.onBackPressed();
+ }
}
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 e17fb7724..8fa1e7ba1 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
@@ -2,6 +2,7 @@ package com.twine.colorcapture.mvvm;
import android.app.Dialog;
import android.app.DialogFragment;
+import android.content.DialogInterface;
import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
import android.graphics.Color;
@@ -12,18 +13,19 @@ import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-
import com.twine.colorcapture.R;
-
+import com.twine.colorcapture.core.IAction1;
import java.lang.reflect.Method;
-
import javax.inject.Inject;
-
import butterknife.ButterKnife;
public abstract class DialogBase<BindingView extends ViewDataBinding, VM extends DialogViewModelBase> extends DialogFragment
{
+ private boolean isUserDismiss;
+ private IAction1<VM> onDismissListener;
+
+
/**
* The Vm.
*/
@@ -60,6 +62,12 @@ public abstract class DialogBase<BindingView extends ViewDataBinding, VM extends
method = binding.getClass().getDeclaredMethod("setVm", vm.getClass());
method.invoke(binding, vm);
+ vm.setCloseAction(() ->
+ {
+ isUserDismiss = true;
+ dismiss();
+ });
+
ButterKnife.bind(this, binding.getRoot());
return binding.getRoot();
@@ -72,21 +80,29 @@ public abstract class DialogBase<BindingView extends ViewDataBinding, VM extends
}
@Override
+ public void onDismiss(DialogInterface dialog)
+ {
+ super.onDismiss(dialog);
+
+ if (!isUserDismiss)
+ {
+ vm.notifyBackpressed();
+ }
+
+ isUserDismiss = false;
+
+ if (onDismissListener != null)
+ {
+ onDismissListener.invoke(vm);
+ }
+ }
+
+ @Override
public void onStart()
{
super.onStart();
getDialog().getWindow().setBackgroundDrawable(getActivity().getDrawable(R.color.colorBlueMask));
-
-
-// Dialog dialog = getDialog();
-// if (dialog != null)
-// {
-// int width = ViewGroup.LayoutParams.WRAP_CONTENT;
-// int height = ViewGroup.LayoutParams.WRAP_CONTENT;
-// dialog.getWindow().setLayout(width, height);
-// dialog.getWindow().setA
-// }
}
public abstract int getLayoutId();
@@ -97,4 +113,9 @@ public abstract class DialogBase<BindingView extends ViewDataBinding, VM extends
{
return vm;
}
+
+ public void setOnDismissListener(IAction1<VM> onDismissListener)
+ {
+ this.onDismissListener = onDismissListener;
+ }
}
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 77c044178..b1fe7b8ec 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
@@ -1,18 +1,36 @@
package com.twine.colorcapture.mvvm;
-import com.twine.colorcapture.notification.INotificationProvider;
+import com.twine.colorcapture.core.IAction;
+
+import java.io.IOException;
public abstract class DialogViewModelBase extends ViewModelBase
{
- protected INotificationProvider notificationProvider;
+ private IAction closeAction;
- public DialogViewModelBase(INotificationProvider notificationProvider)
+ public void close()
{
- this.notificationProvider = notificationProvider;
+ try
+ {
+ closeAction.invoke();
+ } catch (IOException e)
+ {
+ e.printStackTrace();
+ }
}
- public void close()
+ public void setCloseAction(IAction action)
+ {
+ closeAction = action;
+ }
+
+ public void notifyBackpressed()
{
- notificationProvider.closeDialog();
+ onBackPressed();
+ }
+
+ protected void onBackPressed()
+ {
+
}
}
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 48d970a6c..12520c28e 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
@@ -167,4 +167,9 @@ public abstract class FragmentBase<BindingView extends ViewDataBinding, VM exten
{
}
+
+ public VM getVM()
+ {
+ return vm;
+ }
}
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 7edead907..0f426c912 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
@@ -54,4 +54,24 @@ public abstract class ViewModelBase<T extends IView> extends ExtendedObject
}
}
}
+
+ protected void onNavigatedTo()
+ {
+
+ }
+
+ protected void onNavigatedFrom()
+ {
+
+ }
+
+ public void notifyNavigatedTo()
+ {
+ onNavigatedTo();
+ }
+
+ public void notifyNavigatedFrom()
+ {
+ onNavigatedFrom();
+ }
}
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 70dd04372..2518a3109 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
@@ -5,6 +5,7 @@ import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Context;
import android.content.Intent;
+import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
@@ -46,25 +47,25 @@ public class AndroidNavigationProvider extends ExtendedObject implements INaviga
this.activity = activity;
this.fragment_container = fragmentContainerId;
}
-
+
@Override
public void navigateTo(NavigationFragment fragmentValue, boolean addToHistory)
{
- navigateTo(fragmentValue.name(),addToHistory);
+ navigateTo(fragmentValue.name(), addToHistory);
}
-
+
@Override
public void navigateTo(NavigationFragment fragmentValue, IAction1<FragmentBase> onCreateListener, boolean addToHistory)
{
- navigateTo(fragmentValue.name(), onCreateListener,addToHistory);
+ navigateTo(fragmentValue.name(), onCreateListener, addToHistory);
}
@Override
public void navigateTo(String fragmentName, boolean addToHistory)
{
- navigateTo(fragmentName, null,addToHistory);
+ navigateTo(fragmentName, null, addToHistory);
}
-
+
@Override
public void navigateTo(String fragmentName, IAction1<FragmentBase> onCreateListener, boolean addToHistory)
{
@@ -84,83 +85,73 @@ public class AndroidNavigationProvider extends ExtendedObject implements INaviga
int newIndex = values.indexOf(NavigationFragment.valueOf(fragmentName));
int oldIndex = values.indexOf(NavigationFragment.valueOf(currentFragmentName));
- if (oldIndex > newIndex) {
+ if (oldIndex > newIndex)
+ {
reverseAnimation = true;
}
}
String originalName = fragmentName;
fragmentName = basePackagePath + "." + fragmentName.toLowerCase() + "." + fragmentName + "Fragment";
-
+
FragmentManager fragmentManager = activity.getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
FragmentBase fragment;
-
+
fragment = (FragmentBase) fragmentManager.findFragmentByTag(fragmentName);
-
+
if (fragment == null)
{
try
{
fragment = (FragmentBase) Class.forName(fragmentName).newInstance();
- }
- catch (Exception ex)
+ } catch (Exception ex)
{
//logManager.log(ex,"Fragment " + fragmentName + " not found.");
return;
}
}
-// Slide enterSlide = new Slide();
-// enterSlide.setSlideEdge(Gravity.END);
-// enterSlide.setDuration(300);
-//
-// Fade enterFade = new Fade(Fade.IN);
-// enterFade.setDuration(300);
-//
-// TransitionSet enterGroup = new TransitionSet();
-// enterGroup.addTransition(enterSlide);
-// enterGroup.addTransition(enterFade);
-//
-// Slide exitSlide = new Slide();
-// Fade exitFade = new Fade(Fade.OUT);
-//
-// exitSlide.setSlideEdge(Gravity.START);
-// exitSlide.setDuration(300);
-// exitFade.setDuration(300);
-//
-// TransitionSet exitGroup = new TransitionSet();
-// exitGroup.addTransition(exitSlide);
-// exitGroup.addTransition(exitFade);
-//
-// fragment.setEnterTransition(enterGroup);
-// fragment.setExitTransition(exitGroup);
-
fragment.setOnCreateListener(onCreateListener);
-
+
if (!isFirst)
{
if (!reverseAnimation)
{
- fragmentTransaction.setCustomAnimations(R.animator.slide_out_right, R.animator.slide_in_right , R.animator.slide_in_left, R.animator.slide_out_left);
+ fragmentTransaction.setCustomAnimations(R.animator.slide_out_right, R.animator.slide_in_right, R.animator.slide_in_left, R.animator.slide_out_left);
}
else
{
fragmentTransaction.setCustomAnimations(R.animator.slide_in_left, R.animator.slide_out_left, R.animator.slide_out_right, R.animator.slide_in_right);
}
}
-
+
isFirst = false;
-
+
fragmentTransaction.replace(fragment_container, fragment);
-
+
if (addToHistory)
{
fragmentTransaction.addToBackStack(fragmentName);
}
-
+
fragmentTransaction.commit();
+ final FragmentBase fragmentTo = fragment;
+ final FragmentBase fragmentFrom = currentFragment;
+
+ new Handler().postDelayed(() ->
+ {
+
+ fragmentTo.getVM().notifyNavigatedTo();
+
+ if (fragmentFrom != null && !fragmentTo.getClass().getSimpleName().equals(fragmentFrom.getClass().getSimpleName()))
+ {
+ fragmentFrom.getVM().notifyNavigatedFrom();
+ }
+
+ },300);
+
// try
// {
// //noinspection ConstantConditions
@@ -169,8 +160,9 @@ public class AndroidNavigationProvider extends ExtendedObject implements INaviga
// {
// logManager.log(ex);
// }
-
+
currentFragment = fragment;
+
currentFragmentName = originalName;
NavigationFragment f = NavigationFragment.valueOf(originalName);
@@ -184,19 +176,22 @@ public class AndroidNavigationProvider extends ExtendedObject implements INaviga
@Override
public void navigateTo(NavigationActivity activityValue, boolean addToHistory)
{
- String name = activityValue.name();
+ String name = activityValue.name();
String activityName = basePackagePath + "." + name.toLowerCase() + "." + name + "Activity";
- try {
+ try
+ {
Class cls = Class.forName(activityName);
Intent intent = new Intent(context, cls);
- if (!addToHistory) {
+ if (!addToHistory)
+ {
intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NO_HISTORY);
}
context.startActivity(intent);
- } catch (ClassNotFoundException e) {
+ } catch (ClassNotFoundException e)
+ {
e.printStackTrace();
}
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/notification/AndroidNotificationProvider.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/notification/AndroidNotificationProvider.java
index f3081754c..47bf069fc 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/notification/AndroidNotificationProvider.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/notification/AndroidNotificationProvider.java
@@ -8,8 +8,10 @@ import android.support.v7.app.AlertDialog;
import android.widget.Toast;
import com.twine.colorcapture.core.IAction;
+import com.twine.colorcapture.core.IAction1;
import com.twine.colorcapture.dialogs.welcome.WelcomeDialog;
import com.twine.colorcapture.mvvm.DialogBase;
+import com.twine.colorcapture.mvvm.DialogViewModelBase;
import com.twine.colorcapture.mvvm.IView;
@@ -45,8 +47,9 @@ public class AndroidNotificationProvider implements INotificationProvider
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
}
+ @SuppressWarnings("unchecked")
@Override
- public void showDialog(DialogBase dialog)
+ public <VM extends DialogViewModelBase> void showDialog(DialogBase dialog, IAction1<VM> onDismiss)
{
lastDialog = dialog;
FragmentTransaction ft = activity.getFragmentManager().beginTransaction();
@@ -56,6 +59,8 @@ public class AndroidNotificationProvider implements INotificationProvider
}
ft.addToBackStack(null);
+ dialog.setOnDismissListener(onDismiss);
+
//show the dialog.
dialog.show(ft, "dialog");
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/notification/INotificationProvider.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/notification/INotificationProvider.java
index 7f972f3a3..a40aeaac4 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/notification/INotificationProvider.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/notification/INotificationProvider.java
@@ -3,7 +3,9 @@ package com.twine.colorcapture.notification;
import android.app.Activity;
import com.twine.colorcapture.core.IAction;
+import com.twine.colorcapture.core.IAction1;
import com.twine.colorcapture.mvvm.DialogBase;
+import com.twine.colorcapture.mvvm.DialogViewModelBase;
import com.twine.colorcapture.mvvm.IView;
@@ -24,9 +26,10 @@ public interface INotificationProvider
/**
* Display the specified dialog.
+ *
* @param dialog
*/
- void showDialog(DialogBase dialog);
+ <VM extends DialogViewModelBase> void showDialog(DialogBase dialog, IAction1<VM> onDismiss);
/**
* Closes the last dialog.
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 f09e6448f..54af2c31a 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
@@ -41,58 +41,53 @@ import com.yanzhenjie.zbar.SymbolSet;
import java.io.IOException;
import java.util.List;
+import butterknife.BindView;
+
@SuppressWarnings("ALL")
public class CaptureFragment extends FragmentBase<FragmentCaptureBinding, CaptureFragmentVM> implements ICaptureFragment, SurfaceHolder.Callback, Camera.PreviewCallback
{
private Camera camera = null;
- private ImageView imagePreview = null;
private ImageView imagewrappedPreview = null;
private int imageFormat;
private int cameraId;
- private Handler mHandler;
private SurfaceView surfaceView;
private ICaptureFragmentListener listener;
private IAction1<Boolean> cameraAccessAction;
+
+ @BindView(R.id.imageViewResultFrame)
+ ImageView imageViewResultFrame;
+
ObjectAnimator animator;
View scannerLayout;
View scannerBar;
-
+ SurfaceHolder surfaceHolder;
+ boolean isCameraStarted;
+
public CaptureFragment()
{
// Required empty public constructor
- mHandler = new Handler(Looper.getMainLooper());
}
-
+
@Override
protected void onCreated()
{
super.onCreated();
- requestCameraAccess((granted) ->
- {
- if (granted)
- {
- imagePreview = getView().findViewById(R.id.imagePreview);
- imagewrappedPreview = getView().findViewById(R.id.imagePreviewWrapped);
+ imagewrappedPreview = getView().findViewById(R.id.imagePreviewWrapped);
- surfaceView = new SurfaceView(this.getActivity());
+ surfaceView = new SurfaceView(this.getActivity());
- SurfaceHolder camHolder = surfaceView.getHolder();
- camHolder.addCallback(this);
- camHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
+ SurfaceHolder camHolder = surfaceView.getHolder();
+ camHolder.addCallback(this);
+ camHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
- FrameLayout surfraceFrame = (FrameLayout) getView().findViewById(R.id.surfaceViewFrame);
+ FrameLayout surfraceFrame = (FrameLayout) getView().findViewById(R.id.surfaceViewFrame);
- startScanAnimation();
+ startScanAnimation();
- new Handler().postDelayed(() ->
- {
- surfraceFrame.addView(surfaceView, new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
- }, 500);
- }
- });
+ surfraceFrame.addView(surfaceView, new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
}
-
+
private void startScanAnimation()
{
//Scanner overlay
@@ -105,55 +100,55 @@ public class CaptureFragment extends FragmentBase<FragmentCaptureBinding, Captur
@Override
public void onGlobalLayout()
{
-
+
scannerLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN)
{
scannerLayout.getViewTreeObserver().
removeGlobalOnLayoutListener(this);
-
+
}
else
{
scannerLayout.getViewTreeObserver().
removeOnGlobalLayoutListener(this);
}
-
+
float destination = (float) (scannerLayout.getY() +
scannerLayout.getHeight());
-
+
animator = ObjectAnimator.ofFloat(scannerBar, "translationY",
scannerLayout.getY(),
destination);
-
+
animator.setRepeatMode(ValueAnimator.REVERSE);
animator.setRepeatCount(ValueAnimator.INFINITE);
animator.setInterpolator(new AccelerateDecelerateInterpolator());
animator.setDuration(2000);
animator.start();
-
+
}
});
}
-
+
@Override
protected int getLayoutId()
{
return R.layout.fragment_capture;
}
-
+
@Override
protected void inject()
{
App.getComponent().inject(this);
}
-
+
@Override
public String getTitle()
{
return "Capture";
}
-
+
@Override
public void onPreviewFrame(byte[] data, Camera camera)
{
@@ -163,82 +158,25 @@ public class CaptureFragment extends FragmentBase<FragmentCaptureBinding, Captur
listener.onFrameAvailable(data);
}
}
-
+
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder)
{
- 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)
- {
- cameraId = i;
- break;
- }
- }
-
- camera = Camera.open(cameraId);
-
- try
- {
- camera.setPreviewDisplay(surfaceHolder);
- camera.setPreviewCallback(this);
- }
- catch (IOException e)
- {
- camera.release();
- camera = null;
- }
+ this.surfaceHolder = surfaceHolder;
}
-
+
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2)
{
- Camera.Parameters parameters;
-
- setCameraDisplayOrientation();
-
- parameters = camera.getParameters();
-
- List<Size> sizes = parameters.getSupportedPreviewSizes();
-
- for (Camera.Size size : parameters.getSupportedPreviewSizes())
- {
- if (size.width >= 1200 & size.width <= 1280)
- {
- parameters.setPreviewSize(1280, 720);
- parameters.setPictureSize(1280, 720);
- break;
- }
- }
-
- imageFormat = parameters.getPreviewFormat();
-
- parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
-
- camera.setParameters(parameters);
-
- parameters = camera.getParameters();
-
- int width = parameters.getPreviewSize().width;
- int height = parameters.getPreviewSize().height;
-
- listener.onPreviewSettingsAvailable(width, height);
-
- camera.startPreview();
+ this.surfaceHolder = surfaceHolder;
}
-
+
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder)
{
- camera.setPreviewCallback(null);
- camera.stopPreview();
- camera.release();
- camera = null;
+ this.surfaceHolder = surfaceHolder;
}
-
+
private void setCameraDisplayOrientation()
{
android.hardware.Camera.CameraInfo info =
@@ -261,7 +199,7 @@ public class CaptureFragment extends FragmentBase<FragmentCaptureBinding, Captur
degrees = 270;
break;
}
-
+
int result;
if (info.facing == CameraInfo.CAMERA_FACING_FRONT)
{
@@ -273,20 +211,122 @@ public class CaptureFragment extends FragmentBase<FragmentCaptureBinding, Captur
result = (info.orientation - degrees + 360) % 360;
}
camera.setDisplayOrientation(result);
-
+
}
-
+
@Override
public void setListener(ICaptureFragmentListener listener)
{
this.listener = listener;
}
-
+
@Override
public void onFrameResult(Bitmap frameBitmap, Bitmap correctedBitmap, String barcode)
{
- imagePreview.setImageBitmap(frameBitmap);
- imagewrappedPreview.setImageBitmap(correctedBitmap);
+ getActivity().runOnUiThread(() ->
+ {
+ imagewrappedPreview.setImageBitmap(correctedBitmap);
+ imageViewResultFrame.setImageBitmap(frameBitmap);
+ });
+ }
+
+ @Override
+ public void startCamera()
+ {
+ if (isCameraStarted) return;
+
+ requestCameraAccess((granted) ->
+ {
+ if (granted)
+ {
+ new TaskBuilder().setAction(() ->
+ {
+
+ try
+ {
+ 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)
+ {
+ cameraId = i;
+ break;
+ }
+ }
+
+ camera = Camera.open(cameraId);
+
+
+ camera.setPreviewDisplay(surfaceHolder);
+ camera.setPreviewCallback(this);
+
+ Camera.Parameters parameters;
+
+ setCameraDisplayOrientation();
+
+ parameters = camera.getParameters();
+
+ List<Size> sizes = parameters.getSupportedPreviewSizes();
+
+ for (Camera.Size size : parameters.getSupportedPreviewSizes())
+ {
+ if (size.width >= 1200 & size.width <= 1280)
+ {
+ parameters.setPreviewSize(1280, 720);
+ parameters.setPictureSize(1280, 720);
+ break;
+ }
+ }
+
+ imageFormat = parameters.getPreviewFormat();
+
+ parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
+
+ camera.setParameters(parameters);
+
+ parameters = camera.getParameters();
+
+ int width = parameters.getPreviewSize().width;
+ int height = parameters.getPreviewSize().height;
+
+ listener.onPreviewSettingsAvailable(width, height);
+
+ camera.startPreview();
+
+ isCameraStarted = true;
+ } catch (Exception ex)
+ {
+ camera.release();
+ camera = null;
+ }
+
+ }).build().start();
+ }
+ });
+ }
+
+ @Override
+ public void stopCamera()
+ {
+ if (isCameraStarted)
+ {
+ new TaskBuilder().setAction(() ->
+ {
+ camera.setPreviewCallback(null);
+ camera.stopPreview();
+ camera.release();
+ camera = null;
+ isCameraStarted = false;
+ }).build().start();
+ }
+ }
+
+ @Override
+ public boolean isCameraStarted()
+ {
+ return isCameraStarted;
}
public void requestCameraAccess(IAction1<Boolean> action)
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 3f173c530..e566fe159 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,16 +1,20 @@
package com.twine.colorcapture.views.capture;
import android.graphics.Bitmap;
+import android.media.AudioManager;
+import android.media.ToneGenerator;
import android.util.Log;
import com.twine.colorcapture.core.Task.TaskBuilder;
+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.notification.INotificationProvider;
import com.twine.colorcapture.opencv.ImageProcessor;
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;
@@ -20,7 +24,6 @@ import java.io.IOException;
public class CaptureFragmentVM extends ViewModelBase<ICaptureFragment> implements ICaptureFragmentListener
{
-
private ImageProcessor processor;
private Bitmap frameBitmap = null;
private Bitmap sampleBitmap = null;
@@ -34,10 +37,19 @@ public class CaptureFragmentVM extends ViewModelBase<ICaptureFragment> implement
private ITCCService tccService;
private DefinitionResponse definition;
private INavigationProvider navigationProvider;
+ private INotificationProvider notificationProvider;
+ private boolean startDialogShown;
+ private boolean preventDetection;
+
+ public DependencyProperty<Boolean> isCardDetected;
+ public DependencyProperty<Boolean> isDetecting;
- public CaptureFragmentVM(ITCCService tccService, INavigationProvider navigationProvider)
+ public CaptureFragmentVM(ITCCService tccService, INavigationProvider navigationProvider, INotificationProvider notificationProvider)
{
+ isCardDetected = new DependencyProperty<Boolean>();
+ isDetecting = new DependencyProperty<Boolean>();
this.navigationProvider = navigationProvider;
+ this.notificationProvider = notificationProvider;
this.tccService = tccService;
processor = new ImageProcessor();
@@ -61,7 +73,7 @@ public class CaptureFragmentVM extends ViewModelBase<ICaptureFragment> implement
@Override
public void onFrameAvailable(byte[] frame)
{
- if (!isProcessing)
+ if (!isProcessing && !preventDetection)
{
isProcessing = true;
@@ -111,15 +123,41 @@ public class CaptureFragmentVM extends ViewModelBase<ICaptureFragment> implement
Log.d("BARCODE", "Barcode text is: " + text);
- DetectionResponse response = tccService.detect(sampleBitmap,barcode);
- DetectionResponse a = response;
+ ToneGenerator toneGen1 = new ToneGenerator(AudioManager.STREAM_MUSIC, 100);
+ toneGen1.startTone(ToneGenerator.TONE_CDMA_PIP,150);
+
+ isCardDetected.set(true);
+ preventDetection = true;
+ view.onFrameResult(frameBitmap, sampleBitmap, barcode);
+ view.stopCamera();
+
+ try
+ {
+ Thread.sleep(2000);
+ } catch (InterruptedException e)
+ {
+ e.printStackTrace();
+ }
+
+ isDetecting.set(true);
+
+ //DetectionResponse response = tccService.detect(sampleBitmap, barcode);
+
+ try
+ {
+ Thread.sleep(5000);
+ } catch (InterruptedException e)
+ {
+ e.printStackTrace();
+ }
+
+ isDetecting.set(false);
}
}
})
.setContinueWith(() ->
{
- view.onFrameResult(frameBitmap, sampleBitmap, barcode);
isProcessing = false;
})
.setError((ex) ->
@@ -143,4 +181,35 @@ public class CaptureFragmentVM extends ViewModelBase<ICaptureFragment> implement
framePixels = new int[previewWidth * previewHeight];
samplePixels = new int[definition.getSampleWidth() * definition.getSampleHeight()];
}
+
+ @Override
+ protected void onNavigatedTo()
+ {
+ super.onNavigatedTo();
+
+ preventDetection = false;
+
+ if (!startDialogShown)
+ {
+ startDialogShown = true;
+
+ notificationProvider.showDialog(new WelcomeDialog(), (vm) ->
+ {
+ view.startCamera();
+ isCardDetected.set(false);
+ });
+ }
+ else
+ {
+ view.startCamera();
+ isCardDetected.set(false);
+ }
+ }
+
+ @Override
+ protected void onNavigatedFrom()
+ {
+ super.onNavigatedFrom();
+ view.stopCamera();
+ }
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/ICaptureFragment.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/ICaptureFragment.java
index 434e5b10d..162de4b2e 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/ICaptureFragment.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/ICaptureFragment.java
@@ -9,6 +9,12 @@ public interface ICaptureFragment extends IView
void setListener(ICaptureFragmentListener listener);
void onFrameResult(Bitmap frameBitmap,Bitmap correctedBitmap,String barcode);
+
+ void startCamera();
+
+ void stopCamera();
+
+ boolean isCameraStarted();
interface ICaptureFragmentListener
{
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 f50d4a5c4..a5d82de20 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
@@ -1,6 +1,7 @@
package com.twine.colorcapture.views.main;
import android.app.Fragment;
+import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivityVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivityVM.java
index b5ddc1c2d..fb34e7edd 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivityVM.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivityVM.java
@@ -54,7 +54,6 @@ public class MainActivityVM extends ViewModelBase<IMainActivity>
protected void onViewAttached(IMainActivity view)
{
super.onViewAttached(view);
- notificationProvider.showDialog(new WelcomeDialog());
}
private void onMyColorsToggled(DependencyProperty<Boolean> booleanDependencyProperty, Boolean value)
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/got_it.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/got_it.png
new file mode 100644
index 000000000..11b9d4644
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/got_it.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/got_it.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/got_it.png
new file mode 100644
index 000000000..fbec6bf93
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/got_it.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/got_it.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/got_it.png
new file mode 100644
index 000000000..46e9288d6
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/got_it.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/got_it.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/got_it.png
new file mode 100644
index 000000000..f3b8ea00f
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/got_it.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/got_it.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/got_it.png
new file mode 100644
index 000000000..a30453a41
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/got_it.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/border_gradient.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/border_gradient.xml
new file mode 100644
index 000000000..90f7fb630
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/border_gradient.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle" >
+
+ <corners android:radius="10dp" />
+ <stroke android:width="8px" android:color="@color/colorGradientAccent1"/>
+
+</shape> \ No newline at end of file
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/progress_ring_background.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/progress_ring_background.xml
new file mode 100644
index 000000000..608296a00
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/progress_ring_background.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<rotate xmlns:android="http://schemas.android.com/apk/res/android"
+ android:pivotX="50%"
+ android:pivotY="50%"
+ android:fromDegrees="0"
+ android:toDegrees="360">
+
+ <shape
+ android:shape="ring"
+ android:innerRadiusRatio="3"
+ android:thicknessRatio="20"
+ android:useLevel="false">
+
+ <size
+ android:width="76dip"
+ android:height="76dip" />
+
+ <gradient
+ android:type="sweep"
+ android:useLevel="false"
+ android:startColor="#161616"
+ android:centerColor="@color/colorGradientAccent1"
+ android:endColor="@color/colorGradientAccent2"
+ android:angle="0"/>
+
+ </shape>
+
+</rotate> \ No newline at end of file
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_capture.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_capture.xml
index a175b87d2..c4b776143 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_capture.xml
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_capture.xml
@@ -5,12 +5,15 @@
<data>
+ <import type="android.view.View"/>
+
<variable
name="vm"
type="com.twine.colorcapture.views.capture.CaptureFragmentVM" />
</data>
<FrameLayout
+ android:background="@color/colorPrimaryBackground"
android:layout_width="match_parent"
android:layout_height="match_parent" tools:context="com.twine.colorcapture.views.capture.CaptureFragment">
@@ -27,11 +30,11 @@
android:layoutDirection="ltr">
<ImageView
- android:id="@+id/imagePreview"
+ android:id="@+id/imageViewResultFrame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
- android:visibility="gone" />
+ android:visibility="@{vm.isCardDetected ? View.VISIBLE : View.GONE}" />
<ImageView
android:id="@+id/imagePreviewWrapped"
@@ -41,7 +44,7 @@
android:layout_alignParentBottom="true"
android:layout_marginEnd="22dp"
android:layout_marginBottom="28dp"
- app:srcCompat="@android:color/black" android:visibility="gone" />
+ android:visibility="gone" />
</RelativeLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
@@ -52,7 +55,7 @@
<View
android:layout_width="match_parent"
android:layout_height="30dp"
- android:background="#9A000000" />
+ android:background="@color/colorCaptureMask" />
<RelativeLayout
@@ -66,7 +69,7 @@
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
- android:background="#9A000000" />
+ android:background="@color/colorCaptureMask" />
<FrameLayout
android:id="@+id/scannerLayout"
@@ -77,7 +80,7 @@
android:layout_toLeftOf="@id/right"
android:layout_toRightOf="@id/left"
android:layout_toStartOf="@+id/right"
- android:background="@drawable/border"
+ android:background="@{vm.isCardDetected ? @drawable/border_gradient : @drawable/border}"
android:orientation="horizontal">
<View
@@ -86,7 +89,8 @@
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:layout_height="5dp"
- android:background="@color/colorPrimary" />
+ android:background="@color/colorPrimary"
+ android:visibility="@{vm.isCardDetected ? View.GONE : View.VISIBLE}"/>
</FrameLayout>
@@ -98,14 +102,14 @@
android:layout_height="match_parent"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
- android:background="#9A000000" />
+ android:background="@color/colorCaptureMask" />
</RelativeLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="100dp"
- android:background="#9A000000"
+ android:background="@color/colorCaptureMask"
android:paddingLeft="40dp"
android:paddingRight="40dp">
@@ -115,9 +119,45 @@
android:gravity="center"
android:textSize="13.4sp"
android:fontFamily="@font/flexo_medium"
- android:text="@string/twine_snap_message" />
+ android:text="@string/twine_snap_message"
+ android:visibility="@{vm.isCardDetected ? View.GONE : View.VISIBLE}"/>
+
+ <ImageView
+ android:layout_width="51dp"
+ android:layout_height="70dp"
+ android:layout_gravity="center"
+ android:src="@drawable/got_it"
+ android:visibility="@{vm.isCardDetected ? View.VISIBLE : View.GONE}"/>
</FrameLayout>
</LinearLayout>
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@color/colorBlueMask"
+ android:visibility="@{vm.isDetecting ? View.VISIBLE : View.GONE}">
+
+ <ProgressBar
+ android:id="@+id/progress"
+ android:layout_centerInParent="true"
+ android:layout_width="80dp"
+ android:layout_height="80dp"
+ android:indeterminate="true"
+ android:indeterminateDrawable="@drawable/progress_ring_background"/>
+
+
+ <android.support.v7.widget.AppCompatTextView
+ android:layout_below="@id/progress"
+ android:layout_centerHorizontal="true"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="20dp"
+ android:gravity="center"
+ android:textSize="13.4sp"
+ android:letterSpacing="0.07"
+ android:fontFamily="@font/flexo_medium"
+ android:text="@string/processing_message"/>
+ </RelativeLayout>
</FrameLayout>
</layout>
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/values/colors.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/values/colors.xml
index d6c70f6c7..5cb322d20 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/values/colors.xml
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/values/colors.xml
@@ -13,4 +13,16 @@
<color name="colorBlueMask">#EB09172A</color>
<color name="colorWhiteMask">#B71D3150</color>
+
+ <color name="colorGradientAccent1">#26d440</color>
+ <color name="colorGradientAccent2">#009fe3</color>
+
+ <color name="colorCaptureMask">#9A091330</color>
+
+ <dimen name="circleProgressRadius">30dp</dimen>
+ <dimen name="circleProgressThickness">3dp</dimen>
+ <color name="circleProgressCompleteStartGradient">@color/colorGradientAccent1</color>
+ <color name="circleProgressCompleteEndGradient">@color/colorGradientAccent2</color>
+ <color name="circleProgressIncompleteStartGradient">#686868</color>
+ <color name="circleProgressIncompleteEndGradient">#686868</color>
</resources>
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/values/strings.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/values/strings.xml
index 841774671..d10b0fa91 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/values/strings.xml
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/values/strings.xml
@@ -11,4 +11,6 @@
</string>
<string name="welcome_go_button">Let\'s start!</string>
<string name="welcome_have_a_twine_card_message"><u>Don’t have a Twine TCC™ card?</u></string>
+
+ <string name="processing_message">Our color algorithm is working on it…</string>
</resources>
diff --git a/Software/Android_Studio/ColorCapture/settings.gradle b/Software/Android_Studio/ColorCapture/settings.gradle
index 48771db44..e7b4def49 100644
--- a/Software/Android_Studio/ColorCapture/settings.gradle
+++ b/Software/Android_Studio/ColorCapture/settings.gradle
@@ -1 +1 @@
-include ':app', ':onboarding'
+include ':app'