title: I am not getting setReplaceSkusProrationMode in IInAppBillingService how to get this method in IInAppBillingService
body: <p>Hi i am implementing InApp purchase in my android application For this i am using IInAppBillingService. Implementation is done, but now i am facing a problem when user update or
  downgrade the subscription.The problem is suppose if user have a active monthly subscription now in the mid of the month if he update the subscription to yearly what i want is to use setReplaceSkusProrationMode of billing library so that the cost will manage automatically means remaning balance of 15 days will get adjusted in new yearly subscription.
  How to get this when using IInAppBillingService.The code which i am using for launching purchase is as below please help me i am lost.</p>
  
  <pre><code>/**
   * Initiate the UI flow for an in-app purchase. Call this method to initiate an in-app purchase,
   * which will involve bringing up the Google Play screen. The calling activity will be paused
   * while the user interacts with Google Play, and the result will be delivered via the
   * activity's {@link android.app.Activity#onActivityResult} method, at which point you must call
   * this object's {@link #handleActivityResult} method to continue the purchase flow. This method
   * MUST be called from the UI thread of the Activity.
   *
   * @param act The calling activity.
   * @param sku The sku of the item to purchase.
   * @param itemType indicates if it's a product or a subscription (ITEM_TYPE_INAPP or
   *      ITEM_TYPE_SUBS)
   * @param oldSkus A list of SKUs which the new SKU is replacing or null if there are none
   * @param requestCode A request code (to differentiate from other responses -- as in
   *      {@link android.app.Activity#startActivityForResult}).
   * @param listener The listener to notify when the purchase process finishes
   * @param extraData Extra data (developer payload), which will be returned with the purchase
   *      data when the purchase completes. This extra data will be permanently bound to that
   *      purchase and will always be returned when the purchase is queried.
   */
  public void launchPurchaseFlow(Activity act, String sku, String itemType, List&lt;String&gt; oldSkus,
                                 int requestCode, OnIabPurchaseFinishedListener listener, String extraData)
      throws IabAsyncInProgressException {
      checkNotDisposed();
      checkSetupDone("launchPurchaseFlow");
      flagStartAsync("launchPurchaseFlow");
      IabResult result;
  
      if (itemType.equals(ITEM_TYPE_SUBS) &amp;&amp; !mSubscriptionsSupported) {
          IabResult r = new IabResult(IABHELPER_SUBSCRIPTIONS_NOT_AVAILABLE,
                  "Subscriptions are not available.");
          flagEndAsync();
          if (listener != null) listener.onIabPurchaseFinished(r, null);
          return;
      }
  
      try {
          logDebug("Constructing buy intent for " + sku + ", item type: " + itemType);
          Bundle buyIntentBundle;
          if (oldSkus == null || oldSkus.isEmpty()) {
              // Purchasing a new item or subscription re-signup
              buyIntentBundle = mService.getBuyIntent(3, mContext.getPackageName(), sku, itemType,
                      extraData);
          } else {
              // Subscription upgrade/downgrade
              if (!mSubscriptionUpdateSupported) {
                  IabResult r = new IabResult(IABHELPER_SUBSCRIPTION_UPDATE_NOT_AVAILABLE,
                          "Subscription updates are not available.");
                  flagEndAsync();
                  if (listener != null) listener.onIabPurchaseFinished(r, null);
                  return;
              }
              buyIntentBundle = mService.getBuyIntentToReplaceSkus(5, mContext.getPackageName(),
                      oldSkus, sku, itemType, extraData);
          }
          int response = getResponseCodeFromBundle(buyIntentBundle);
          if (response != BILLING_RESPONSE_RESULT_OK) {
              logError("Unable to buy item, Error response: " + getResponseDesc(response));
              flagEndAsync();
              result = new IabResult(response, "Unable to buy item");
              if (listener != null) listener.onIabPurchaseFinished(result, null);
              return;
          }
  
          PendingIntent pendingIntent = buyIntentBundle.getParcelable(RESPONSE_BUY_INTENT);
          logDebug("Launching buy intent for " + sku + ". Request code: " + requestCode);
          mRequestCode = requestCode;
          mPurchaseListener = listener;
          mPurchasingItemType = itemType;
          act.startIntentSenderForResult(pendingIntent.getIntentSender(),
                  requestCode, new Intent(),
                  Integer.valueOf(0), Integer.valueOf(0),
                  Integer.valueOf(0));
      }
      catch (SendIntentException e) {
          logError("SendIntentException while launching purchase flow for sku " + sku);
          e.printStackTrace();
          flagEndAsync();
  
          result = new IabResult(IABHELPER_SEND_INTENT_FAILED, "Failed to send intent.");
          if (listener != null) listener.onIabPurchaseFinished(result, null);
      }
      catch (RemoteException e) {
          logError("RemoteException while launching purchase flow for sku " + sku);
          e.printStackTrace();
          flagEndAsync();
  
          result = new IabResult(IABHELPER_REMOTE_EXCEPTION, "Remote exception while starting purchase flow");
          if (listener != null) listener.onIabPurchaseFinished(result, null);
      }
  }
  </code></pre>