WidgetsBindingObserver.didChangeAppLifecycleState() bug - method not called when app is launching.

I'm experiencing that didChangeAppLifecycleState() is not being called on the initial launch. It is only called with the resumed state when the app has been in the background and returns to the foreground. I presume this is a bug since the documentation for AppLifecycleState.resumed just says: "The application is visible and responding to user input.".
Steps to Reproduce

Run flutter create bug.
Replace the content of main.dart with the following:

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  MyApp({Key key}) : super(key: key);

  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> with WidgetsBindingObserver{
  String latestState = "";

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    print(state.toString());
    setState(() {
      latestState = state.toString();
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("DEMO - didChangeAppLifecycleState"),
        ),
        body: Center(
          child: Text('Latest state: $latestState'),
        ),
      ),
    );
  }
}

Run flutter run and select an Android target.

Expected results: AppLifecycleState.resumed is being printed to the console
Actual results: It did not happen.
On Android I'm experiencing the problem all the time, no matter how the app is started.
On iOS it is actually working most of the time. It works when the app is started from command line (flutter run), it works when it is an installed app on my simulator and launched by pressing the app icon, but is does not work when the app is launched from Android Studio by running main.dart as the "Dart entrypoint".

Logs

kk@kks-MacBook-Pro lifecycle_aware_app % flutter run --verbose
[ +112 ms] executing: [/Users/kk/flutter/] git -c log.showSignature=false log -n 1 --pretty=format:%H
[  +41 ms] Exit code 0 from: git -c log.showSignature=false log -n 1 --pretty=format:%H
[        ]<PHONE_NUMBER>7c3a836feee883712c241a5fd22983
[        ] executing: [/Users/kk/flutter/] git tag --points-at HEAD
[  +17 ms] Exit code 0 from: git tag --points-at HEAD
[        ] 1.22.5
[   +8 ms] executing: [/Users/kk/flutter/] git rev-parse --abbrev-ref --symbolic @{u}
[  +10 ms] Exit code 0 from: git rev-parse --abbrev-ref --symbolic @{u}
[        ] origin/stable
[        ] executing: [/Users/kk/flutter/] git ls-remote --get-url origin
[   +9 ms] Exit code 0 from: git ls-remote --get-url origin
[        ] https://github.com/flutter/flutter.git
[  +44 ms] executing: [/Users/kk/flutter/] git rev-parse --abbrev-ref HEAD
[  +10 ms] Exit code 0 from: git rev-parse --abbrev-ref HEAD
[        ] stable
[   +5 ms] executing: sw_vers -productName
[  +12 ms] Exit code 0 from: sw_vers -productName
[        ] Mac OS X
[        ] executing: sw_vers -productVersion
[  +12 ms] Exit code 0 from: sw_vers -productVersion
[        ] 10.15.7
[        ] executing: sw_vers -buildVersion
[  +12 ms] Exit code 0 from: sw_vers -buildVersion
[        ] 19H114
[        ] executing: sysctl hw.optional.arm64
[   +4 ms] Exit code 1 from: sysctl hw.optional.arm64
[        ] sysctl: unknown oid 'hw.optional.arm64'
[  +43 ms] Artifact Instance of 'AndroidMavenArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'AndroidGenSnapshotArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterWebSdk' is not required, skipping update.
[   +2 ms] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update.
[   +9 ms] executing: /Users/kk/Library/Android/sdk/platform-tools/adb devices -l
[   +6 ms] executing: /usr/bin/xcode-select --print-path
[  +10 ms] Exit code 0 from: /usr/bin/xcode-select --print-path
[        ] /Applications/Xcode.app/Contents/Developer
[   +1 ms] executing: /usr/bin/xcodebuild -version
[+1329 ms] Exit code 0 from: /usr/bin/xcodebuild -version
[        ] Xcode 12.1
           Build version 12A7403
[   +2 ms] executing: sysctl hw.optional.arm64
[   +4 ms] Exit code 1 from: sysctl hw.optional.arm64
[        ] sysctl: unknown oid 'hw.optional.arm64'
[        ] executing: xcrun xcdevice list --timeout 2
[   +3 ms] xcrun simctl list --json devices
[        ] executing: xcrun simctl list --json devices
[  +38 ms] List of devices attached
           emulator-5554          device product:sdk_gphone_x86 model:Android_SDK_built_for_x86 device:generic_x86 transport_id:1
