Renamed 'flutter materialize' to 'flutter make-host-app-editable'. The iOS version is still incomplete and will therefore require additional renaming. (#21771) (#22006)
diff --git a/packages/flutter_tools/lib/executable.dart b/packages/flutter_tools/lib/executable.dart
index 6cb4996..b42040e 100644
--- a/packages/flutter_tools/lib/executable.dart
+++ b/packages/flutter_tools/lib/executable.dart
@@ -23,7 +23,7 @@
import 'src/commands/inject_plugins.dart';
import 'src/commands/install.dart';
import 'src/commands/logs.dart';
-import 'src/commands/materialize.dart';
+import 'src/commands/make_host_app_editable.dart';
import 'src/commands/packages.dart';
import 'src/commands/precache.dart';
import 'src/commands/run.dart';
@@ -68,7 +68,7 @@
InjectPluginsCommand(hidden: !verboseHelp),
InstallCommand(),
LogsCommand(),
- MaterializeCommand(),
+ MakeHostAppEditableCommand(),
PackagesCommand(),
PrecacheCommand(),
RunCommand(verboseHelp: verboseHelp),
diff --git a/packages/flutter_tools/lib/src/commands/make_host_app_editable.dart b/packages/flutter_tools/lib/src/commands/make_host_app_editable.dart
new file mode 100644
index 0000000..9ae153d
--- /dev/null
+++ b/packages/flutter_tools/lib/src/commands/make_host_app_editable.dart
@@ -0,0 +1,78 @@
+// Copyright 2018 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.
+
+import 'dart:async';
+import 'package:meta/meta.dart';
+import '../base/common.dart';
+import '../project.dart';
+import '../runner/flutter_command.dart';
+
+class MakeHostAppEditableCommand extends FlutterCommand {
+ MakeHostAppEditableCommand() {
+ addSubcommand(MakeHostAppEditableAndroidCommand());
+ addSubcommand(MakeHostAppEditableIosCommand());
+ }
+
+ @override
+ final String name = 'make-host-app-editable';
+
+ @override
+ final String description = 'Commands for making host apps editable within a Flutter project';
+
+ @override
+ bool get hidden => true;
+
+ @override
+ Future<Null> runCommand() async { }
+}
+
+abstract class MakeHostAppEditableSubCommand extends FlutterCommand {
+ MakeHostAppEditableSubCommand() {
+ requiresPubspecYaml();
+ }
+
+ FlutterProject _project;
+
+ @override
+ @mustCallSuper
+ Future<Null> runCommand() async {
+ await _project.ensureReadyForPlatformSpecificTooling();
+ }
+
+ @override
+ Future<Null> validateCommand() async {
+ await super.validateCommand();
+ _project = await FlutterProject.current();
+ if (!_project.isModule)
+ throw ToolExit("Only projects created using 'flutter create -t module' can have their host apps made editable.");
+ }
+}
+
+class MakeHostAppEditableAndroidCommand extends MakeHostAppEditableSubCommand {
+ @override
+ String get name => 'android';
+
+ @override
+ String get description => 'Make an Android host app editable within a Flutter project';
+
+ @override
+ Future<Null> runCommand() async {
+ await super.runCommand();
+ await _project.android.makeHostAppEditable();
+ }
+}
+
+class MakeHostAppEditableIosCommand extends MakeHostAppEditableSubCommand {
+ @override
+ String get name => 'ios';
+
+ @override
+ String get description => 'Make an iOS host app editable within a Flutter project';
+
+ @override
+ Future<Null> runCommand() async {
+ await super.runCommand();
+ await _project.ios.makeHostAppEditable();
+ }
+}
diff --git a/packages/flutter_tools/lib/src/commands/materialize.dart b/packages/flutter_tools/lib/src/commands/materialize.dart
deleted file mode 100644
index c785ea4..0000000
--- a/packages/flutter_tools/lib/src/commands/materialize.dart
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright 2018 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.
-
-import 'dart:async';
-import 'package:meta/meta.dart';
-import '../base/common.dart';
-import '../project.dart';
-import '../runner/flutter_command.dart';
-
-class MaterializeCommand extends FlutterCommand {
- MaterializeCommand() {
- addSubcommand(MaterializeAndroidCommand());
- addSubcommand(MaterializeIosCommand());
- }
-
- @override
- final String name = 'materialize';
-
- @override
- final String description = 'Commands for materializing host apps for a Flutter Module';
-
- @override
- bool get hidden => true;
-
- @override
- Future<Null> runCommand() async { }
-}
-
-abstract class MaterializeSubCommand extends FlutterCommand {
- MaterializeSubCommand() {
- requiresPubspecYaml();
- }
-
- FlutterProject _project;
-
- @override
- @mustCallSuper
- Future<Null> runCommand() async {
- await _project.ensureReadyForPlatformSpecificTooling();
- }
-
- @override
- Future<Null> validateCommand() async {
- await super.validateCommand();
- _project = await FlutterProject.current();
- if (!_project.isModule)
- throw ToolExit("Only projects created using 'flutter create -t module' can be materialized.");
- }
-}
-
-class MaterializeAndroidCommand extends MaterializeSubCommand {
- @override
- String get name => 'android';
-
- @override
- String get description => 'Materialize an Android host app';
-
- @override
- Future<Null> runCommand() async {
- await super.runCommand();
- await _project.android.materialize();
- }
-}
-
-class MaterializeIosCommand extends MaterializeSubCommand {
- @override
- String get name => 'ios';
-
- @override
- String get description => 'Materialize an iOS host app';
-
- @override
- Future<Null> runCommand() async {
- await super.runCommand();
- await _project.ios.materialize();
- }
-}
diff --git a/packages/flutter_tools/lib/src/project.dart b/packages/flutter_tools/lib/src/project.dart
index 6f41908..ed8258c 100644
--- a/packages/flutter_tools/lib/src/project.dart
+++ b/packages/flutter_tools/lib/src/project.dart
@@ -258,8 +258,8 @@
}
}
- Future<void> materialize() async {
- throwToolExit('flutter materialize has not yet been implemented for iOS');
+ Future<void> makeHostAppEditable() async {
+ throwToolExit('making host app editable has not yet been implemented for iOS');
}
File get generatedXcodePropertiesFile => directory.childDirectory('Flutter').childFile('Generated.xcconfig');
@@ -301,18 +301,18 @@
/// containing the `app/` subdirectory and the `settings.gradle` file that
/// includes it in the overall Gradle project.
Directory get hostAppGradleRoot {
- if (!isModule || _materializedDirectory.existsSync())
- return _materializedDirectory;
+ if (!isModule || _editableHostAppDirectory.existsSync())
+ return _editableHostAppDirectory;
return _ephemeralDirectory;
}
/// The Gradle root directory of the Android wrapping of Flutter and plugins.
/// This is the same as [hostAppGradleRoot] except when the project is
- /// a Flutter module with a materialized host app.
- Directory get _flutterLibGradleRoot => isModule ? _ephemeralDirectory : _materializedDirectory;
+ /// a Flutter module with an editable host app.
+ Directory get _flutterLibGradleRoot => isModule ? _ephemeralDirectory : _editableHostAppDirectory;
Directory get _ephemeralDirectory => parent.directory.childDirectory('.android');
- Directory get _materializedDirectory => parent.directory.childDirectory('android');
+ Directory get _editableHostAppDirectory => parent.directory.childDirectory('android');
/// True, if the parent Flutter project is a module.
bool get isModule => parent.isModule;
@@ -346,8 +346,8 @@
Future<void> ensureReadyForPlatformSpecificTooling() async {
if (isModule && _shouldRegenerateFromTemplate()) {
_regenerateLibrary();
- // Add ephemeral host app, if a materialized host app does not already exist.
- if (!_materializedDirectory.existsSync()) {
+ // Add ephemeral host app, if an editable host app does not already exist.
+ if (!_editableHostAppDirectory.existsSync()) {
_overwriteFromTemplate(fs.path.join('module', 'android', 'host_app_common'), _ephemeralDirectory);
_overwriteFromTemplate(fs.path.join('module', 'android', 'host_app_ephemeral'), _ephemeralDirectory);
}
@@ -363,16 +363,16 @@
|| Cache.instance.isOlderThanToolsStamp(_ephemeralDirectory);
}
- Future<void> materialize() async {
+ Future<void> makeHostAppEditable() async {
assert(isModule);
- if (_materializedDirectory.existsSync())
- throwToolExit('Android host app already materialized. To redo materialization, delete the android/ folder.');
+ if (_editableHostAppDirectory.existsSync())
+ throwToolExit('Android host app is already editable. To start fresh, delete the android/ folder.');
_regenerateLibrary();
- _overwriteFromTemplate(fs.path.join('module', 'android', 'host_app_common'), _materializedDirectory);
- _overwriteFromTemplate(fs.path.join('module', 'android', 'host_app_materialized'), _materializedDirectory);
- _overwriteFromTemplate(fs.path.join('module', 'android', 'gradle'), _materializedDirectory);
- gradle.injectGradleWrapper(_materializedDirectory);
- gradle.writeLocalProperties(_materializedDirectory.childFile('local.properties'));
+ _overwriteFromTemplate(fs.path.join('module', 'android', 'host_app_common'), _editableHostAppDirectory);
+ _overwriteFromTemplate(fs.path.join('module', 'android', 'host_app_editable'), _editableHostAppDirectory);
+ _overwriteFromTemplate(fs.path.join('module', 'android', 'gradle'), _editableHostAppDirectory);
+ gradle.injectGradleWrapper(_editableHostAppDirectory);
+ gradle.writeLocalProperties(_editableHostAppDirectory.childFile('local.properties'));
await injectPlugins(parent);
}
diff --git a/packages/flutter_tools/templates/module/README.md b/packages/flutter_tools/templates/module/README.md
index 8e976a0..bae329d 100644
--- a/packages/flutter_tools/templates/module/README.md
+++ b/packages/flutter_tools/templates/module/README.md
@@ -37,7 +37,7 @@
Executing `./gradlew app:assembleDebug` in the target folder produces
an `.apk` archive.
-Used with either `android_host_ephemeral` or `android_host_materialized`.
+Used with either `android_host_ephemeral` or `android_host_editable`.
#### host_app_ephemeral
@@ -47,11 +47,11 @@
under Flutter tooling control) Android host app with a dependency on the
`.android/Flutter` library.
-#### host_app_materialized
+#### host_app_editable
Written to `android/` on top of `android_host_common`.
-Combined contents define a *materialized* (visible, one-time generated,
+Combined contents define an *editable* (visible, one-time generated,
under app author control) Android host app with a dependency on the
`.android/Flutter` library.
diff --git a/packages/flutter_tools/templates/module/android/host_app_materialized/settings.gradle.copy.tmpl b/packages/flutter_tools/templates/module/android/host_app_editable/settings.gradle.copy.tmpl
similarity index 100%
rename from packages/flutter_tools/templates/module/android/host_app_materialized/settings.gradle.copy.tmpl
rename to packages/flutter_tools/templates/module/android/host_app_editable/settings.gradle.copy.tmpl
diff --git a/packages/flutter_tools/test/project_test.dart b/packages/flutter_tools/test/project_test.dart
index aa737b0..b0efc88 100644
--- a/packages/flutter_tools/test/project_test.dart
+++ b/packages/flutter_tools/test/project_test.dart
@@ -89,22 +89,22 @@
});
});
- group('materialize Android', () {
+ group('editable Android host app', () {
testInMemory('fails on non-module', () async {
final FlutterProject project = await someProject();
await expectLater(
- project.android.materialize(),
+ project.android.makeHostAppEditable(),
throwsA(isInstanceOf<AssertionError>()),
);
});
- testInMemory('exits on already materialized module', () async {
+ testInMemory('exits on already editable module', () async {
final FlutterProject project = await aModuleProject();
- await project.android.materialize();
- return expectToolExitLater(project.android.materialize(), contains('already materialized'));
+ await project.android.makeHostAppEditable();
+ return expectToolExitLater(project.android.makeHostAppEditable(), contains('already editable'));
});
testInMemory('creates android/app folder in place of .android/app', () async {
final FlutterProject project = await aModuleProject();
- await project.android.materialize();
+ await project.android.makeHostAppEditable();
expectNotExists(project.directory.childDirectory('.android').childDirectory('app'));
expect(
project.directory.childDirectory('.android').childFile('settings.gradle').readAsStringSync(),
@@ -119,7 +119,7 @@
});
testInMemory('retains .android/Flutter folder and references it', () async {
final FlutterProject project = await aModuleProject();
- await project.android.materialize();
+ await project.android.makeHostAppEditable();
expectExists(project.directory.childDirectory('.android').childDirectory('Flutter'));
expect(
project.directory.childDirectory('android').childFile('settings.gradle').readAsStringSync(),
@@ -128,9 +128,9 @@
});
testInMemory('can be redone after deletion', () async {
final FlutterProject project = await aModuleProject();
- await project.android.materialize();
+ await project.android.makeHostAppEditable();
project.directory.childDirectory('android').deleteSync(recursive: true);
- await project.android.materialize();
+ await project.android.makeHostAppEditable();
expectExists(project.directory.childDirectory('android').childDirectory('app'));
});
});