From 394dd6e24d8fe1bfddc00657ebc1be17587671fa Mon Sep 17 00:00:00 2001
From: Dani Palou <dani@moodle.com>
Date: Fri, 11 Oct 2019 12:44:33 +0200
Subject: [PATCH] MOBILE-2995 qr: Add scan QR button in login

---
 src/core/login/pages/site/site.html |  5 +++++
 src/core/login/pages/site/site.ts   | 15 +++++++++++++++
 2 files changed, 20 insertions(+)

diff --git a/src/core/login/pages/site/site.html b/src/core/login/pages/site/site.html
index 9a4fe01bc..637c8c90e 100644
--- a/src/core/login/pages/site/site.html
+++ b/src/core/login/pages/site/site.html
@@ -47,6 +47,11 @@
                     <ion-option *ngFor="let site of fixedSites" [value]="site.url">{{site.name}}</ion-option>
                 </ion-select>
             </ion-item>
+
+            <a *ngIf="showScanQR" ion-button block color="light" margin-top icon-start (click)="scanQR()">
+                <core-icon name="fa-qrcode" aria-hidden="true"></core-icon>
+                {{ 'core.scanqr' | translate }}
+            </a>
         </form>
 
         <!-- Pick the site from a list of fixed sites. -->
diff --git a/src/core/login/pages/site/site.ts b/src/core/login/pages/site/site.ts
index 180e0ed47..4546cf012 100644
--- a/src/core/login/pages/site/site.ts
+++ b/src/core/login/pages/site/site.ts
@@ -58,6 +58,7 @@ export class CoreLoginSitePage {
     loadingSites = false;
     onlyWrittenSite = false;
     searchFnc: Function;
+    showScanQR: boolean;
 
     constructor(navParams: NavParams,
             protected navCtrl: NavController,
@@ -74,6 +75,7 @@ export class CoreLoginSitePage {
             protected utils: CoreUtilsProvider) {
 
         this.showKeyboard = !!navParams.get('showKeyboard');
+        this.showScanQR = this.utils.canScanQR();
 
         let url = '';
 
@@ -356,4 +358,17 @@ export class CoreLoginSitePage {
       };
     }
 
+    /**
+     * Scan a QR code and put its text in the URL input.
+     */
+    scanQR(): void {
+        // Scan for a QR code.
+        this.utils.scanQR().then((text) => {
+            if (text) {
+                this.siteForm.controls.siteUrl.setValue(text);
+
+                this.connect(new Event('click'), text);
+            }
+        });
+    }
 }