android_e2e_api_test.dart 2.03 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
// 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 'package:file/file.dart';
import 'package:flutter_tools/src/base/io.dart';

import '../src/common.dart';
import 'test_utils.dart';

void main() {
  late Directory tempDir;

  setUp(() async {
    tempDir = createResolvedTempDirectorySync('run_test.');
  });

  tearDown(() async {
    tryToDelete(tempDir);
  });

  testWithoutContext('build succeeds with api 33 features', () async {
    final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
    ProcessResult result = await processManager.run(<String>[
      flutterBin,
      'create',
      tempDir.path,
      '--project-name=testapp',
    ], workingDirectory: tempDir.path);
30
    expect(result, const ProcessResultMatcher());
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70

    final File api33File = tempDir
       .childDirectory('android')
       .childDirectory('app')
       .childDirectory('src')
       .childDirectory('main')
       .childDirectory('java')
       .childFile('Android33Api.java');

    api33File.createSync(recursive: true);
    // AccessibilityManager.isAudioDescriptionRequested() is an API 33 feature
    api33File.writeAsStringSync('''
import android.app.Activity;
import android.view.accessibility.AccessibilityManager;
import androidx.annotation.Keep;
import io.flutter.Log;

@Keep
public final class Android33Api extends Activity {
  private AccessibilityManager accessibilityManager;

  public Android33Api() {
    accessibilityManager = getSystemService(AccessibilityManager.class);
  }

  public void doSomething() {
    if (accessibilityManager.isAudioDescriptionRequested()) {
      Log.e("flutter", "User has requested to enable audio descriptions");
    }
  }
}

''');

    result = await processManager.run(<String>[
      flutterBin,
      ...getLocalEngineArguments(),
      'build',
      'apk',
    ], workingDirectory: tempDir.path);
71
    expect(result, const ProcessResultMatcher(stdoutPattern: 'app-release.apk'));
72 73
  });
}