// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import '../framework/framework.dart';
import '../framework/task_result.dart';
import '../framework/utils.dart';


/// Tests the following Android lifecycles: Activity#onStop(), Activity#onResume(), Activity#onPause(),
/// and Activity#onDestroy() from Dart perspective in debug, profile, and release modes.
TaskFunction androidViewsTest({
  Map<String, String>? environment,
}){
    return () async {
        section('Build APK');
        await flutter(
          'build',
          options: <String>[
            'apk',
            '--config-only',
          ],
          environment: environment,
          workingDirectory: '${flutterDirectory.path}/dev/integration_tests/android_views'
        );

        /// Any gradle command downloads gradle if not already present in the cache.
        /// ./gradlew dependencies downloads any gradle defined dependencies to the cache.
        /// https://docs.gradle.org/current/userguide/viewing_debugging_dependencies.html
        /// Downloading gradle and downloading dependencies are a common source of flakes
        /// and moving those to an infra step that can be retried shifts the blame
        /// individual tests to the infra itself.
        section('Download android dependencies');
        final int exitCode = await exec(
          './gradlew',
           <String>['-q', 'dependencies'],
          workingDirectory:
          '${flutterDirectory.path}/dev/integration_tests/android_views/android'
        );
        if (exitCode != 0) {
          return TaskResult.failure('Failed to download gradle dependencies');
        }
        section('Run flutter drive on android views');
        await flutter(
          'drive',
          options: <String>[
              '--browser-name=android-chrome',
              '--android-emulator', '--no-start-paused',
              '--purge-persistent-cache', '--device-timeout=30',
          ],
          environment: environment,
          workingDirectory: '${flutterDirectory.path}/dev/integration_tests/android_views'
        );
        return TaskResult.success(null);
      };
}