[ +108 ms] {
                      "devices" : {
                        "com.apple.CoreSimulator.SimRuntime.tvOS-14-0" : [
                          {
                            "dataPath" : "\/Users\/kk\/Library\/Developer\/CoreSimulator\/Devices\/7C2BE49F-9448-4FFF-9258-9D254C833086\/data",
                            "logPath" : "\/Users\/kk\/Library\/Logs\/CoreSimulator\/7C2BE49F-9448-4FFF-9258-9D254C833086",
                            "udid" : "7C2BE49F-9448-4FFF-9258-9D254C833086",
                            "isAvailable" : true,
                            "deviceTypeIdentifier" : "com.apple.CoreSimulator.SimDeviceType.Apple-TV-1080p",
                            "state" : "Shutdown",
                            "name" : "Apple TV"
                          },
                          {
                            "dataPath" : "\/Users\/kk\/Library\/Developer\/CoreSimulator\/Devices\/E4C5DF66-77EC-4406-847B-7BBB8AD32A29\/data",
                            "logPath" : "\/Users\/kk\/Library\/Logs\/CoreSimulator\/E4C5DF66-77EC-4406-847B-7BBB8AD32A29",
                            "udid" : "E4C5DF66-77EC-4406-847B-7BBB8AD32A29",
                            "isAvailable" : true,
                            "deviceTypeIdentifier" : "com.apple.CoreSimulator.SimDeviceType.Apple-TV-4K-4K",
                            "state" : "Shutdown",
                            "name" : "Apple TV 4K"
                          },
                          {
                            "dataPath" : "\/Users\/kk\/Library\/Developer\/CoreSimulator\/Devices\/E5CBE24E-F4CC-4182-9E62-E8C539746537\/data",
                            "logPath" : "\/Users\/kk\/Library\/Logs\/CoreSimulator\/E5CBE24E-F4CC-4182-9E62-E8C539746537",
                            "udid" : "E5CBE24E-F4CC-4182-9E62-E8C539746537",
                            "isAvailable" : true,
                            "deviceTypeIdentifier" : "com.apple.CoreSimulator.SimDeviceType.Apple-TV-4K-1080p",
                            "state" : "Shutdown",
                            "name" : "Apple TV 4K (at 1080p)"
                          }
                        ],
                        "com.apple.CoreSimulator.SimRuntime.watchOS-7-0" : [
                          {
                            "dataPath" : "\/Users\/kk\/Library\/Developer\/CoreSimulator\/Devices\/27154048-950D-447A-A6E7-FE36CAC31CB6\/data",
                            "logPath" : "\/Users\/kk\/Library\/Logs\/CoreSimulator\/27154048-950D-447A-A6E7-FE36CAC31CB6",
                            "udid" : "27154048-950D-447A-A6E7-FE36CAC31CB6",
                            "isAvailable" : true,
                            "deviceTypeIdentifier" : "com.apple.CoreSimulator.SimDeviceType.Apple-Watch-Series-5-40mm",
                            "state" : "Shutdown",
                            "name" : "Apple Watch Series 5 - 40mm"
                          },
                          {
                            "dataPath" : "\/Users\/kk\/Library\/Developer\/CoreSimulator\/Devices\/C14D3F1E-0C45-4718-9B10-101846EF4C03\/data",
                            "logPath" : "\/Users\/kk\/Library\/Logs\/CoreSimulator\/C14D3F1E-0C45-4718-9B10-101846EF4C03",
                            "udid" : "C14D3F1E-0C45-4718-9B10-101846EF4C03",
                            "isAvailable" : true,
                            "deviceTypeIdentifier" : "com.apple.CoreSimulator.SimDeviceType.Apple-Watch-Series-5-44mm",
                            "state" : "Shutdown",
                            "name" : "Apple Watch Series 5 - 44mm"
                          },
                          {
                            "dataPath" : "\/Users\/kk\/Library\/Developer\/CoreSimulator\/Devices\/708DA353-1C9E-4485-AF70-0652EA9E5D76\/data",
                            "logPath" : "\/Users\/kk\/Library\/Logs\/CoreSimulator\/708DA353-1C9E-4485-AF70-0652EA9E5D76",
                            "udid" : "708DA353-1C9E-4485-AF70-0652EA9E5D76",
                            "isAvailable" : true,
                            "deviceTypeIdentifier" : "com.apple.CoreSimulator.SimDeviceType.Apple-Watch-Series-6-40mm",
                            "state" : "Shutdown",
                            "name" : "Apple Watch Series 6 - 40mm"
                          },
                          {
                            "dataPath" : "\/Users\/kk\/Library\/Developer\/CoreSimulator\/Devices\/34C7D864-FE90-401C-B36E-779E84EA2AD0\/data",
                            "logPath" : "\/Users\/kk\/Library\/Logs\/CoreSimulator\/34C7D864-FE90-401C-B36E-779E84EA2AD0",
                            "udid" : "34C7D864-FE90-401C-B36E-779E84EA2AD0",
                            "isAvailable" : true,
                            "deviceTypeIdentifier" : "com.apple.CoreSimulator.SimDeviceType.Apple-Watch-Series-6-44mm",
                            "state" : "Shutdown",
                            "name" : "Apple Watch Series 6 - 44mm"
                          }
                        ],
                        "com.apple.CoreSimulator.SimRuntime.iOS-14-1" : [
                          {
                            "dataPath" : "\/Users\/kk\/Library\/Developer\/CoreSimulator\/Devices\/AE96025E-D121-48D2-918C-74B0292DBF0D\/data",
                            "logPath" : "\/Users\/kk\/Library\/Logs\/CoreSimulator\/AE96025E-D121-48D2-918C-74B0292DBF0D",
                            "udid" : "AE96025E-D121-48D2-918C-74B0292DBF0D",
                            "isAvailable" : true,
                            "deviceTypeIdentifier" : "com.apple.CoreSimulator.SimDeviceType.iPhone-8",
                            "state" : "Shutdown",
                            "name" : "iPhone 8"
                          },
                          {
                            "dataPath" : "\/Users\/kk\/Library\/Developer\/CoreSimulator\/Devices\/F85A7098-64CB-494D-80B2-105BD61A565F\/data",
                            "logPath" : "\/Users\/kk\/Library\/Logs\/CoreSimulator\/F85A7098-64CB-494D-80B2-105BD61A565F",
                            "udid" : "F85A7098-64CB-494D-80B2-105BD61A565F",
                            "isAvailable" : true,
                            "deviceTypeIdentifier" : "com.apple.CoreSimulator.SimDeviceType.iPhone-8-Plus",
                            "state" : "Shutdown",
                            "name" : "iPhone 8 Plus"
                          },
                          {
                            "dataPath" : "\/Users\/kk\/Library\/Developer\/CoreSimulator\/Devices\/0B34820F-3DF5-415B-BFBC-38733A4FB029\/data",
                            "logPath" : "\/Users\/kk\/Library\/Logs\/CoreSimulator\/0B34820F-3DF5-415B-BFBC-38733A4FB029",
                            "udid" : "0B34820F-3DF5-415B-BFBC-38733A4FB029",
                            "isAvailable" : true,
                            "deviceTypeIdentifier" : "com.apple.CoreSimulator.SimDeviceType.iPhone-11",
                            "state" : "Shutdown",
                            "name" : "iPhone 11"
                          },
                          {
                            "dataPath" : "\/Users\/kk\/Library\/Developer\/CoreSimulator\/Devices\/1CA0931F-4CA1-433B-911C-E241B306E206\/data",
                            "logPath" : "\/Users\/kk\/Library\/Logs\/CoreSimulator\/1CA0931F-4CA1-433B-911C-E241B306E206",
                            "udid" : "1CA0931F-4CA1-433B-911C-E241B306E206",
                            "isAvailable" : true,
                            "deviceTypeIdentifier" : "com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro",
                            "state" : "Shutdown",
                            "name" : "iPhone 11 Pro"
                          },
                          {
                            "dataPath" : "\/Users\/kk\/Library\/Developer\/CoreSimulator\/Devices\/E6D6AA58-BADF-4F56-B2CE-0E710E09F856\/data",
                            "logPath" : "\/Users\/kk\/Library\/Logs\/CoreSimulator\/E6D6AA58-BADF-4F56-B2CE-0E710E09F856",
                            "udid" : "E6D6AA58-BADF-4F56-B2CE-0E710E09F856",
                            "isAvailable" : true,
                            "deviceTypeIdentifier" : "com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro-Max",
                            "state" : "Shutdown",
                            "name" : "iPhone 11 Pro Max"
                          },
                          {
                            "dataPath" : "\/Users\/kk\/Library\/Developer\/CoreSimulator\/Devices\/E81AA6B7-2CEB-420A-937B-F125D0BE2E19\/data",
                            "logPath" : "\/Users\/kk\/Library\/Logs\/CoreSimulator\/E81AA6B7-2CEB-420A-937B-F125D0BE2E19",
                            "udid" : "E81AA6B7-2CEB-420A-937B-F125D0BE2E19",
                            "isAvailable" : true,
                            "deviceTypeIdentifier" : "com.apple.CoreSimulator.SimDeviceType.iPhone-SE--2nd-generation-",
                            "state" : "Shutdown",
                            "name" : "iPhone SE (2nd generation)"
                          },
                          {
                            "dataPath" : "\/Users\/kk\/Library\/Developer\/CoreSimulator\/Devices\/9106A44E-6488-4361-BE9D-712529267F64\/data",
                            "logPath" : "\/Users\/kk\/Library\/Logs\/CoreSimulator\/9106A44E-6488-4361-BE9D-712529267F64",
                            "udid" : "9106A44E-6488-4361-BE9D-712529267F64",
                            "isAvailable" : true,
                            "deviceTypeIdentifier" : "com.apple.CoreSimulator.SimDeviceType.iPhone-12-mini",
                            "state" : "Shutdown",
                            "name" : "iPhone 12 mini"
                          },
                          {
                            "dataPath" : "\/Users\/kk\/Library\/Developer\/CoreSimulator\/Devices\/0BE22C0F-CF5F-4CAC-9E3A-5BF97B4E9025\/data",
                            "logPath" : "\/Users\/kk\/Library\/Logs\/CoreSimulator\/0BE22C0F-CF5F-4CAC-9E3A-5BF97B4E9025",
                            "udid" : "0BE22C0F-CF5F-4CAC-9E3A-5BF97B4E9025",
                            "isAvailable" : true,
                            "deviceTypeIdentifier" : "com.apple.CoreSimulator.SimDeviceType.iPhone-12",
                            "state" : "Shutdown",
                            "name" : "iPhone 12"
                          },
                          {
                            "dataPath" : "\/Users\/kk\/Library\/Developer\/CoreSimulator\/Devices\/BC2F8EC9-73D5-4E93-B0C2-8BBD511EFA23\/data",
                            "logPath" : "\/Users\/kk\/Library\/Logs\/CoreSimulator\/BC2F8EC9-73D5-4E93-B0C2-8BBD511EFA23",
                            "udid" : "BC2F8EC9-73D5-4E93-B0C2-8BBD511EFA23",
                            "isAvailable" : true,
                            "deviceTypeIdentifier" : "com.apple.CoreSimulator.SimDeviceType.iPhone-12-Pro",
                            "state" : "Shutdown",
                            "name" : "iPhone 12 Pro"
                          },
                          {
                            "dataPath" : "\/Users\/kk\/Library\/Developer\/CoreSimulator\/Devices\/160F7675-737B-4C05-B448-39F1C5416CC0\/data",
                            "logPath" : "\/Users\/kk\/Library\/Logs\/CoreSimulator\/160F7675-737B-4C05-B448-39F1C5416CC0",
                            "udid" : "160F7675-737B-4C05-B448-39F1C5416CC0",
                            "isAvailable" : true,
                            "deviceTypeIdentifier" : "com.apple.CoreSimulator.SimDeviceType.iPhone-12-Pro-Max",
                            "state" : "Booted",
                            "name" : "iPhone 12 Pro Max"
                          },
                          {
                            "dataPath" : "\/Users\/kk\/Library\/Developer\/CoreSimulator\/Devices\/66A482D1-BF93-43EB-BE52-537C6C3E691A\/data",
                            "logPath" : "\/Users\/kk\/Library\/Logs\/CoreSimulator\/66A482D1-BF93-43EB-BE52-537C6C3E691A",
                            "udid" : "66A482D1-BF93-43EB-BE52-537C6C3E691A",
                            "isAvailable" : true,
                            "deviceTypeIdentifier" : "com.apple.CoreSimulator.SimDeviceType.iPod-touch--7th-generation-",
                            "state" : "Shutdown",
                            "name" : "iPod touch (7th generation)"
                          },
                          {
                            "dataPath" : "\/Users\/kk\/Library\/Developer\/CoreSimulator\/Devices\/95FAB605-4E33-4099-833B-9A658FBDB518\/data",
                            "logPath" : "\/Users\/kk\/Library\/Logs\/CoreSimulator\/95FAB605-4E33-4099-833B-9A658FBDB518",
                            "udid" : "95FAB605-4E33-4099-833B-9A658FBDB518",
                            "isAvailable" : true,
                            "deviceTypeIdentifier" : "com.apple.CoreSimulator.SimDeviceType.iPad-Pro--9-7-inch-",
                            "state" : "Shutdown",
                            "name" : "iPad Pro (9.7-inch)"
                          },
                          {
                            "dataPath" : "\/Users\/kk\/Library\/Developer\/CoreSimulator\/Devices\/04FE5E53-3533-401B-9155-9DC4AAD81307\/data",
                            "logPath" : "\/Users\/kk\/Library\/Logs\/CoreSimulator\/04FE5E53-3533-401B-9155-9DC4AAD81307",
                            "udid" : "04FE5E53-3533-401B-9155-9DC4AAD81307",
                            "isAvailable" : true,
                            "deviceTypeIdentifier" : "com.apple.CoreSimulator.SimDeviceType.iPad-Pro--11-inch---2nd-generation-",
                            "state" : "Shutdown",
                            "name" : "iPad Pro (11-inch) (2nd generation)"
                          },
                          {
                            "dataPath" : "\/Users\/kk\/Library\/Developer\/CoreSimulator\/Devices\/B6077C73-6F09-43DB-B92A-C51C649CE42C\/data",
                            "logPath" : "\/Users\/kk\/Library\/Logs\/CoreSimulator\/B6077C73-6F09-43DB-B92A-C51C649CE42C",
                            "udid" : "B6077C73-6F09-43DB-B92A-C51C649CE42C",
                            "isAvailable" : true,
                            "deviceTypeIdentifier" : "com.apple.CoreSimulator.SimDeviceType.iPad-Pro--12-9-inch---4th-generation-",
                            "state" : "Shutdown",
                            "name" : "iPad Pro (12.9-inch) (4th generation)"
                          },
                          {
                            "dataPath" : "\/Users\/kk\/Library\/Developer\/CoreSimulator\/Devices\/519DFFB3-AA3B-470C-9162-7D34B29366B4\/data",
                            "logPath" : "\/Users\/kk\/Library\/Logs\/CoreSimulator\/519DFFB3-AA3B-470C-9162-7D34B29366B4",
                            "udid" : "519DFFB3-AA3B-470C-9162-7D34B29366B4",
                            "isAvailable" : true,
                            "deviceTypeIdentifier" : "com.apple.CoreSimulator.SimDeviceType.iPad--8th-generation-",
                            "state" : "Shutdown",
                            "name" : "iPad (8th generation)"
                          },
                          {
                            "dataPath" : "\/Users\/kk\/Library\/Developer\/CoreSimulator\/Devices\/118B0DB2-84A0-4279-8DE3-A46BF8DBF015\/data",
                            "logPath" : "\/Users\/kk\/Library\/Logs\/CoreSimulator\/118B0DB2-84A0-4279-8DE3-A46BF8DBF015",
                            "udid" : "118B0DB2-84A0-4279-8DE3-A46BF8DBF015",
                            "isAvailable" : true,
                            "deviceTypeIdentifier" : "com.apple.CoreSimulator.SimDeviceType.iPad-Air--4th-generation-",
                            "state" : "Shutdown",
                            "name" : "iPad Air (4th generation)"
                          }
                        ]
                      }
                    }
