/* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import {Component, Input} from '@angular/core'; @Component({ selector: 'load-progress', template: `

{{ message }}

`, styles: [ ` .container-progress { display: flex; height: 100%; flex-direction: column; justify-content: center; align-content: center; align-items: center; } p { opacity: 0.6; } mat-icon { font-size: 3rem; width: unset; height: unset; } mat-progress-bar { max-width: 250px; } mat-card-content { flex-grow: 1; } `, ], }) export class LoadProgressComponent { @Input() progressPercentage?: number; @Input() message = 'Loading...'; @Input() icon = 'sync'; private static readonly MIN_UI_UPDATE_PERIOD_MS = 200; static canUpdateComponent(lastUpdateTimeMs: number | undefined): boolean { if (lastUpdateTimeMs === undefined) { return true; } // Limit the amount of UI updates, because the progress bar component // renders weird stuff when updated too frequently. // Also, this way we save some resources. return ( Date.now() - lastUpdateTimeMs >= LoadProgressComponent.MIN_UI_UPDATE_PERIOD_MS ); } }