code: public void track(
        final @NonNull String event,
        final @Nullable Properties properties,
        @Nullable final Options options) {
      assertNotShutdown();
      if (isNullOrEmpty(event)) {
        throw new IllegalArgumentException("event must not be null or empty.");
      }
  
      analyticsExecutor.submit(
          new Runnable() {
            @Override
            public void run() {
              final Options finalOptions;
              if (options == null) {
                finalOptions = defaultOptions;
              } else {
                finalOptions = options;
              }
  
              final Properties finalProperties;
              if (properties == null) {
                finalProperties = EMPTY_PROPERTIES;
              } else {
                finalProperties = properties;
              }
  
              TrackPayload.Builder builder =
                  new TrackPayload.Builder().event(event).properties(finalProperties);
              fillAndEnqueue(builder, finalOptions);
            }
          });
    }
docs: The track method is how you record any actions your users perform. Each action is known by a
  name, like 'Purchased a T-Shirt'. You can also record properties specific to those actions. For
  example a 'Purchased a Shirt' event might have properties like revenue or size.
  
  @param event Name of the event. Must not be null or empty.
  @param properties {@link Properties} to add extra information to this call.
  @param options To configure the call.
  @throws IllegalArgumentException if event name is null or an empty string.
  @see <a href="https://segment.com/docs/spec/track/">Track Documentation</a>