[+3944 ms] [
                      {
                        "simulator" : true,
                        "operatingSystemVersion" : "14.1 (18A8394)",
                        "available" : true,
                        "platform" : "com.apple.platform.iphonesimulator",
                        "modelCode" : "iPad13,2",
                        "identifier" : "118B0DB2-84A0-4279-8DE3-A46BF8DBF015",
                        "architecture" : "x86_64",
                        "modelUTI" : "com.apple.ipad-air4-1",
                        "modelName" : "iPad Air (4th generation)",
                        "name" : "iPad Air (4th generation)"
                      },
                      {
                        "simulator" : true,
                        "operatingSystemVersion" : "14.1 (18A8394)",
                        "available" : true,
                        "platform" : "com.apple.platform.iphonesimulator",
                        "modelCode" : "iPhone12,8",
                        "identifier" : "E81AA6B7-2CEB-420A-937B-F125D0BE2E19",
                        "architecture" : "x86_64",
                        "modelUTI" : "com.apple.iphone-se-1",
                        "modelName" : "iPhone SE (2nd generation)",
                        "name" : "iPhone SE (2nd generation)"
                      },
                      {
                        "simulator" : true,
                        "operatingSystemVersion" : "14.1 (18A8394)",
                        "available" : true,
                        "platform" : "com.apple.platform.iphonesimulator",
                        "modelCode" : "iPhone13,2",
                        "identifier" : "0BE22C0F-CF5F-4CAC-9E3A-5BF97B4E9025",
                        "architecture" : "x86_64",
                        "modelUTI" : "com.apple.iphone-12-1",
                        "modelName" : "iPhone 12",
                        "name" : "iPhone 12"
                      },
                      {
                        "simulator" : true,
                        "operatingSystemVersion" : "7.0 (18R382)",
                        "available" : true,
                        "platform" : "com.apple.platform.watchsimulator",
                        "modelCode" : "Watch5,3",
                        "identifier" : "27154048-950D-447A-A6E7-FE36CAC31CB6",
                        "architecture" : "x86_64",
                        "modelUTI" : "com.apple.watch-series5-1",
                        "modelName" : "Apple Watch Series 5 - 40mm",
                        "name" : "Apple Watch Series 5 - 40mm"
                      },
                      {
                        "simulator" : true,
                        "operatingSystemVersion" : "7.0 (18R382)",
                        "available" : true,
                        "platform" : "com.apple.platform.watchsimulator",
                        "modelCode" : "Watch6,1",
                        "identifier" : "708DA353-1C9E-4485-AF70-0652EA9E5D76",
                        "architecture" : "x86_64",
                        "modelUTI" : "com.apple.watch-series6-1",
                        "modelName" : "Apple Watch Series 6 - 40mm",
                        "name" : "Apple Watch Series 6 - 40mm"
                      },
                      {
                        "simulator" : true,
                        "operatingSystemVersion" : "14.1 (18A8394)",
                        "available" : true,
                        "platform" : "com.apple.platform.iphonesimulator",
                        "modelCode" : "iPhone13,4",
                        "identifier" : "160F7675-737B-4C05-B448-39F1C5416CC0",
                        "architecture" : "x86_64",
                        "modelUTI" : "com.apple.iphone-12-pro-max-1",
                        "modelName" : "iPhone 12 Pro Max",
                        "name" : "iPhone 12 Pro Max"
                      },
                      {
                        "simulator" : true,
                        "operatingSystemVersion" : "14.1 (18A8394)",
                        "available" : true,
                        "platform" : "com.apple.platform.iphonesimulator",
                        "modelCode" : "iPad8,9",
                        "identifier" : "04FE5E53-3533-401B-9155-9DC4AAD81307",
                        "architecture" : "x86_64",
                        "modelUTI" : "com.apple.ipad-pro-11-2nd-1",
                        "modelName" : "iPad Pro (11-inch) (2nd generation)",
                        "name" : "iPad Pro (11-inch) (2nd generation)"
                      },
                      {
                        "simulator" : true,
                        "operatingSystemVersion" : "14.1 (18A8394)",
                        "available" : true,
                        "platform" : "com.apple.platform.iphonesimulator",
                        "modelCode" : "iPad11,7",
                        "identifier" : "519DFFB3-AA3B-470C-9162-7D34B29366B4",
                        "architecture" : "x86_64",
                        "modelUTI" : "com.apple.ipad-8-wwan-1",
                        "modelName" : "iPad (8th generation)",
                        "name" : "iPad (8th generation)"
                      },
                      {
                        "simulator" : true,
                        "operatingSystemVersion" : "14.1 (18A8394)",
                        "available" : true,
                        "platform" : "com.apple.platform.iphonesimulator",
                        "modelCode" : "iPhone10,4",
                        "identifier" : "AE96025E-D121-48D2-918C-74B0292DBF0D",
                        "architecture" : "x86_64",
                        "modelUTI" : "com.apple.iphone-8-2",
                        "modelName" : "iPhone 8",
                        "name" : "iPhone 8"
                      },
                      {
                        "simulator" : true,
                        "operatingSystemVersion" : "14.0 (18J383)",
                        "available" : true,
                        "platform" : "com.apple.platform.appletvsimulator",
                        "modelCode" : "AppleTV5,3",
                        "identifier" : "7C2BE49F-9448-4FFF-9258-9D254C833086",
                        "architecture" : "x86_64",
                        "modelUTI" : "com.apple.apple-tv-4",
                        "modelName" : "Apple TV",
                        "name" : "Apple TV"
                      },
                      {
                        "simulator" : true,
                        "operatingSystemVersion" : "14.1 (18A8394)",
                        "available" : true,
                        "platform" : "com.apple.platform.iphonesimulator",
                        "modelCode" : "iPad8,12",
                        "identifier" : "B6077C73-6F09-43DB-B92A-C51C649CE42C",
                        "architecture" : "x86_64",
                        "modelUTI" : "com.apple.ipad-pro-12point9-4th-1",
                        "modelName" : "iPad Pro (12.9-inch) (4th generation)",
                        "name" : "iPad Pro (12.9-inch) (4th generation)"
                      },
                      {
                        "simulator" : true,
                        "operatingSystemVersion" : "7.0 (18R382)",
                        "available" : true,
                        "platform" : "com.apple.platform.watchsimulator",
                        "modelCode" : "Watch6,2",
                        "identifier" : "34C7D864-FE90-401C-B36E-779E84EA2AD0",
                        "architecture" : "x86_64",
                        "modelUTI" : "com.apple.watch-series6-1",
                        "modelName" : "Apple Watch Series 6 - 44mm",
                        "name" : "Apple Watch Series 6 - 44mm"
                      },
                      {
                        "simulator" : true,
                        "operatingSystemVersion" : "14.1 (18A8394)",
                        "available" : true,
                        "platform" : "com.apple.platform.iphonesimulator",
                        "modelCode" : "iPad6,4",
                        "identifier" : "95FAB605-4E33-4099-833B-9A658FBDB518",
                        "architecture" : "x86_64",
                        "modelUTI" : "com.apple.ipad-pro-9point7-a1674-b9b7ba",
                        "modelName" : "iPad Pro (9.7-inch)",
                        "name" : "iPad Pro (9.7-inch)"
                      },
                      {
                        "simulator" : true,
                        "operatingSystemVersion" : "14.1 (18A8394)",
                        "available" : true,
                        "platform" : "com.apple.platform.iphonesimulator",
                        "modelCode" : "iPhone12,1",
                        "identifier" : "0B34820F-3DF5-415B-BFBC-38733A4FB029",
                        "architecture" : "x86_64",
                        "modelUTI" : "com.apple.iphone-11-1",
                        "modelName" : "iPhone 11",
                        "name" : "iPhone 11"
                      },
                      {
                        "simulator" : true,
                        "operatingSystemVersion" : "14.1 (18A8394)",
                        "available" : true,
                        "platform" : "com.apple.platform.iphonesimulator",
                        "modelCode" : "iPhone12,3",
                        "identifier" : "1CA0931F-4CA1-433B-911C-E241B306E206",
                        "architecture" : "x86_64",
                        "modelUTI" : "com.apple.iphone-11-pro-1",
                        "modelName" : "iPhone 11 Pro",
                        "name" : "iPhone 11 Pro"
                      },
                      {
                        "simulator" : true,
                        "operatingSystemVersion" : "14.1 (18A8394)",
                        "available" : true,
                        "platform" : "com.apple.platform.iphonesimulator",
                        "modelCode" : "iPod9,1",
                        "identifier" : "66A482D1-BF93-43EB-BE52-537C6C3E691A",
                        "architecture" : "x86_64",
                        "modelUTI" : "com.apple.ipod-touch-7-2",
                        "modelName" : "iPod touch (7th generation)",
                        "name" : "iPod touch (7th generation)"
                      },
                      {
                        "simulator" : true,
                        "operatingSystemVersion" : "14.1 (18A8394)",
                        "available" : true,
                        "platform" : "com.apple.platform.iphonesimulator",
                        "modelCode" : "iPhone10,5",
                        "identifier" : "F85A7098-64CB-494D-80B2-105BD61A565F",
                        "architecture" : "x86_64",
                        "modelUTI" : "com.apple.iphone-8-plus-2",
                        "modelName" : "iPhone 8 Plus",
                        "name" : "iPhone 8 Plus"
                      },
                      {
                        "simulator" : true,
                        "operatingSystemVersion" : "14.1 (18A8394)",
                        "available" : true,
                        "platform" : "com.apple.platform.iphonesimulator",
                        "modelCode" : "iPhone13,1",
                        "identifier" : "9106A44E-6488-4361-BE9D-712529267F64",
                        "architecture" : "x86_64",
                        "modelUTI" : "com.apple.iphone-12-mini-1",
                        "modelName" : "iPhone 12 mini",
                        "name" : "iPhone 12 mini"
                      },
                      {
                        "simulator" : true,
                        "operatingSystemVersion" : "14.1 (18A8394)",
                        "available" : true,
                        "platform" : "com.apple.platform.iphonesimulator",
                        "modelCode" : "iPhone12,5",
                        "identifier" : "E6D6AA58-BADF-4F56-B2CE-0E710E09F856",
                        "architecture" : "x86_64",
                        "modelUTI" : "com.apple.iphone-11-pro-max-1",
                        "modelName" : "iPhone 11 Pro Max",
                        "name" : "iPhone 11 Pro Max"
                      },
                      {
                        "simulator" : true,
                        "operatingSystemVersion" : "14.0 (18J383)",
                        "available" : true,
                        "platform" : "com.apple.platform.appletvsimulator",
                        "modelCode" : "AppleTV6,2",
                        "identifier" : "E5CBE24E-F4CC-4182-9E62-E8C539746537",
                        "architecture" : "x86_64",
                        "modelUTI" : "com.apple.apple-tv-4k",
                        "modelName" : "Apple TV 4K (at 1080p)",
                        "name" : "Apple TV 4K (at 1080p)"
                      },
                      {
                        "simulator" : true,
                        "operatingSystemVersion" : "7.0 (18R382)",
                        "available" : true,
                        "platform" : "com.apple.platform.watchsimulator",
                        "modelCode" : "Watch5,4",
                        "identifier" : "C14D3F1E-0C45-4718-9B10-101846EF4C03",
                        "architecture" : "x86_64",
                        "modelUTI" : "com.apple.watch-series5-1",
                        "modelName" : "Apple Watch Series 5 - 44mm",
                        "name" : "Apple Watch Series 5 - 44mm"
                      },
                      {
                        "simulator" : true,
                        "operatingSystemVersion" : "14.1 (18A8394)",
                        "available" : true,
                        "platform" : "com.apple.platform.iphonesimulator",
                        "modelCode" : "iPhone13,3",
                        "identifier" : "BC2F8EC9-73D5-4E93-B0C2-8BBD511EFA23",
                        "architecture" : "x86_64",
                        "modelUTI" : "com.apple.iphone-12-pro-1",
                        "modelName" : "iPhone 12 Pro",
                        "name" : "iPhone 12 Pro"
                      },
                      {
                        "simulator" : true,
                        "operatingSystemVersion" : "14.0 (18J383)",
                        "available" : true,
                        "platform" : "com.apple.platform.appletvsimulator",
                        "modelCode" : "AppleTV6,2",
                        "identifier" : "E4C5DF66-77EC-4406-847B-7BBB8AD32A29",
                        "architecture" : "x86_64",
                        "modelUTI" : "com.apple.apple-tv-4k",
                        "modelName" : "Apple TV 4K",
                        "name" : "Apple TV 4K"
                      }
                    ]
