content: /*
   * Copyright (C) 2006 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.internal.telephony.cat;
  
  import android.annotation.UnsupportedAppUsage;
  import android.content.ComponentName;
  
  /**
   * Interface for communication between STK App and CAT Telephony
   *
   * {@hide}
   */
  public interface AppInterface {
  
      /*
       * Intent's actions which are broadcasted by the Telephony once a new CAT
       * proactive command, session end, ALPHA during STK CC arrive.
       */
      public static final String CAT_CMD_ACTION =
                                      "com.android.internal.stk.command";
      public static final String CAT_SESSION_END_ACTION =
                                      "com.android.internal.stk.session_end";
      public static final String CAT_ALPHA_NOTIFY_ACTION =
                                      "com.android.internal.stk.alpha_notify";
  
      //This is used to send ALPHA string from card to STK App.
      public static final String ALPHA_STRING = "alpha_string";
  
      // This is used to send refresh-result when MSG_ID_ICC_REFRESH is received.
      public static final String REFRESH_RESULT = "refresh_result";
      //This is used to send card status from card to STK App.
      public static final String CARD_STATUS = "card_status";
      //Intent's actions are broadcasted by Telephony once IccRefresh occurs.
      public static final String CAT_ICC_STATUS_CHANGE =
                                      "com.android.internal.stk.icc_status_change";
  
      // Permission required by STK command receiver
      public static final String STK_PERMISSION = "android.permission.RECEIVE_STK_COMMANDS";
  
      // Only forwards cat broadcast to the system default stk app
      public static ComponentName getDefaultSTKApplication() {
          return ComponentName.unflattenFromString("com.android.stk/.StkCmdReceiver");
      }
  
      /*
       * Callback function from app to telephony to pass a result code and user's
       * input back to the ICC.
       */
      void onCmdResponse(CatResponseMessage resMsg);
  
      /*
       * Enumeration for representing "Type of Command" of proactive commands.
       * Those are the only commands which are supported by the Telephony. Any app
       * implementation should support those.
       * Refer to ETSI TS 102.223 section 9.4
       */
      public static enum CommandType {
          @UnsupportedAppUsage
          DISPLAY_TEXT(0x21),
          @UnsupportedAppUsage
          GET_INKEY(0x22),
          @UnsupportedAppUsage
          GET_INPUT(0x23),
          @UnsupportedAppUsage
          LAUNCH_BROWSER(0x15),
          @UnsupportedAppUsage
          PLAY_TONE(0x20),
          @UnsupportedAppUsage
          REFRESH(0x01),
          @UnsupportedAppUsage
          SELECT_ITEM(0x24),
          @UnsupportedAppUsage
          SEND_SS(0x11),
          @UnsupportedAppUsage
          SEND_USSD(0x12),
          @UnsupportedAppUsage
          SEND_SMS(0x13),
          RUN_AT(0x34),
          @UnsupportedAppUsage
          SEND_DTMF(0x14),
          @UnsupportedAppUsage
          SET_UP_EVENT_LIST(0x05),
          @UnsupportedAppUsage
          SET_UP_IDLE_MODE_TEXT(0x28),
          @UnsupportedAppUsage
          SET_UP_MENU(0x25),
          @UnsupportedAppUsage
          SET_UP_CALL(0x10),
          @UnsupportedAppUsage
          PROVIDE_LOCAL_INFORMATION(0x26),
          @UnsupportedAppUsage
          LANGUAGE_NOTIFICATION(0x35),
          @UnsupportedAppUsage
          OPEN_CHANNEL(0x40),
          @UnsupportedAppUsage
          CLOSE_CHANNEL(0x41),
          @UnsupportedAppUsage
          RECEIVE_DATA(0x42),
          @UnsupportedAppUsage
          SEND_DATA(0x43),
          @UnsupportedAppUsage
          GET_CHANNEL_STATUS(0x44);
  
          private int mValue;
  
          CommandType(int value) {
              mValue = value;
          }
  
          public int value() {
              return mValue;
          }
  
          /**
           * Create a CommandType object.
           *
           * @param value Integer value to be converted to a CommandType object.
           * @return CommandType object whose "Type of Command" value is {@code
           *         value}. If no CommandType object has that value, null is
           *         returned.
           */
          @UnsupportedAppUsage
          public static CommandType fromInt(int value) {
              for (CommandType e : CommandType.values()) {
                  if (e.mValue == value) {
                      return e;
                  }
              }
              return null;
          }
      }
  }
  