Index: chrome/browser/resources/settings/people_page/lock_screen.js |
diff --git a/chrome/browser/resources/settings/people_page/lock_screen.js b/chrome/browser/resources/settings/people_page/lock_screen.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f296363be34d22c6969668a110d742ddcf0a9617 |
--- /dev/null |
+++ b/chrome/browser/resources/settings/people_page/lock_screen.js |
@@ -0,0 +1,125 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+/** |
+ * @fileoverview |
+ * 'settings-lock-screen' allows the user to change how they unlock their |
+ * device. |
+ * |
+ * Example: |
+ * |
+ * <settings-lock-screen |
+ * prefs="{{prefs}}"> |
+ * </settings-lock-screen> |
+ */ |
+ |
+Polymer({ |
+ is: 'settings-lock-screen', |
+ |
+ behaviors: [I18nBehavior, LockStateBehavior, settings.RouteObserverBehavior], |
+ |
+ properties: { |
+ /** Preferences state. */ |
+ prefs: { |
+ type: Object |
+ }, |
+ |
+ /** |
+ * setModes_ is a partially applied function that stores the previously |
+ * entered password. It's defined only when the user has already entered a |
+ * valid password. |
+ * |
+ * @type {Object|undefined} |
+ * @private |
+ */ |
+ setModes_: { |
+ type: Object, |
+ observer: 'onSetModesChanged_' |
+ }, |
+ }, |
+ |
+ /** selectedUnlockType is defined in LockStateBehavior. */ |
+ observers: ['selectedUnlockTypeChanged_(selectedUnlockType)'], |
+ |
+ /** @override */ |
+ attached: function() { |
+ // currentRouteChanged is not called during the initial navigation. If the |
+ // user navigates directly to the lockScreen page, we still want to show the |
+ // password prompt page. |
+ this.currentRouteChanged(); |
+ }, |
+ |
+ /** |
+ * Overridden from settings.RouteObserverBehavior. |
+ * @protected |
+ */ |
+ currentRouteChanged: function() { |
+ if (settings.getCurrentRoute() == settings.Route.LOCK_SCREEN && |
+ !this.setModes_) { |
+ this.$.passwordPrompt.open(); |
+ } else { |
+ // If the user navigated away from the lock screen settings page they will |
+ // have to re-enter their password. |
+ this.setModes_ = undefined; |
+ } |
+ }, |
+ |
+ /** |
+ * Called when the unlock type has changed. |
+ * @param {!string} selected The current unlock type. |
+ * @private |
+ */ |
+ selectedUnlockTypeChanged_: function(selected) { |
+ if (selected == LockScreenUnlockType.VALUE_PENDING) |
+ return; |
+ |
+ if (selected != LockScreenUnlockType.PIN_PASSWORD && this.setModes_) { |
+ this.setModes_.call(null, [], [], function(didSet) { |
+ assert(didSet, 'Failed to clear quick unlock modes'); |
+ }); |
+ } |
+ }, |
+ |
+ /** @private */ |
+ onSetModesChanged_: function() { |
+ if (settings.getCurrentRoute() == settings.Route.LOCK_SCREEN && |
+ !this.setModes_) { |
+ this.$.setupPin.close(); |
+ this.$.passwordPrompt.open(); |
+ } |
+ }, |
+ |
+ /** @private */ |
+ onPasswordClosed_: function() { |
+ if (!this.setModes_) |
+ settings.navigateTo(settings.Route.PEOPLE); |
+ }, |
+ |
+ /** @private */ |
+ onPinSetupDone_: function() { |
+ this.$.setupPin.close(); |
+ }, |
+ |
+ /** |
+ * Returns true if the setup pin section should be shown. |
+ * @param {!string} selectedUnlockType The current unlock type. Used to let |
+ * Polymer know about the dependency. |
+ * @private |
+ */ |
+ showConfigurePinButton_: function(selectedUnlockType) { |
+ return selectedUnlockType === LockScreenUnlockType.PIN_PASSWORD; |
+ }, |
+ |
+ /** @private */ |
+ getSetupPinText_: function() { |
+ if (this.hasPin) |
+ return this.i18n('lockScreenChangePinButton'); |
+ return this.i18n('lockScreenSetupPinButton'); |
+ }, |
+ |
+ /** @private */ |
+ onConfigurePin_: function() { |
+ this.$.setupPin.open(); |
+ }, |
+}); |