[   +6 ms] /Users/kk/Library/Android/sdk/platform-tools/adb -s emulator-5554 shell getprop
[  +21 ms] Artifact Instance of 'AndroidMavenArtifacts' is not required, skipping update.
[   +3 ms] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update.
[   +2 ms] Artifact Instance of 'FlutterWebSdk' is not required, skipping update.
[   +1 ms] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update.
[  +56 ms] Multiple devices found:
[   +4 ms] ro.hardware = ranchu
[   +5 ms] Android SDK built for x86 (mobile) • emulator-5554                        • android-x86 • Android 10 (API 29) (emulator)
[   +1 ms] iPhone 12 Pro Max (mobile)         • 160F7675-737B-4C05-B448-39F1C5416CC0 • ios         • com.apple.CoreSimulator.SimRuntime.iOS-14-1 (simulator)
[   +1 ms] [0]: Android SDK built for x86 (emulator-5554)
[        ] [1]: iPhone 12 Pro Max (160F7675-737B-4C05-B448-39F1C5416CC0)
[   +1 ms] Please choose one (To quit, press "q/Q")
[        ] :
[+3396 ms] 0
[ +148 ms] Generating /Users/kk/code/lifecycle_aware_app/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java
[  +43 ms] Using hardware rendering with device Android SDK built for x86. If you notice graphics artifacts, consider enabling software rendering with "--enable-software-rendering".
[  +16 ms] Starting incremental build...
[   +4 ms] Initializing file store
[  +10 ms] Skipping target: gen_localizations
[   +6 ms] complete
[   +3 ms] Launching lib/main.dart on Android SDK built for x86 in debug mode...
[   +5 ms] /Users/kk/flutter/bin/cache/dart-sdk/bin/dart --disable-dart-dev /Users/kk/flutter/bin/cache/artifacts/engine/darwin-x64/frontend_server.dart.snapshot --sdk-root
/Users/kk/flutter/bin/cache/artifacts/engine/common/flutter_patched_sdk/ --incremental --target=flutter --debugger-module-names --experimental-emit-debug-metadata -Ddart.developer.causal_async_stacks=true
--output-dill /var/folders/4v/w_fdd05n4vd6501nyct6y1bm0000gn/T/flutter_tools.ZDjL1N/flutter_tool.joOOT2/app.dill --packages .packages -Ddart.vm.profile=false -Ddart.vm.product=false
--bytecode-options=source-positions,local-var-info,debugger-stops,instance-field-initializers,keep-unreachable-code,avoid-closure-call-instructions --enable-asserts --track-widget-creation
--filesystem-scheme org-dartlang-root --initialize-from-dill build/cache.dill.track.dill
[  +12 ms] executing: /Users/kk/Library/Android/sdk/build-tools/30.0.2/aapt dump xmltree /Users/kk/code/lifecycle_aware_app/build/app/outputs/flutter-apk/app.apk AndroidManifest.xml
[   +6 ms] Exit code 0 from: /Users/kk/Library/Android/sdk/build-tools/30.0.2/aapt dump xmltree /Users/kk/code/lifecycle_aware_app/build/app/outputs/flutter-apk/app.apk AndroidManifest.xml
[        ] N: android=http://schemas.android.com/apk/res/android
             E: manifest (line=2)
               A: android:versionCode(0x0101021b)=(type 0x10)0x1
               A: android:versionName(0x0101021c)="1.0.0" (Raw: "1.0.0")
               A: android:compileSdkVersion(0x01010572)=(type 0x10)0x1d
               A: android:compileSdkVersionCodename(0x01010573)="10" (Raw: "10")
               A: package="com.example.lifecycle_aware_app" (Raw: "com.example.lifecycle_aware_app")
               A: platformBuildVersionCode=(type 0x10)0x1d
               A: platformBuildVersionName=(type 0x10)0xa
               E: uses-sdk (line=7)
                 A: android:minSdkVersion(0x0101020c)=(type 0x10)0x10
                 A: android:targetSdkVersion(0x01010270)=(type 0x10)0x1d
               E: uses-permission (line=14)
                 A: android:name(0x01010003)="android.permission.INTERNET" (Raw: "android.permission.INTERNET")
               E: application (line=22)
                 A: android:label(0x01010001)="lifecycle_aware_app" (Raw: "lifecycle_aware_app")
                 A: android:icon(0x01010002)=@0x7f080000
                 A: android:name(0x01010003)="io.flutter.app.FlutterApplication" (Raw: "io.flutter.app.FlutterApplication")
                 A: android:debuggable(0x0101000f)=(type 0x12)0xffffffff
                 A: android:appComponentFactory(0x0101057a)="androidx.core.app.CoreComponentFactory" (Raw: "androidx.core.app.CoreComponentFactory")
                 E: activity (line=28)
                   A: android:theme(0x01010000)=@0x7f0a0000
                   A: android:name(0x01010003)="com.example.lifecycle_aware_app.MainActivity" (Raw: "com.example.lifecycle_aware_app.MainActivity")
                   A: android:launchMode(0x0101001d)=(type 0x10)0x1
                   A: android:configChanges(0x0101001f)=(type 0x11)0x40003fb4
                   A: android:windowSoftInputMode(0x0101022b)=(type 0x11)0x10
                   A: android:hardwareAccelerated(0x010102d3)=(type 0x12)0xffffffff
                   E: meta-data (line=42)
                     A: android:name(0x01010003)="io.flutter.embedding.android.NormalTheme" (Raw: "io.flutter.embedding.android.NormalTheme")
                     A: android:resource(0x01010025)=@0x7f0a0001
                   E: meta-data (line=52)
                     A: android:name(0x01010003)="io.flutter.embedding.android.SplashScreenDrawable" (Raw: "io.flutter.embedding.android.SplashScreenDrawable")
                     A: android:resource(0x01010025)=@0x7f040000
                   E: intent-filter (line=56)
                     E: action (line=57)
                       A: android:name(0x01010003)="android.intent.action.MAIN" (Raw: "android.intent.action.MAIN")
                     E: category (line=59)
                       A: android:name(0x01010003)="android.intent.category.LAUNCHER" (Raw: "android.intent.category.LAUNCHER")
                 E: meta-data (line=66)
                   A: android:name(0x01010003)="flutterEmbedding" (Raw: "flutterEmbedding")
                   A: android:value(0x01010024)=(type 0x10)0x2
[   +7 ms] executing: /Users/kk/Library/Android/sdk/platform-tools/adb -s emulator-5554 shell -x logcat -v time -t 1
[  +17 ms] Exit code 0 from: /Users/kk/Library/Android/sdk/platform-tools/adb -s emulator-5554 shell -x logcat -v time -t 1
[        ] --------- beginning of main
           01-14 14:17:29.343 E/GnssHAL_GnssInterface( 1795): gnssSvStatusCb: b: input svInfo.flags is 8
[   +1 ms] executing: /Users/kk/Library/Android/sdk/platform-tools/adb -s emulator-5554 shell -x logcat -v time -t 1
[  +16 ms] Exit code 0 from: /Users/kk/Library/Android/sdk/platform-tools/adb -s emulator-5554 shell -x logcat -v time -t 1
[        ] --------- beginning of main
           01-14 14:17:29.343 E/GnssHAL_GnssInterface( 1795): gnssSvStatusCb: b: input svInfo.flags is 8
[  +13 ms] <- compile package:lifecycle_aware_app/main.dart
[   +8 ms] executing: /Users/kk/Library/Android/sdk/platform-tools/adb version
[  +22 ms] Android Debug Bridge version 1.0.41
           Version 30.0.5-6877874
           Installed as /Users/kk/Library/Android/sdk/platform-tools/adb
