Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 20751db1 authored by pkanwar's avatar pkanwar Committed by Pankaj Kanwar
Browse files

Provide an API to make USSD calls and read the responses.

Test: will be added in a subsequent CL.
Bug: 30973910
Change-Id: Ic1214330ddf6846973d8bd28ee6ff1d28ae8c852
Merged-In: Ic1214330ddf6846973d8bd28ee6ff1d28ae8c852
parent 53a12298
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -38226,6 +38226,7 @@ package android.telephony {
    method public boolean isWorldPhone();
    method public void listen(android.telephony.PhoneStateListener, int);
    method public java.lang.String sendEnvelopeWithStatus(java.lang.String);
    method public void sendUssdRequest(java.lang.String, android.telephony.TelephonyManager.OnReceiveUssdResponseCallback, android.os.Handler);
    method public void setDataEnabled(boolean);
    method public boolean setLine1NumberForDisplay(java.lang.String, java.lang.String);
    method public boolean setOperatorBrandOverride(java.lang.String);
@@ -38300,6 +38301,12 @@ package android.telephony {
    field public static final java.lang.String VVM_TYPE_OMTP = "vvm_type_omtp";
  }
  public static abstract class TelephonyManager.OnReceiveUssdResponseCallback {
    ctor public TelephonyManager.OnReceiveUssdResponseCallback();
    method public void onReceiveUssdResponse(java.lang.String, java.lang.CharSequence);
    method public void onReceiveUssdResponseFailed(java.lang.String, int);
  }
}
package android.telephony.cdma {
+7 −0
Original line number Diff line number Diff line
@@ -41451,6 +41451,7 @@ package android.telephony {
    method public void listen(android.telephony.PhoneStateListener, int);
    method public boolean needsOtaServiceProvisioning();
    method public java.lang.String sendEnvelopeWithStatus(java.lang.String);
    method public void sendUssdRequest(java.lang.String, android.telephony.TelephonyManager.OnReceiveUssdResponseCallback, android.os.Handler);
    method public int setAllowedCarriers(int, java.util.List<android.service.carrier.CarrierIdentifier>);
    method public void setDataEnabled(boolean);
    method public void setDataEnabled(int, boolean);
@@ -41546,6 +41547,12 @@ package android.telephony {
    field public static final java.lang.String VVM_TYPE_OMTP = "vvm_type_omtp";
  }
  public static abstract class TelephonyManager.OnReceiveUssdResponseCallback {
    ctor public TelephonyManager.OnReceiveUssdResponseCallback();
    method public void onReceiveUssdResponse(java.lang.String, java.lang.CharSequence);
    method public void onReceiveUssdResponseFailed(java.lang.String, int);
  }
}
package android.telephony.cdma {
+7 −0
Original line number Diff line number Diff line
@@ -38325,6 +38325,7 @@ package android.telephony {
    method public boolean isWorldPhone();
    method public void listen(android.telephony.PhoneStateListener, int);
    method public java.lang.String sendEnvelopeWithStatus(java.lang.String);
    method public void sendUssdRequest(java.lang.String, android.telephony.TelephonyManager.OnReceiveUssdResponseCallback, android.os.Handler);
    method public void setDataEnabled(boolean);
    method public boolean setLine1NumberForDisplay(java.lang.String, java.lang.String);
    method public boolean setOperatorBrandOverride(java.lang.String);
@@ -38399,6 +38400,12 @@ package android.telephony {
    field public static final java.lang.String VVM_TYPE_OMTP = "vvm_type_omtp";
  }
  public static abstract class TelephonyManager.OnReceiveUssdResponseCallback {
    ctor public TelephonyManager.OnReceiveUssdResponseCallback();
    method public void onReceiveUssdResponse(java.lang.String, java.lang.CharSequence);
    method public void onReceiveUssdResponseFailed(java.lang.String, int);
  }
}
package android.telephony.cdma {
+78 −1
Original line number Diff line number Diff line
@@ -16,8 +16,11 @@

package android.telephony;

import static com.android.internal.util.Preconditions.checkNotNull;

import android.annotation.IntDef;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
@@ -28,12 +31,13 @@ import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.Uri;
import android.os.BatteryStats;
import android.os.ResultReceiver;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.os.Bundle;
import android.os.Handler;
import android.os.PersistableBundle;
import android.os.RemoteException;
import android.os.ResultReceiver;
import android.os.ServiceManager;
import android.os.SystemProperties;
import android.service.carrier.CarrierIdentifier;
@@ -838,6 +842,29 @@ public class TelephonyManager {
     */
    public static final String VVM_TYPE_CVVM = "vvm_type_cvvm";

    /**
     * @hide
     */
    public static final String USSD_RESPONSE = "USSD_RESPONSE";

    /**
     * USSD return code success.
     * @hide
     */
    public static final int USSD_RETURN_SUCCESS = 100;

    /**
     * USSD return code for failure case.
     * @hide
     */
    public static final int USSD_RETURN_FAILURE = -1;

    /**
     * USSD return code for failure case.
     * @hide
     */
    public static final int USSD_ERROR_SERVICE_UNAVAIL = -2;

    //
    //
    // Device Info
@@ -4965,6 +4992,56 @@ public class TelephonyManager {
        return new int[0];
    }

    public static abstract class OnReceiveUssdResponseCallback {
       /**
        ** Called when USSD has succeeded.
        **/
       public void onReceiveUssdResponse(String request, CharSequence response) {};

       /**
        ** Called when USSD has failed.
        **/
       public void onReceiveUssdResponseFailed(String request, int failureCode) {};
    }

    /* <p>Requires permission:
     * @link android.Manifest.permission#CALL_PHONE}
     */
    @RequiresPermission(android.Manifest.permission.CALL_PHONE)
    public void sendUssdRequest(String ussdRequest,
                                final OnReceiveUssdResponseCallback callback, Handler handler) {
       checkNotNull(callback, "OnReceiveUssdResponseCallback cannot be null.");

       ResultReceiver wrappedCallback = new ResultReceiver(handler) {
           @Override
           protected void onReceiveResult(int resultCode, Bundle ussdResponse) {
              Rlog.d(TAG, "USSD:" + resultCode);
              checkNotNull(ussdResponse, "ussdResponse cannot be null.");
              UssdResponse response = ussdResponse.getParcelable(USSD_RESPONSE);

              if (resultCode == USSD_RETURN_SUCCESS) {
                 callback.onReceiveUssdResponse(response.getUssdRequest(),
                         response.getReturnMessage());
              } else {
                 callback.onReceiveUssdResponseFailed(response.getUssdRequest(), resultCode);
              }
           }
        };

        try {
            ITelephony telephony = getITelephony();
            if (telephony != null) {
                telephony.handleUssdRequest(ussdRequest, wrappedCallback);
            }
        } catch (RemoteException e) {
            Log.e(TAG, "Error calling ITelephony#sendUSSDCode", e);
            UssdResponse response = new UssdResponse(ussdRequest, "");
            Bundle returnData = new Bundle();
            returnData.putParcelable(USSD_RESPONSE, response);
            wrappedCallback.send(USSD_ERROR_SERVICE_UNAVAIL, returnData);
        }
    }

    /** @hide */
    @SystemApi
    public boolean handlePinMmi(String dialString) {
+20 −0
Original line number Diff line number Diff line
/*
**
** Copyright 2007, 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 android.telephony;

parcelable UssdResponse;
Loading