36 lines
1.1 KiB
Ruby
36 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Projects
|
|
# Service class to detect if a project is made to run on the Android platform.
|
|
#
|
|
# This service searches for an AndroidManifest.xml file which all Android app
|
|
# project must have. It returns the symbol :android if the given project is an
|
|
# Android app project.
|
|
#
|
|
# Ref: https://developer.android.com/guide/topics/manifest/manifest-intro
|
|
#
|
|
# Example usage:
|
|
# > AndroidTargetPlatformDetectorService.new(a_project).execute
|
|
# => nil
|
|
# > AndroidTargetPlatformDetectorService.new(an_android_project).execute
|
|
# => :android
|
|
class AndroidTargetPlatformDetectorService < BaseService
|
|
# <manifest> element is required and must occur once inside AndroidManifest.xml
|
|
MANIFEST_FILE_SEARCH_QUERY = '<manifest filename:AndroidManifest.xml'
|
|
|
|
def execute
|
|
detect
|
|
end
|
|
|
|
private
|
|
|
|
def file_finder
|
|
@file_finder ||= ::Gitlab::FileFinder.new(project, project.default_branch)
|
|
end
|
|
|
|
def detect
|
|
return :android if file_finder.find(MANIFEST_FILE_SEARCH_QUERY).present?
|
|
end
|
|
end
|
|
end
|