[   +2 ms] executing: /Users/kk/Library/Android/sdk/platform-tools/adb start-server
[   +9 ms] Building APK
[  +19 ms] Running Gradle task 'assembleDebug'...
[   +1 ms] gradle.properties already sets `android.enableR8`
[   +2 ms] Using gradle from /Users/kk/code/lifecycle_aware_app/android/gradlew.
[        ] /Users/kk/code/lifecycle_aware_app/android/gradlew mode: 33261 rwxr-xr-x.
[  +22 ms] executing: /usr/bin/plutil -convert json -o - /Applications/Android Studio.app/Contents/Info.plist
[  +13 ms] Exit code 0 from: /usr/bin/plutil -convert json -o - /Applications/Android Studio.app/Contents/Info.plist
[        ] {"CFBundleName":"Android
Studio","JVMOptions":{"ClassPath":"$APP_PACKAGE\/Contents\/lib\/bootstrap.jar:$APP_PACKAGE\/Contents\/lib\/extensions.jar:$APP_PACKAGE\/Contents\/lib\/util.jar:$APP_PACKAGE\/Contents\/lib\/jdom.jar:$APP_PA
CKAGE\/Contents\/lib\/log4j.jar:$APP_PACKAGE\/Contents\/lib\/trove4j.jar:$APP_PACKAGE\/Contents\/lib\/jna.jar","JVMVersion":"1.8*,1.8+","MainClass":"com.intellij.idea.Main","Properties":{"idea.paths.select
or":"AndroidStudio4.1","idea.executable":"studio","idea.platform.prefix":"AndroidStudio","idea.vendor.name":"Google","idea.home.path":"$APP_PACKAGE\/Contents"}},"NSDesktopFolderUsageDescription":"An
application in Android Studio requests access to the user's Desktop
folder.","LSArchitecturePriority":["x86_64"],"CFBundleVersion":"AI-201.87<IP_ADDRESS>53283","CFBundleDevelopmentRegion":"English","NSCameraUsageDescription":"An application in Android Studio requests access
to the device's camera.","CFBundleDocumentTypes":[{"CFBundleTypeName":"Android Studio Project
File","CFBundleTypeExtensions":["ipr"],"CFBundleTypeRole":"Editor","CFBundleTypeIconFile":"studio.icns"},{"CFBundleTypeName":"All
documents","CFBundleTypeExtensions":["*"],"CFBundleTypeOSTypes":["****"],"CFBundleTypeRole":"Editor","LSTypeIsPackage":false}],"NSSupportsAutomaticGraphicsSwitching":true,"CFBundlePackageType":"APPL","CFBu
ndleIconFile":"studio.icns","NSHighResolutionCapable":true,"CFBundleShortVersionString":"4.1","NSMicrophoneUsageDescription":"An application in Android Studio requests access to the device's
microphone.","CFBundleInfoDictionaryVersion":"6.0","CFBundleExecutable":"studio","NSLocationUsageDescription":"An application in Android Studio requests access to the user's location
information.","LSRequiresNativeExecution":"YES","CFBundleURLTypes":[{"CFBundleTypeRole":"Editor","CFBundleURLName":"Stacktrace","CFBundleURLSchemes":["idea"]}],"CFBundleIdentifier":"com.google.android.stud
io","LSApplicationCategoryType":"public.app-category.developer-tools","CFBundleSignature":"????","LSMinimumSystemVersion":"10.8","NSDocumentsFolderUsageDescription":"An application in Android Studio
requests access to the user's Documents folder.","NSDownloadsFolderUsageDescription":"An application in Android Studio requests access to the user's Downloads
folder.","NSNetworkVolumesUsageDescription":"An application in Android Studio requests access to files on a network volume.","CFBundleGetInfoString":"Android Studio 4.1, build AI-201.87<IP_ADDRESS>53283.
Copyright JetBrains s.r.o., (c) 2000-2020","NSRemovableVolumesUsageDescription":"An application in Android Studio requests access to files on a removable volume."}
[   +6 ms] executing: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java -version
[  +78 ms] Exit code 0 from: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java -version
[        ] openjdk version "1.8.0_242-release"
           OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
           OpenJDK 64-Bit Server VM (build 25.242-b3-6915495, mixed mode)
[   +1 ms] executing: [/Users/kk/code/lifecycle_aware_app/android/] /Users/kk/code/lifecycle_aware_app/android/gradlew -Pverbose=true -Ptarget-platform=android-x86
-Ptarget=/Users/kk/code/lifecycle_aware_app/lib/main.dart -Ptrack-widget-creation=true -Pfilesystem-scheme=org-dartlang-root assembleDebug
[ +919 ms] > Task :app:compileFlutterBuildDebug UP-TO-DATE
[        ] > Task :app:packLibsflutterBuildDebug UP-TO-DATE
[        ] > Task :app:preBuild UP-TO-DATE
[        ] > Task :app:preDebugBuild UP-TO-DATE
[        ] > Task :app:checkDebugManifest UP-TO-DATE
[        ] > Task :app:generateDebugBuildConfig UP-TO-DATE
[        ] > Task :app:cleanMergeDebugAssets
[        ] > Task :app:compileDebugAidl NO-SOURCE
[        ] > Task :app:compileDebugRenderscript NO-SOURCE
[        ] > Task :app:mergeDebugShaders UP-TO-DATE
[        ] > Task :app:compileDebugShaders UP-TO-DATE
[        ] > Task :app:generateDebugAssets UP-TO-DATE
[        ] > Task :app:mergeDebugAssets
[ +287 ms] > Task :app:copyFlutterAssetsDebug
[        ] > Task :app:mainApkListPersistenceDebug UP-TO-DATE
[        ] > Task :app:generateDebugResValues UP-TO-DATE
[        ] > Task :app:generateDebugResources UP-TO-DATE
[        ] > Task :app:mergeDebugResources UP-TO-DATE
[        ] > Task :app:createDebugCompatibleScreenManifests UP-TO-DATE
[        ] > Task :app:processDebugManifest UP-TO-DATE
[        ] > Task :app:processDebugResources UP-TO-DATE
[        ] > Task :app:compileDebugKotlin UP-TO-DATE
[        ] > Task :app:javaPreCompileDebug UP-TO-DATE
[        ] > Task :app:compileDebugJavaWithJavac UP-TO-DATE
[        ] > Task :app:compileDebugSources UP-TO-DATE
[  +98 ms] > Task :app:processDebugJavaRes NO-SOURCE
[        ] > Task :app:mergeDebugJavaResource UP-TO-DATE
[        ] > Task :app:checkDebugDuplicateClasses UP-TO-DATE
[        ] > Task :app:transformClassesWithDexBuilderForDebug UP-TO-DATE
[        ] > Task :app:validateSigningDebug UP-TO-DATE
[        ] > Task :app:desugarDebugFileDependencies UP-TO-DATE
[        ] > Task :app:signingConfigWriterDebug UP-TO-DATE
[        ] > Task :app:mergeExtDexDebug UP-TO-DATE
[        ] > Task :app:mergeDexDebug UP-TO-DATE
[        ] > Task :app:mergeDebugJniLibFolders UP-TO-DATE
[        ] > Task :app:mergeDebugNativeLibs UP-TO-DATE
[        ] > Task :app:stripDebugDebugSymbols UP-TO-DATE
[ +102 ms] > Task :app:packageDebug UP-TO-DATE
[  +30 ms] > Task :app:assembleDebug
[        ] BUILD SUCCESSFUL in 1s
[        ] 31 actionable tasks: 4 executed, 27 up-to-date
[ +366 ms] Running Gradle task 'assembleDebug'... (completed in 1.9s)
[  +33 ms] calculateSha: LocalDirectory: '/Users/kk/code/lifecycle_aware_app/build/app/outputs/flutter-apk'/app.apk
[  +21 ms] calculateSha: reading file took 20us
[ +435 ms] calculateSha: computing sha took 434us
[   +3 ms] ✓ Built build/app/outputs/flutter-apk/app-debug.apk.
[   +4 ms] executing: /Users/kk/Library/Android/sdk/build-tools/30.0.2/aapt dump xmltree /Users/kk/code/lifecycle_aware_app/build/app/outputs/flutter-apk/app.apk AndroidManifest.xml
[   +8 ms] Exit code 0 from: /Users/kk/Library/Android/sdk/build-tools/30.0.2/aapt dump xmltree /Users/kk/code/lifecycle_aware_app/build/app/outputs/flutter-apk/app.apk AndroidManifest.xml
[        ] N: android=http://schemas.android.com/apk/res/android
             E: manifest (line=2)
               A: android:versionCode(0x0101021b)=(type 0x10)0x1
               A: android:versionName(0x0101021c)="1.0.0" (Raw: "1.0.0")
               A: android:compileSdkVersion(0x01010572)=(type 0x10)0x1d
               A: android:compileSdkVersionCodename(0x01010573)="10" (Raw: "10")
               A: package="com.example.lifecycle_aware_app" (Raw: "com.example.lifecycle_aware_app")
               A: platformBuildVersionCode=(type 0x10)0x1d
               A: platformBuildVersionName=(type 0x10)0xa
               E: uses-sdk (line=7)
                 A: android:minSdkVersion(0x0101020c)=(type 0x10)0x10
                 A: android:targetSdkVersion(0x01010270)=(type 0x10)0x1d
               E: uses-permission (line=14)
                 A: android:name(0x01010003)="android.permission.INTERNET" (Raw: "android.permission.INTERNET")
               E: application (line=22)
                 A: android:label(0x01010001)="lifecycle_aware_app" (Raw: "lifecycle_aware_app")
                 A: android:icon(0x01010002)=@0x7f080000
                 A: android:name(0x01010003)="io.flutter.app.FlutterApplication" (Raw: "io.flutter.app.FlutterApplication")
                 A: android:debuggable(0x0101000f)=(type 0x12)0xffffffff
                 A: android:appComponentFactory(0x0101057a)="androidx.core.app.CoreComponentFactory" (Raw: "androidx.core.app.CoreComponentFactory")
                 E: activity (line=28)
                   A: android:theme(0x01010000)=@0x7f0a0000
                   A: android:name(0x01010003)="com.example.lifecycle_aware_app.MainActivity" (Raw: "com.example.lifecycle_aware_app.MainActivity")
                   A: android:launchMode(0x0101001d)=(type 0x10)0x1
                   A: android:configChanges(0x0101001f)=(type 0x11)0x40003fb4
                   A: android:windowSoftInputMode(0x0101022b)=(type 0x11)0x10
                   A: android:hardwareAccelerated(0x010102d3)=(type 0x12)0xffffffff
                   E: meta-data (line=42)
                     A: android:name(0x01010003)="io.flutter.embedding.android.NormalTheme" (Raw: "io.flutter.embedding.android.NormalTheme")
                     A: android:resource(0x01010025)=@0x7f0a0001
                   E: meta-data (line=52)
                     A: android:name(0x01010003)="io.flutter.embedding.android.SplashScreenDrawable" (Raw: "io.flutter.embedding.android.SplashScreenDrawable")
                     A: android:resource(0x01010025)=@0x7f040000
                   E: intent-filter (line=56)
                     E: action (line=57)
                       A: android:name(0x01010003)="android.intent.action.MAIN" (Raw: "android.intent.action.MAIN")
                     E: category (line=59)
                       A: android:name(0x01010003)="android.intent.category.LAUNCHER" (Raw: "android.intent.category.LAUNCHER")
                 E: meta-data (line=66)
                   A: android:name(0x01010003)="flutterEmbedding" (Raw: "flutterEmbedding")
                   A: android:value(0x01010024)=(type 0x10)0x2
[   +1 ms] Stopping app 'app.apk' on Android SDK built for x86.
[        ] executing: /Users/kk/Library/Android/sdk/platform-tools/adb -s emulator-5554 shell am force-stop com.example.lifecycle_aware_app
[  +28 ms] executing: /Users/kk/Library/Android/sdk/platform-tools/adb -s emulator-5554 shell pm list packages com.example.lifecycle_aware_app
[  +24 ms] package:com.example.lifecycle_aware_app
[   +2 ms] executing: /Users/kk/Library/Android/sdk/platform-tools/adb -s emulator-5554 shell cat /data/local/tmp/sky.com.example.lifecycle_aware_app.sha1
[  +16 ms] b1dcf8dd34313c1604b7cf9e030ebd63ef06d470
[        ] Latest build already installed.
[        ] Android SDK built for x86 startApp
[   +2 ms] executing: /Users/kk/Library/Android/sdk/platform-tools/adb -s emulator-5554 shell am start -a android.intent.action.RUN -f 0x20000000 --ez enable-background-compilation true --ez
enable-dart-profiling true --ez enable-checked-mode true --ez verify-entry-points true com.example.lifecycle_aware_app/com.example.lifecycle_aware_app.MainActivity
[  +29 ms] Starting: Intent { act=android.intent.action.RUN flg=0x20000000 cmp=com.example.lifecycle_aware_app/.MainActivity (has extras) }
[        ] Waiting for observatory port to be available...
[ +724 ms] Observatory URL on device: http://<IP_ADDRESS>:44099/5zST-pQoNKs=/
[   +1 ms] executing: /Users/kk/Library/Android/sdk/platform-tools/adb -s emulator-5554 forward tcp:0 tcp:44099
[   +7 ms] 64340
[        ] Forwarded host port 64340 to device port 44099 for Observatory
[   +3 ms] Caching compiled dill
[  +28 ms] Connecting to service protocol: http://<IP_ADDRESS>:64340/5zST-pQoNKs=/
[   +1 ms] DDS is currently disabled due to https://github.com/flutter/flutter/issues/62507
[ +309 ms] Successfully connected to service protocol: http://<IP_ADDRESS>:64340/5zST-pQoNKs=/
[        ] Waiting for Android SDK built for x86 to report its views...
[   +5 ms] Waiting for Android SDK built for x86 to report its views... (completed in 5ms)
[   +6 ms] DevFS: Creating new filesystem on the device (null)
[  +14 ms] DevFS: Created new filesystem on the device (file:///data/user/0/com.example.lifecycle_aware_app/code_cache/lifecycle_aware_appTNYUJN/lifecycle_aware_app/)
[   +1 ms] Updating assets
[  +87 ms] Syncing files to device Android SDK built for x86...
[   +1 ms] Scanning asset files
[   +2 ms] <- reset
[        ] Compiling dart to kernel with 0 updated files
[        ] <- recompile package:lifecycle_aware_app/main.dart c15d32a5-4f1d-42b5-b12a-2a58398f9b1f
[        ] <- c15d32a5-4f1d-42b5-b12a-2a58398f9b1f
[   +4 ms] D/EGL_emulation(31166): eglMakeCurrent: 0xe1484d20: ver 3 0 (tinfo 0xd5e07670)
[        ] D/eglCodecCommon(31166): setVertexArrayObject: set vao to 0 (0) 1 0
[  +40 ms] Updating files
[ +109 ms] DevFS: Sync finished
[        ] Syncing files to device Android SDK built for x86... (completed in 159ms)
[        ] Synced 1.8MB.
[        ] <- accept
[   +1 ms] Connected to _flutterView/0xd5e53c10.
[        ] Flutter run key commands.
[   +1 ms] r Hot reload. 🔥🔥🔥
[   +1 ms] R Hot restart.
[        ] h Repeat this help message.
[        ] d Detach (terminate "flutter run" but leave application running).
[        ] c Clear the screen
[        ] q Quit (terminate the application on the device).
[        ] An Observatory debugger and profiler on Android SDK built for x86 is available at: http://<IP_ADDRESS>:64340/5zST-pQoNKs=/

kk@kks-MacBook-Pro lifecycle_aware_app % flutter analyze
Analyzing lifecycle_aware_app...
No issues found! (ran in 1.6s)

kk@kks-MacBook-Pro lifecycle_aware_app % flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 1.22.5, on Mac OS X 10.15.7 19H114 darwin-x64, locale en-GB)

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
[✓] Xcode - develop for iOS and macOS (Xcode 12.1)
[✓] Android Studio (version 4.1)
[✓] IntelliJ IDEA Ultimate Edition (version 2020.3.1)
[✓] Connected device (2 available)

• No issues found!

I can't seem to see where the issue lies, as stated by the docs:

Called when the system puts the app in the background or returns the app to the foreground.

I can't seem to see where the issue lies, as stated by the docs:

Called when the system puts the app in the background or returns the app to the foreground.

@klyver
Per document, the method didChangeAppLifecycleState is only called when your application is sent to background or returns to foreground, like when swapping between other applications.

@klyver
Per document, the method didChangeAppLifecycleState is only called when your application is sent to background or returns to foreground, like when swapping between other applications.

There is an inconsistency in the behaviour between iOS and Android as written at the end of the post. That is an issue. Either didChangeAppLifecycleState should be called on Android on initial launch, or it should not be called on iOS on initial launch.
In my opinion the docs could be improved to make it perfectly clear what the intended behaviour is. I was also reading the docs here.

There is an inconsistency in the behaviour between iOS and Android as written at the end of the post. That is an issue. Either didChangeAppLifecycleState should be called on Android on initial launch, or it should not be called on iOS on initial launch.
In my opinion the docs could be improved to make it perfectly clear what the intended behaviour is. I was also reading the docs here.

@klyver
I agree on having a proper documentation to describe didChangeAppLifecycleState workflow on both platforms.

@klyver
I agree on having a proper documentation to describe didChangeAppLifecycleState workflow on both platforms.

I'm a bit confused. Should didChangeAppLifecycleState run when the app starts? or should it not?
If not, is there another way to know in which state the app is at an arbitrary instant?

Any news on this issue? What is the intended behaviour of didChangeAppLifecycleState?
Is the behavior on iOS the actual bug here or the behavior on Android?

So, how do you tell when something goes into the background / returns to the foreground?

2023, still waiting for the answer.

Any news on this issue? What is the intended behaviour of didChangeAppLifecycleState?
Is the behavior on iOS the actual bug here or the behavior on Android?

Since an issue with an unclear target is less likely to be tackled, let's define what the intended behavior should be as the affected.
My suggestion would be to go with how it works on Android since that's a) the primary platform for Flutter and b) it has consistent behavior so far in that resumed is never fired on application startup.
As such the bug would be, that resumed is fired on iOS under most, but not all circumstances when the application is started.
So two things should be done to fix this issue:

Fix the iOS implementation not to fire a resumed event on app startup.
Update the documentation to explicitly state that resumed is not fired on application startup.

We're looking at updating this API in the near future (I'm actively working on it).
See the design doc for more information on the expected design.
The focus is on adding support for desktop platforms, but we plan to fix this and other related issues with the refresh. In particular, we're planning to enforce the state machine in the embedder so that illegal transitions would throw, and so applications can rely on getting all the state transitions that they expect.

