android_studio_validator.dart 2.82 KB
Newer Older
1 2 3 4 5 6
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'dart:async';

7
import '../base/version.dart';
8 9
import '../doctor.dart';
import '../globals.dart';
10 11 12 13 14 15 16 17
import 'android_studio.dart';

class AndroidStudioValidator extends DoctorValidator {
  final AndroidStudio _studio;

  AndroidStudioValidator(this._studio) : super('Android Studio');

  static List<DoctorValidator> get allValidators {
18 19
    final List<DoctorValidator> validators = <DoctorValidator>[];
    final List<AndroidStudio> studios = AndroidStudio.allInstalled();
20 21 22 23 24 25 26 27 28 29 30
    if (studios.isEmpty) {
      validators.add(new NoAndroidStudioValidator());
    } else {
      validators.addAll(studios
          .map((AndroidStudio studio) => new AndroidStudioValidator(studio)));
    }
    return validators;
  }

  @override
  Future<ValidationResult> validate() async {
31
    final List<ValidationMessage> messages = <ValidationMessage>[];
32
    ValidationType type = ValidationType.missing;
33 34 35
    final String studioVersionText = _studio.version == Version.unknown
        ? null
        : 'version ${_studio.version}';
36 37 38 39 40 41 42 43 44 45 46 47 48 49
    messages
        .add(new ValidationMessage('Android Studio at ${_studio.directory}'));
    if (_studio.isValid) {
      type = ValidationType.installed;
      messages.addAll(_studio.validationMessages
          .map((String m) => new ValidationMessage(m)));
    } else {
      type = ValidationType.partial;
      messages.addAll(_studio.validationMessages
          .map((String m) => new ValidationMessage.error(m)));
      messages.add(new ValidationMessage(
          'Try updating or re-installing Android Studio.'));
      if (_studio.configured != null) {
        messages.add(new ValidationMessage(
50
            'Consider removing your android-studio-dir setting by running:\nflutter config --android-studio-dir='));
51 52 53 54 55 56 57 58 59 60 61 62
      }
    }

    return new ValidationResult(type, messages, statusInfo: studioVersionText);
  }
}

class NoAndroidStudioValidator extends DoctorValidator {
  NoAndroidStudioValidator() : super('Android Studio');

  @override
  Future<ValidationResult> validate() async {
63
    final List<ValidationMessage> messages = <ValidationMessage>[];
64

65
    final String cfgAndroidStudio = config.getValue('android-studio-dir');
66 67 68 69 70 71
    if (cfgAndroidStudio != null) {
      messages.add(
          new ValidationMessage.error('android-studio-dir = $cfgAndroidStudio\n'
              'but Android Studio not found at this location.'));
    }
    messages.add(new ValidationMessage(
72
        'Android Studio not found; download from https://developer.android.com/studio/index.html\n'
73 74 75 76 77 78
        '(or visit https://flutter.io/setup/#android-setup for detailed instructions).'));

    return new ValidationResult(ValidationType.missing, messages,
        statusInfo: 'not installed');
  }
}