From fa8459be63d8f76059d1e71ab86c01e0a13851b5 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Tue, 20 Nov 2018 08:00:12 +0200 Subject: Working on mobile app... --- .../java/com/twine/colorcapture/core/Task.java | 63 ++++++++ .../views/capture/CaptureFragment.java | 162 +++++++++++++-------- .../views/loading/LoadingFragmentVM.java | 29 +++- .../colorcapture/views/main/MainActivity.java | 70 ++++----- .../src/main/res/drawable/gradient_progressbar.xml | 35 +++++ .../app/src/main/res/drawable/ic_viewfinder.xml | 14 ++ .../main/res/drawable/loading_background_brush.xml | 12 ++ .../app/src/main/res/drawable/viewfinder.png | Bin 0 -> 658 bytes .../app/src/main/res/layout/fragment_capture.xml | 66 ++++++++- .../app/src/main/res/layout/fragment_loading.xml | 23 ++- .../app/src/main/res/values/styles.xml | 2 + 11 files changed, 368 insertions(+), 108 deletions(-) create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/Task.java create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable/gradient_progressbar.xml create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable/ic_viewfinder.xml create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable/loading_background_brush.xml create mode 100644 Software/Android_Studio/ColorCapture/app/src/main/res/drawable/viewfinder.png (limited to 'Software/Android_Studio') 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 new file mode 100644 index 000000000..2858fbc3c --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/Task.java @@ -0,0 +1,63 @@ +package com.twine.colorcapture.core; + +import android.os.AsyncTask; + +public class Task extends AsyncTask { + + private IAction action; + private IAction continueWithAction; + + public Task(IAction action) { + this.action = action; + } + + public Task(IAction action, IAction continueWithAction) { + this.action = action; + this.continueWithAction = continueWithAction; + } + + @Override + protected String doInBackground(String... strings) { + action.invoke(); + return null; + } + + @Override + protected void onPostExecute(String s) { + super.onPostExecute(s); + + if (continueWithAction != null) + { + continueWithAction.invoke(); + } + } + + public void start() + { + execute(""); + } + + public static class TaskBuilder + { + private Task task; + private IAction action; + private IAction continueWithAction; + + public TaskBuilder setAction(IAction action) + { + this.action = action; + return this; + } + + public TaskBuilder setContinueWith(IAction action) + { + this.continueWithAction = action; + return this; + } + + public Task build() + { + return new Task(action,continueWithAction); + } + } +} 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 d068a2291..4da196dda 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 @@ -1,32 +1,28 @@ package com.twine.colorcapture.views.capture; -import android.Manifest; -import android.content.pm.PackageManager; +import android.animation.ObjectAnimator; +import android.animation.ValueAnimator; import android.graphics.Bitmap; import android.graphics.ImageFormat; import android.hardware.Camera; import android.hardware.Camera.CameraInfo; import android.hardware.Camera.Size; import android.os.Build; -import android.os.Bundle; import android.os.Handler; import android.os.Looper; -import android.support.annotation.NonNull; -import android.support.v4.app.ActivityCompat; -import android.support.v4.content.ContextCompat; -import android.view.LayoutInflater; import android.view.Surface; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; -import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; +import android.view.ViewTreeObserver; +import android.view.animation.AccelerateDecelerateInterpolator; import android.widget.FrameLayout; import android.widget.ImageView; -import android.widget.Toast; import com.twine.colorcapture.App; import com.twine.colorcapture.R; +import com.twine.colorcapture.core.Task; import com.twine.colorcapture.databinding.FragmentCaptureBinding; import com.twine.colorcapture.mvvm.FragmentBase; import com.twine.colorcapture.opencv.ImageProcessor; @@ -53,50 +49,97 @@ public class CaptureFragment extends FragmentBase + { + surfraceFrame.addView(surfaceView, new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); + },500); + } + + private void startScanAnimation() + { + //Scanner overlay + scannerLayout = getView().findViewById(R.id.scannerLayout); + scannerBar = getView().findViewById(R.id.scannerBar); + animator = null; + ViewTreeObserver vto = scannerLayout.getViewTreeObserver(); + vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @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) { @@ -106,11 +149,11 @@ public class CaptureFragment extends FragmentBase sizes = parameters.getSupportedPreviewSizes(); - + for (Camera.Size size : parameters.getSupportedPreviewSizes()) { if (size.width >= 1200 & size.width <= 1280) @@ -160,30 +203,30 @@ public class CaptureFragment extends FragmentBase + { + bProcessing = true; + processor.ProcessImage(previewWidth, previewHeight, frameData, pixels, wrappedPixels); + bitmap.setPixels(pixels, 0, previewHeight, 0, 0, previewHeight, previewWidth); + wrappedBitmap.setPixels(wrappedPixels, 0, 300, 0, 0, 300, 330); + }) + .setContinueWith(() -> + { + imagePreview.setImageBitmap(bitmap); + imagewrappedPreview.setImageBitmap(wrappedBitmap); + bProcessing = false; + }) + .build() + .start(); + } } \ No newline at end of file diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/loading/LoadingFragmentVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/loading/LoadingFragmentVM.java index fd80e792a..49b8c07f9 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/loading/LoadingFragmentVM.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/loading/LoadingFragmentVM.java @@ -1,8 +1,10 @@ package com.twine.colorcapture.views.loading; +import android.os.CountDownTimer; import android.os.Handler; import com.squareup.otto.Bus; +import com.twine.colorcapture.mvvm.DependencyProperty; import com.twine.colorcapture.mvvm.ViewModelBase; import com.twine.colorcapture.navigation.INavigationProvider; import com.twine.colorcapture.navigation.NavigationView; @@ -13,25 +15,44 @@ import javax.inject.Inject; public class LoadingFragmentVM extends ViewModelBase { private INavigationProvider navigationProvider; + public DependencyProperty loadingProgress; @Inject public LoadingFragmentVM(Bus eventBus, INotificationProvider notificationProvider, INavigationProvider navigationProvider) { this.navigationProvider = navigationProvider; - + + loadingProgress = new DependencyProperty<>(0); } @Override protected void onViewAttached(ILoadingFragment view) { super.onViewAttached(view); + + new CountDownTimer(2000,50) + { + + @Override + public void onTick(long l) { + + loadingProgress.set(loadingProgress.get() + 50); + } + + @Override + public void onFinish() { + + loadingProgress.set(2000); + navigationProvider.navigateTo(NavigationView.Home, false); + } + }.start(); - new Handler().postDelayed(() -> +/* new Handler().postDelayed(() -> { - navigationProvider.navigateTo(NavigationView.Home, false); + - }, 2000); + }, 2000);*/ } } 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 6d8e4d5ca..46d3f1679 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 @@ -21,6 +21,8 @@ import javax.inject.Inject; public class MainActivity extends ActivityBase implements IMainActivity { + private boolean displayOnboarding = false; + @Inject public INavigationProvider navigationProvider; @@ -36,40 +38,42 @@ public class MainActivity extends ActivityBase elements = new ArrayList<>(); - elements.add(scr1); - elements.add(scr2); - elements.add(scr3); - - PaperOnboardingFragment onboardingFragment = PaperOnboardingFragment.newInstance(elements); - - onboardingFragment.setOnRightOutListener(() -> - { - - navigationProvider.navigateTo(NavigationView.Loading, false); - - }); - - FragmentTransaction fragmentTransaction = this.getFragmentManager().beginTransaction(); - fragmentTransaction.add(R.id.fragment_container, onboardingFragment); - fragmentTransaction.commit(); - + navigationProvider.registerNavigationActivity(this, R.id.fragment_container, "com.twine.colorcapture.views"); + + if (displayOnboarding) { + PaperOnboardingPage scr1 = new PaperOnboardingPage("Welcome to true color capture", + "All hotels and hostels are sorted by hospitality rating", + Color.parseColor("#678FB4"), R.drawable.hand_fabric, R.drawable.onboarding_pager_round_icon); + PaperOnboardingPage scr2 = new PaperOnboardingPage("Banks", + "We carefully verify all banks before add them into the app", + Color.parseColor("#65B0B4"), R.drawable.hand_phone, R.drawable.onboarding_pager_round_icon); + PaperOnboardingPage scr3 = new PaperOnboardingPage("Stores", + "All local stores are categorized for your convenience", + Color.parseColor("#9B90BC"), R.drawable.take_picture, R.drawable.onboarding_pager_round_icon); + + ArrayList elements = new ArrayList<>(); + elements.add(scr1); + elements.add(scr2); + elements.add(scr3); + + PaperOnboardingFragment onboardingFragment = PaperOnboardingFragment.newInstance(elements); + + onboardingFragment.setOnRightOutListener(() -> + { + + navigationProvider.navigateTo(NavigationView.Loading, false); + + }); + + FragmentTransaction fragmentTransaction = this.getFragmentManager().beginTransaction(); + fragmentTransaction.add(R.id.fragment_container, onboardingFragment); + fragmentTransaction.commit(); + } + else + { + navigationProvider.navigateTo(NavigationView.Loading, false); + } } @Override diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/gradient_progressbar.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/gradient_progressbar.xml new file mode 100644 index 000000000..c60c24357 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/gradient_progressbar.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/ic_viewfinder.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/ic_viewfinder.xml new file mode 100644 index 000000000..b4e83acad --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/ic_viewfinder.xml @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/loading_background_brush.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/loading_background_brush.xml new file mode 100644 index 000000000..ede18b1f8 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/loading_background_brush.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/viewfinder.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/viewfinder.png new file mode 100644 index 000000000..82127eac9 Binary files /dev/null and b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/viewfinder.png differ 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 f8725175a..7f8e470d0 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 @@ -30,7 +30,8 @@ android:id="@+id/imagePreview" android:layout_width="match_parent" android:layout_height="match_parent" - android:scaleType="centerCrop" /> + android:scaleType="centerCrop" + android:visibility="gone" /> + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_loading.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_loading.xml index 0c914ce96..21fbf6485 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_loading.xml +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_loading.xml @@ -11,6 +11,7 @@ @@ -19,7 +20,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="fitXY" - bind:srcCompat="@drawable/loading_background" /> + bind:srcCompat="@drawable/loading_background_brush" /> + android:text="Loading..." + android:textSize="21sp" /> + android:max="2000" + android:progress="@{vm.loadingProgress}" + android:progressDrawable="@drawable/gradient_progressbar" /> 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 557a55831..743fe092c 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 @@ -5,6 +5,8 @@ + + -- cgit v1.3.1