Thank you @gspencergoog . So, based on the doc you've shared, I believe, onResume will be called both in iOS and Android for the first launch/app startup. Am I correct?

Yes, that's currently the plan. There will also be an onInititalize that will be called at startup before it gets to onResume, so you can tell the difference between that initial transition and other onResume transitions.


Leaked IntentReceiver Exception using osmdroid

I have in my Android app a MapActivity, that shows map using osmdroid
The library I imported, inside my gradle.build file, is:
compile 'org.osmdroid:osmdroid-android:5.1@aar'
When I'm in this MapActivity and I go to another activity, I get always an exception, and I cannot understand how to avoid it, because I think that it is related to something done inside the library. As you can see in the following log, it happen after destroying of MapActivity

05-18 17:34:31.117  27073-27073/com.fpricoco.etip I/﹕ Classe 'MapActivity'  ----  'onDestroy()'  ----  Stato: Distrutta
05-18 17:34:31.157  27073-27073/com.fpricoco.etip E/ActivityThread﹕ Activity com.fpricoco.etip.Activities.MapActivity has leaked IntentReceiver org.osmdroid.tileprovider.modules.MapTileFileStorageProviderBase$MyBroadcastReceiver@43d85f60 that was originally registered here. Are you missing a call to unregisterReceiver()?
android.app.IntentReceiverLeaked: Activity com.fpricoco.etip.Activities.MapActivity has leaked IntentReceiver org.osmdroid.tileprovider.modules.MapTileFileStorageProviderBase$MyBroadcastReceiver@43d85f60 that was originally registered here. Are you missing a call to unregisterReceiver()?
at android.app.LoadedApk$ReceiverDispatcher.(LoadedApk.java:792)
at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:593)
at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1151)
at android.app.ContextImpl.registerReceiver(ContextImpl.java:1138)
at android.app.ContextImpl.registerReceiver(ContextImpl.java:1132)
at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:365)
at org.osmdroid.tileprovider.util.SimpleRegisterReceiver.registerReceiver(SimpleRegisterReceiver.java:21)
at org.osmdroid.tileprovider.modules.MapTileFileStorageProviderBase.(MapTileFileStorageProviderBase.java:34)
at org.osmdroid.tileprovider.modules.MapTileFileArchiveProvider.(MapTileFileArchiveProvider.java:57)
at org.osmdroid.tileprovider.modules.MapTileFileArchiveProvider.(MapTileFileArchiveProvider.java:76)
at org.osmdroid.tileprovider.MapTileProviderBasic.(MapTileProviderBasic.java:63)
at org.osmdroid.tileprovider.MapTileProviderBasic.(MapTileProviderBasic.java:41)
at org.osmdroid.tileprovider.MapTileProviderBasic.(MapTileProviderBasic.java:34)
at org.osmdroid.views.overlay.MinimapOverlay.(MinimapOverlay.java:114)
at com.fpricoco.etip.Activities.MapActivity.onCreate(MapActivity.java:303)
at android.app.Activity.performCreate(Activity.java:5008)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2034)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2095)
at android.app.ActivityThread.access$600(ActivityThread.java:137)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1206)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:4791)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
at dalvik.system.NativeStart.main(Native Method)

Line 303 of my code, where  I have the exception, : mMinimapOverlay = new MinimapOverlay(myContext, myMapView.getTileRequestCompleteHandler());

Searching on Google I found that I have to "unregisterReceiver(yourReceiver)", the point is that I don't have in my case any "yourReceiver" setted in my code, I think it is done inside library.
UnregisterReceiver() wants as argument an object of type BroadcastReceiver; the point is that I don't have any object of this type in my code.
I also found this solution "https://groups.google.com/forum/#!topic/osmdroid/wDEvFpWfTIU" , but I don't understand how to detach.

Finally I also tried in this way, but it didn't work:
// .. get custom tiles off the screen
myMapView.getOverlays().remove(mMinimapOverlay);
// .. release all custom tiles' bitmaps
myMapView.getTileProvider().clearTileCache();
// .. unregister intent receiver
myMapView.getTileProvider().detach();

.

Did you add the MapView to your view programmatically or using an xml layout?

If you're programmatically creating the map view, you'll have to handle detach events yourself.
myMapView.onDetach();

Hi,
first of all thank you.
I added programmatically, infact I have in my xml:
       <org.osmdroid.views.MapView
        android:id="@+id/id_Map__Mapview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:longClickable="true"
         />

Then inside the Activity, in onCreate() I have:
            myMapView = (MapView) findViewById(R.id.id_Map__Mapview);
            mMinimapOverlay = new MinimapOverlay(myContext, myMapView.getTileRequestCompleteHandler());

But I didn't understand how to apply your suggestion; I tried putting "myMapView.onDetach();
" inside onPause(), but I continue to get the error.
Can you please clarify better? I'm sorry but I'm not very expert...
ps: I'm searching a consultant for the OSM part of my app, I have some issues to fix, you are very expert, may you write me to<EMAIL_ADDRESS>Thank you in advance
Fausto

@spyhunter99
I added your nick hoping you will be notified in this way...

If the map view is defined in xml, then you shouldn't be having any of these problems. If your variable 'myMapView' a static variable? Is your map view within a fragment?

@spyhunter99
Hi again,
thanks for your reply.

myMapView is static, it is a problem?
my map is not within a fragment; should it be?

by the way, any way to get in contact with you an get your (payed) consultancy? my email is in previous message...
Fausto

You should never have anything with context or that inherits from View be
static. That's probably the issue
On Fri, Jul 1, 2016 at 6:59 AM, Fausto70<EMAIL_ADDRESS>wrote:

@spyhunter99 https://github.com/spyhunter99
Hi again,
thanks for your reply.

myMapView is static, it is a problem?
my map is not within a fragment; should it be?

by the way, any way to get in contact with you an get your (payed)
consultancy? my email is in previous message...
Fausto
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/osmdroid/osmdroid/issues/343#issuecomment-229919313,
or mute the thread
https://github.com/notifications/unsubscribe/AB4kGVonJt_1UpNv7CWIfcFRWvRHauGzks5qRPL_gaJpZM4I__vW
.

@spyhunter99
Hi, I tried putting myMapView not static, but nothing changed, I continue to get the error.
Any chance to send you by email my  .java file and get your help? With your expertize I think it should be easy for you...
Thank you in advance
Fausto

Go ahead
On Jul 1, 2016 8:42 AM, "Fausto70"<EMAIL_ADDRESS>wrote:

@spyhunter99 https://github.com/spyhunter99
Hi, I tried putting myMapView not static, but nothing changed, I continue
to get the error.
Any chance to send you by email my .java file and get your help? With your
expertize I think it should be easy for you...
Thank you in advance
Fausto
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/osmdroid/osmdroid/issues/343#issuecomment-229936864,
or mute the thread
https://github.com/notifications/unsubscribe/AB4kGTh3lqJu94pGXPWsazUk2mpIWzrCks5qRQsQgaJpZM4I__vW
.

@spyhunter99
Hi again, I just replied to your mail; sorry for delay in reply, but I spent some time to write the email to be as precise as possible in describing the issues

@Fausto70 everything has been merged into master. Please try to replicate the error condition. I'm unable to nor do i know the exact conditions in which it occurs

operation time out. reopen if this is still an issue for you


[diem-framework] Make core, experimental, and DPN Move packages

This PR converts each of the core, experimental, and DPN folders into Move packages that live side-by-side with the current release and build infrastructure -- after this PR we should be able to start transitioning things off of the current build and release infrastructure into using Move packages incrementally.
Nothing really changes too much with the structure except that what was under "modules" is now "sources".

/land


tcpstats for OS X

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.:x: girishmotwani sign nowYou have signed the CLA already but the status is still pending? Let us recheck it.

I think we can do something like below to make it work:
In getTcpStat function (pseudo implementation shown below) we can use "net.inet.tcp.stats" for name. This would generate tcpstat output. The definition of tcpstat is here: https://github.com/apple/darwin-xnu/blob/master/bsd/netinet/tcp_var.h
Refer: https://opensource.apple.com/source/network_cmds/network_cmds-85/netstat.tproj/inet.c
func getTcpStat() {
val, err := syscall.Sysctl(name)
if err != nil {
return err
}
buf := []byte(val)

bbuf := bytes.NewBuffer([]byte(val))
return binary.Read(bbuf, binary.LittleEndian, data)

}
I don't have a MacOS to try this myself, but if someone else can take a shot, then we can validate if this works.

@pgmsft  I'll update the patch shortly with the sysctl call


Add support for custom data

Salesforce is quite interested in capitalizing on a manifest like this for a range of projects. I believe the proposed state of schema.ts already covers the majority of Salesforce's requirements. The remaining requirements are rather proprietary, and could be addressed with general-purpose mechanism for including custom data in a manifest.
This could be achieved by:

Adding a standard, unrestricted custom key to the top-level schema.
Recommending a strategy for component authors or tool vendors to further subdivide that custom key. Example:  an organization adding custom data should do so inside a key containing a relevant domain name they own.
Encouraging tools to either ignore custom keys they don't understand, or to perform generic processing of anything they find there. Type-checkers could potentially ignore all that data. A doc tool could either skip the custom data, or format it as a pretty-printed JSON block or table as supplementary documentation.

Example: Using some hypothetical custom data values taken from Salesforce's own internal requirements, a Salesforce component might include the following in its manifest:
{
  "custom": {
    "salesforce.com": {
      "apiVersion": "53", /* Salesforce platform API version targeted by this component */
      "formFactor": "mobile", /* Component is designed primarily for mobile use */
      "capabilities": [ /* In which product environments is the component capable of being used? */
        "dashboard",
        "communities"
      ]
    }
  }
}

Something like this would minimize the impact on the schema design, give component creators a way to include component metadata in a single place, and increase the chance that a tool created by one group could be used by a different group without choking on unexpected custom data. This would also provide a means of trying out new ideas for schema fields before standardizing on them.

