Unity 8
NarrowView.qml
1 /*
2  * Copyright (C) 2015 Canonical, Ltd.
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; version 3.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  */
16 
17 import QtQuick 2.4
18 import Ubuntu.Components 1.3
19 import "../Components"
20 
21 FocusScope {
22  id: root
23 
24  property alias dragHandleLeftMargin: coverPage.dragHandleLeftMargin
25  property alias launcherOffset: coverPage.launcherOffset
26  property int currentIndex // unused
27  property alias delayMinutes: lockscreen.delayMinutes
28  property alias backgroundTopMargin: coverPage.backgroundTopMargin
29  property url background
30  property bool locked
31  property bool alphanumeric
32  property var userModel // unused
33  property alias infographicModel: coverPage.infographicModel
34  readonly property bool fullyShown: coverPage.showProgress === 1 || lockscreen.shown
35  readonly property bool required: coverPage.required || lockscreen.required
36  readonly property bool animating: coverPage.showAnimation.running || coverPage.hideAnimation.running
37 
38  signal selected(int index) // unused
39  signal responded(string response)
40  signal tease()
41  signal emergencyCall()
42 
43  function showMessage(html) {
44  // TODO
45  }
46 
47  function showPrompt(text, isSecret, isDefaultPrompt) {
48  lockscreen.promptText = isDefaultPrompt ? "" : text.toLowerCase();
49  lockscreen.maybeShow();
50  }
51 
52  function showLastChance() {
53  var title = lockscreen.alphaNumeric ?
54  i18n.tr("Sorry, incorrect passphrase.") :
55  i18n.tr("Sorry, incorrect passcode.");
56  var text = i18n.tr("This will be your last attempt.") + " " +
57  (lockscreen.alphaNumeric ?
58  i18n.tr("If passphrase is entered incorrectly, your phone will conduct a factory reset and all personal data will be deleted.") :
59  i18n.tr("If passcode is entered incorrectly, your phone will conduct a factory reset and all personal data will be deleted."));
60  lockscreen.showInfoPopup(title, text);
61  }
62 
63  function hide() {
64  lockscreen.hide();
65  coverPage.hide();
66  }
67 
68  function notifyAuthenticationSucceeded() {
69  lockscreen.hide();
70  }
71 
72  function notifyAuthenticationFailed() {
73  lockscreen.clear(true);
74  }
75 
76  function reset() {
77  coverPage.show();
78  }
79 
80  function tryToUnlock(toTheRight) {
81  var coverChanged = coverPage.shown;
82  lockscreen.maybeShow();
83  if (toTheRight) {
84  coverPage.hideRight();
85  } else {
86  coverPage.hide();
87  }
88  return coverChanged;
89  }
90 
91  onLockedChanged: {
92  if (locked) {
93  lockscreen.maybeShow();
94  } else {
95  lockscreen.hide();
96  }
97  }
98 
99  Lockscreen {
100  id: lockscreen
101  objectName: "lockscreen"
102 
103  shown: false
104  showAnimation: StandardAnimation { property: "opacity"; to: 1 }
105  hideAnimation: StandardAnimation { property: "opacity"; to: 0 }
106  anchors.fill: parent
107  visible: required
108  enabled: !coverPage.shown
109  background: root.background
110  darkenBackground: 0.4
111  alphaNumeric: root.alphanumeric
112  minPinLength: 4
113  maxPinLength: 4
114 
115  property string promptText
116  infoText: promptText !== "" ? i18n.tr("Enter %1").arg(promptText) :
117  alphaNumeric ? i18n.tr("Enter passphrase") :
118  i18n.tr("Enter passcode")
119  errorText: promptText !== "" ? i18n.tr("Sorry, incorrect %1").arg(promptText) :
120  alphaNumeric ? i18n.tr("Sorry, incorrect passphrase") + "\n" +
121  i18n.ctr("passphrase", "Please re-enter") :
122  i18n.tr("Sorry, incorrect passcode")
123 
124  onEntered: root.responded(passphrase)
125  onCancel: coverPage.show()
126  onEmergencyCall: root.emergencyCall()
127 
128  function maybeShow() {
129  if (root.locked && !shown) {
130  showNow();
131  }
132  }
133  }
134 
135  Rectangle {
136  anchors.fill: parent
137  color: "black"
138  opacity: coverPage.showProgress * 0.8
139  }
140 
141  CoverPage {
142  id: coverPage
143  objectName: "coverPage"
144  height: parent.height
145  width: parent.width
146  background: root.background
147  onTease: root.tease()
148 
149  onShowProgressChanged: {
150  if (showProgress === 1) {
151  lockscreen.reset();
152  }
153 
154  if (showProgress === 0) {
155  if (root.locked) {
156  lockscreen.clear(false); // to reset focus if necessary
157  } else {
158  root.responded("");
159  }
160  }
161  }
162 
163  Clock {
164  anchors {
165  top: parent.top
166  topMargin: units.gu(2)
167  horizontalCenter: parent.horizontalCenter
168  }
169  }
170  }
171 }