[base_shell] remove userpicker_base_shell, update ermine config
Test: tried ermine
Change-Id: Ib3c821a944fe411f701222f0a6eebc5bab53be0d
diff --git a/bin/userpicker_base_shell/BUILD.gn b/bin/userpicker_base_shell/BUILD.gn
deleted file mode 100644
index e4b4125..0000000
--- a/bin/userpicker_base_shell/BUILD.gn
+++ /dev/null
@@ -1,66 +0,0 @@
-# Copyright 2017 The Fuchsia Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import("//third_party/cobalt_config/metrics_registry.gni")
-import("//topaz/runtime/flutter_runner/flutter_app.gni")
-
-metrics_registry("sysui_metrics_config") {
- project_id = 103
-}
-
-flutter_app("userpicker_base_shell") {
- main_dart = "lib/main.dart"
-
- meta = [
- {
- path = rebase_path("meta/userpicker_base_shell.cmx")
- dest = "userpicker_base_shell.cmx"
- },
- ]
-
- resources = [
- {
- path = rebase_path(
- get_label_info(":sysui_metrics_config", "target_gen_dir") +
- "/sysui_metrics_config.pb")
- dest = "sysui_metrics_config.pb"
- },
- ]
-
- package_name = "userpicker_base_shell"
-
- manifest = "pubspec.yaml"
-
- sources = [
- "authentication_overlay.dart",
- "authentication_overlay_model.dart",
- "authentication_ui_context_impl.dart",
- "circular_button.dart",
- "clock.dart",
- "time_stringer.dart",
- "user_list.dart",
- "user_picker_base_shell_model.dart",
- "user_picker_base_shell_screen.dart",
- "user_picker_screen.dart",
- ]
-
- non_dart_deps = [ ":sysui_metrics_config" ]
-
- deps = [
- "//sdk/fidl/fuchsia.modular",
- "//sdk/fidl/fuchsia.modular.auth",
- "//sdk/fidl/fuchsia.timezone",
- "//sdk/fidl/fuchsia.ui.input",
- "//sdk/fidl/fuchsia.ui.views",
- "//third_party/dart-pkg/git/flutter/packages/flutter",
- "//third_party/dart-pkg/pub/http",
- "//topaz/lib/base_shell:lib.base_shell",
- "//topaz/lib/settings:lib.settings",
- "//topaz/public/dart/fuchsia_logger",
- "//topaz/public/dart/fidl",
- "//topaz/public/dart/fuchsia_scenic_flutter",
- "//topaz/public/dart/widgets:lib.widgets",
- "//topaz/public/lib/device/dart",
- ]
-}
diff --git a/bin/userpicker_base_shell/README.md b/bin/userpicker_base_shell/README.md
deleted file mode 100644
index 76b12ff..0000000
--- a/bin/userpicker_base_shell/README.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# User-picker Base Shell
-
-This directory contains an example implementation of base shell written in
-Flutter that can be used to choose from a list of users to login.
-
-This is started by basemgr unless overidden from command line.
diff --git a/bin/userpicker_base_shell/analysis_options.yaml b/bin/userpicker_base_shell/analysis_options.yaml
deleted file mode 100644
index e688f26..0000000
--- a/bin/userpicker_base_shell/analysis_options.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-# Copyright 2017 The Fuchsia Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-include: ../analysis_options.yaml
diff --git a/bin/userpicker_base_shell/lib/authentication_overlay.dart b/bin/userpicker_base_shell/lib/authentication_overlay.dart
deleted file mode 100644
index df554e9..0000000
--- a/bin/userpicker_base_shell/lib/authentication_overlay.dart
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2017 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'package:fuchsia_scenic_flutter/child_view.dart' show ChildView;
-import 'package:flutter/material.dart';
-import 'package:lib.widgets/model.dart';
-
-import 'authentication_overlay_model.dart';
-
-/// Signature for callback used to indicate that the user cancelled the authorization
-/// flow.
-typedef AuthenticationCancelCallback = void Function();
-
-/// Displays the authentication window.
-class AuthenticationOverlay extends StatelessWidget {
- /// Constructs an authentication overlay that calls the provided callback if the
- /// user cancels the login flow.
- const AuthenticationOverlay({AuthenticationCancelCallback onCancel})
- : _onCancel = onCancel;
-
- /// The callback that is triggered when the user taps outside of the child view,
- /// cancelling the authorization flow.
- final AuthenticationCancelCallback _onCancel;
-
- @override
- Widget build(BuildContext context) =>
- new ScopedModelDescendant<AuthenticationOverlayModel>(
- builder: (
- BuildContext context,
- Widget child,
- AuthenticationOverlayModel model,
- ) =>
- new AnimatedBuilder(
- animation: model.animation,
- builder: (BuildContext context, Widget child) => new Offstage(
- offstage: model.animation.isDismissed,
- child: new Opacity(
- opacity: model.animation.value,
- child: child,
- ),
- ),
- child: new Stack(
- fit: StackFit.passthrough,
- children: <Widget>[
- new GestureDetector(
- onTap: _onCancel,
- ),
- new FractionallySizedBox(
- widthFactor: 0.75,
- heightFactor: 0.75,
- child: new ChildView(
- connection: model.childViewConnection,
- ),
- ),
- ],
- ),
- ),
- );
-}
diff --git a/bin/userpicker_base_shell/lib/authentication_overlay_model.dart b/bin/userpicker_base_shell/lib/authentication_overlay_model.dart
deleted file mode 100644
index fe633c1..0000000
--- a/bin/userpicker_base_shell/lib/authentication_overlay_model.dart
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2017 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'package:fidl_fuchsia_ui_views/fidl_async.dart';
-import 'package:flutter/material.dart';
-import 'package:flutter/scheduler.dart';
-import 'package:fuchsia_logger/logger.dart';
-import 'package:fuchsia_scenic_flutter/child_view_connection.dart'
- show ChildViewConnection;
-import 'package:lib.widgets/model.dart';
-
-/// Manages the connection and animation of the authentication window.
-class AuthenticationOverlayModel extends Model implements TickerProvider {
- ChildViewConnection _childViewConnection;
- AnimationController _transitionAnimation;
- CurvedAnimation _curvedTransitionAnimation;
-
- /// Constructor.
- AuthenticationOverlayModel() {
- _transitionAnimation = new AnimationController(
- value: 0.0,
- duration: const Duration(seconds: 1),
- vsync: this,
- );
- _curvedTransitionAnimation = new CurvedAnimation(
- parent: _transitionAnimation,
- curve: Curves.fastOutSlowIn,
- reverseCurve: Curves.fastOutSlowIn,
- );
- }
-
- /// If not null, returns the handle of the current requested overlay.
- ChildViewConnection get childViewConnection => _childViewConnection;
-
- /// The animation controlling the fading in and out of the authentication
- /// overlay.
- CurvedAnimation get animation => _curvedTransitionAnimation;
-
- /// Starts showing an overlay over all other content.
- void onStartOverlay(ViewHolderToken overlayViewHolderToken) {
- _childViewConnection = ChildViewConnection(
- overlayViewHolderToken,
- onAvailable: (ChildViewConnection connection) {
- log.fine(
- 'AuthenticationOverlayModel: Child view connection available!',
- );
- _transitionAnimation.forward();
- connection.requestFocus();
- },
- onUnavailable: (ChildViewConnection connection) {
- log.fine(
- 'AuthenticationOverlayModel: Child view connection unavailable!',
- );
- _transitionAnimation.reverse();
- // TODO(apwilson): Should not need to remove the child view
- // connection but it causes a scenic deadlock in the compositor if you
- // don't.
- _childViewConnection = null;
- },
- );
- notifyListeners();
- }
-
- /// Stops showing a previously started overlay.
- void onStopOverlay() {
- _transitionAnimation.reverse();
- // TODO(apwilson): Should not need to remove the child view
- // connection but it causes a scenic deadlock in the compositor if you
- // don't.
- _childViewConnection = null;
- notifyListeners();
- }
-
- @override
- Ticker createTicker(TickerCallback onTick) => new Ticker(onTick);
-}
diff --git a/bin/userpicker_base_shell/lib/authentication_ui_context_impl.dart b/bin/userpicker_base_shell/lib/authentication_ui_context_impl.dart
deleted file mode 100644
index 9543fc5..0000000
--- a/bin/userpicker_base_shell/lib/authentication_ui_context_impl.dart
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2018 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'package:fidl/fidl.dart';
-import 'package:fidl_fuchsia_auth/fidl_async.dart';
-import 'package:fidl_fuchsia_ui_views/fidl_async.dart';
-import 'package:fidl_fuchsia_ui_viewsv1token/fidl_async.dart';
-import 'package:flutter/widgets.dart';
-import 'package:zircon/zircon.dart';
-
-/// Called when an authentication overlay needs to be started.
-typedef OnStartOverlay = void Function(ViewHolderToken viewHolderToken);
-
-/// An [AuthenticationUiContext] which calls its callbacks to show an overlay.
-class AuthenticationUiContextImpl extends AuthenticationUiContext {
- /// Called when an aunthentication overlay needs to be started.
- final OnStartOverlay _onStartOverlay;
-
- /// Called when an aunthentication overlay needs to be stopped.
- final VoidCallback _onStopOverlay;
-
- /// Builds an AuthenticationUiContext that takes |ViewHolderToken| callbacks
- /// to start and stop an authentication display overlay.
- AuthenticationUiContextImpl(
- {OnStartOverlay onStartOverlay, VoidCallback onStopOverlay})
- : _onStartOverlay = onStartOverlay,
- _onStopOverlay = onStopOverlay;
-
- @override
- Future<void> startOverlay(InterfaceHandle<ViewOwner> viewOwner) =>
- startOverlay2(new EventPair(viewOwner?.passChannel()?.passHandle()));
-
- @override
- // ignore: override_on_non_overriding_method
- Future<void> startOverlay2(EventPair viewHolderToken) {
- _onStartOverlay?.call(ViewHolderToken(value: viewHolderToken));
- return null;
- }
-
- @override
- Future<void> stopOverlay() {
- _onStopOverlay?.call();
- return null;
- }
-}
diff --git a/bin/userpicker_base_shell/lib/circular_button.dart b/bin/userpicker_base_shell/lib/circular_button.dart
deleted file mode 100644
index 6beafab..0000000
--- a/bin/userpicker_base_shell/lib/circular_button.dart
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2017 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'package:flutter/material.dart';
-import 'package:meta/meta.dart';
-
-/// A button that is circular
-class CircularButton extends StatelessWidget {
- /// Callback that is fired when the button is tapped
- final VoidCallback onTap;
-
- /// The icon to show in the button
- final IconData icon;
-
- /// Constructor
- const CircularButton({@required this.icon, this.onTap})
- : assert(icon != null);
-
- @override
- Widget build(BuildContext context) => new Material(
- type: MaterialType.circle,
- elevation: 2.0,
- color: Colors.grey[200],
- child: new InkWell(
- onTap: () => onTap?.call(),
- child: new Container(
- padding: const EdgeInsets.all(12.0),
- child: new Icon(icon),
- ),
- ),
- );
-}
diff --git a/bin/userpicker_base_shell/lib/clock.dart b/bin/userpicker_base_shell/lib/clock.dart
deleted file mode 100644
index ed7e932..0000000
--- a/bin/userpicker_base_shell/lib/clock.dart
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2017 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'dart:math';
-
-import 'package:flutter/material.dart';
-
-import 'time_stringer.dart';
-
-/// System Clock in the Base Shell
-class Clock extends StatelessWidget {
- final TimeStringer _time = new TimeStringer();
-
- @override
- Widget build(BuildContext context) {
- return new LayoutBuilder(
- builder: (BuildContext context, BoxConstraints constraints) {
- return new AnimatedBuilder(
- animation: _time,
- builder: (BuildContext context, Widget child) {
- return new Container(
- child: new Text(
- _time.timeOnly,
- style: new TextStyle(
- color: Colors.white,
- fontSize: min(
- constraints.maxWidth / 6.0,
- constraints.maxHeight / 6.0,
- ),
- fontWeight: FontWeight.w200,
- letterSpacing: 4.0,
- ),
- ),
- );
- },
- );
- },
- );
- }
-}
diff --git a/bin/userpicker_base_shell/lib/main.dart b/bin/userpicker_base_shell/lib/main.dart
deleted file mode 100644
index 6161465..0000000
--- a/bin/userpicker_base_shell/lib/main.dart
+++ /dev/null
@@ -1,197 +0,0 @@
-// Copyright 2017 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'package:fidl_fuchsia_cobalt/fidl_async.dart' as cobalt;
-import 'package:fidl_fuchsia_mem/fidl_async.dart';
-import 'package:fidl_fuchsia_netstack/fidl_async.dart';
-import 'package:flutter/material.dart';
-import 'package:fuchsia_logger/logger.dart';
-import 'package:fuchsia_services/services.dart';
-import 'package:lib.base_shell/base_shell_widget.dart';
-import 'package:lib.base_shell/netstack_model.dart';
-import 'package:lib.widgets/application.dart';
-import 'package:lib.widgets/model.dart';
-import 'package:meta/meta.dart';
-import 'package:zircon/zircon.dart';
-
-import 'authentication_overlay.dart';
-import 'authentication_overlay_model.dart';
-import 'authentication_ui_context_impl.dart';
-import 'user_picker_base_shell_model.dart';
-import 'user_picker_base_shell_screen.dart';
-
-const double _kMousePointerElevation = 800.0;
-const double _kIndicatorElevation = _kMousePointerElevation - 1.0;
-
-const String _kCobaltConfigBinProtoPath = '/pkg/data/sysui_metrics_config.pb';
-
-/// The main base shell widget.
-BaseShellWidget<UserPickerBaseShellModel> _baseShellWidget;
-
-void main() {
- setupLogger(name: 'userpicker_base_shell');
- StartupContext startupContext = new StartupContext.fromStartupInfo();
-
- // Connect to Cobalt
- cobalt.LoggerProxy logger = new cobalt.LoggerProxy();
-
- cobalt.LoggerFactoryProxy loggerFactory = new cobalt.LoggerFactoryProxy();
- connectToEnvironmentService(loggerFactory);
-
- SizedVmo configVmo = SizedVmo.fromFile(_kCobaltConfigBinProtoPath);
- cobalt.ProjectProfile profile = cobalt.ProjectProfile(
- config: Buffer(vmo: configVmo, size: configVmo.size),
- releaseStage: cobalt.ReleaseStage.ga);
- loggerFactory
- .createLogger(profile, logger.ctrl.request())
- .then((cobalt.Status s) {
- if (s != cobalt.Status.ok) {
- print('Failed to obtain Logger. Cobalt config is invalid.');
- }
- });
- loggerFactory.ctrl.close();
-
- NetstackProxy netstackProxy = new NetstackProxy();
- connectToEnvironmentService(netstackProxy);
-
- NetstackModel netstackModel = new NetstackModel(netstack: netstackProxy)
- ..start();
-
- _OverlayModel wifiInfoOverlayModel = new _OverlayModel();
-
- final AuthenticationOverlayModel authModel = AuthenticationOverlayModel();
-
- UserPickerBaseShellModel userPickerBaseShellModel =
- new UserPickerBaseShellModel(
- onBaseShellStopped: () {
- netstackProxy.ctrl.close();
- netstackModel.dispose();
- },
- onLogin: () {
- wifiInfoOverlayModel.showing = false;
- },
- onWifiTapped: () {
- wifiInfoOverlayModel.showing = !wifiInfoOverlayModel.showing;
- },
- logger: logger,
- );
-
- Widget mainWidget = new Stack(
- fit: StackFit.passthrough,
- children: <Widget>[
- new UserPickerBaseShellScreen(
- launcher: startupContext.launcher,
- ),
- new ScopedModel<AuthenticationOverlayModel>(
- model: authModel,
- child: AuthenticationOverlay(),
- ),
- ],
- );
-
- Widget app = mainWidget;
-
- List<OverlayEntry> overlays = <OverlayEntry>[
- new OverlayEntry(
- builder: (BuildContext context) => new MediaQuery(
- data: const MediaQueryData(),
- child: new FocusScope(
- node: new FocusScopeNode(),
- autofocus: true,
- child: app,
- ),
- ),
- ),
- new OverlayEntry(
- builder: (BuildContext context) => new ScopedModel<_OverlayModel>(
- model: wifiInfoOverlayModel,
- child: new _WifiInfo(
- wifiWidget: new ApplicationWidget(
- url:
- 'fuchsia-pkg://fuchsia.com/wifi_settings#meta/wifi_settings.cmx',
- launcher: startupContext.launcher,
- ),
- ),
- ),
- ),
- ];
-
- _baseShellWidget = new BaseShellWidget<UserPickerBaseShellModel>(
- startupContext: startupContext,
- baseShellModel: userPickerBaseShellModel,
- authenticationUiContext: new AuthenticationUiContextImpl(
- onStartOverlay: authModel.onStartOverlay,
- onStopOverlay: authModel.onStopOverlay),
- child: new LayoutBuilder(
- builder: (BuildContext context, BoxConstraints constraints) =>
- (constraints.biggest == Size.zero)
- ? const Offstage()
- : new ScopedModel<NetstackModel>(
- model: netstackModel,
- child: new Overlay(initialEntries: overlays),
- ),
- ),
- );
-
- runApp(_baseShellWidget);
-
- _baseShellWidget.advertise();
-}
-
-class _WifiInfo extends StatelessWidget {
- final Widget wifiWidget;
-
- const _WifiInfo({@required this.wifiWidget}) : assert(wifiWidget != null);
-
- @override
- Widget build(BuildContext context) =>
- new ScopedModelDescendant<_OverlayModel>(
- builder: (
- BuildContext context,
- Widget child,
- _OverlayModel model,
- ) =>
- new Offstage(
- offstage: !model.showing,
- child: new Stack(
- children: <Widget>[
- new Listener(
- behavior: HitTestBehavior.opaque,
- onPointerDown: (PointerDownEvent event) {
- model.showing = false;
- },
- ),
- new Center(
- child: new FractionallySizedBox(
- widthFactor: 0.75,
- heightFactor: 0.75,
- child: new Container(
- margin: const EdgeInsets.all(8.0),
- child: new PhysicalModel(
- color: Colors.grey[900],
- elevation: _kIndicatorElevation,
- borderRadius: new BorderRadius.circular(8.0),
- child: wifiWidget,
- ),
- ),
- ),
- ),
- ],
- ),
- ),
- );
-}
-
-class _OverlayModel extends Model {
- bool _showing = false;
-
- set showing(bool showing) {
- if (_showing != showing) {
- _showing = showing;
- notifyListeners();
- }
- }
-
- bool get showing => _showing;
-}
diff --git a/bin/userpicker_base_shell/lib/time_stringer.dart b/bin/userpicker_base_shell/lib/time_stringer.dart
deleted file mode 100644
index b8020b3..0000000
--- a/bin/userpicker_base_shell/lib/time_stringer.dart
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright 2016 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'dart:async';
-
-import 'package:flutter/widgets.dart';
-import 'package:intl/intl.dart';
-
-final DateFormat _kTimeOnlyDateFormat = new DateFormat('h:mm', 'en_US');
-final DateFormat _kDateOnlyDateFormat = new DateFormat('EEEE MMM d', 'en_US');
-final DateFormat _kShortStringDateFormat = new DateFormat('h:mm', 'en_US');
-final DateFormat _kLongStringDateFormat = new DateFormat('EEEE h:mm', 'en_US');
-final DateFormat _kMeridiemOnlyFormat = new DateFormat('a', 'en_US');
-
-/// Creates time strings and notifies when they change.
-class TimeStringer extends Listenable {
- final Set<VoidCallback> _listeners = <VoidCallback>{};
- Timer _timer;
- int _offsetMinutes = 0;
-
- /// [listener] will be called whenever [shortString] or [longString] have
- /// changed.
- @override
- void addListener(VoidCallback listener) {
- _listeners.add(listener);
- if (_listeners.length == 1) {
- _scheduleTimer();
- }
- }
-
- /// [listener] will no longer be called whenever [shortString] or [longString]
- /// have changed.
- @override
- void removeListener(VoidCallback listener) {
- _listeners.remove(listener);
- if (_listeners.isEmpty) {
- _timer?.cancel();
- _timer = null;
- }
- }
-
- /// Returns the time only (eg. '10:34').
- String get timeOnly => _kTimeOnlyDateFormat
- .format(
- new DateTime.now(),
- )
- .toUpperCase();
-
- /// Returns the date only (eg. 'MONDAY AUG 3').
- String get dateOnly => _kDateOnlyDateFormat
- .format(
- new DateTime.now(),
- )
- .toUpperCase();
-
- /// Returns a short version of the time (eg. '10:34').
- String get shortString =>
- _kShortStringDateFormat.format(new DateTime.now()).toLowerCase();
-
- /// Returns a long version of the time including the day (eg. 'Monday 10:34').
- String get longString =>
- _kLongStringDateFormat.format(new DateTime.now()).toLowerCase();
-
- /// Returns the meridiem (eg. 'AM')
- String get meridiem =>
- _kMeridiemOnlyFormat.format(new DateTime.now()).toUpperCase();
-
- /// Returns the offset, in minutes.
- int get offsetMinutes => _offsetMinutes;
-
- set offsetMinutes(int offsetMinutes) {
- if (_offsetMinutes != offsetMinutes) {
- _offsetMinutes = offsetMinutes;
- _notifyListeners();
- }
- }
-
- void _scheduleTimer() {
- _timer?.cancel();
- _timer =
- new Timer(new Duration(seconds: 61 - new DateTime.now().second), () {
- _notifyListeners();
- _scheduleTimer();
- });
- }
-
- void _notifyListeners() {
- for (VoidCallback listener in _listeners.toList()) {
- listener();
- }
- }
-}
diff --git a/bin/userpicker_base_shell/lib/user_list.dart b/bin/userpicker_base_shell/lib/user_list.dart
deleted file mode 100644
index a04b479..0000000
--- a/bin/userpicker_base_shell/lib/user_list.dart
+++ /dev/null
@@ -1,388 +0,0 @@
-// Copyright 2017 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'package:fidl_fuchsia_modular_auth/fidl_async.dart';
-import 'package:flutter/material.dart';
-import 'package:lib.widgets/model.dart';
-import 'package:lib.widgets/widgets.dart';
-
-import 'user_picker_base_shell_model.dart';
-
-const double _kUserAvatarSizeLarge = 56.0;
-const double _kUserAvatarSizeSmall = 48.0;
-const double _kButtonWidthLarge = 128.0;
-const double _kButtonWidthSmall = 116.0;
-const double _kButtonFontSizeLarge = 16.0;
-const double _kButtonFontSizeSmall = 14.0;
-
-const TextStyle _kTextStyle = const TextStyle(
- color: Colors.white,
- fontSize: 10.0,
- letterSpacing: 1.0,
- fontWeight: FontWeight.w300,
-);
-
-final BorderRadius _kButtonBorderRadiusPhone =
- new BorderRadius.circular(_kUserAvatarSizeSmall / 2.0);
-final BorderRadius _kButtonBorderRadiusLarge =
- new BorderRadius.circular(_kUserAvatarSizeLarge / 2.0);
-
-/// Shows the list of users and allows the user to add new users
-class UserList extends StatelessWidget {
- /// True if login should be disabled.
- final bool loginDisabled;
-
- /// Constructor.
- const UserList({this.loginDisabled = false});
-
- Widget _buildUserCircle({
- Account account,
- VoidCallback onTap,
- bool isSmall,
- }) {
- double size = isSmall ? _kUserAvatarSizeSmall : _kUserAvatarSizeLarge;
- return new GestureDetector(
- onTap: () => onTap?.call(),
- child: new Container(
- height: size,
- width: size,
- child: new Alphatar.fromNameAndUrl(
- name: account.displayName,
- avatarUrl: _getImageUrl(account),
- size: size,
- ),
- ),
- );
- }
-
- Widget _buildIconButton({
- VoidCallback onTap,
- bool isSmall,
- IconData icon,
- }) {
- double size = isSmall ? _kUserAvatarSizeSmall : _kUserAvatarSizeLarge;
- return _buildUserActionButton(
- onTap: () => onTap?.call(),
- width: size,
- isSmall: isSmall,
- child: new Center(
- child: new Icon(
- icon,
- color: Colors.white,
- size: size / 2.0,
- ),
- ),
- );
- }
-
- Widget _buildUserActionButton({
- Widget child,
- VoidCallback onTap,
- bool isSmall,
- double width,
- bool isDisabled = false,
- }) {
- return new GestureDetector(
- onTap: isDisabled ? null : () => onTap?.call(),
- child: new Container(
- height: isSmall ? _kUserAvatarSizeSmall : _kUserAvatarSizeLarge,
- width: width ?? (isSmall ? _kButtonWidthSmall : _kButtonWidthLarge),
- alignment: FractionalOffset.center,
- margin: const EdgeInsets.only(left: 16.0),
- decoration: new BoxDecoration(
- borderRadius:
- isSmall ? _kButtonBorderRadiusPhone : _kButtonBorderRadiusLarge,
- border: new Border.all(
- color: isDisabled ? Colors.grey : Colors.white,
- width: 1.0,
- ),
- ),
- child: child,
- ),
- );
- }
-
- Widget _buildExpandedUserActions({
- UserPickerBaseShellModel model,
- bool isSmall,
- }) {
- double fontSize = isSmall ? _kButtonFontSizeSmall : _kButtonFontSizeLarge;
-
- if (loginDisabled) {
- return new Row(
- children: <Widget>[
- _buildUserActionButton(
- child: new Text(
- 'RESET',
- style: new TextStyle(
- fontSize: fontSize,
- color: Colors.white,
- ),
- ),
- onTap: model.resetTapped,
- isSmall: isSmall,
- ),
- _buildUserActionButton(
- child: new Text(
- 'WIFI',
- style: new TextStyle(
- fontSize: fontSize,
- color: Colors.white,
- ),
- ),
- onTap: model.wifiTapped,
- isSmall: isSmall,
- ),
- _buildUserActionButton(
- child: new Text(
- 'LOGIN DISABLED => No SessionShell configured',
- style: new TextStyle(
- fontSize: fontSize,
- color: Colors.white,
- ),
- ),
- onTap: () {},
- isSmall: isSmall,
- isDisabled: true,
- ),
- ],
- );
- }
- return new Row(
- children: <Widget>[
- _buildIconButton(
- onTap: () => model.hideUserActions(),
- isSmall: isSmall,
- icon: Icons.close,
- ),
- _buildUserActionButton(
- child: new Text(
- 'RESET',
- style: new TextStyle(
- fontSize: fontSize,
- color: Colors.white,
- ),
- ),
- onTap: model.resetTapped,
- isSmall: isSmall,
- ),
- _buildUserActionButton(
- child: new Text(
- 'WIFI',
- style: new TextStyle(
- fontSize: fontSize,
- color: Colors.white,
- ),
- ),
- onTap: model.wifiTapped,
- isSmall: isSmall,
- ),
- _buildUserActionButton(
- child: new Text(
- 'LOGIN',
- style: new TextStyle(
- fontSize: fontSize,
- color: Colors.white,
- ),
- ),
- onTap: () {
- model
- ..createAndLoginUser()
- ..hideUserActions();
- },
- isSmall: isSmall,
- ),
- _buildUserActionButton(
- child: new Text(
- 'GUEST',
- style: new TextStyle(
- fontSize: fontSize,
- color: Colors.white,
- ),
- ),
- onTap: () {
- model
- ..login(null)
- ..hideUserActions();
- },
- isSmall: isSmall,
- ),
- ],
- );
- }
-
- String _getImageUrl(Account account) {
- if (account.imageUrl == null) {
- return null;
- }
- Uri uri = Uri.parse(account.imageUrl);
- if (uri.queryParameters['sz'] != null) {
- Map<String, dynamic> queryParameters = new Map<String, dynamic>.from(
- uri.queryParameters,
- );
- queryParameters['sz'] = '160';
- uri = uri.replace(queryParameters: queryParameters);
- }
- return uri.toString();
- }
-
- Widget _buildUserEntry({
- Account account,
- VoidCallback onTap,
- bool removable = true,
- bool isSmall,
- UserPickerBaseShellModel model,
- }) {
- Widget userCard = _buildUserCircle(
- account: account,
- onTap: onTap,
- isSmall: isSmall,
- );
-
- if (!removable) {
- return userCard;
- }
-
- Widget userImage = new LongPressDraggable<Account>(
- child: userCard,
- feedback: userCard,
- data: account,
- childWhenDragging: new Opacity(opacity: 0.0, child: userCard),
- feedbackOffset: Offset.zero,
- dragAnchor: DragAnchor.child,
- maxSimultaneousDrags: 1,
- onDragStarted: () => model.addDraggedUser(account),
- onDraggableCanceled: (_, __) => model.removeDraggedUser(account),
- );
-
- if (model.showingUserActions) {
- return new Padding(
- padding: const EdgeInsets.only(left: 16.0),
- child: new Column(
- mainAxisAlignment: MainAxisAlignment.end,
- children: <Widget>[
- new Padding(
- padding: const EdgeInsets.only(bottom: 8.0),
- child: new Text(
- account.displayName,
- textAlign: TextAlign.center,
- maxLines: 1,
- style: _kTextStyle,
- ),
- ),
- userImage,
- ],
- ),
- );
- } else {
- return new Padding(
- padding: const EdgeInsets.only(left: 16.0),
- child: userImage,
- );
- }
- }
-
- Widget _buildUserList(UserPickerBaseShellModel model) {
- return new LayoutBuilder(
- builder: (BuildContext context, BoxConstraints constraints) {
- List<Widget> children = <Widget>[];
-
- bool isSmall =
- constraints.maxWidth < 600.0 || constraints.maxHeight < 600.0;
-
- if (model.showingUserActions) {
- children.add(
- new Align(
- alignment: FractionalOffset.bottomCenter,
- child: _buildExpandedUserActions(
- model: model,
- isSmall: isSmall,
- ),
- ),
- );
- } else {
- children.add(
- new Align(
- alignment: FractionalOffset.bottomCenter,
- child: _buildIconButton(
- onTap: model.showUserActions,
- isSmall: isSmall,
- icon: Icons.add,
- ),
- ),
- );
- }
-
- children.addAll(
- model.accounts.map(
- (Account account) => new Align(
- alignment: FractionalOffset.bottomCenter,
- child: _buildUserEntry(
- account: account,
- onTap: () {
- model
- ..login(account.id)
- ..hideUserActions();
- },
- isSmall: isSmall,
- model: model,
- ),
- ),
- ),
- );
-
- return new Container(
- height: (isSmall ? _kUserAvatarSizeSmall : _kUserAvatarSizeLarge) +
- 24.0 +
- (model.showingUserActions ? 24.0 : 0.0),
- child: new AnimatedOpacity(
- duration: const Duration(milliseconds: 250),
- opacity: model.showingRemoveUserTarget ? 0.0 : 1.0,
- child: new ListView(
- padding: const EdgeInsets.only(
- bottom: 24.0,
- right: 24.0,
- ),
- scrollDirection: Axis.horizontal,
- reverse: true,
- physics: const BouncingScrollPhysics(),
- shrinkWrap: true,
- children: children,
- ),
- ),
- );
- },
- );
- }
-
- @override
- Widget build(BuildContext context) =>
- new ScopedModelDescendant<UserPickerBaseShellModel>(builder: (
- BuildContext context,
- Widget child,
- UserPickerBaseShellModel model,
- ) {
- if (model.showingLoadingSpinner) {
- return new Stack(
- fit: StackFit.passthrough,
- children: <Widget>[
- new Center(
- child: new Container(
- width: 64.0,
- height: 64.0,
- child: const FuchsiaSpinner(),
- ),
- ),
- ],
- );
- } else {
- return new Stack(
- fit: StackFit.passthrough,
- children: <Widget>[
- _buildUserList(model),
- ],
- );
- }
- });
-}
diff --git a/bin/userpicker_base_shell/lib/user_picker_base_shell_model.dart b/bin/userpicker_base_shell/lib/user_picker_base_shell_model.dart
deleted file mode 100644
index ceef118..0000000
--- a/bin/userpicker_base_shell/lib/user_picker_base_shell_model.dart
+++ /dev/null
@@ -1,182 +0,0 @@
-// Copyright 2017 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'dart:async';
-import 'dart:io';
-
-import 'package:fidl_fuchsia_cobalt/fidl_async.dart' as cobalt;
-import 'package:fidl_fuchsia_modular_auth/fidl_async.dart';
-import 'package:fidl_fuchsia_sys/fidl_async.dart';
-import 'package:fidl_fuchsia_ui_policy/fidl_async.dart';
-import 'package:flutter/foundation.dart';
-import 'package:flutter/material.dart';
-import 'package:flutter/scheduler.dart';
-import 'package:lib.base_shell/base_model.dart';
-import 'package:lib.widgets/model.dart';
-
-export 'package:lib.widgets/model.dart'
- show ScopedModel, ScopedModelDescendant, ModelFinder;
-
-/// Function signature for GetPresentationMode callback
-typedef GetPresentationModeCallback = void Function(PresentationMode mode);
-
-const Duration _kShowLoadingSpinnerDelay = const Duration(milliseconds: 500);
-
-/// Model that provides common state
-class UserPickerBaseShellModel extends CommonBaseShellModel
- with TickerProviderModelMixin
- implements
- ServiceProvider,
- KeyboardCaptureListenerHack,
- PointerCaptureListenerHack {
- /// Called when the base shell stops.
- final VoidCallback onBaseShellStopped;
-
- /// Called when wifi is tapped.
- final VoidCallback onWifiTapped;
-
- /// Called when a user is logging in.
- final VoidCallback onLogin;
-
- bool _showingUserActions = false;
- bool _addingUser = false;
- bool _loadingChildView = false;
- final Set<Account> _draggedUsers = <Account>{};
-
- /// Constructor
- UserPickerBaseShellModel({
- this.onBaseShellStopped,
- this.onWifiTapped,
- this.onLogin,
- cobalt.Logger logger,
- }) : super(logger);
-
- @override
- void onStop() {
- onBaseShellStopped?.call();
- super.dispose();
- super.onStop();
- }
-
- /// Refreshes the list of users.
- @override
- Future<void> refreshUsers() async {
- _updateShowLoadingSpinner();
- notifyListeners();
- await super.refreshUsers();
- _updateShowLoadingSpinner();
- notifyListeners();
- }
-
- /// Call when wifi is tapped.
- void wifiTapped() {
- onWifiTapped?.call();
- }
-
- /// Call when reset is tapped.
- void resetTapped() {
- File dm = new File('/dev/misc/dmctl');
- print('dmctl exists? ${dm.existsSync()}');
- if (dm.existsSync()) {
- dm.writeAsStringSync('reboot', flush: true);
- }
- }
-
- /// Create a new user and login with that user
- @override
- Future createAndLoginUser() async {
- _addingUser = true;
- _updateShowLoadingSpinner();
-
- await super.createAndLoginUser();
-
- _addingUser = false;
- _updateShowLoadingSpinner();
- notifyListeners();
- }
-
- /// Login with given user
- @override
- Future<void> login(String accountId) async {
- _loadingChildView = true;
- _updateShowLoadingSpinner();
- notifyListeners();
-
- await super.login(accountId);
-
- _loadingChildView = false;
- _updateShowLoadingSpinner();
- notifyListeners();
- }
-
- /// Show advanced user actions such as:
- /// * Guest login
- /// * Create new account
- void showUserActions() {
- _showingUserActions = true;
- notifyListeners();
- }
-
- /// Hide advanced user actions such as:
- void hideUserActions() {
- _showingUserActions = false;
- notifyListeners();
- }
-
- /// Add a user to the list of dragged users
- void addDraggedUser(Account account) {
- _draggedUsers.add(account);
- notifyListeners();
- }
-
- /// Remove a user from the list of dragged users
- void removeDraggedUser(Account account) {
- _draggedUsers.remove(account);
- notifyListeners();
- }
-
- /// Show the loading spinner if true
- bool get showingLoadingSpinner => _showingLoadingSpinner;
-
- /// Show the system clock if true
- bool get showingClock =>
- !showingLoadingSpinner &&
- _draggedUsers.isEmpty &&
- childViewConnection == null;
-
- /// If true, show advanced user actions
- bool get showingUserActions => _showingUserActions;
-
- /// If true, show the remove user target
- bool get showingRemoveUserTarget => _draggedUsers.isNotEmpty;
-
- /// Returns true the add user dialog is showing
- bool get addingUser => _addingUser;
-
- /// Returns true if we are "loading" the child view
- bool get loadingChildView => _loadingChildView;
-
- bool _showingLoadingSpinner = true;
- Timer _showLoadingSpinnerTimer;
-
- void _updateShowLoadingSpinner() {
- if (accounts == null || _addingUser || _loadingChildView) {
- if (_showingLoadingSpinner == null) {
- _showLoadingSpinnerTimer = new Timer(
- _kShowLoadingSpinnerDelay,
- () {
- _showingLoadingSpinner = true;
- _showLoadingSpinnerTimer = null;
- notifyListeners();
- },
- );
- }
- } else {
- _showLoadingSpinnerTimer?.cancel();
- _showLoadingSpinnerTimer = null;
- _showingLoadingSpinner = false;
- notifyListeners();
- }
- }
-}
diff --git a/bin/userpicker_base_shell/lib/user_picker_base_shell_screen.dart b/bin/userpicker_base_shell/lib/user_picker_base_shell_screen.dart
deleted file mode 100644
index 159f8fa..0000000
--- a/bin/userpicker_base_shell/lib/user_picker_base_shell_screen.dart
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2017 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-import 'package:fidl_fuchsia_sys/fidl_async.dart';
-import 'package:flutter/material.dart';
-import 'package:fuchsia_scenic_flutter/child_view.dart' show ChildView;
-import 'package:meta/meta.dart';
-
-import 'clock.dart';
-import 'user_picker_base_shell_model.dart';
-import 'user_picker_screen.dart';
-
-/// The root widget which displays all the other windows of this app.
-class UserPickerBaseShellScreen extends StatelessWidget {
- /// Launcher to launch the kernel panic module if needed.
- final Launcher launcher;
-
- /// Constructor.
- const UserPickerBaseShellScreen({
- @required this.launcher,
- Key key,
- }) : super(key: key);
- @override
- Widget build(BuildContext context) {
- return new ScopedModelDescendant<UserPickerBaseShellModel>(
- builder: (
- BuildContext context,
- Widget child,
- UserPickerBaseShellModel model,
- ) {
- List<Widget> stackChildren = <Widget>[];
-
- if (model.childViewConnection == null || model.loadingChildView) {
- stackChildren.addAll(<Widget>[
- new UserPickerScreen(),
- new Align(
- alignment: FractionalOffset.center,
- child: new Offstage(
- offstage: !model.showingClock,
- child: new Clock(),
- ),
- ),
- ]);
- }
-
- if (model.childViewConnection != null) {
- stackChildren.add(new Offstage(
- child: new Container(
- color: Colors.black,
- child: new ChildView(connection: model.childViewConnection),
- ),
- offstage: model.loadingChildView,
- ));
- }
-
- return new Stack(fit: StackFit.expand, children: stackChildren);
- },
- );
- }
-}
diff --git a/bin/userpicker_base_shell/lib/user_picker_screen.dart b/bin/userpicker_base_shell/lib/user_picker_screen.dart
deleted file mode 100644
index 0a73bc0..0000000
--- a/bin/userpicker_base_shell/lib/user_picker_screen.dart
+++ /dev/null
@@ -1,192 +0,0 @@
-// Copyright 2017 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'dart:ui' show lerpDouble;
-
-import 'package:fidl_fuchsia_modular_auth/fidl_async.dart';
-import 'package:flutter/material.dart';
-
-import 'user_list.dart';
-import 'user_picker_base_shell_model.dart';
-
-const double _kRemovalTargetSize = 112.0;
-
-/// Displays a [UserList] a shutdown button, a new user button, the
-/// fuchsia logo, and a background image.
-class UserPickerScreen extends StatelessWidget {
- @override
- Widget build(BuildContext context) {
- return new ScopedModelDescendant<UserPickerBaseShellModel>(
- builder: (
- BuildContext context,
- Widget child,
- UserPickerBaseShellModel model,
- ) {
- return new Material(
- color: Colors.grey[900],
- child: new Stack(
- fit: StackFit.passthrough,
- children: <Widget>[
- /// Add user picker for selecting users and adding new users
- new Align(
- alignment: FractionalOffset.bottomRight,
- child: new RepaintBoundary(
- child: new UserList(
- loginDisabled: false,
- ),
- ),
- ),
-
- // Add user removal target
- new Align(
- alignment: FractionalOffset.center,
- child: new RepaintBoundary(
- child: new Container(
- child: new DragTarget<Account>(
- onWillAccept: (Account data) => true,
- onAccept: model.removeUser,
- builder: (
- _,
- List<Account> candidateData,
- __,
- ) =>
- new _UserRemovalTarget(
- show: model.showingRemoveUserTarget,
- grow: candidateData.isNotEmpty,
- ),
- ),
- ),
- ),
- ),
- ],
- ),
- );
- },
- );
- }
-}
-
-/// Displays a removal target for removing users
-class _UserRemovalTarget extends StatefulWidget {
- /// Grows the target by some percentage.
- final bool grow;
-
- /// Shows the target.
- final bool show;
-
- /// Constructor.
- const _UserRemovalTarget({this.show, this.grow});
-
- @override
- _UserRemovalTargetState createState() => new _UserRemovalTargetState();
-}
-
-class _UserRemovalTargetState extends State<_UserRemovalTarget>
- with TickerProviderStateMixin {
- AnimationController _masterAnimationController;
- AnimationController _initialScaleController;
- CurvedAnimation _initialScaleCurvedAnimation;
- AnimationController _scaleController;
- CurvedAnimation _scaleCurvedAnimation;
-
- @override
- void initState() {
- super.initState();
- _masterAnimationController = new AnimationController(
- vsync: this,
- duration: const Duration(milliseconds: 500),
- );
- _initialScaleController = new AnimationController(
- vsync: this,
- duration: const Duration(milliseconds: 250),
- );
- _initialScaleCurvedAnimation = new CurvedAnimation(
- parent: _initialScaleController,
- curve: Curves.fastOutSlowIn,
- reverseCurve: Curves.fastOutSlowIn,
- );
- _scaleController = new AnimationController(
- vsync: this,
- duration: const Duration(milliseconds: 250),
- );
- _scaleCurvedAnimation = new CurvedAnimation(
- parent: _scaleController,
- curve: Curves.fastOutSlowIn,
- reverseCurve: Curves.fastOutSlowIn,
- );
- _initialScaleController.addStatusListener((AnimationStatus status) {
- if (!widget.show && _initialScaleController.isDismissed) {
- _masterAnimationController.stop();
- }
- });
-
- if (widget.show) {
- _masterAnimationController.repeat();
- _initialScaleController.forward();
- if (widget.grow) {
- _scaleController.forward();
- }
- }
- }
-
- @override
- void didUpdateWidget(_) {
- super.didUpdateWidget(_);
- if (widget.grow) {
- _scaleController.forward();
- } else {
- _scaleController.reverse();
- }
- if (widget.show) {
- _masterAnimationController.repeat();
- _initialScaleController.forward();
- } else {
- _initialScaleController.value = 0.0;
- }
- }
-
- @override
- void dispose() {
- _scaleController.dispose();
- _initialScaleController.dispose();
- super.dispose();
- }
-
- @override
- Widget build(BuildContext context) => new Container(
- child: new AnimatedBuilder(
- animation: _masterAnimationController,
- builder: (BuildContext context, Widget child) => new Transform(
- alignment: FractionalOffset.center,
- transform: new Matrix4.identity().scaled(
- lerpDouble(1.0, 0.7, _scaleCurvedAnimation.value) *
- _initialScaleCurvedAnimation.value,
- lerpDouble(1.0, 0.7, _scaleCurvedAnimation.value) *
- _initialScaleCurvedAnimation.value,
- ),
- child: new Container(
- width: _kRemovalTargetSize,
- height: _kRemovalTargetSize,
- decoration: new BoxDecoration(
- borderRadius:
- new BorderRadius.circular(_kRemovalTargetSize / 2.0),
- border: new Border.all(color: Colors.white.withAlpha(200)),
- color: Colors.white.withAlpha(
- lerpDouble(0, 100.0, _scaleCurvedAnimation.value)
- .toInt()),
- ),
- child: Center(
- child: const Text(
- 'REMOVE',
- style: const TextStyle(
- color: Colors.white,
- fontSize: 16.0,
- ),
- ),
- ),
- ),
- ),
- ),
- );
-}
diff --git a/bin/userpicker_base_shell/meta/userpicker_base_shell.cmx b/bin/userpicker_base_shell/meta/userpicker_base_shell.cmx
deleted file mode 100644
index 4c1b420..0000000
--- a/bin/userpicker_base_shell/meta/userpicker_base_shell.cmx
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "program": {
- "data": "data/userpicker_base_shell"
- },
- "sandbox": {
- "services": [
- "fuchsia.cobalt.LoggerFactory",
- "fuchsia.fonts.Provider",
- "fuchsia.logger.LogSink",
- "fuchsia.modular.Clipboard",
- "fuchsia.modular.ContextWriter",
- "fuchsia.net.Connectivity",
- "fuchsia.netstack.Netstack",
- "fuchsia.sys.Environment",
- "fuchsia.ui.input.ImeService",
- "fuchsia.ui.policy.Presenter",
- "fuchsia.ui.scenic.Scenic",
- "fuchsia.ui.viewsv1.ViewManager"
- ],
- "dev": [ "misc" ],
- "system": [ "data/sysui" ]
- }
-}
diff --git a/bin/userpicker_base_shell/pubspec.yaml b/bin/userpicker_base_shell/pubspec.yaml
deleted file mode 100644
index 76bca92..0000000
--- a/bin/userpicker_base_shell/pubspec.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-# Copyright 2017 The Fuchsia Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-name: userpicker_base_shell
diff --git a/lib/base_shell/BUILD.gn b/lib/base_shell/BUILD.gn
deleted file mode 100644
index 6bfb266..0000000
--- a/lib/base_shell/BUILD.gn
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright 2018 The Fuchsia Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import("//build/dart/dart_library.gni")
-
-dart_library("lib.base_shell") {
- package_name = "lib.base_shell"
- sources_required = false
-
- sources = [
- "base_model.dart",
- "netstack_model.dart",
- "user_manager.dart",
- # Including these sources triggers analysis errors.
- # "base_shell_model.dart",
- # "base_shell_widget.dart",
- ]
-
- deps = [
- "//sdk/fidl/fuchsia.modular",
- "//sdk/fidl/fuchsia.modular.auth",
- "//sdk/fidl/fuchsia.netstack",
- "//sdk/fidl/fuchsia.timezone",
- "//sdk/fidl/fuchsia.ui.input",
- "//sdk/fidl/fuchsia.ui.views",
- "//third_party/dart-pkg/git/flutter/packages/flutter",
- "//topaz/public/dart/fidl",
- "//topaz/public/dart/fuchsia_scenic_flutter",
- "//topaz/public/dart/widgets:lib.widgets",
- "//zircon/public/fidl/fuchsia-net:fuchsia-net",
- ]
-}
diff --git a/lib/base_shell/analysis_options.yaml b/lib/base_shell/analysis_options.yaml
deleted file mode 100644
index 49a21d7..0000000
--- a/lib/base_shell/analysis_options.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-# Copyright 2018 The Fuchsia Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-include: ../analysis_options.yaml
-
diff --git a/lib/base_shell/lib/base_model.dart b/lib/base_shell/lib/base_model.dart
deleted file mode 100644
index 0f6ce90..0000000
--- a/lib/base_shell/lib/base_model.dart
+++ /dev/null
@@ -1,394 +0,0 @@
-// Copyright 2017 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'dart:async';
-import 'dart:developer' show Timeline;
-
-import 'package:fidl/fidl.dart';
-import 'package:fidl_fuchsia_cobalt/fidl_async.dart' as cobalt;
-import 'package:fidl_fuchsia_modular/fidl_async.dart';
-import 'package:fidl_fuchsia_modular_auth/fidl_async.dart';
-import 'package:fidl_fuchsia_netstack/fidl_async.dart';
-import 'package:fidl_fuchsia_sys/fidl_async.dart';
-import 'package:fidl_fuchsia_ui_gfx/fidl_async.dart';
-import 'package:fidl_fuchsia_ui_input/fidl_async.dart' as input;
-import 'package:fidl_fuchsia_ui_policy/fidl_async.dart';
-import 'package:fidl_fuchsia_ui_views/fidl_async.dart';
-import 'package:fuchsia_logger/logger.dart';
-import 'package:fuchsia_scenic_flutter/child_view_connection.dart'
- show ChildViewConnection;
-import 'package:fuchsia_services/services.dart' as app;
-import 'package:meta/meta.dart';
-import 'package:zircon/zircon.dart' show Channel, EventPair;
-
-import 'base_shell_model.dart';
-import 'netstack_model.dart';
-import 'user_manager.dart';
-
-export 'package:lib.widgets/model.dart'
- show ScopedModel, ScopedModelDescendant, ModelFinder;
-
-/// Function signature for GetPresentationMode callback
-typedef GetPresentationModeCallback = void Function(PresentationMode mode);
-
-const Duration _kCobaltTimerTimeout = const Duration(seconds: 20);
-const int _kSessionShellLoginTimeMetricId = 14;
-
-// This class is extends the Presentation protocol and implements and PresentationModeListener.
-// It delegates the methods to the Presentation received by the CommonBaseShellModel that owns it.
-class CommonBaseShellPresentationImpl extends Presentation
- implements PresentationModeListener {
- final CommonBaseShellModel _model;
-
- CommonBaseShellPresentationImpl(this._model);
-
- /// |Presentation|.
- @override
- // ignore: avoid_positional_boolean_parameters
- Future<void> enableClipping(bool enabled) async {
- await _model.presentation.enableClipping(enabled);
- }
-
- @override
- Future<void> useOrthographicView() async {
- await _model.presentation.useOrthographicView();
- }
-
- @override
- Future<void> usePerspectiveView() async {
- await _model.presentation.usePerspectiveView();
- }
-
- @override
- Future<void> setRendererParams(List<RendererParam> params) async {
- await _model.presentation.setRendererParams(params);
- }
-
- @override
- Future<void> setDisplayUsage(DisplayUsage usage) async {
- await _model.presentation.setDisplayUsage(usage);
- }
-
- @override
- // ignore: avoid_positional_boolean_parameters
- Future<void> setDisplayRotation(
- double displayRotationDegrees, bool animate) async {
- await _model.presentation
- .setDisplayRotation(displayRotationDegrees, animate);
- }
-
- @override
- Future<void> setDisplaySizeInMm(num widthInMm, num heightInMm) async {
- await _model.presentation.setDisplaySizeInMm(widthInMm, heightInMm);
- }
-
- @override
- Future<void> captureKeyboardEventHack(input.KeyboardEvent eventToCapture,
- InterfaceHandle<KeyboardCaptureListenerHack> listener) async {
- await _model.presentation
- .captureKeyboardEventHack(eventToCapture, listener);
- }
-
- @override
- Future<void> capturePointerEventsHack(
- InterfaceHandle<PointerCaptureListenerHack> listener) async {
- await _model.presentation.capturePointerEventsHack(listener);
- }
-
- @override
- Future<PresentationMode> getPresentationMode() async {
- return await _model.presentation.getPresentationMode();
- }
-
- @override
- Future<void> setPresentationModeListener(
- InterfaceHandle<PresentationModeListener> listener) async {
- await _model.presentation.setPresentationModeListener(listener);
- }
-
- /// |PresentationModeListener|.
- @override
- Future<void> onModeChanged() async {
- PresentationMode mode = await getPresentationMode();
- log.info('Presentation mode changed to: $mode');
- switch (mode) {
- case PresentationMode.tent:
- await setDisplayRotation(180.0, true);
- break;
- case PresentationMode.tablet:
- // TODO(sanjayc): Figure out up/down orientation.
- await setDisplayRotation(90.0, true);
- break;
- case PresentationMode.laptop:
- default:
- await setDisplayRotation(0.0, true);
- break;
- }
- }
-}
-
-/// Provides common features needed by all base shells.
-///
-/// This includes user management, presentation handling,
-/// and keyboard shortcuts.
-class CommonBaseShellModel extends BaseShellModel
- implements
- ServiceProvider,
- KeyboardCaptureListenerHack,
- PointerCaptureListenerHack {
- /// Handles login, logout, and adding/removing users.
- ///
- /// Shouldn't be used before onReady.
- BaseShellUserManager _userManager;
-
- NetstackModel _netstackModel;
-
- /// Logs metrics to cobalt.
- final cobalt.Logger logger;
-
- /// A list of accounts that are already logged in on the device.
- ///
- /// Only updated after [refreshUsers] is called.
- List<Account> _accounts;
-
- /// Childview connection that contains the session shell.
- ChildViewConnection _childViewConnection;
-
- final List<KeyboardCaptureListenerHackBinding> _keyBindings = [];
-
- final PresentationModeListenerBinding _presentationModeListenerBinding =
- PresentationModeListenerBinding();
- final PointerCaptureListenerHackBinding _pointerCaptureListenerBinding =
- PointerCaptureListenerHackBinding();
-
- // Because this base shell only supports a single user logged in at a time,
- // we don't need to maintain separate ServiceProvider for each logged-in user.
- final ServiceProviderBinding _serviceProviderBinding =
- ServiceProviderBinding();
- final List<PresentationBinding> _presentationBindings =
- <PresentationBinding>[];
-
- CommonBaseShellPresentationImpl _presentationImpl;
-
- /// Constructor
- CommonBaseShellModel(this.logger) : super() {
- _presentationImpl = CommonBaseShellPresentationImpl(this);
- }
-
- List<Account> get accounts => _accounts;
-
- /// Returns the authenticated child view connection
- ChildViewConnection get childViewConnection => _childViewConnection;
- ChildViewConnection get childViewConnectionNew => _childViewConnection;
-
- set shouldCreateNewChildView(bool should) {}
-
- // |ServiceProvider|.
- @override
- Future<void> connectToService(String serviceName, Channel channel) {
- // TODO(SCN-595) mozart.Presentation is being renamed to ui.Presentation.
- if (serviceName == 'ui.Presentation') {
- _presentationBindings.add(PresentationBinding()
- ..bind(_presentationImpl, InterfaceRequest<Presentation>(channel)));
- } else {
- log.warning(
- 'UserPickerBaseShell: received request for unknown service: $serviceName !');
- channel.close();
- }
-
- return null;
- }
-
- /// Create a new user and login with that user
- Future createAndLoginUser() async {
- try {
- final userId = await _userManager.addUser();
- await login(userId);
- } on UserLoginException catch (ex) {
- log.severe(ex);
- } finally {
- notifyListeners();
- }
- }
-
- /// Whether or not the device has an internet connection.
- ///
- /// Currently, having an IP is equivalent to having internet, although
- /// this is not completely reliable. This will be always false until
- /// onReady is called.
- bool get hasInternetConnection =>
- _netstackModel?.networkReachable?.value ?? false;
-
- Future<void> waitForInternetConnection() async {
- if (hasInternetConnection) {
- return null;
- }
-
- final completer = Completer<void>();
-
- void listener() {
- if (hasInternetConnection) {
- _netstackModel.removeListener(listener);
- completer.complete();
- }
- }
-
- _netstackModel.addListener(listener);
-
- return completer.future;
- }
-
- /// Login with given user
- Future<void> login(String accountId) async {
- if (_serviceProviderBinding.isBound) {
- log.warning(
- 'Ignoring unsupported attempt to log in'
- ' while already logged in!',
- );
- return;
- }
-
- Timeline.instantSync('logging in', arguments: {'accountId': '$accountId'});
- await logger
- .startTimer(
- _kSessionShellLoginTimeMetricId,
- 0,
- '',
- 'session_shell_login_timer_id',
- DateTime.now().millisecondsSinceEpoch,
- _kCobaltTimerTimeout.inSeconds)
- .then((status) {
- if (status != cobalt.Status.ok) {
- log.warning(
- 'Failed to start timer metric '
- '$_kSessionShellLoginTimeMetricId: $status. ',
- );
- }
- });
-
- final InterfacePair<ServiceProvider> serviceProvider =
- InterfacePair<ServiceProvider>();
-
- _serviceProviderBinding.bind(this, serviceProvider.passRequest());
-
- final viewOwnerHandle =
- _userManager.login(accountId, serviceProvider.passHandle());
-
- _childViewConnection = ChildViewConnection(
- ViewHolderToken(
- value: EventPair(viewOwnerHandle.passChannel().passHandle())),
- onAvailable: (ChildViewConnection connection) {
- log.info('BaseShell: Child view connection available!');
- connection.requestFocus();
- notifyListeners();
- },
- onUnavailable: (ChildViewConnection connection) {
- log.info('BaseShell: Child view connection now unavailable!');
- onLogout();
- notifyListeners();
- },
- );
-
- notifyListeners();
- }
-
- /// Called when the the session shell logs out.
- @mustCallSuper
- Future<void> onLogout() async {
- _childViewConnection = null;
- _serviceProviderBinding.close();
- for (PresentationBinding presentationBinding in _presentationBindings) {
- presentationBinding.close();
- }
- await refreshUsers();
- notifyListeners();
- }
-
- /// |KeyboardCaptureListener|.
- @override
- Future<void> onEvent(input.KeyboardEvent ev) async {}
-
- /// |PointerCaptureListener|.
- @override
- Future<void> onPointerEvent(input.PointerEvent event) async {}
-
- // |BaseShellModel|.
- // TODO: revert to default state when client logs out.
- @mustCallSuper
- @override
- Future<void> onReady(
- UserProvider userProvider,
- BaseShellContext baseShellContext,
- Presentation presentation,
- ) async {
- super.onReady(userProvider, baseShellContext, presentation);
-
- final netstackProxy = NetstackProxy();
- app.connectToEnvironmentService(netstackProxy);
- _netstackModel = NetstackModel(netstack: netstackProxy)..start();
-
- await presentation
- .capturePointerEventsHack(_pointerCaptureListenerBinding.wrap(this));
- await presentation.setPresentationModeListener(
- _presentationModeListenerBinding.wrap(_presentationImpl));
-
- _userManager = BaseShellUserManager(userProvider);
-
- _userManager.onLogout.listen((_) async {
- await logger
- .endTimer(
- 'session_shell_log_out_timer_id',
- DateTime.now().millisecondsSinceEpoch,
- _kCobaltTimerTimeout.inSeconds)
- .then((status) {
- if (status != cobalt.Status.ok) {
- log.warning(
- 'Failed to end timer metric '
- 'session_shell_log_out_timer_id: $status. ',
- );
- }
- });
-
- log.info('UserPickerBaseShell: User logged out!');
- await onLogout();
- });
-
- await refreshUsers();
- }
-
- // |BaseShellModel|
- // TODO: revert to default state when client logs out.
- @override
- void onStop() {
- for (final binding in _keyBindings) {
- binding.close();
- }
- _presentationModeListenerBinding.close();
- _netstackModel.dispose();
- super.onStop();
- }
-
- // TODO: revert to default state when client logs out.
- /// Refreshes the list of users.
- Future<void> refreshUsers() async {
- _accounts = List<Account>.from(await _userManager.getPreviousUsers());
- notifyListeners();
- }
-
- // TODO: revert to default state when client logs out.
- /// Permanently removes the user.
- Future removeUser(Account account) async {
- try {
- await _userManager.removeUser(account.id);
- } on UserLoginException catch (ex) {
- log.severe(ex);
- } finally {
- await refreshUsers();
- }
- }
-
- @override
- // TODO: implement $serviceData
- ServiceData get $serviceData => null;
-}
diff --git a/lib/base_shell/lib/base_shell_model.dart b/lib/base_shell/lib/base_shell_model.dart
deleted file mode 100644
index aaa6435..0000000
--- a/lib/base_shell/lib/base_shell_model.dart
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2017 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'package:fidl_fuchsia_modular/fidl_async.dart';
-import 'package:fidl_fuchsia_ui_policy/fidl_async.dart';
-import 'package:lib.widgets/model.dart';
-import 'package:meta/meta.dart';
-
-export 'package:lib.widgets/model.dart' show ScopedModel, ScopedModelDescendant;
-
-/// The [Model] that provides a [BaseShellContext] and [UserProvider].
-class BaseShellModel extends Model {
- BaseShellContext _baseShellContext;
- UserProvider _userProvider;
- Presentation _presentation;
-
- /// The [BaseShellContext] given to this app's [BaseShell].
- BaseShellContext get baseShellContext => _baseShellContext;
-
- /// The [UserProvider] given to this app's [BaseShell].
- UserProvider get userProvider => _userProvider;
-
- /// The [Presentation] given to this app's [BaseShell].
- Presentation get presentation => _presentation;
-
- /// Called when this app's [BaseShell] is given its [BaseShellContext],
- /// and [UserProvider], and (optionally) its [Presentation].
- @mustCallSuper
- void onReady(
- UserProvider userProvider,
- BaseShellContext baseShellContext,
- Presentation presentation,
- ) {
- _userProvider = userProvider;
- _baseShellContext = baseShellContext;
- _presentation = presentation;
- notifyListeners();
- }
-
- /// Called when the app's [BaseShell] stops.
- void onStop() => null;
-}
diff --git a/lib/base_shell/lib/base_shell_widget.dart b/lib/base_shell/lib/base_shell_widget.dart
deleted file mode 100644
index 11a4c28..0000000
--- a/lib/base_shell/lib/base_shell_widget.dart
+++ /dev/null
@@ -1,103 +0,0 @@
-// Copyright 2017 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'package:fidl/fidl.dart';
-import 'package:fidl_fuchsia_auth/fidl_async.dart';
-import 'package:fidl_fuchsia_modular/fidl_async.dart';
-import 'package:flutter/material.dart';
-import 'package:flutter/widgets.dart';
-import 'package:fuchsia_services/services.dart' show StartupContext;
-import 'package:lib.device.dart/device.dart';
-import 'package:lib.widgets/widgets.dart' show WindowMediaQuery;
-import 'package:meta/meta.dart';
-
-import 'base_shell_model.dart';
-
-/// A wrapper widget intended to be the root of the application that is
-/// a [BaseShell]. Its main purpose is to hold the [StartupContext] and
-/// [BaseShell] instances so they aren't garbage collected.
-/// For convenience, [advertise] does the advertising of the app as a
-/// [BaseShell] to the rest of the system via the [StartupContext].
-/// Also for convienence, the [BaseShellModel] given to this widget
-/// will be made available to [child] and [child]'s descendants.
-class BaseShellWidget<T extends BaseShellModel> extends StatelessWidget {
- /// The [StartupContext] to [advertise] its [BaseShell] services to.
- final StartupContext startupContext;
-
- /// The bindings for the [BaseShell] service implemented by [BaseShellImpl].
- final Set<BaseShellBinding> _baseShellBindingSet =
- new Set<BaseShellBinding>();
-
- /// The bindings for the [Lifecycle] service implemented by [BaseShellImpl].
- final Set<LifecycleBinding> _lifecycleBindingSet =
- new Set<LifecycleBinding>();
-
- /// The [BaseShell] to [advertise].
- final BaseShellImpl _baseShell;
-
- /// The rest of the application.
- final Widget child;
-
- final T _baseShellModel;
-
- /// Constructor.
- BaseShellWidget({
- @required this.startupContext,
- T baseShellModel,
- AuthenticationUiContext authenticationUiContext,
- this.child,
- }) : _baseShellModel = baseShellModel,
- _baseShell = _createBaseShell(
- baseShellModel,
- authenticationUiContext,
- );
-
- @override
- Widget build(BuildContext context) => new MaterialApp(
- home: new Material(
- child: new Directionality(
- textDirection: TextDirection.ltr,
- child: new WindowMediaQuery(
- child: _baseShellModel == null
- ? child
- : new ScopedModel<T>(model: _baseShellModel, child: child),
- ),
- ),
- ),
- );
-
- /// Advertises [_baseShell] as a [BaseShell] to the rest of the system via
- /// the [StartupContext].
- void advertise() {
- startupContext.outgoing
- ..addPublicService((InterfaceRequest<BaseShell> request) {
- BaseShellBinding binding = new BaseShellBinding()
- ..bind(_baseShell, request);
- _baseShellBindingSet.add(binding);
- }, BaseShell.$serviceName)
- ..addPublicService((InterfaceRequest<Lifecycle> request) {
- LifecycleBinding binding = new LifecycleBinding()
- ..bind(_baseShell, request);
- _lifecycleBindingSet.add(binding);
- }, Lifecycle.$serviceName);
- }
-
- static BaseShell _createBaseShell(
- BaseShellModel baseShellModel,
- AuthenticationUiContext authenticationUiContext,
- ) {
- return new BaseShellImpl(
- authenticationUiContext: authenticationUiContext,
- onReady: baseShellModel?.onReady,
- onStop: () {
- baseShellModel?.onStop?.call();
- },
- );
- }
-
- /// Cancels any authentication flow currently in progress.
- void cancelAuthenticationFlow() {
- _baseShell.closeAuthenticationUiContextBindings();
- }
-}
diff --git a/lib/base_shell/lib/netstack_model.dart b/lib/base_shell/lib/netstack_model.dart
deleted file mode 100644
index 9b78922..0000000
--- a/lib/base_shell/lib/netstack_model.dart
+++ /dev/null
@@ -1,181 +0,0 @@
-// Copyright 2017 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'dart:async';
-
-import 'package:fidl_fuchsia_net/fidl_async.dart' as net;
-import 'package:fidl_fuchsia_netstack/fidl_async.dart' as ns;
-import 'package:fidl_fuchsia_netstack/fidl_async.dart';
-import 'package:flutter/scheduler.dart';
-import 'package:flutter/widgets.dart';
-import 'package:fuchsia_services/services.dart';
-import 'package:lib.widgets/model.dart';
-
-const String _kLoopbackInterfaceName = 'en1';
-
-const Duration _kRepeatAnimationDuration = const Duration(milliseconds: 400);
-
-const Duration _kRevealAnimationDuration = const Duration(milliseconds: 200);
-void _updateAnimations(
- bool oldValue,
- bool newValue,
- AnimationController reveal,
- AnimationController repeat,
-) {
- if (newValue) {
- reveal.forward();
- } else {
- reveal.reverse();
- }
- if (newValue && oldValue && !repeat.isAnimating) {
- repeat
- ..value = 0.0
- ..forward();
- }
-}
-
-/// Information about an interface.
-class InterfaceInfo {
- /// The animation to use when revealing receiving information.
- AnimationController receivingRevealAnimation;
-
- /// The animation to use when repeating receiving information.
- AnimationController receivingRepeatAnimation;
-
- /// The animation to use when revealing sending information.
- AnimationController sendingRevealAnimation;
-
- /// The animation to use when repeating sending information.
- AnimationController sendingRepeatAnimation;
- ns.NetInterface _interface;
- ns.NetInterfaceStats _stats;
- bool _receiving = false;
- bool _sending = false;
-
- /// Constructor.
- InterfaceInfo(this._interface, this._stats, TickerProvider _vsync) {
- receivingRevealAnimation = new AnimationController(
- duration: _kRevealAnimationDuration,
- vsync: _vsync,
- );
- receivingRepeatAnimation = new AnimationController(
- duration: _kRepeatAnimationDuration,
- vsync: _vsync,
- );
- sendingRevealAnimation = new AnimationController(
- duration: _kRevealAnimationDuration,
- vsync: _vsync,
- );
- sendingRepeatAnimation = new AnimationController(
- duration: _kRepeatAnimationDuration,
- vsync: _vsync,
- );
- }
-
- /// Name of the interface.
- String get name => _interface.name;
-
- void _update(ns.NetInterface interface, ns.NetInterfaceStats stats) {
- _interface = interface;
-
- bool oldReceiving = _receiving;
- _receiving = _stats.rx.bytesTotal != stats.rx.bytesTotal;
- _updateAnimations(
- oldReceiving,
- _receiving,
- receivingRevealAnimation,
- receivingRepeatAnimation,
- );
-
- bool oldSending = _sending;
- _sending = _stats.tx.bytesTotal != stats.tx.bytesTotal;
- _updateAnimations(
- oldSending,
- _sending,
- sendingRevealAnimation,
- sendingRepeatAnimation,
- );
-
- _stats = stats;
- }
-}
-
-/// Provides netstack information.
-class NetstackModel extends Model with TickerProviderModelMixin {
- /// The netstack containing networking information for the device.
- final ns.NetstackProxy netstack;
-
- StreamSubscription<bool> _reachabilitySubscription;
- StreamSubscription<List<NetInterface>> _interfaceSubscription;
- final net.ConnectivityProxy connectivity = net.ConnectivityProxy();
-
- final ValueNotifier<bool> networkReachable = ValueNotifier<bool>(false);
-
- final Map<int, InterfaceInfo> _interfaces = <int, InterfaceInfo>{};
-
- /// Constructor.
- NetstackModel({this.netstack}) {
- connectToEnvironmentService(connectivity);
- networkReachable.addListener(notifyListeners);
- _reachabilitySubscription =
- connectivity.onNetworkReachable.listen((reachable) {
- networkReachable.value = reachable;
- });
- }
-
- /// The current interfaces on the device.
- List<InterfaceInfo> get interfaces => _interfaces.values.toList();
-
- void interfacesChanged(List<ns.NetInterface> interfaces) {
- List<ns.NetInterface> filteredInterfaces = interfaces
- .where((ns.NetInterface interface) =>
- interface.name != _kLoopbackInterfaceName)
- .toList();
-
- List<int> ids = filteredInterfaces
- .map((ns.NetInterface interface) => interface.id)
- .toList();
-
- _interfaces.keys
- .where((int id) => !ids.contains(id))
- .toList()
- .forEach(_interfaces.remove);
-
- for (ns.NetInterface interface in filteredInterfaces) {
- netstack.getStats(interface.id).then(
- (ns.NetInterfaceStats stats) {
- if (_interfaces[interface.id] == null) {
- _interfaces[interface.id] = new InterfaceInfo(
- interface,
- stats,
- this,
- );
- } else {
- _interfaces[interface.id]._update(interface, stats);
- }
- notifyListeners();
- },
- );
- }
- }
-
- /// Starts listening for netstack interfaces.
- void start() {
- _interfaceSubscription =
- netstack.onInterfacesChanged.listen(interfacesChanged);
- }
-
- /// Stops listening for netstack interfaces.
- void stop() {
- if (_interfaceSubscription != null) {
- _interfaceSubscription.cancel();
- _interfaceSubscription = null;
- }
-
- if (_reachabilitySubscription != null) {
- _reachabilitySubscription.cancel();
- _reachabilitySubscription = null;
- }
- }
-}
diff --git a/lib/base_shell/lib/user_manager.dart b/lib/base_shell/lib/user_manager.dart
deleted file mode 100644
index 12de4c4..0000000
--- a/lib/base_shell/lib/user_manager.dart
+++ /dev/null
@@ -1,99 +0,0 @@
-import 'dart:async';
-
-import 'package:fidl/fidl.dart';
-import 'package:fidl_fuchsia_modular/fidl_async.dart';
-import 'package:fidl_fuchsia_modular_auth/fidl_async.dart';
-import 'package:fidl_fuchsia_sys/fidl_async.dart';
-import 'package:fidl_fuchsia_ui_viewsv1token/fidl_async.dart';
-import 'package:fuchsia_logger/logger.dart';
-
-/// Handles adding, removing, and logging, and controlling users.
-class BaseShellUserManager {
- final UserProvider _userProvider;
-
- final StreamController<void> _userLogoutController =
- StreamController<void>.broadcast();
-
- BaseShellUserManager(this._userProvider);
-
- Stream<void> get onLogout => _userLogoutController.stream;
-
- /// Adds a new user, displaying UI as required.
- ///
- /// The UI will be displayed in the space provided to authenticationContext
- /// in the base shell widget.
- Future<String> addUser() {
- final completer = Completer<String>();
-
- _userProvider.addUser(IdentityProvider.google).then((response) {
- if (response.errorCode == null || response.errorCode == '') {
- completer.complete(response.account.id);
- } else {
- log.warning('ERROR adding user! ${response.errorCode}');
- completer
- .completeError(UserLoginException('addUser', response.errorCode));
- }
- });
-
- return completer.future;
- }
-
- /// Logs in the user given by [accountId].
- ///
- /// Takes in [serviceProviderHandle] which gets passed to the session shell.
- /// Returns a handle to the [ViewOwner] that the base shell should use
- /// to open a [ChildViewConnection] to display the session shell.
- InterfaceHandle<ViewOwner> login(String accountId,
- InterfaceHandle<ServiceProvider> serviceProviderHandle) {
- final InterfacePair<ViewOwner> viewOwner = InterfacePair<ViewOwner>();
- final UserLoginParams params = UserLoginParams(
- accountId: accountId,
- viewOwner: viewOwner.passRequest(),
- services: serviceProviderHandle,
- );
-
- _userProvider.login(params);
-
- return viewOwner.passHandle();
- }
-
- Future<void> removeUser(String userId) {
- final completer = Completer<void>();
-
- _userProvider.removeUser(userId).then((errorCode) {
- if (errorCode != null && errorCode != '') {
- completer
- .completeError(UserLoginException('removing $userId', errorCode));
- }
- completer.complete();
- });
-
- return completer.future;
- }
-
- /// Gets the list of accounts already logged in.
- Future<Iterable<Account>> getPreviousUsers() {
- final completer = Completer<Iterable<Account>>();
-
- _userProvider.previousUsers().then(completer.complete);
-
- return completer.future;
- }
-
- void close() {
- _userLogoutController.close();
- }
-}
-
-/// Exception thrown when performing user management operations.
-class UserLoginException implements Exception {
- final String errorCode;
- final String operation;
-
- UserLoginException(this.operation, this.errorCode);
-
- @override
- String toString() {
- return 'Failed during $operation: $errorCode';
- }
-}
diff --git a/lib/base_shell/pubspec.yaml b/lib/base_shell/pubspec.yaml
deleted file mode 100644
index 2a2ea63..0000000
--- a/lib/base_shell/pubspec.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright 2018 The Fuchsia Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-name: base_shell
-dependencies:
- flutter:
- sdk: flutter
\ No newline at end of file
diff --git a/packages/prod/BUILD.gn b/packages/prod/BUILD.gn
index 8017175..a77b2e4 100644
--- a/packages/prod/BUILD.gn
+++ b/packages/prod/BUILD.gn
@@ -70,7 +70,6 @@
"//topaz/packages/prod:system_dashboard",
"//topaz/packages/prod:term",
"//topaz/packages/prod:text_input_mod",
- "//topaz/packages/prod:userpicker_base_shell",
"//topaz/packages/prod:web_runner",
"//topaz/packages/prod:wifi_settings",
"//topaz/packages/prod:xi",
@@ -149,14 +148,6 @@
]
}
-group("userpicker_base_shell") {
- testonly = true
- public_deps = [
- "//topaz/packages/prod:flutter",
- "//topaz/bin/userpicker_base_shell",
- ]
-}
-
group("dart_aot_runner") {
testonly = true
public_deps = [
@@ -258,12 +249,12 @@
group("ermine") {
testonly = true
public_deps = [
+ "//peridot/packages/prod:dev_base_shell",
"//topaz/packages/prod:chromium",
"//topaz/packages/prod:dart_jit_runner",
"//topaz/packages/prod:dart_jit_product_runner",
"//topaz/packages/prod:google_auth_provider",
"//topaz/packages/prod:mondrian",
- "//topaz/packages/prod:userpicker_base_shell",
"//topaz/packages/prod:wifi_settings",
"//topaz/shell/ermine:ermine",
"//topaz/shell/ermine:ermine_ask_module",
diff --git a/shell/ermine/config/basemgr.config b/shell/ermine/config/basemgr.config
index a131f3d..c8fa45d 100644
--- a/shell/ermine/config/basemgr.config
+++ b/shell/ermine/config/basemgr.config
@@ -1,7 +1,7 @@
{
"apps": [
[ "fuchsia-pkg://fuchsia.com/basemgr#meta/basemgr.cmx",
- "--base_shell=fuchsia-pkg://fuchsia.com/userpicker_base_shell#meta/userpicker_base_shell.cmx",
+ "--base_shell=fuchsia-pkg://fuchsia.com/dev_base_shell#meta/dev_base_shell.cmx",
"--sessionmgr_args=--startup_agents=fuchsia-pkg://fuchsia.com/experiment_agent#meta/experiment_agent.cmx\\"]
]
}