Just curious, but why not just have a separate salesforce.json file for these custom properties? Tools could easily pick it up and combine it with the custom elements manifest. I'm not entirely convinced having a kitchen sink custom property would be worth it just for the fact that users only have to add metadata in a single place.

This would also provide a means of trying out new ideas for schema fields before standardizing on them.

This feels like things could become messy pretty quickly 😅 Tools would first have to implement them under the custom property, and if it does get standardized, it would have to be implemented in the actual schema in a different place, im not sure if that would be the most efficient way to go about trying out new fields.

Just curious, but why not just have a separate salesforce.json file for these custom properties?

I think the primary reason for doing this is because tools that work with a manifest could relatively easily be extend to do something reasonable with custom metadata:

Tools that generate a manifest: We expect to see tools that look at jsDoc annotations (say) in component source files and use those to generate a manifest based on what they find. jsDoc plugins let people declare custom tags, which is to say custom metadata. A jsDoc-to-manifest tool could output such custom metadata in the custom key. That saves each company with custom metadata from having to write its own jsDoc-to-manifest tool that largely replicates what the standard tool does.
Tools that read a manifest: As noted above, a tool that generates docs from a manifest could perform some baseline processing of custom data. Again, that saves companies with custom metadata from having to write custom tooling if that baseline processing is acceptable.

Tools would first have to implement them under the custom property, and if it does get standardized, it would have to be implemented in the actual schema in a different place,

The proposal here is to support the things that start out custom, then become ad hoc standards, then become real standards.
Consider the question of whether the manifest should cover demos. It's already a little unclear exactly what level of support for demos is necessary: e.g., should we let a component define multiple demos? Let's say for manifest v1 we decide that, no, a component can only define a single demo. A web component catalog comes along and wants to support multiple demos. They define a convention of their own for that, and tell people: "If you want to define multiple demos, add this custom key to your manifest". If that catches on, eventually that provides evidence that the feature should get standardized. It's given a standard key, and over time people switch to using the standard key.
I think there will be other situations like this where we will be glad to have an escape hatch. It will make it easier to get agreement on a v1 schema if features without broad support can be deferred to custom metadata.

We expect to see tools that look at jsDoc annotations (say) in component source files and use those to generate a manifest based on what they find

This is exactly what we are doing here: https://github.com/polleverywhere/custom-element-analyzer
We register these tags and parse the js files using jsdoc-api and output the formatted json.

I don't have a strong preference for any of 1, 2 or 3.
We've been listing a few custom stuffs in our components' JSDoc so we could see them in our Storybook:

default display
source link on (GitHub)
image list

I would also really like to list some dependencies (images, npm...) so any user would know:

component X uses images foo.svg, bar.svg...
component Y uses 3rd party npm packages leaflet and chart.js

We've been maintaining a few of this ideas manually, but I would love to try to create CEM analyzer plugin that could add custom field to the CEM using custom JSDoc tags or analysis.

I share the concern about this manifest becoming a mess but in my use cases, it makes sense to rely on the existing analyzer to extract the custom info. It would also make sense to extract the custom info and from the same file to use them in the same place in Storybook for example.

Thinking about OpenAPI spec, they allow for extensions with a X- prefix. I'm not saying it's perfect but it's an option.
Look at this doc https://swagger.io/specification/ under "Specification Extensions".


Regression test for schema-aware XSLT

This pull request derives from #326. So needs to be handled after that.

