content: /*
   * Copyright (C) 2018 The Android Open Source Project
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package com.android.server.textservices;
  
  import android.annotation.NonNull;
  import android.annotation.Nullable;
  import android.annotation.UserIdInt;
  import android.view.textservice.SpellCheckerInfo;
  
  import com.android.server.LocalServices;
  
  /**
   * Local interface of {@link TextServicesManagerService} inside system server process.
   */
  public abstract class TextServicesManagerInternal {
      /**
       * Returns the list of installed input methods for the specified user.
       *
       * <p>CAVEAT: This method is not fully implemented yet. This may return an empty list if
       * {@code userId} for a background user is specified. Check the implementation before starting
       * this method.</p>
       *
       * @param userId The user ID to be queried.
       * @return {@link SpellCheckerInfo} that is currently selected {@code userId}.
       */
      @Nullable
      public abstract SpellCheckerInfo getCurrentSpellCheckerForUser(@UserIdInt int userId);
  
      /**
       * Fake implementation of {@link TextServicesManagerInternal}.  All the methods do nothing.
       */
      private static final TextServicesManagerInternal NOP =
              new TextServicesManagerInternal() {
                  @Override
                  public SpellCheckerInfo getCurrentSpellCheckerForUser(@UserIdInt int userId) {
                      return null;
                  }
              };
  
      /**
       * @return Global instance if exists.  Otherwise, a dummy no-op instance.
       */
      @NonNull
      public static TextServicesManagerInternal get() {
          final TextServicesManagerInternal instance =
                  LocalServices.getService(TextServicesManagerInternal.class);
          return instance != null ? instance : NOP;
      }
  }
  