diff options
17 files changed, 189 insertions, 53 deletions
| diff --git a/core/java/android/bluetooth/BluetoothUuid.java b/core/java/android/bluetooth/BluetoothUuid.java index f8316a5bac9a..1ec7fb38b447 100644 --- a/core/java/android/bluetooth/BluetoothUuid.java +++ b/core/java/android/bluetooth/BluetoothUuid.java @@ -30,14 +30,13 @@ public final class BluetoothUuid {       * The following 128 bit values are calculated as:       *  uuid * 2^96 + BASE_UUID       */ -    public static final UUID AudioSink = UUID.fromString("0000110A-0000-1000-8000-00805F9B34FB"); -    public static final UUID AudioSource = UUID.fromString("0000110B-0000-1000-8000-00805F9B34FB"); +    public static final UUID AudioSink = UUID.fromString("0000110B-0000-1000-8000-00805F9B34FB"); +    public static final UUID AudioSource = UUID.fromString("0000110A-0000-1000-8000-00805F9B34FB");      public static final UUID AdvAudioDist = UUID.fromString("0000110D-0000-1000-8000-00805F9B34FB");      public static final UUID HSP       = UUID.fromString("00001108-0000-1000-8000-00805F9B34FB"); -    public static final UUID HeadsetHS = UUID.fromString("00001131-0000-1000-8000-00805F9B34FB"); -    public static final UUID Handsfree  = UUID.fromString("0000111e-0000-1000-8000-00805F9B34FB"); -    public static final UUID HandsfreeAudioGateway -                                          = UUID.fromString("0000111f-0000-1000-8000-00805F9B34FB"); +    public static final UUID Handsfree  = UUID.fromString("0000111E-0000-1000-8000-00805F9B34FB"); +    public static final UUID AvrcpController = +                                          UUID.fromString("0000110E-0000-1000-8000-00805F9B34FB");      public static boolean isAudioSource(UUID uuid) {          return uuid.equals(AudioSource); @@ -56,7 +55,10 @@ public final class BluetoothUuid {      }      public static boolean isHeadset(UUID uuid) { -        return uuid.equals(HSP) || uuid.equals(HeadsetHS); +        return uuid.equals(HSP);      } -} +    public static boolean isAvrcpController(UUID uuid) { +        return uuid.equals(AvrcpController); +    } +} diff --git a/core/java/android/server/BluetoothEventLoop.java b/core/java/android/server/BluetoothEventLoop.java index dc84d1f376c9..d98277703d0e 100644 --- a/core/java/android/server/BluetoothEventLoop.java +++ b/core/java/android/server/BluetoothEventLoop.java @@ -402,13 +402,14 @@ class BluetoothEventLoop {          boolean authorized = false;          UUID uuid = UUID.fromString(deviceUuid); -        if (mBluetoothService.isEnabled() && BluetoothUuid.isAudioSink(uuid)) { +        if (mBluetoothService.isEnabled() && +                (BluetoothUuid.isAudioSink(uuid) || BluetoothUuid.isAvrcpController(uuid))) {              BluetoothA2dp a2dp = new BluetoothA2dp(mContext);              authorized = a2dp.getSinkPriority(address) > BluetoothA2dp.PRIORITY_OFF;              if (authorized) { -                Log.i(TAG, "Allowing incoming A2DP connection from " + address); +                Log.i(TAG, "Allowing incoming A2DP / AVRCP connection from " + address);              } else { -                Log.i(TAG, "Rejecting incoming A2DP connection from " + address); +                Log.i(TAG, "Rejecting incoming A2DP / AVRCP connection from " + address);              }          } else {              Log.i(TAG, "Rejecting incoming " + deviceUuid + " connection from " + address); diff --git a/core/java/android/webkit/WebTextView.java b/core/java/android/webkit/WebTextView.java index 7bc154b68857..f22adb764df8 100644 --- a/core/java/android/webkit/WebTextView.java +++ b/core/java/android/webkit/WebTextView.java @@ -81,6 +81,10 @@ import java.util.ArrayList;      // True if the most recent drag event has caused either the TextView to      // scroll or the web page to scroll.  Gets reset after a touch down.      private boolean         mScrolled; +    // Gets set to true when the the IME jumps to the next textfield.  When this +    // happens, the next time the user hits a key it is okay for the focus +    // pointer to not match the WebTextView's node pointer +    private boolean         mOkayForFocusNotToMatch;      // Array to store the final character added in onTextChanged, so that its      // KeyEvents may be determined.      private char[]          mCharacter = new char[1]; @@ -99,7 +103,6 @@ import java.util.ArrayList;          super(context);          mWebView = webView;          mMaxLength = -1; -        setImeOptions(EditorInfo.IME_ACTION_NONE);      }      @Override @@ -125,8 +128,8 @@ import java.util.ArrayList;                  isArrowKey = true;                  break;          } - -        if (!isArrowKey && mWebView.nativeFocusNodePointer() != mNodePointer) { +        if (!isArrowKey && !mOkayForFocusNotToMatch +                && mWebView.nativeFocusNodePointer() != mNodePointer) {              mWebView.nativeClearCursor();              // Do not call remove() here, which hides the soft keyboard.  If              // the soft keyboard is being displayed, the user will still want @@ -135,6 +138,9 @@ import java.util.ArrayList;              mWebView.requestFocus();              return mWebView.dispatchKeyEvent(event);          } +        // After a jump to next textfield and the first key press, the cursor +        // and focus will once again match, so reset this value. +        mOkayForFocusNotToMatch = false;          Spannable text = (Spannable) getText();          int oldLength = text.length(); @@ -305,6 +311,36 @@ import java.util.ArrayList;      }      @Override +    public void onEditorAction(int actionCode) { +        switch (actionCode) { +        case EditorInfo.IME_ACTION_NEXT: +            mWebView.nativeMoveCursorToNextTextInput(); +            // Preemptively rebuild the WebTextView, so that the action will +            // be set properly. +            mWebView.rebuildWebTextView(); +            // Since the cursor will no longer be in the same place as the +            // focus, set the focus controller back to inactive +            mWebView.setFocusControllerInactive(); +            mOkayForFocusNotToMatch = true; +            break; +        case EditorInfo.IME_ACTION_DONE: +            super.onEditorAction(actionCode); +            break; +        case EditorInfo.IME_ACTION_GO: +            // Send an enter and hide the soft keyboard +            InputMethodManager.getInstance(mContext) +                    .hideSoftInputFromWindow(getWindowToken(), 0); +            sendDomEvent(new KeyEvent(KeyEvent.ACTION_DOWN, +                    KeyEvent.KEYCODE_ENTER)); +            sendDomEvent(new KeyEvent(KeyEvent.ACTION_UP, +                    KeyEvent.KEYCODE_ENTER)); + +        default: +            break; +        } +    } + +    @Override      protected void onSelectionChanged(int selStart, int selEnd) {          if (mWebView != null) {              if (DebugFlags.WEB_TEXT_VIEW) { @@ -659,10 +695,26 @@ import java.util.ArrayList;      public void setSingleLine(boolean single) {          int inputType = EditorInfo.TYPE_CLASS_TEXT                  | EditorInfo.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT; -        if (!single) { +        if (single) { +            int action = mWebView.nativeTextFieldAction(); +            switch (action) { +            // Keep in sync with CachedRoot::ImeAction +            case 0: // NEXT +                setImeOptions(EditorInfo.IME_ACTION_NEXT); +                break; +            case 1: // GO +                setImeOptions(EditorInfo.IME_ACTION_GO); +                break; +            case -1: // FAILURE +            case 2: // DONE +                setImeOptions(EditorInfo.IME_ACTION_DONE); +                break; +            } +        } else {              inputType |= EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE                      | EditorInfo.TYPE_TEXT_FLAG_CAP_SENTENCES                      | EditorInfo.TYPE_TEXT_FLAG_AUTO_CORRECT; +            setImeOptions(EditorInfo.IME_ACTION_NONE);          }          mSingle = single;          setHorizontallyScrolling(single); diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 05a7806f2950..de0b06d0a7a6 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -3123,7 +3123,7 @@ public class WebView extends AbsoluteLayout       * mWebTextView to have the appropriate properties, such as password,       * multiline, and what text it contains.  It also removes it if necessary.       */ -    private void rebuildWebTextView() { +    /* package */ void rebuildWebTextView() {          // If the WebView does not have focus, do nothing until it gains focus.          if (!hasFocus() && (null == mWebTextView || !mWebTextView.hasFocus())                  || (mTouchMode >= FIRST_SCROLL_ZOOM @@ -3385,7 +3385,8 @@ public class WebView extends AbsoluteLayout          } else if (nativeCursorIsTextInput()) {              // This message will put the node in focus, for the DOM's notion              // of focus, and make the focuscontroller active -            mWebViewCore.sendMessage(EventHub.CLICK); +            mWebViewCore.sendMessage(EventHub.CLICK, nativeCursorFramePointer(), +                    nativeCursorNodePointer());              // This will bring up the WebTextView and put it in focus, for              // our view system's notion of focus              rebuildWebTextView(); @@ -3626,7 +3627,7 @@ public class WebView extends AbsoluteLayout       * not draw the blinking cursor.  It gets set to "active" to draw the cursor       * in WebViewCore.cpp, when the WebCore thread receives key events/clicks.       */ -    private void setFocusControllerInactive() { +    /* package */ void setFocusControllerInactive() {          // Do not need to also check whether mWebViewCore is null, because          // mNativeClass is only set if mWebViewCore is non null          if (mNativeClass == 0) return; @@ -3813,6 +3814,8 @@ public class WebView extends AbsoluteLayout                  } else {                      mTouchMode = TOUCH_INIT_MODE;                      mPreventDrag = mForwardTouchEvents; +                    mWebViewCore.sendMessage( +                            EventHub.UPDATE_FRAME_CACHE_IF_LOADING);                      if (mLogEvent && eventTime - mLastTouchUpTime < 1000) {                          EventLog.writeEvent(EVENT_LOG_DOUBLE_TAP_DURATION,                                  (eventTime - mLastTouchUpTime), eventTime); @@ -4680,7 +4683,7 @@ public class WebView extends AbsoluteLayout              // mLastTouchX and mLastTouchY are the point in the current viewport              int contentX = viewToContent((int) mLastTouchX + mScrollX);              int contentY = viewToContent((int) mLastTouchY + mScrollY); -            int left = nativeGetBlockLeftEdge(contentX, contentY); +            int left = nativeGetBlockLeftEdge(contentX, contentY, mActualScale);              if (left != NO_LEFTEDGE) {                  // add a 5pt padding to the left edge. Re-calculate the zoom                  // center so that the new scroll x will be on the left edge. @@ -5627,6 +5630,7 @@ public class WebView extends AbsoluteLayout      private native void     nativeHideCursor();      private native String   nativeImageURI(int x, int y);      private native void     nativeInstrumentReport(); +    /* package */ native void nativeMoveCursorToNextTextInput();      // return true if the page has been scrolled      private native boolean  nativeMotionUp(int x, int y, int slop);      // returns false if it handled the key @@ -5644,6 +5648,8 @@ public class WebView extends AbsoluteLayout      private native void     nativeSetFindIsDown();      private native void     nativeSetFollowedLink(boolean followed);      private native void     nativeSetHeightCanMeasure(boolean measure); +    // Returns a value corresponding to CachedFrame::ImeAction +    /* package */ native int  nativeTextFieldAction();      private native int      nativeTextGeneration();      // Never call this version except by updateCachedTextfield(String) -      // we always want to pass in our generation number. @@ -5652,5 +5658,5 @@ public class WebView extends AbsoluteLayout      private native void     nativeUpdatePluginReceivesEvents();      // return NO_LEFTEDGE means failure.      private static final int NO_LEFTEDGE = -1; -    private native int      nativeGetBlockLeftEdge(int x, int y); +    private native int      nativeGetBlockLeftEdge(int x, int y, float scale);  } diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java index 8ec8174a7970..2f9e1530cff1 100644 --- a/core/java/android/webkit/WebViewCore.java +++ b/core/java/android/webkit/WebViewCore.java @@ -648,6 +648,7 @@ final class WebViewCore {      }          static final String[] HandlerDebugString = { +            "UPDATE_FRAME_CACHE_IF_LOADING", // = 98              "SCROLL_TEXT_INPUT", // = 99              "LOAD_URL", // = 100;              "STOP_LOADING", // = 101; @@ -699,6 +700,7 @@ final class WebViewCore {      class EventHub {          // Message Ids +        static final int UPDATE_FRAME_CACHE_IF_LOADING = 98;          static final int SCROLL_TEXT_INPUT = 99;          static final int LOAD_URL = 100;          static final int STOP_LOADING = 101; @@ -805,10 +807,11 @@ final class WebViewCore {                  @Override                  public void handleMessage(Message msg) {                      if (DebugFlags.WEB_VIEW_CORE) { -                        Log.v(LOGTAG, (msg.what < SCROLL_TEXT_INPUT || msg.what +                        Log.v(LOGTAG, (msg.what < UPDATE_FRAME_CACHE_IF_LOADING +                                || msg.what                                  > FREE_MEMORY ? Integer.toString(msg.what)                                  : HandlerDebugString[msg.what -                                        - SCROLL_TEXT_INPUT]) +                                        - UPDATE_FRAME_CACHE_IF_LOADING])                                  + " arg1=" + msg.arg1 + " arg2=" + msg.arg2                                  + " obj=" + msg.obj);                      } @@ -825,6 +828,10 @@ final class WebViewCore {                              mNativeClass = 0;                              break; +                        case UPDATE_FRAME_CACHE_IF_LOADING: +                            nativeUpdateFrameCacheIfLoading(); +                            break; +                          case SCROLL_TEXT_INPUT:                              nativeScrollFocusedTextInput(msg.arg1, msg.arg2);                              break; @@ -1938,6 +1945,8 @@ final class WebViewCore {                  WebView.CLEAR_TEXT_ENTRY).sendToTarget();      } +    private native void nativeUpdateFrameCacheIfLoading(); +      /**       * Scroll the focused textfield to (x, y) in document space       */ diff --git a/core/res/res/layout/preference_dialog.xml b/core/res/res/layout/preference_dialog.xml new file mode 100644 index 000000000000..5cf0f6e22b7f --- /dev/null +++ b/core/res/res/layout/preference_dialog.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- 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. +--> + +<!-- Layout used by DialogPreference widgets. This is inflated inside  +        android.R.layout.preference. --> +<ImageView xmlns:android="http://schemas.android.com/apk/res/android" +    android:layout_width="wrap_content" +    android:layout_height="wrap_content" +    android:layout_marginRight="4dip" +    android:layout_gravity="center_vertical" +    android:background="@drawable/btn_circle" +    android:src="@drawable/ic_btn_round_more" /> + diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml index 6df8b0abd26e..4aa4210fb2bc 100644 --- a/core/res/res/values/styles.xml +++ b/core/res/res/values/styles.xml @@ -659,12 +659,12 @@      </style>      <style name="Preference.PreferenceScreen"> -        <item name="android:widgetLayout">@android:layout/preferences</item>      </style>      <style name="Preference.DialogPreference">          <item name="android:positiveButtonText">@android:string/ok</item>          <item name="android:negativeButtonText">@android:string/cancel</item> +        <item name="android:widgetLayout">@android:layout/preference_dialog</item>      </style>      <style name="Preference.DialogPreference.YesNoPreference"> @@ -680,6 +680,7 @@          <item name="android:ringtoneType">ringtone</item>          <item name="android:showSilent">true</item>          <item name="android:showDefault">true</item> +        <item name="android:widgetLayout">@android:layout/preference_dialog</item>      </style>      <!-- Other Misc Styles --> diff --git a/media/java/android/media/JetPlayer.java b/media/java/android/media/JetPlayer.java index 2263605417cd..1570db46f226 100644 --- a/media/java/android/media/JetPlayer.java +++ b/media/java/android/media/JetPlayer.java @@ -183,6 +183,7 @@ public class JetPlayer       */      public void release() {          native_release(); +        singletonRef = null;      } diff --git a/media/jni/soundpool/SoundPool.cpp b/media/jni/soundpool/SoundPool.cpp index 0d07abe6fea4..b17e31b2266a 100644 --- a/media/jni/soundpool/SoundPool.cpp +++ b/media/jni/soundpool/SoundPool.cpp @@ -93,7 +93,7 @@ SoundPool::~SoundPool()  void SoundPool::addToRestartList(SoundChannel* channel)  { -    Mutex::Autolock lock(&mLock); +    Mutex::Autolock lock(&mRestartLock);      mRestart.push_back(channel);      mCondition.signal();  } @@ -106,9 +106,9 @@ int SoundPool::beginThread(void* arg)  int SoundPool::run()  { -    mLock.lock(); +    mRestartLock.lock();      while (!mQuit) { -        mCondition.wait(mLock); +        mCondition.wait(mRestartLock);          LOGV("awake");          if (mQuit) break; @@ -125,19 +125,19 @@ int SoundPool::run()      mRestart.clear();      mCondition.signal(); -    mLock.unlock(); +    mRestartLock.unlock();      LOGV("goodbye");      return 0;  }  void SoundPool::quit()  { -    mLock.lock(); +    mRestartLock.lock();      mQuit = true;      mCondition.signal(); -    mCondition.wait(mLock); +    mCondition.wait(mRestartLock);      LOGV("return from quit"); -    mLock.unlock(); +    mRestartLock.unlock();  }  bool SoundPool::startThreads() @@ -484,11 +484,8 @@ void SoundChannel::play(const sp<Sample>& sample, int nextChannelID, float leftV      // if not idle, this voice is being stolen      if (mState != IDLE) {          LOGV("channel %d stolen - event queued for channel %d", channelID(), nextChannelID); -        stop_l();          mNextEvent.set(sample, nextChannelID, leftVolume, rightVolume, priority, loop, rate); -#ifdef USE_SHARED_MEM_BUFFER -        mSoundPool->done(this); -#endif +        stop();          return;      } diff --git a/media/jni/soundpool/SoundPool.h b/media/jni/soundpool/SoundPool.h index 78027812fb95..ab86e90ef3a7 100644 --- a/media/jni/soundpool/SoundPool.h +++ b/media/jni/soundpool/SoundPool.h @@ -204,6 +204,7 @@ private:      jobject                 mSoundPoolRef;      Mutex                   mLock; +    Mutex                   mRestartLock;      Condition               mCondition;      SoundPoolThread*        mDecodeThread;      SoundChannel*           mChannelPool; diff --git a/telephony/java/com/android/internal/telephony/CommandsInterface.java b/telephony/java/com/android/internal/telephony/CommandsInterface.java index c52fe0620dae..6ebd8d6926fe 100644 --- a/telephony/java/com/android/internal/telephony/CommandsInterface.java +++ b/telephony/java/com/android/internal/telephony/CommandsInterface.java @@ -1300,11 +1300,13 @@ public interface CommandsInterface {       *            the username for APN, or NULL       * @param password       *            the password for APN, or NULL +     * @param authType +     *            the PAP / CHAP auth type. Values is one of SETUP_DATA_AUTH_*       * @param result       *            Callback message       */      public void setupDataCall(String radioTechnology, String profile, String apn, -            String user, String password, Message result); +            String user, String password, String authType, Message result);      /**       * Deactivate packet data connection diff --git a/telephony/java/com/android/internal/telephony/RIL.java b/telephony/java/com/android/internal/telephony/RIL.java index 52f6526ae920..50bf2183e993 100644 --- a/telephony/java/com/android/internal/telephony/RIL.java +++ b/telephony/java/com/android/internal/telephony/RIL.java @@ -1237,10 +1237,17 @@ public final class RIL extends BaseCommands implements CommandsInterface {       */      public void      setupDefaultPDP(String apn, String user, String password, Message result) { -        String radioTechnology = "1"; //0 for CDMA, 1 for GSM/UMTS +        int radioTechnology; +        int authType;          String profile = ""; //profile number, NULL for GSM/UMTS -        setupDataCall(radioTechnology, profile, apn, user, -                password, result); + +        radioTechnology = RILConstants.SETUP_DATA_TECH_GSM; +        //TODO(): Add to the APN database, AuthType is set to CHAP/PAP +        authType = (user != null) ? RILConstants.SETUP_DATA_AUTH_PAP_CHAP +                : RILConstants.SETUP_DATA_AUTH_NONE; + +        setupDataCall(Integer.toString(radioTechnology), profile, apn, user, +                password, Integer.toString(authType), result);      } @@ -1259,7 +1266,7 @@ public final class RIL extends BaseCommands implements CommandsInterface {       */      public void      setupDataCall(String radioTechnology, String profile, String apn, -            String user, String password, Message result) { +            String user, String password, String authType, Message result) {          RILRequest rr                  = RILRequest.obtain(RIL_REQUEST_SETUP_DATA_CALL, result); @@ -1270,15 +1277,12 @@ public final class RIL extends BaseCommands implements CommandsInterface {          rr.mp.writeString(apn);          rr.mp.writeString(user);          rr.mp.writeString(password); -        //TODO(): Add to the APN database, AuthType is set to CHAP/PAP -        // 0 => Neither PAP nor CHAP will be performed, 3 => PAP / CHAP will be performed. -        if (user != null) -            rr.mp.writeString("3"); -        else -            rr.mp.writeString("0"); - -        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " -                + apn); +        rr.mp.writeString(authType); + +        if (RILJ_LOGD) riljLog(rr.serialString() + "> " +                + requestToString(rr.mRequest) + " " + radioTechnology + " " +                + profile + " " + apn + " " + user + " " +                + password + " " + authType);          send(rr);      } diff --git a/telephony/java/com/android/internal/telephony/RILConstants.java b/telephony/java/com/android/internal/telephony/RILConstants.java index 0763e63e7c9a..90a82f908232 100644 --- a/telephony/java/com/android/internal/telephony/RILConstants.java +++ b/telephony/java/com/android/internal/telephony/RILConstants.java @@ -79,6 +79,14 @@ public interface RILConstants {      int CDM_TTY_HCO_MODE = 2;      int CDM_TTY_VCO_MODE = 3; +    /* Setup a packet data connection. See ril.h RIL_REQUEST_SETUP_DATA_CALL */ +    int SETUP_DATA_TECH_CDMA      = 0; +    int SETUP_DATA_TECH_GSM       = 1; +    int SETUP_DATA_AUTH_NONE      = 0; +    int SETUP_DATA_AUTH_PAP       = 1; +    int SETUP_DATA_AUTH_CHAP      = 2; +    int SETUP_DATA_AUTH_PAP_CHAP  = 3; +  /*  cat include/telephony/ril.h | \     egrep '^#define' | \ diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnection.java b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnection.java index fef6d3c633a7..4588f36cbeda 100644 --- a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnection.java +++ b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnection.java @@ -143,9 +143,10 @@ public class CdmaDataConnection extends DataConnection {          lastFailTime = -1;          lastFailCause = FailCause.NONE;          receivedDisconnectReq = false; -        phone.mCM.setupDataCall(Integer.toString(RILConstants.CDMA_PHONE), +        phone.mCM.setupDataCall(Integer.toString(RILConstants.SETUP_DATA_TECH_CDMA),                  Integer.toString(RILConstants.DATA_PROFILE_DEFAULT), null, null, -                null, obtainMessage(EVENT_SETUP_DATA_CONNECTION_DONE)); +                null, Integer.toString(RILConstants.SETUP_DATA_AUTH_PAP_CHAP), +                obtainMessage(EVENT_SETUP_DATA_CONNECTION_DONE));      }      private void tearDownData(Message msg) { diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java b/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java index 3ab1f7769fac..1f1f7c14fc17 100644 --- a/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java +++ b/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java @@ -19,6 +19,7 @@ package com.android.internal.telephony.cdma;  import android.app.Activity;  import android.app.PendingIntent; +import android.app.PendingIntent.CanceledException;  import android.content.ContentValues;  import android.content.SharedPreferences;  import android.database.Cursor; @@ -31,6 +32,7 @@ import android.provider.Telephony.Sms.Intents;  import android.preference.PreferenceManager;  import android.util.Config;  import android.util.Log; +import android.telephony.SmsManager;  import com.android.internal.telephony.TelephonyProperties;  import com.android.internal.telephony.CommandsInterface; @@ -45,6 +47,7 @@ import com.android.internal.util.HexDump;  import java.io.ByteArrayOutputStream;  import java.util.ArrayList;  import java.util.HashMap; +import java.lang.Boolean;  final class CdmaSMSDispatcher extends SMSDispatcher { @@ -331,6 +334,24 @@ final class CdmaSMSDispatcher extends SMSDispatcher {                  sentIntent, deliveryIntent);      } +    protected void sendRawPdu(byte[] smsc, byte[] pdu, PendingIntent sentIntent, +            PendingIntent deliveryIntent) { +        String inEcm = SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE); +        if (Boolean.parseBoolean(inEcm)) { +            if (sentIntent != null) { +                try { +                    sentIntent.send(SmsManager.RESULT_ERROR_NO_SERVICE); +                } catch (CanceledException ex) {} +            } +            if (Config.LOGD) { +                Log.d(TAG, "Block SMS in Emergency Callback mode"); +            } +            return; +        } + +        super.sendRawPdu(smsc, pdu, sentIntent, deliveryIntent); +    } +      /** {@inheritDoc} */      protected void sendSms(SmsTracker tracker) {          HashMap map = tracker.mData; diff --git a/telephony/java/com/android/internal/telephony/gsm/PdpConnection.java b/telephony/java/com/android/internal/telephony/gsm/PdpConnection.java index 89de8673bb4e..224419e931de 100644 --- a/telephony/java/com/android/internal/telephony/gsm/PdpConnection.java +++ b/telephony/java/com/android/internal/telephony/gsm/PdpConnection.java @@ -84,9 +84,13 @@ public class PdpConnection extends DataConnection {          lastFailCause = FailCause.NONE;          receivedDisconnectReq = false; -        phone.mCM.setupDataCall(Integer.toString(RILConstants.GSM_PHONE), +        int authType = (apn.user != null) ? RILConstants.SETUP_DATA_AUTH_PAP_CHAP : +            RILConstants.SETUP_DATA_AUTH_NONE; + +        phone.mCM.setupDataCall(Integer.toString(RILConstants.SETUP_DATA_TECH_GSM),                  Integer.toString(RILConstants.DATA_PROFILE_DEFAULT), apn.apn, apn.user, -                apn.password, obtainMessage(EVENT_SETUP_DATA_CONNECTION_DONE)); +                apn.password, Integer.toString(authType), +                obtainMessage(EVENT_SETUP_DATA_CONNECTION_DONE));      }      private void tearDownData(Message msg) { diff --git a/telephony/java/com/android/internal/telephony/test/SimulatedCommands.java b/telephony/java/com/android/internal/telephony/test/SimulatedCommands.java index be5b842d59c1..11b3fd6fa12c 100644 --- a/telephony/java/com/android/internal/telephony/test/SimulatedCommands.java +++ b/telephony/java/com/android/internal/telephony/test/SimulatedCommands.java @@ -944,7 +944,7 @@ public final class SimulatedCommands extends BaseCommands      }      public void setupDataCall(String radioTechnology, String profile, String apn, String user, -            String password, Message result) { +            String password, String authType, Message result) {          unimplemented(result);      } |