This pull request enables regression test ([XSpec]/test/*.xspec) for schema-aware XSLT processors, namely Saxon-EE.
The tests are enabled only when Saxon is capable of schema. So they are skipped on Travis and AppVeyor. They are enabled automatically, if you're running the tests on your machine with Saxon license.
Running tests on oXygen

Open [XSepc]/test/ant/build.xml in oXygen.
In the Transformation Scenarios pane, select ANT (with Saxon 9 EE XSLT support) and apply it. (You may want to duplicate it and set -silent in Additional arguments.)

Running tests on terminal
Here's what I tested on my local machine.

Do set SAXON_JAR=\path\to\saxon9he.jar. (Saxon-HE)

Run run-xspec-tests-ant.cmd -silent in [XSepc]/test/.
Must pass skipping xspec-23_1.xspec and xspec-47.xspec.

Do set SAXON_JAR=\path\to\saxon9ee.jar. (Saxon-EE. Use 9.7 to work around #215.)

Run run-xspec-tests-ant.cmd -silent.
Must pass including xspec-23_1.xspec and xspec-47.xspec.

Check out 3de253c39c09c4606e2ad58dccf7d8e0dbb14cca which is intentionally broken.

Run run-xspec-tests-ant.cmd -silent.
Must fail at xspec-47.xspec.

Repeat the same steps using run-xspec-tests-ant.sh on Ubuntu.
How it works

[XSepc]/test/ant/build.xml checks to see if the XSLT processor is capable of schema. This information is propagated to [XSepc]/test/ant/worker/generate.xsl.
While inspecting [XSepc]/test/*.xspec, generate.xsl searches for <?xspec-test require-xslt-to-support-schema?>. If the require-xslt-to-support-schema is found and the processor is incapable, generate.xsl skips the .xspec file.

@cirulls
Merged this improvement of test. Just an extension of #326.


Development: Extract taxonomy select to avoid code duplication

ONLY TESTABLE ON TS9, NEEDS IRIS.
Checklist
General

[x] This is a small issue that I tested locally and was confirmed by another developer on a test server.
[x] Language: I followed the guidelines for inclusive, diversity-sensitive, and appreciative language.
[x] I chose a title conforming to the naming conventions for pull requests.

Client

[x] Important: I implemented the changes with a very good performance, prevented too many (unnecessary) REST calls and made sure the UI is responsive, even with large data.
[x] I followed the coding and design guidelines.
[x] Following the theming guidelines, I specified colors only in the theming variable files and checked that the changes look consistent in both the light and the dark theme.
[x] I added multiple integration tests (Jest) related to the features (with a high test coverage), while following the test guidelines.
[x] I documented the TypeScript code using JSDoc style.
[x] I translated all newly inserted strings into English and German.

Motivation and Context
The select for competency taxonomies was already used in two seperate places.  To avoid code duplication, it was extracted to its own component.
Description

Added a new component for the competency taxonomy select
Reduced function calls in the template by changing translation strings
(Piggyback) Made header of competency recommendations clickable

Steps for Testing

1 Instructor/Admin

Log in to Artemis
Go to Raphael Test Course
Click on Create competency
Verify that when entering "create"/"remember"/etc. in title/description the recommendation for a taxonomy gets displayed
Verify that taxonomy select works
Verify the competency gets created with the selected taxonomy.
Edit the competency you just created
See that the taxonomy gets displayed correctly and it gets saved correctly.
Click on Generate Competency Recommendations
Enter any course description, e.g. introduction_to_programming.txt
Verify that the taxonomy select works here aswell for the competency reccommendations
Verif that competencies get created with the selected taxonomies

Testserver States

[!NOTE]
These badges show the state of the test servers.
Green = Currently available, Red = Currently locked

Review Progress
Performance Review

[x] I (as a reviewer) confirm that the client changes (in particular related to REST calls and UI responsiveness) are implemented with a very good performance

Code Review

[x] Code Review 1
[ ] Code Review 2

Manual Tests

[x] Test 1
[x] Test 2

Test Coverage
Client

Class/File
Line Coverage
Confirmation (assert/expect)

competency-form.component.ts
85.86%
✅

competency-recommendation-detail.component.ts
94.73%
✅

taxonomy-select.component.ts
100%
✅

Screenshots
No UI changes.

@Strohgelaender do you have any further feedback?


Coloring is lost on the text following a Razor expression

The coloring is fine on the next line.

VS Code version: 1.28.2
Omnisharp version: 1.17.1
OS: MacOS Mojave
Project template: dotnet new razor
dotnet SDK version: 3.0.100-preview-009730

Coloring is also messed up for nested blocks

Closing as duplicate of https://github.com/aspnet/Razor.VSCode/issues/75


Make find command more board

Still need to discuss which additional fields we want to find to comb through before adding to the results.


Command isn't working in powershell

If the issue is to do with Azure CLI 2.0 in-particular, create an issue here at Azure/azure-cli

Extension name (the extension in question)
cloud-service
Description of issue (in as much detail as possible)
PS C:\Users\ajreddy> az cloud-service create -g test-az-cli -n MigrateCloudService  --roles MigrateCloudService_WorkerRole:Standard_D1_v2:1:Standard --package-url https://ajreddystoragenrp47.blob.core.windows.net/test-az-cli-cs-es/MigrateCloudService.cspkg?sp=r&st=2021-04-05T11:25:41Z&se=2021-04-05T19:25:41Z&spr=https&sv=2020-02-10&sr=b&sig=hpFhZi9PyBwzxf6Ge72JRj%2BLayEO6vXsASF6Bea%2F4tM%3D --configuration @"C:\NRP\Networking-nrp\out\debug-amd64\Nrp.Test.CsmTest\Data\CsOnVmssTests\TestArtifacts\MigrateCloudService\ServiceConfiguration.Cloud.cscfg"
At line:1 char:394

... wzxf6Ge72JRj%2BLayEO6vXsASF6Bea%2F4tM%3D" --configuration @"C:\NRP\Ne ...

                                                            ~

No characters are allowed after a here-string header but before the end of the line.
+ CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnexpectedCharactersAfterHereStringHeader
The exact command is working on cmd but not in powershell

cloud service extended support testing feedback


Foreign key randomly filled

Hi, i m using the library to bulk graphs to database and i m facing issues with Foreign key not always filled  when i launch the bulk with a list but whith only one graph passed to the bulk  the one-to-one relation is correctly filled.
Did you have such issue or do you want that i send you my model ?

Unfortunaltly, it's not working.  The model that i mentioned is quite simple, in my real model i have many other relationship in RootEntity with hasmany etc.   That's why i found the includGraph very userful.
What i can't explain is that all is working fine if  bulk only one graph each time. For example, the bad test code below works 👍
foreach(var rootEntity in rootEntities)
{
await context.BulkInsertOrUpdateAsync(new List() {rootEntity}, new BulkConfig
{
IncludeGraph = true,
}););
}
but when i bulk athe home list, the ChildId foreign key will be set to null (that's why i mentioned in the title of the issue the "randomly" word).
I hope i was clear. I tried also to tranform the OwnsOne to HaseOne to test but the result is the same.   not simple to reproduce like behavior.

IncludeGraph was PR, @maitlandmarshall again for you if find the time.

@AhmedNetDev I am unable to replicate the exact issue you are describing. Are you sure an exception is not being thrown?
When I use OwnsOne it completely fails with an exception.
'The MERGE statement conflicted with the FOREIGN KEY constraint "FK_RootEntities_ChildEntity_Owned_ChildId". The conflict occurred in database "EFCoreBulkTest_Issue547", table "dbo.ChildEntity", column 'Id'.
This is because the OwnedType confuses the topological sort and inserts the entities in the wrong order.
Everything imports successfully when I use HasOne instead of OwnsOne.
namespace EFCore.BulkExtensions.Tests.IncludeGraph
{
    public class RootEntity
    {
        public int Id { get; set; }
        public OwnedType Owned { get; set; }
    }

    public class OwnedType
    {
        public int Id { get; set; }
        public int? ChildId { get; set; }
        public ChildEntity Child { get; set; }
        public string Field1 { get; set; }
    }

    public class ChildEntity
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

    public class Issue547DbContext : DbContext
    {
        public Issue547DbContext([NotNullAttribute] DbContextOptions options) : base(options)
        {
        }

        public DbSet<RootEntity> RootEntities { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<RootEntity>(cfg =>
            {
                cfg.Property(y => y.Id).ValueGeneratedNever();
                cfg.HasOne(y => y.Owned);
            });

            modelBuilder.Entity<OwnedType>(own =>
            {
                own.Property(y => y.Id).ValueGeneratedNever();
                own.HasOne(y => y.Child).WithMany().HasForeignKey(y => y.ChildId).IsRequired(false);
                own.Property(y => y.Field1).HasMaxLength(50);
            });

            modelBuilder.Entity<ChildEntity>(cfg =>
            {
                cfg.Property(y => y.Id).ValueGeneratedNever();
                cfg.Property(y => y.Name);
            });
        }
    }

    public class Issue547
    {
        [Theory]
        [InlineData(DbServer.SqlServer)]
        public async Task Test(DbServer dbServer)
        {
            ContextUtil.DbServer = dbServer;

            using var db = new Issue547DbContext(ContextUtil.GetOptions<Issue547DbContext>(databaseName: $"{nameof(EFCoreBulkTest)}_Issue547"));
            await db.Database.EnsureCreatedAsync();

            var tranches = new List<RootEntity>
            {
                new RootEntity {
                    Id = 1,
                    Owned = new OwnedType
                    {
                        Id = 1337,
                        Field1 = "F1",
                        ChildId = 1,
                        Child = new ChildEntity { Id = 1, Name = "F1C1" }
                    }
                },
                new RootEntity {
                    Id = 2,
                    Owned = new OwnedType
                    {
                        Id = 1338,
                        Field1 = "F2",
                        ChildId = 2,
                        Child = new ChildEntity { Id = 2, Name = "F2C2" }
                    }
                }
            };

            await db.BulkInsertOrUpdateAsync(tranches, new BulkConfig
            {
                IncludeGraph = true
            });

            foreach (var a in tranches)
            {
                Assert.True(a.Owned.ChildId.HasValue);
            }
        }
    }
}

Nonetheless, I have resolved the (actual) issue in this branch here:
https://github.com/maitlandmarshall/EFCore.BulkExtensions/tree/issue-547
Can you please give it a try and let me know how you go? If it doesn't work, please prepare a unit test which demonstrates the issue.

Hi @borisdj and thank you again for your time !
Good news, it's working now with OwnsOne & HasOne !
In your unit test, you got the error because you are specifiying the ChildId value in the model, this value will be populated by EF core from the Id of the ChildEntity. So if you delete in the entry model the ChildId value and use the configuration below it will work 👍
`            modelBuilder.Entity(cfg =>
{
cfg.Property(y => y.Id).ValueGeneratedNever();
            cfg
              .OwnsOne(t => t.Owned, own =>
              {
                  own.HasOne(d => d.Child).WithMany().HasForeignKey(d => d.ChildId).IsRequired(false);
                  own.Property(d => d.Field1).HasMaxLength(50);
              });
        });

        modelBuilder.Entity<ChildEntity>(cfg =>
        {
            cfg.Property(y => y.Id).ValueGeneratedNever();
            cfg.Property(y => y.Name);
        });

        // Entry model
        var tranches = new List<RootEntity>
        {
            new RootEntity {
                Id = 1,
                Owned = new OwnedType
                {
                    Id = 1337,
                    Field1 = "F1",
                    Child = new ChildEntity { Id = 1, Name = "F1C1" }
                }
            },
            new RootEntity {
                Id = 2,
                Owned = new OwnedType
                {
                    Id = 1338,
                    Field1 = "F2",
                    Child = new ChildEntity { Id = 2, Name = "F2C2" }
                }
            }
        };

`
In my case, i understand why i m having the  "random" behavior : I was following DDD by specifying the OwnedTypes as ValueObject with a private constructors. if i remove that all works correctly ! the constructor have to be public.
So i can confirm that you library is working fine with my specific OwnsOne structure !
Please tell me if you confirm also from your side ?

@AhmedNetDev I believe you are addressing @maitlandmarshall, not me.

Oups, sorry !
@borisdj :
Good news, it's working now with OwnsOne & HasOne !
In your unit test, you got the error because you are specifiying the ChildId value in the model, this value will be populated by EF core from the Id of the ChildEntity. So if you delete in the entry model the ChildId value and use the configuration below it will work 👍
`
//EF core configuration
modelBuilder.Entity(cfg =>
{
cfg.Property(y => y.Id).ValueGeneratedNever();
        cfg
          .OwnsOne(t => t.Owned, own =>
          {
              own.HasOne(d => d.Child).WithMany().HasForeignKey(d => d.ChildId).IsRequired(false);
              own.Property(d => d.Field1).HasMaxLength(50);
          });
    });

    modelBuilder.Entity<ChildEntity>(cfg =>
    {
        cfg.Property(y => y.Id).ValueGeneratedNever();
        cfg.Property(y => y.Name);
    });

    // Entry model
    var tranches = new List<RootEntity>
    {
        new RootEntity {
            Id = 1,
            Owned = new OwnedType
            {
                Id = 1337,
                Field1 = "F1",
                Child = new ChildEntity { Id = 1, Name = "F1C1" }
            }
        },
        new RootEntity {
            Id = 2,
            Owned = new OwnedType
            {
                Id = 1338,
                Field1 = "F2",
                Child = new ChildEntity { Id = 2, Name = "F2C2" }
            }
        }
    };

`
In my case, i understand why i m having the "random" behavior : I was following DDD by specifying the OwnedTypes as ValueObject with a private constructors. if i remove that all works correctly ! the constructor have to be public.
So i can confirm that your library is working fine with my specific OwnsOne structure !
Please tell me if you confirm also from your side ?

@AhmedNetDev I am unable to replicate the exact issue you are describing. Are you sure an exception is not being thrown?
When I use OwnsOne it completely fails with an exception.
'The MERGE statement conflicted with the FOREIGN KEY constraint "FK_RootEntities_ChildEntity_Owned_ChildId". The conflict occurred in database "EFCoreBulkTest_Issue547", table "dbo.ChildEntity", column 'Id'.
This is because the OwnedType confuses the topological sort and inserts the entities in the wrong order.
Everything imports successfully when I use HasOne instead of OwnsOne.
namespace EFCore.BulkExtensions.Tests.IncludeGraph
{
    public class RootEntity
    {
        public int Id { get; set; }
        public OwnedType Owned { get; set; }
    }

    public class OwnedType
    {
        public int Id { get; set; }
        public int? ChildId { get; set; }
        public ChildEntity Child { get; set; }
        public string Field1 { get; set; }
    }

    public class ChildEntity
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

    public class Issue547DbContext : DbContext
    {
        public Issue547DbContext([NotNullAttribute] DbContextOptions options) : base(options)
        {
        }

        public DbSet<RootEntity> RootEntities { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<RootEntity>(cfg =>
            {
                cfg.Property(y => y.Id).ValueGeneratedNever();
                cfg.HasOne(y => y.Owned);
            });

            modelBuilder.Entity<OwnedType>(own =>
            {
                own.Property(y => y.Id).ValueGeneratedNever();
                own.HasOne(y => y.Child).WithMany().HasForeignKey(y => y.ChildId).IsRequired(false);
                own.Property(y => y.Field1).HasMaxLength(50);
            });

            modelBuilder.Entity<ChildEntity>(cfg =>
            {
                cfg.Property(y => y.Id).ValueGeneratedNever();
                cfg.Property(y => y.Name);
            });
        }
    }

    public class Issue547
    {
        [Theory]
        [InlineData(DbServer.SqlServer)]
        public async Task Test(DbServer dbServer)
        {
            ContextUtil.DbServer = dbServer;

            using var db = new Issue547DbContext(ContextUtil.GetOptions<Issue547DbContext>(databaseName: $"{nameof(EFCoreBulkTest)}_Issue547"));
            await db.Database.EnsureCreatedAsync();

            var tranches = new List<RootEntity>
            {
                new RootEntity {
                    Id = 1,
                    Owned = new OwnedType
                    {
                        Id = 1337,
                        Field1 = "F1",
                        ChildId = 1,
                        Child = new ChildEntity { Id = 1, Name = "F1C1" }
                    }
                },
                new RootEntity {
                    Id = 2,
                    Owned = new OwnedType
                    {
                        Id = 1338,
                        Field1 = "F2",
                        ChildId = 2,
                        Child = new ChildEntity { Id = 2, Name = "F2C2" }
                    }
                }
            };

            await db.BulkInsertOrUpdateAsync(tranches, new BulkConfig
            {
                IncludeGraph = true
            });

            foreach (var a in tranches)
            {
                Assert.True(a.Owned.ChildId.HasValue);
            }
        }
    }
}

Nonetheless, I have resolved the (actual) issue in this branch here:
https://github.com/maitlandmarshall/EFCore.BulkExtensions/tree/issue-547
Can you please give it a try and let me know how you go? If it doesn't work, please prepare a unit test which demonstrates the issue.

@borisdj :
Good news, it's working now with OwnsOne & HasOne !
In your unit test, you got the error because you are specifiying the ChildId value in the model, this value will be populated by EF core from the Id of the ChildEntity. So if you delete in the entry model the ChildId value and use the configuration below it will work 👍
`
//EF core configuration
modelBuilder.Entity(cfg =>
{
cfg.Property(y => y.Id).ValueGeneratedNever();
    cfg
      .OwnsOne(t => t.Owned, own =>
      {
          own.HasOne(d => d.Child).WithMany().HasForeignKey(d => d.ChildId).IsRequired(false);
          own.Property(d => d.Field1).HasMaxLength(50);
      });
});

modelBuilder.Entity<ChildEntity>(cfg =>
{
    cfg.Property(y => y.Id).ValueGeneratedNever();
    cfg.Property(y => y.Name);
});

// Entry model
var tranches = new List<RootEntity>
{
    new RootEntity {
        Id = 1,
        Owned = new OwnedType
        {
            Id = 1337,
            Field1 = "F1",
            Child = new ChildEntity { Id = 1, Name = "F1C1" }
        }
    },
    new RootEntity {
        Id = 2,
        Owned = new OwnedType
        {
            Id = 1338,
            Field1 = "F2",
            Child = new ChildEntity { Id = 2, Name = "F2C2" }
        }
    }
};

`
In my case, i understand why i m having the "random" behavior : I was following DDD by specifying the OwnedTypes as ValueObject with a private constructors. if i remove that all works correctly ! the constructor have to be public.
**So i can confirm that your library is working fine with my specific OwnsOne structure !
Please tell me if you confirm also from your side ?**

PR merged and v5.2.1 published.


Feature/decode morse code

Decode a Morse code message

Write method to decode a morse code message in ruby
Use ruby best practices
Add linters for ruby

Thank you for the review @Lucas-Masaba.


Suggestion to specify that this doc works only within Dev Mode

I might be wrong here but I has had to spend some time just to figure out that Device Portal exists only  n Dev Mode. Might be useful for other devs.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: e1946cd5-a111-ba09-e226-e5614104e995
Version Independent ID: 20d262f4-ddc0-afcb-28fe-2a3c564280ce
Content: Xbox Device Portal REST API - Windows UWP applications
Content Source: windows-apps-src/xbox-apps/reference.md
Product: uwp
GitHub Login: @KevinAsgari
Microsoft Alias: kevinasg

Thank you for taking the time to let us know about this issue. Apologies for the delayed response. Due to the volume of feedback in our content, we are currently prioritizing new issues.
If you believe your feedback still requires action to be taken, please let us know either directly in this thread, by filing a new issue, or by filing a Pull Request  with your recommended updates.
Though the Issue will be marked as closed, we will still receive replies and are able to reopen the issue if necessary.
Thanks again for taking the time to contribute.