1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5/**
6 * @fileoverview Oobe update screen implementation.
7 */
8
9login.createScreen('UpdateScreen', 'update', function() {
10  return {
11    EXTERNAL_API: [
12      'enableUpdateCancel',
13      'setUpdateProgress',
14      'showEstimatedTimeLeft',
15      'setEstimatedTimeLeft',
16      'showProgressMessage',
17      'setProgressMessage',
18      'setUpdateMessage',
19      'showUpdateCurtain'
20    ],
21
22    /**
23     * Header text of the screen.
24     * @type {string}
25     */
26    get header() {
27      return loadTimeData.getString('updateScreenTitle');
28    },
29
30    /**
31     * Cancels the screen.
32     */
33    cancel: function() {
34      // It's safe to act on the accelerator even if it's disabled on official
35      // builds, since Chrome will just ignore the message in that case.
36      var updateCancelHint = $('update-cancel-hint').firstElementChild;
37      updateCancelHint.textContent =
38          loadTimeData.getString('cancelledUpdateMessage');
39      chrome.send('cancelUpdate');
40    },
41
42    /**
43     * Makes 'press Escape to cancel update' hint visible.
44     */
45    enableUpdateCancel: function() {
46      $('update-cancel-hint').hidden = false;
47    },
48
49    /**
50     * Sets update's progress bar value.
51     * @param {number} progress Percentage of the progress bar.
52     */
53    setUpdateProgress: function(progress) {
54      $('update-progress-bar').value = progress;
55    },
56
57    /**
58     * Shows or hides downloading ETA message.
59     * @param {boolean} visible Are ETA message visible?
60     */
61    showEstimatedTimeLeft: function(visible) {
62      $('progress-message').hidden = visible;
63      $('estimated-time-left').hidden = !visible;
64    },
65
66    /**
67     * Sets estimated time left until download will complete.
68     * @param {number} seconds Time left in seconds.
69     */
70    setEstimatedTimeLeft: function(seconds) {
71      var minutes = Math.ceil(seconds / 60);
72      var message = '';
73      if (minutes > 60) {
74        message = loadTimeData.getString('downloadingTimeLeftLong');
75      } else if (minutes > 55) {
76        message = loadTimeData.getString('downloadingTimeLeftStatusOneHour');
77      } else if (minutes > 20) {
78        message = loadTimeData.getStringF('downloadingTimeLeftStatusMinutes',
79                                          Math.ceil(minutes / 5) * 5);
80      } else if (minutes > 1) {
81        message = loadTimeData.getStringF('downloadingTimeLeftStatusMinutes',
82                                          minutes);
83      } else {
84        message = loadTimeData.getString('downloadingTimeLeftSmall');
85      }
86      $('estimated-time-left').textContent =
87        loadTimeData.getStringF('downloading', message);
88    },
89
90    /**
91     * Shows or hides info message below progress bar.
92     * @param {boolean} visible Are message visible?
93     */
94    showProgressMessage: function(visible) {
95      $('estimated-time-left').hidden = visible;
96      $('progress-message').hidden = !visible;
97    },
98
99    /**
100     * Sets message below progress bar.
101     * @param {string} message Message that should be shown.
102     */
103    setProgressMessage: function(message) {
104      $('progress-message').innerText = message;
105    },
106
107    /**
108     * Sets update message, which is shown above the progress bar.
109     * @param {text} message Message which is shown by the label.
110     */
111    setUpdateMessage: function(message) {
112      $('update-upper-label').textContent = message;
113    },
114
115    /**
116     * Shows or hides update curtain.
117     * @param {boolean} visible Are curtains visible?
118     */
119    showUpdateCurtain: function(visible) {
120      $('update-screen-curtain').hidden = !visible;
121      $('update-screen-main').hidden = visible;
122    }
123  };
124});
125