MOBILE-3458 login: Show qr when configured
This commit is contained in:
		
							parent
							
								
									22266da7a7
								
							
						
					
					
						commit
						8df8c24270
					
				@ -81,6 +81,7 @@
 | 
			
		||||
    "siteurl": "",
 | 
			
		||||
    "sitename": "",
 | 
			
		||||
    "multisitesdisplay": "",
 | 
			
		||||
    "onlyallowlistedsites": false,
 | 
			
		||||
    "skipssoconfirmation": false,
 | 
			
		||||
    "forcedefaultlanguage": false,
 | 
			
		||||
    "privacypolicy": "https:\/\/moodle.net\/moodle-app-privacy\/",
 | 
			
		||||
 | 
			
		||||
@ -105,4 +105,10 @@ ion-app.app-root page-core-login-site {
 | 
			
		||||
            background: transparent;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .core-login-site-qrcode-separator {
 | 
			
		||||
        text-align: center;
 | 
			
		||||
        margin-top: 12px;
 | 
			
		||||
        font-size: 1.2em;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -34,6 +34,16 @@
 | 
			
		||||
            <div padding>
 | 
			
		||||
                <button ion-button block [disabled]="siteChecked && !isBrowserSSO && !credForm.valid" class="core-login-login-button">{{ 'core.login.loginbutton' | translate }}</button>
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
            <ng-container *ngIf="showScanQR">
 | 
			
		||||
                <div class="core-login-site-qrcode-separator">{{ 'core.login.or' | translate }}</div>
 | 
			
		||||
                <ion-item class="core-login-site-qrcode">
 | 
			
		||||
                    <a ion-button block color="light" margin-top icon-start (click)="showInstructionsAndScanQR()">
 | 
			
		||||
                        <core-icon name="fa-qrcode" aria-hidden="true"></core-icon>
 | 
			
		||||
                        {{ 'core.scanqr' | translate }}
 | 
			
		||||
                    </a>
 | 
			
		||||
                </ion-item>
 | 
			
		||||
            </ng-container>
 | 
			
		||||
        </form>
 | 
			
		||||
 | 
			
		||||
        <!-- Forgotten password button. -->
 | 
			
		||||
 | 
			
		||||
@ -16,12 +16,14 @@ import { Component, ViewChild, ElementRef } from '@angular/core';
 | 
			
		||||
import { IonicPage, NavController, NavParams } from 'ionic-angular';
 | 
			
		||||
import { TranslateService } from '@ngx-translate/core';
 | 
			
		||||
import { CoreAppProvider } from '@providers/app';
 | 
			
		||||
import { CoreUtils } from '@providers/utils/utils';
 | 
			
		||||
import { CoreEventsProvider } from '@providers/events';
 | 
			
		||||
import { CoreSitesProvider } from '@providers/sites';
 | 
			
		||||
import { CoreDomUtilsProvider } from '@providers/utils/dom';
 | 
			
		||||
import { CoreLoginHelperProvider } from '../../providers/helper';
 | 
			
		||||
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
 | 
			
		||||
import { CoreConfigConstants } from '../../../../configconstants';
 | 
			
		||||
import { CoreCustomURLSchemes } from '@providers/urlschemes';
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Page to enter the user credentials.
 | 
			
		||||
@ -47,6 +49,7 @@ export class CoreLoginCredentialsPage {
 | 
			
		||||
    isBrowserSSO = false;
 | 
			
		||||
    isFixedUrlSet = false;
 | 
			
		||||
    showForgottenPassword = true;
 | 
			
		||||
    showScanQR: boolean;
 | 
			
		||||
 | 
			
		||||
    protected siteConfig;
 | 
			
		||||
    protected eventThrown = false;
 | 
			
		||||
@ -74,6 +77,17 @@ export class CoreLoginCredentialsPage {
 | 
			
		||||
            username: [navParams.get('username') || '', Validators.required],
 | 
			
		||||
            password: ['', Validators.required]
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        const canScanQR = CoreUtils.instance.canScanQR();
 | 
			
		||||
        if (canScanQR) {
 | 
			
		||||
            if (typeof CoreConfigConstants['displayqroncredentialscreen'] == 'undefined') {
 | 
			
		||||
                this.showScanQR = this.loginHelper.isFixedUrlSet();
 | 
			
		||||
            } else {
 | 
			
		||||
                this.showScanQR = !!CoreConfigConstants['displayqroncredentialscreen'];
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            this.showScanQR = false;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@ -267,4 +281,46 @@ export class CoreLoginCredentialsPage {
 | 
			
		||||
    signup(): void {
 | 
			
		||||
        this.navCtrl.push('CoreLoginEmailSignupPage', { siteUrl: this.siteUrl });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Show instructions and scan QR code.
 | 
			
		||||
     */
 | 
			
		||||
    showInstructionsAndScanQR(): void {
 | 
			
		||||
        // Show some instructions first.
 | 
			
		||||
        this.domUtils.showAlertWithOptions({
 | 
			
		||||
            title: this.translate.instant('core.login.faqwhereisqrcode'),
 | 
			
		||||
            message: this.translate.instant('core.login.faqwhereisqrcodeanswer',
 | 
			
		||||
                {$image: CoreLoginHelperProvider.FAQ_QRCODE_IMAGE_HTML}),
 | 
			
		||||
            buttons: [
 | 
			
		||||
                {
 | 
			
		||||
                    text: this.translate.instant('core.cancel'),
 | 
			
		||||
                    role: 'cancel'
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    text: this.translate.instant('core.next'),
 | 
			
		||||
                    handler: (): void => {
 | 
			
		||||
                        this.scanQR();
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
            ],
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Scan a QR code and put its text in the URL input.
 | 
			
		||||
     *
 | 
			
		||||
     * @return Promise resolved when done.
 | 
			
		||||
     */
 | 
			
		||||
    async scanQR(): Promise<void> {
 | 
			
		||||
        // Scan for a QR code.
 | 
			
		||||
        const text = await CoreUtils.instance.scanQR();
 | 
			
		||||
 | 
			
		||||
        if (text && CoreCustomURLSchemes.instance.isCustomURL(text)) {
 | 
			
		||||
            try {
 | 
			
		||||
                await CoreCustomURLSchemes.instance.handleCustomURL(text);
 | 
			
		||||
            } catch (error) {
 | 
			
		||||
                CoreCustomURLSchemes.instance.treatHandleCustomURLError(error);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -56,17 +56,6 @@
 | 
			
		||||
                    <ion-option *ngFor="let site of fixedSites" [value]="site.url">{{site.name}}</ion-option>
 | 
			
		||||
                </ion-select>
 | 
			
		||||
            </ion-item>
 | 
			
		||||
 | 
			
		||||
            <ng-container *ngIf="!fixedSites && showScanQR && !hasSites && !enteredSiteUrl">
 | 
			
		||||
                <div class="core-login-site-qrcode-separator">{{ 'core.login.or' | translate }}</div>
 | 
			
		||||
                <ion-item class="core-login-site-qrcode">
 | 
			
		||||
                    <a ion-button block color="light" margin-top icon-start (click)="showInstructionsAndScanQR()">
 | 
			
		||||
                        <core-icon name="fa-qrcode" aria-hidden="true"></core-icon>
 | 
			
		||||
                        {{ 'core.scanqr' | translate }}
 | 
			
		||||
                    </a>
 | 
			
		||||
                </ion-item>
 | 
			
		||||
            </ng-container>
 | 
			
		||||
 | 
			
		||||
        </form>
 | 
			
		||||
 | 
			
		||||
        <!-- Pick the site from a list of fixed sites. -->
 | 
			
		||||
@ -85,6 +74,16 @@
 | 
			
		||||
            <a *ngFor="let site of fixedSites" ion-button block (click)="connect($event, site.url)" [title]="site.name" margin-bottom>{{site.name}}</a>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <ng-container *ngIf="showScanQR && !hasSites && !enteredSiteUrl">
 | 
			
		||||
            <div class="core-login-site-qrcode-separator">{{ 'core.login.or' | translate }}</div>
 | 
			
		||||
            <ion-item class="core-login-site-qrcode">
 | 
			
		||||
                <a ion-button block color="light" margin-top icon-start (click)="showInstructionsAndScanQR()">
 | 
			
		||||
                    <core-icon name="fa-qrcode" aria-hidden="true"></core-icon>
 | 
			
		||||
                    {{ 'core.scanqr' | translate }}
 | 
			
		||||
                </a>
 | 
			
		||||
            </ion-item>
 | 
			
		||||
        </ng-container>
 | 
			
		||||
 | 
			
		||||
        <!-- Help. -->
 | 
			
		||||
        <ion-list no-lines margin-top>
 | 
			
		||||
            <a ion-item text-center text-wrap class="core-login-need-help" (click)="showHelp()" detail-none>
 | 
			
		||||
 | 
			
		||||
@ -129,10 +129,4 @@ ion-app.app-root page-core-login-site {
 | 
			
		||||
    .core-login-default-icon {
 | 
			
		||||
        filter: grayscale(100%);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .core-login-site-qrcode-separator {
 | 
			
		||||
        text-align: center;
 | 
			
		||||
        margin-top: 12px;
 | 
			
		||||
        font-size: 1.2em;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -80,7 +80,6 @@ export class CoreLoginSitePage {
 | 
			
		||||
            protected textUtils: CoreTextUtilsProvider) {
 | 
			
		||||
 | 
			
		||||
        this.showKeyboard = !!navParams.get('showKeyboard');
 | 
			
		||||
        this.showScanQR = this.utils.canScanQR();
 | 
			
		||||
 | 
			
		||||
        let url = '';
 | 
			
		||||
 | 
			
		||||
@ -103,6 +102,9 @@ export class CoreLoginSitePage {
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this.showScanQR = this.utils.canScanQR() && (typeof CoreConfigConstants['displayqronsitescreen'] == 'undefined' ||
 | 
			
		||||
            !!CoreConfigConstants['displayqronsitescreen']);
 | 
			
		||||
 | 
			
		||||
        this.siteForm = fb.group({
 | 
			
		||||
            siteUrl: [url, this.moodleUrlValidator()]
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user