diff options
Diffstat (limited to 'Software/Android_Studio')
31 files changed, 778 insertions, 63 deletions
diff --git a/Software/Android_Studio/ColorCapture/app/build.gradle b/Software/Android_Studio/ColorCapture/app/build.gradle index 500c9cfce..8aea1cf5a 100644 --- a/Software/Android_Studio/ColorCapture/app/build.gradle +++ b/Software/Android_Studio/ColorCapture/app/build.gradle @@ -6,8 +6,8 @@ android { applicationId "com.twine.colorcapture" minSdkVersion 22 targetSdkVersion 27 - versionCode 10 - versionName "2.0" + versionCode 11 + versionName "2.1" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" externalNativeBuild { cmake { 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 fbb524754..86a6f337a 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 @@ -12,12 +12,14 @@ import com.twine.colorcapture.views.card.CardFragment; import com.twine.colorcapture.views.mycolors.MyColorsFragment; import com.twine.colorcapture.views.loading.LoadingActivity; import com.twine.colorcapture.views.main.MainActivity; +import com.twine.colorcapture.views.print.PrintFragment; 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.SendToEmailFragment; import com.twine.colorcapture.views.sendtomachine.SendToMachineFragment; import com.twine.colorcapture.views.twine.TwineFragment; +import com.twine.colorcapture.views.web.WebFragment; import javax.inject.Singleton; @@ -66,4 +68,8 @@ public interface ApplicationComponent void inject(TwineFragment twineFragment); void inject(CardFragment cardFragment); + + void inject(WebFragment webFragment); + + void inject(PrintFragment printFragment); } 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 0a161bd7b..9babc4961 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 @@ -15,12 +15,14 @@ import com.twine.colorcapture.views.card.CardFragmentVM; import com.twine.colorcapture.views.loading.LoadingActivityVM; import com.twine.colorcapture.views.mycolors.MyColorsFragmentVM; import com.twine.colorcapture.views.main.MainActivityVM; +import com.twine.colorcapture.views.print.PrintFragmentVM; 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.SendToEmailFragmentVM; import com.twine.colorcapture.views.sendtomachine.SendToMachineFragmentVM; import com.twine.colorcapture.views.twine.TwineFragmentVM; +import com.twine.colorcapture.views.web.WebFragmentVM; import com.twine.colorcapture.web.ITCCService; import javax.inject.Singleton; @@ -59,6 +61,13 @@ public class ViewModelsModule @Provides @Singleton + public PrintFragmentVM providePrintFragmentVM(INotificationProvider notificationProvider, INavigationProvider navigationProvider, ITCCService tccService) + { + return new PrintFragmentVM(navigationProvider, notificationProvider, tccService); + } + + @Provides + @Singleton public MyColorsFragmentVM provideMyColorsFragmentVM(Bus eventBus, INotificationProvider notificationProvider, INavigationProvider navigationProvider) { return new MyColorsFragmentVM(navigationProvider, notificationProvider); @@ -108,23 +117,30 @@ public class ViewModelsModule @Provides @Singleton - public AboutFragmentVM provideAboutFragmentVM() + public AboutFragmentVM provideAboutFragmentVM(INavigationProvider navigationProvider) + { + return new AboutFragmentVM(navigationProvider); + } + + @Provides + @Singleton + public TwineFragmentVM provideTwineFragmentVM(INavigationProvider navigationProvider) { - return new AboutFragmentVM(); + return new TwineFragmentVM(navigationProvider); } @Provides @Singleton - public TwineFragmentVM provideTwineFragmentVM() + public CardFragmentVM provideCardFragmentVM(INavigationProvider navigationProvider, INotificationProvider notificationProvider) { - return new TwineFragmentVM(); + return new CardFragmentVM(navigationProvider, notificationProvider); } @Provides @Singleton - public CardFragmentVM provideCardFragmentVM(INavigationProvider navigationProvider) + public WebFragmentVM provideWebFragmentVM() { - return new CardFragmentVM(navigationProvider); + return new WebFragmentVM(); } @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 00b07dbba..a03bed247 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 @@ -173,4 +173,9 @@ public abstract class FragmentBase<BindingView extends ViewDataBinding, VM exten { return vm; } + + public boolean onBackPressed() + { + return false; + } } 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 ca51b48ff..19f588eb5 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 @@ -121,6 +121,12 @@ public class AndroidNavigationProvider extends ExtendedObject implements INaviga } @Override + public FragmentBase getCurrentFragmentInstance() + { + return currentFragment; + } + + @Override public boolean canNavigateBack() { return history.size() > 0 && history.peek() != NavigationFragment.valueOf(currentFragmentName); 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 3df7ed5bc..e59c9cebf 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 @@ -52,6 +52,12 @@ public interface INavigationProvider NavigationFragment getCurrentFragment(); /** + * Gets the current fragment instance + * @return + */ + FragmentBase getCurrentFragmentInstance(); + + /** * Gets a value determining whether there is any fragment to navigate back to in the history. * * @return 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 64b7ba9f9..7564a4e09 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 @@ -5,21 +5,37 @@ public enum NavigationFragment MyColors, Capture, Result, + @PreventHistory Register, + @PreventHistory SendToMachine, + @PreventHistory Rename, + @PreventHistory @HideHeader SendToEmail, + @PreventHistory About, + @PreventHistory Twine, + @PreventHistory Card, + @PreventHistory CardOrder, + + @PreventHistory + @HideHeader + Web, + + @PreventHistory + @HideHeader + Print, } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/about/AboutFragmentVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/about/AboutFragmentVM.java index b095798e1..a9e2c7595 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/about/AboutFragmentVM.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/about/AboutFragmentVM.java @@ -9,19 +9,25 @@ import com.twine.colorcapture.App; import com.twine.colorcapture.mvvm.DependencyProperty; import com.twine.colorcapture.mvvm.RelayCommand; import com.twine.colorcapture.mvvm.ViewModelBase; +import com.twine.colorcapture.navigation.INavigationProvider; +import com.twine.colorcapture.navigation.NavigationFragment; import com.twine.colorcapture.navigation.TabState; import com.twine.colorcapture.navigation.TabStateManager; public class AboutFragmentVM extends ViewModelBase<IAboutFragment> { + private INavigationProvider navigationProvider; + public RelayCommand contactCommand; public RelayCommand termsOfUseCommand; public RelayCommand privacyPolicyCommand; public DependencyProperty<String> version; - public AboutFragmentVM() + public AboutFragmentVM(INavigationProvider navigationProvider) { + this.navigationProvider = navigationProvider; + contactCommand = new RelayCommand(() -> openBrowser("http://twine-s.com/contact/contact-us")); termsOfUseCommand = new RelayCommand(() -> openBrowser("http://twine-s.com/privacy-policy")); privacyPolicyCommand = new RelayCommand(() -> openBrowser("http://twine-s.com/privacy-policy")); @@ -40,8 +46,9 @@ public class AboutFragmentVM extends ViewModelBase<IAboutFragment> private void openBrowser(String url) { - Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); - App.getContext().startActivity(browserIntent); + navigationProvider.navigateWithObjectTo(NavigationFragment.Web, true, false, url); +// Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); +// App.getContext().startActivity(browserIntent); } @Override diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/card/CardFragment.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/card/CardFragment.java index bdcac205d..d41ebae36 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/card/CardFragment.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/card/CardFragment.java @@ -1,14 +1,26 @@ package com.twine.colorcapture.views.card; +import android.accounts.AccountManager; import android.app.Fragment; +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.FragmentCardBinding; +import com.twine.colorcapture.logging.LogManager; import com.twine.colorcapture.mvvm.FragmentBase; +import static android.app.Activity.RESULT_OK; + public class CardFragment extends FragmentBase<FragmentCardBinding,CardFragmentVM> implements ICardFragment { + private IAction1<String> emailAddressCallback; + private static final int REQUEST_CODE_EMAIL = 1; + @Override protected int getLayoutId() { @@ -26,4 +38,41 @@ public class CardFragment extends FragmentBase<FragmentCardBinding,CardFragmentV { return "Card"; } + + @Override + public void getEmailAddress(IAction1<String> 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/card/CardFragmentVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/card/CardFragmentVM.java index 357a94e23..850061737 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/card/CardFragmentVM.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/card/CardFragmentVM.java @@ -1,15 +1,78 @@ package com.twine.colorcapture.views.card; +import com.twine.colorcapture.logging.LogManager; +import com.twine.colorcapture.mvvm.RelayCommand; import com.twine.colorcapture.mvvm.ViewModelBase; import com.twine.colorcapture.navigation.INavigationProvider; +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 javax.inject.Inject; public class CardFragmentVM extends ViewModelBase<ICardFragment> { + private INavigationProvider navigationProvider; + private INotificationProvider notificationProvider; + + public RelayCommand orderCardCommand; + public RelayCommand printCardCommand; + @Inject - public CardFragmentVM(INavigationProvider navigationProvider) + public CardFragmentVM(INavigationProvider navigationProvider, INotificationProvider notificationProvider) + { + this.notificationProvider = notificationProvider; + this.navigationProvider = navigationProvider; + orderCardCommand = new RelayCommand(this::handleOrderCardCommand); + printCardCommand = new RelayCommand(this::handlePrintCardCommand); + } + + private void handlePrintCardCommand() { + 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.navigateTo(NavigationFragment.Print, true, false); + } + }); + } + else + { + navigationProvider.navigateTo(NavigationFragment.Print, true, false); + } + } + private void handleOrderCardCommand() + { + openBrowser("http://twine-s.com/contact/contact-us"); + } + + private void openBrowser(String url) + { + navigationProvider.navigateWithObjectTo(NavigationFragment.Web, true, false, url); + } + + @Override + protected void onNavigatedTo() + { + super.onNavigatedTo(); + TabStateManager.getInstance().state.set(TabState.More); } } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/card/ICardFragment.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/card/ICardFragment.java index 464bf4fab..a089ad9d6 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/card/ICardFragment.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/card/ICardFragment.java @@ -1,8 +1,9 @@ package com.twine.colorcapture.views.card; +import com.twine.colorcapture.core.IAction1; import com.twine.colorcapture.mvvm.IView; public interface ICardFragment extends IView { - + void getEmailAddress(IAction1<String> callback); } 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 153f7f139..43887bfbc 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 @@ -9,6 +9,7 @@ import android.support.annotation.NonNull; import android.support.v4.widget.DrawerLayout; import android.util.Log; import android.view.Gravity; +import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup; import android.widget.ImageButton; @@ -125,13 +126,23 @@ public class MainActivity extends ActivityBase<ActivityMainBinding, MainActivity @Override public void onBackPressed() { - if (navigationProvider.canNavigateBack() && !menuOpened) + boolean handled = false; + + if (navigationProvider.getCurrentFragmentInstance() != null) { - navigationProvider.navigateBack(); + handled = navigationProvider.getCurrentFragmentInstance().onBackPressed(); } - else + + if (!handled) { - super.onBackPressed(); + if (navigationProvider.canNavigateBack() && !menuOpened) + { + navigationProvider.navigateBack(); + } + else + { + super.onBackPressed(); + } } } 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 673146417..0653b4ac4 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 @@ -36,6 +36,7 @@ public class MainActivityVM extends ViewModelBase<IMainActivity> public RelayCommand howToUseCommand; public RelayCommand aboutCommand; public RelayCommand aboutTwineCommand; + public RelayCommand getCardCommand; @Inject public MainActivityVM(Bus eventBus, INotificationProvider notificationProvider, INavigationProvider navigationProvider) @@ -50,12 +51,19 @@ public class MainActivityVM extends ViewModelBase<IMainActivity> howToUseCommand = new RelayCommand(this::handleHowToUseCommand); aboutCommand = new RelayCommand(this::handleAboutCommand); aboutTwineCommand = new RelayCommand(this::handleAboutTwineCommand); + getCardCommand = new RelayCommand(this::handleGetCardCommand); captureCommand = new RelayCommand(this::handleCaptureCommand); myColorsCommand = new RelayCommand(this::handleMyColorsCommand); moreCommand = new RelayCommand(this::handleMoreCommand); } + private void handleGetCardCommand() + { + view.closeMenu(); + navigationProvider.navigateTo(NavigationFragment.Card, true, false); + } + private void handleMoreCommand() { diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/print/IPrintFragment.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/print/IPrintFragment.java new file mode 100644 index 000000000..41ea3bd72 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/print/IPrintFragment.java @@ -0,0 +1,7 @@ +package com.twine.colorcapture.views.print; + +import com.twine.colorcapture.mvvm.IView; + +public interface IPrintFragment extends IView +{ +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/print/PrintFragment.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/print/PrintFragment.java new file mode 100644 index 000000000..69e019b93 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/print/PrintFragment.java @@ -0,0 +1,30 @@ +package com.twine.colorcapture.views.print; + +import android.app.Fragment; + +import com.twine.colorcapture.App; +import com.twine.colorcapture.R; +import com.twine.colorcapture.databinding.FragmentPrintBinding; +import com.twine.colorcapture.mvvm.FragmentBase; + +public class PrintFragment extends FragmentBase<FragmentPrintBinding,PrintFragmentVM> implements IPrintFragment +{ + + @Override + protected int getLayoutId() + { + return R.layout.fragment_print; + } + + @Override + protected void inject() + { + App.getComponent().inject(this); + } + + @Override + public String getTitle() + { + return "Print"; + } +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/print/PrintFragmentVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/print/PrintFragmentVM.java new file mode 100644 index 000000000..ec3e66edc --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/print/PrintFragmentVM.java @@ -0,0 +1,40 @@ +package com.twine.colorcapture.views.print; + +import com.twine.colorcapture.mvvm.DependencyProperty; +import com.twine.colorcapture.mvvm.RelayCommand; +import com.twine.colorcapture.mvvm.ViewModelBase; +import com.twine.colorcapture.navigation.INavigationProvider; +import com.twine.colorcapture.notification.INotificationProvider; +import com.twine.colorcapture.settings.SettingsManager; +import com.twine.colorcapture.web.ITCCService; + +public class PrintFragmentVM extends ViewModelBase<IPrintFragment> +{ + private String from; + + public DependencyProperty<String> to; + public RelayCommand sendCommand; + public DependencyProperty<String> message; + + public PrintFragmentVM(INavigationProvider navigationProvider, INotificationProvider notificationProvider, ITCCService tccService) + { + message = new DependencyProperty<>("Your card is attached! Just send the file to your computer and print. "); + to = new DependencyProperty<>(""); + + sendCommand = new RelayCommand(this::handleSendCommand); + } + + private void handleSendCommand() + { + + } + + @Override + protected void onNavigatedTo() + { + super.onNavigatedTo(); + + from = SettingsManager.getInstance().getEmail(); + to.set(from); + } +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/twine/TwineFragmentVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/twine/TwineFragmentVM.java index 2afe56b0d..f69d02ef6 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/twine/TwineFragmentVM.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/twine/TwineFragmentVM.java @@ -6,22 +6,29 @@ import android.net.Uri; import com.twine.colorcapture.App; import com.twine.colorcapture.mvvm.RelayCommand; import com.twine.colorcapture.mvvm.ViewModelBase; +import com.twine.colorcapture.navigation.INavigationProvider; +import com.twine.colorcapture.navigation.NavigationFragment; import com.twine.colorcapture.navigation.TabState; import com.twine.colorcapture.navigation.TabStateManager; public class TwineFragmentVM extends ViewModelBase<ITwineFragment> { + private INavigationProvider navigationProvider; + public RelayCommand contactCommand; - public TwineFragmentVM() + public TwineFragmentVM(INavigationProvider navigationProvider) { + this.navigationProvider = navigationProvider; contactCommand = new RelayCommand(() -> openBrowser("http://twine-s.com/contact/contact-us")); } private void openBrowser(String url) { - Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); - App.getContext().startActivity(browserIntent); + + navigationProvider.navigateWithObjectTo(NavigationFragment.Web, true, false, url); +// Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); +// App.getContext().startActivity(browserIntent); } @Override diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/web/CustomWebViewClient.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/web/CustomWebViewClient.java new file mode 100644 index 000000000..cba79b5b2 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/web/CustomWebViewClient.java @@ -0,0 +1,66 @@ +package com.twine.colorcapture.views.web; + +import android.graphics.Bitmap; +import android.webkit.WebResourceRequest; +import android.webkit.WebView; +import android.webkit.WebViewClient; + +import com.twine.colorcapture.core.IAction; + +public class CustomWebViewClient extends WebViewClient +{ + private IAction onPageStartedListener; + private IAction onPageFinishedListener; + + @Override + public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) + { + return false; + } + + public void setOnPageStartedListener(IAction onPageStartedListener) + { + this.onPageStartedListener = onPageStartedListener; + } + + public void setOnPageFinishedListener(IAction onPageFinishedListener) + { + this.onPageFinishedListener = onPageFinishedListener; + } + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) + { + super.onPageStarted(view, url, favicon); + + if (onPageStartedListener != null) + { + try + { + onPageStartedListener.invoke(); + } + catch (Exception e) + { + e.printStackTrace(); + } + } + } + + @Override + public void onPageFinished(WebView view, String url) + { + super.onPageFinished(view, url); + + if (onPageFinishedListener != null) + { + try + { + onPageFinishedListener.invoke(); + } + catch (Exception e) + { + e.printStackTrace(); + } + } + } +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/web/IWebFragment.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/web/IWebFragment.java new file mode 100644 index 000000000..dd0bc9a84 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/web/IWebFragment.java @@ -0,0 +1,8 @@ +package com.twine.colorcapture.views.web; + +import com.twine.colorcapture.mvvm.IView; + +public interface IWebFragment extends IView +{ + void navigateURL(String url); +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/web/WebFragment.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/web/WebFragment.java new file mode 100644 index 000000000..620377c8f --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/web/WebFragment.java @@ -0,0 +1,122 @@ +package com.twine.colorcapture.views.web; + +import android.annotation.SuppressLint; +import android.app.Fragment; +import android.view.View; +import android.webkit.WebView; +import android.widget.FrameLayout; + +import com.twine.colorcapture.App; +import com.twine.colorcapture.R; +import com.twine.colorcapture.core.IAction; +import com.twine.colorcapture.databinding.FragmentWebBinding; +import com.twine.colorcapture.logging.LogManager; +import com.twine.colorcapture.mvvm.FragmentBase; + +import butterknife.BindView; + +public class WebFragment extends FragmentBase<FragmentWebBinding,WebFragmentVM> implements IWebFragment +{ + private boolean created; + private IAction onCreatedListener; + + @BindView(R.id.webView) + WebView webView; + + @BindView(R.id.frameMask) + FrameLayout frameMask; + + @SuppressLint("SetJavaScriptEnabled") + @Override + protected void onCreated() + { + LogManager.log("On Created"); + + super.onCreated(); + webView.getSettings().setJavaScriptEnabled(true); + + CustomWebViewClient webViewClient = new CustomWebViewClient(); + webView.setWebViewClient(webViewClient); + + webViewClient.setOnPageStartedListener(() -> + { + frameMask.setVisibility(View.VISIBLE); + }); + webViewClient.setOnPageFinishedListener(() -> + { + frameMask.setVisibility(View.GONE); + }); + + created = true; + + + + if (onCreatedListener != null) + { + LogManager.log("Invoking OnCreated"); + + try + { + onCreatedListener.invoke(); + } + catch (Exception e) + { + e.printStackTrace(); + } + } + } + + @Override + protected int getLayoutId() + { + return R.layout.fragment_web; + } + + @Override + protected void inject() + { + App.getComponent().inject(this); + } + + @Override + public String getTitle() + { + return "Web"; + } + + @Override + public void navigateURL(String url) + { + frameMask.setVisibility(View.VISIBLE); + LogManager.log("navigateURL"); + + if (created) + { + LogManager.log("Created: True"); + webView.loadUrl(url); + } + else + { + LogManager.log("Registering"); + onCreatedListener = () -> + { + LogManager.log("Loading"); + webView.loadUrl(url); + }; + } + } + + @Override + public boolean onBackPressed() + { + if (webView.canGoBack()) + { + webView.goBack(); + return true; + } + else + { + return super.onBackPressed(); + } + } +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/web/WebFragmentVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/web/WebFragmentVM.java new file mode 100644 index 000000000..d6587be14 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/web/WebFragmentVM.java @@ -0,0 +1,13 @@ +package com.twine.colorcapture.views.web; + +import com.twine.colorcapture.mvvm.ViewModelBase; +import com.twine.colorcapture.navigation.INavigationObjectReceiver; + +public class WebFragmentVM extends ViewModelBase<IWebFragment> implements INavigationObjectReceiver<String> +{ + @Override + public void onNavigationObjectReceived(String url) + { + view.navigateURL(url); + } +} diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/pdf_file.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/pdf_file.png Binary files differnew file mode 100644 index 000000000..83133d0b2 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/pdf_file.png diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/pdf_file.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/pdf_file.png Binary files differnew file mode 100644 index 000000000..47d8dd7b8 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/pdf_file.png diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/pdf_file.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/pdf_file.png Binary files differnew file mode 100644 index 000000000..aa7b0ca40 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/pdf_file.png diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/pdf_file.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/pdf_file.png Binary files differnew file mode 100644 index 000000000..08ed8469a --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/pdf_file.png diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/pdf_file.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/pdf_file.png Binary files differnew file mode 100644 index 000000000..ec77b0230 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/pdf_file.png diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_card.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_card.xml index 04160c140..109bbebea 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_card.xml +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_card.xml @@ -18,33 +18,89 @@ android:paddingRight="20dp" tools:context="com.twine.colorcapture.views.card.CardFragment"> - <android.support.v7.widget.AppCompatTextView - android:id="@+id/txtTitle" - android:layout_width="wrap_content" - android:layout_height="wrap_content" + <RelativeLayout + android:layout_width="match_parent" android:layout_centerHorizontal="true" - android:layout_gravity="center" - android:layout_marginTop="15dp" - android:fontFamily="@font/flexo_bold" - android:letterSpacing="0.07" - android:text="Get a twine TTC™ card " - android:textSize="@dimen/large_font_size" /> + android:layout_height="match_parent"> - <android.support.v7.widget.AppCompatTextView - android:id="@+id/txtPro" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_below="@id/txtTitle" - android:layout_centerHorizontal="true" - android:layout_marginTop="40dp" - android:lineSpacingExtra="4dp" - android:fontFamily="@font/flexo_light" - android:gravity="center" - android:letterSpacing="0.07" - android:text="@string/order_card_pro" - android:textAlignment="center" - android:textSize="@dimen/medium_font_size" /> + <android.support.v7.widget.AppCompatTextView + android:id="@+id/txtTitle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_centerHorizontal="true" + android:layout_gravity="center" + android:layout_marginTop="15dp" + android:fontFamily="@font/flexo_bold" + android:letterSpacing="0.07" + android:text="Get a twine TTC™ card " + android:textSize="@dimen/large_font_size" /> + + <android.support.v7.widget.AppCompatTextView + android:id="@+id/txtPro" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_below="@id/txtTitle" + android:layout_centerHorizontal="true" + android:layout_marginTop="20dp" + android:fontFamily="@font/flexo_light" + android:gravity="center" + android:letterSpacing="0.07" + android:lineSpacingExtra="4dp" + android:text="@string/order_card_pro" + android:textAlignment="center" + android:textSize="@dimen/medium_font_size" /> + + <com.twine.colorcapture.controls.CircleActionButton + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_below="@id/txtPro" + android:layout_centerHorizontal="true" + android:layout_marginLeft="20dp" + android:layout_marginTop="40dp" + android:layout_marginRight="20dp" + android:clickable="true" + bind:src="@drawable/icon_twine_card" + bind:text=" Order a twine TTC™ card" + bind:textSize="@dimen/small_font_size" + bind:command="@{vm.orderCardCommand}"/> + + <FrameLayout + android:id="@+id/centerLine" + android:layout_width="match_parent" + android:layout_height="2dp" + android:layout_centerVertical="true" + android:background="@drawable/accent_gradient" /> + + <android.support.v7.widget.AppCompatTextView + android:id="@+id/txtHome" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_below="@id/centerLine" + android:layout_centerHorizontal="true" + android:layout_marginTop="40dp" + android:fontFamily="@font/flexo_light" + android:gravity="center" + android:letterSpacing="0.07" + android:lineSpacingExtra="4dp" + android:text="@string/order_card_home" + android:textAlignment="center" + android:textSize="@dimen/medium_font_size" /> + + <com.twine.colorcapture.controls.CircleActionButton + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_below="@id/txtHome" + android:layout_centerHorizontal="true" + android:layout_marginLeft="20dp" + android:layout_marginTop="40dp" + android:layout_marginRight="20dp" + android:clickable="true" + bind:src="@drawable/icon_twine_card" + bind:text=" Print a twine TTC™ card" + bind:textSize="@dimen/small_font_size" + bind:command="@{vm.printCardCommand}"/> + </RelativeLayout> </RelativeLayout> </layout> diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_print.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_print.xml new file mode 100644 index 000000000..f324121c5 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_print.xml @@ -0,0 +1,145 @@ +<?xml version="1.0" encoding="utf-8"?> + +<layout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:bind="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools"> + + <data> + + <variable + name="vm" + type="com.twine.colorcapture.views.print.PrintFragmentVM" /> + </data> + + <RelativeLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layoutDirection="ltr" + tools:context="com.twine.colorcapture.views.print.PrintFragment"> + + <FrameLayout + android:id="@+id/frameTitle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@color/colorPrimaryBackground" + android:padding="20dp"> + + <android.support.v7.widget.AppCompatTextView + android:id="@+id/txtTitle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="left|center" + android:fontFamily="@font/flexo_bold" + android:letterSpacing="0.07" + android:text="Print a twine TTC™ card" + android:textSize="@dimen/large_font_size" /> + + <android.support.v7.widget.AppCompatButton + android:id="@+id/btnDone" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="right" + android:layout_marginRight="-10dp" + android:background="@drawable/button_transparent_fill_ripple" + android:fontFamily="@font/flexo_bold" + android:letterSpacing="0.07" + android:text="Send" + android:textAllCaps="false" + android:textSize="@dimen/large_font_size" + android:textStyle="bold" + bind:command="@{vm.sendCommand}" /> + + </FrameLayout> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_below="@id/frameTitle" + android:background="@color/white" + android:orientation="vertical"> + + <ScrollView + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + + <android.support.v7.widget.AppCompatTextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="left|center" + android:layout_marginLeft="20dp" + android:layout_marginTop="20dp" + android:fontFamily="@font/flexo_light" + android:letterSpacing="0.07" + android:text="Your card is attached" + android:textColor="@color/colorPrimaryBackground" + android:textSize="@dimen/medium_font_size" /> + + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_margin="20dp" + android:src="@drawable/pdf_file" /> + + <FrameLayout + android:layout_width="match_parent" + android:layout_height="4dp" + android:background="@color/light_gray" /> + + <android.support.design.widget.TextInputLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textColorHint="@color/text_gray" + android:layout_marginTop="10dp"> + + <android.support.v7.widget.AppCompatEditText + android:id="@+id/txtEmailTo" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_margin="20dp" + android:fontFamily="@font/flexo_light" + android:inputType="textEmailAddress|textNoSuggestions" + android:letterSpacing="0.07" + android:text="@{vm.to}" + android:textColor="@color/colorPrimaryBackground" + android:textColorHint="@color/text_gray" + android:hint="To" + android:textDirection="ltr" + android:enabled="false" + android:theme="@style/Autocomplete" + android:textSize="@dimen/medium_font_size"/> + + </android.support.design.widget.TextInputLayout> + + <android.support.v7.widget.AppCompatEditText + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_margin="20dp" + android:background="@drawable/border" + android:fontFamily="@font/flexo_light" + android:gravity="top|left" + android:hint="Message" + android:inputType="textMultiLine" + android:letterSpacing="0.07" + android:lines="8" + android:maxLines="10" + android:minLines="6" + android:padding="5dp" + android:scrollbars="vertical" + android:text="@={vm.message}" + android:textColor="@color/colorPrimaryBackground" + android:textColorHint="@color/text_gray" + android:textDirection="ltr" + android:textSize="@dimen/medium_font_size" /> + + </LinearLayout> + </ScrollView> + + </LinearLayout> + + </RelativeLayout> +</layout> 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 index f54d9139d..a10fc70fa 100644 --- 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 @@ -110,30 +110,13 @@ android:textColorHint="@color/text_gray" android:layout_marginTop="10dp"> - <!--<android.support.v7.widget.AppCompatEditText--> - <!--android:id="@+id/txtEmailTo"--> - <!--android:layout_width="match_parent"--> - <!--android:layout_height="wrap_content"--> - <!--android:layout_margin="20dp"--> - <!--android:backgroundTint="@color/colorPrimaryBackground"--> - <!--android:fontFamily="@font/flexo_light"--> - <!--android:hint="To"--> - <!--android:inputType="textEmailAddress"--> - <!--android:letterSpacing="0.07"--> - <!--android:singleLine="true"--> - <!--android:text="@={vm.to}"--> - <!--android:textColor="@color/colorPrimaryBackground"--> - <!--android:textColorHint="@color/text_gray"--> - <!--android:textDirection="ltr"--> - <!--android:textSize="15.4sp" />--> - <android.support.v7.widget.AppCompatAutoCompleteTextView android:id="@+id/txtEmailTo" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="20dp" android:fontFamily="@font/flexo_light" - android:inputType="textEmailAddress" + android:inputType="textEmailAddress|textNoSuggestions" android:letterSpacing="0.07" android:text="@={vm.to}" android:textColor="@color/colorPrimaryBackground" diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_web.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_web.xml new file mode 100644 index 000000000..7bc5454f5 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_web.xml @@ -0,0 +1,43 @@ +<layout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:bind="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools"> + + <data> + + <variable + name="vm" + type="com.twine.colorcapture.views.web.WebFragmentVM" /> + </data> + + <RelativeLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@color/colorPrimaryBackground" + android:layoutDirection="ltr" + tools:context="com.twine.colorcapture.views.web.WebFragment"> + + <WebView + android:id="@+id/webView" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + </WebView> + + <FrameLayout + android:id="@+id/frameMask" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@color/colorBlueMask"> + + <ProgressBar + android:layout_gravity="center" + android:layout_width="@dimen/progress_size" + android:layout_height="@dimen/progress_size" + android:indeterminate="true" + android:indeterminateDuration="500" + android:indeterminateDrawable="@drawable/progress_ring_background"/> + + </FrameLayout> + + </RelativeLayout> +</layout> diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/side_menu.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/side_menu.xml index 7cc3da131..0e7723668 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/side_menu.xml +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/side_menu.xml @@ -178,6 +178,7 @@ bind:text=" Get a twine TTC™ card" bind:textSize="@dimen/small_font_size" bind:src="@drawable/icon_twine_card" - android:clickable="true" /> + android:clickable="true" + bind:command="@{vm.getCardCommand}"/> </RelativeLayout> </layout>
\ No newline at end of file |
