| // 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. |
| |
| package org.chromium.chromecast.shell; |
| |
| import java.util.concurrent.Executors; |
| import java.util.concurrent.ScheduledExecutorService; |
| |
| /** |
| * Factory class that creates CastCrashUploader using a ScheduledExecutorService singleton to |
| * schedule all tasks on one thread. |
| */ |
| public final class CastCrashUploaderFactory { |
| private static ScheduledExecutorService sExecutorService; |
| public static CastCrashUploader createCastCrashUploader(String crashDumpPath, String uuid, |
| String applicationFeedback, boolean uploadCrashToStaging) { |
| if (sExecutorService == null) { |
| sExecutorService = Executors.newScheduledThreadPool(1); |
| } |
| ElidedLogcatProvider logcatProvider = shouldUseRemoteServiceLogs() |
| ? new ExternalServiceDeviceLogcatProvider() |
| : new AndroidAppLogcatProvider(); |
| return new CastCrashUploader(sExecutorService, logcatProvider, crashDumpPath, uuid, |
| applicationFeedback, uploadCrashToStaging); |
| } |
| |
| private static boolean shouldUseRemoteServiceLogs() { |
| return BuildConfig.USE_REMOTE_SERVICE_LOGCAT |
| && !BuildConfig.DEVICE_LOGS_PROVIDER_PACKAGE.equals("") |
| && !BuildConfig.DEVICE_LOGS_PROVIDER_CLASS.equals(""); |
| } |
| } |