diff options
16 files changed, 317 insertions, 14 deletions
diff --git a/core/java/android/preference/VolumePreference.java b/core/java/android/preference/VolumePreference.java index fe5e76c..e0491d0 100644 --- a/core/java/android/preference/VolumePreference.java +++ b/core/java/android/preference/VolumePreference.java @@ -146,6 +146,11 @@ public class VolumePreference extends SeekBarDialogPreference implements } } + /** @hide */ + protected boolean onVolumeChange(SeekBarVolumizer volumizer, int value) { + return true; + } + @Override protected Parcelable onSaveInstanceState() { final Parcelable superState = super.onSaveInstanceState(); @@ -307,10 +312,14 @@ public class VolumePreference extends SeekBarDialogPreference implements } void postSetVolume(int progress) { - // Do the volume changing separately to give responsive UI - mLastProgress = progress; - mHandler.removeCallbacks(this); - mHandler.post(this); + if (onVolumeChange(this, progress)) { + // Do the volume changing separately to give responsive UI + mLastProgress = progress; + mHandler.removeCallbacks(this); + mHandler.post(this); + } else { + mSeekBar.setProgress(mLastProgress); + } } public void onStartTrackingTouch(SeekBar seekBar) { diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 157acea..4c4a6d5 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -1661,6 +1661,24 @@ public final class Settings { "notifications_use_ring_volume"; /** + * Whether the phone ringtone should be played in an increasing manner + * @hide + */ + public static final String INCREASING_RING = "increasing_ring"; + + /** + * Minimum volume index for increasing ring volume + * @hide + */ + public static final String INCREASING_RING_MIN_VOLUME = "increasing_ring_min_vol"; + + /** + * Time (in ms) between ringtone volume increases + * @hide + */ + public static final String INCREASING_RING_INTERVAL = "increasing_ring_interval"; + + /** * Whether silent mode should allow vibration feedback. This is used * internally in AudioService and the Sound settings activity to * coordinate decoupling of vibrate and silent modes. This setting diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml index c5ffae9..b21b191 100644 --- a/core/res/res/values-hu/strings.xml +++ b/core/res/res/values-hu/strings.xml @@ -577,6 +577,11 @@ <item msgid="2506857312718630823">"ICQ"</item> <item msgid="1648797903785279353">"Jabber"</item> </string-array> + + <!-- Hardware Rotation lock string --> + <string name="toast_rotation_unlocked">Képernyő elforgatás engedélyezve</string> + <string name="toast_rotation_locked">Képernyő elforgatás letiltva</string> + <string name="phoneTypeCustom" msgid="1644738059053355820">"Egyéni"</string> <string name="phoneTypeHome" msgid="2570923463033985887">"Otthoni"</string> <string name="phoneTypeMobile" msgid="6501463557754751037">"Mobil"</string> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index e8409ca..5f17cc3 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -601,6 +601,8 @@ <item msgid="2506857312718630823">"ICQ"</item> <item msgid="1648797903785279353">"Jabber"</item> </string-array> + <string name="toast_rotation_unlocked">Rotazione display sbloccata</string> + <string name="toast_rotation_locked">Rotazione display bloccata</string> <string name="phoneTypeCustom" msgid="1644738059053355820">"Personalizzato"</string> <string name="phoneTypeHome" msgid="2570923463033985887">"Casa"</string> <string name="phoneTypeMobile" msgid="6501463557754751037">"Cellulare"</string> diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml index 1d5fb73..bf00b22 100644 --- a/packages/SystemUI/res/values-hu/strings.xml +++ b/packages/SystemUI/res/values-hu/strings.xml @@ -138,4 +138,5 @@ <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS keresése"</string> <string name="gps_notification_found_text" msgid="4619274244146446464">"A GPS beállította a helyet"</string> <string name="accessibility_clear_all" msgid="5235938559247164925">"Minden értesítés törlése"</string> + <string name="powerwidget_screen_timeout_toast">"Képernyő időkorlátja beállítva a következőre: %1$d %2$s"</string> </resources> diff --git a/services/audioflinger/Android.mk b/services/audioflinger/Android.mk index e5c39b1..83d18ac 100644 --- a/services/audioflinger/Android.mk +++ b/services/audioflinger/Android.mk @@ -34,6 +34,10 @@ ifeq ($(BOARD_USE_MOTO_DOCK_HACK),true) LOCAL_CFLAGS += -DMOTO_DOCK_HACK endif +ifeq ($(BOARD_HAS_SAMSUNG_VOLUME_BUG),true) + LOCAL_CFLAGS += -DHAS_SAMSUNG_VOLUME_BUG +endif + ifeq ($(ARCH_ARM_HAVE_NEON),true) LOCAL_CFLAGS += -D__ARM_HAVE_NEON endif diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp index 0faf367..7c25380 100644 --- a/services/audioflinger/AudioFlinger.cpp +++ b/services/audioflinger/AudioFlinger.cpp @@ -95,6 +95,11 @@ static const uint32_t kMinThreadSleepTimeUs = 5000; // maximum divider applied to the active sleep time in the mixer thread loop static const uint32_t kMaxThreadSleepTimeShift = 2; +#ifdef HAS_SAMSUNG_VOLUME_BUG +float gPrevMusicStreamVolume = 0; +bool gMusicStreamIsMuted = false; +bool gMusicStreamNeedsPrevVolume = false; +#endif // ---------------------------------------------------------------------------- @@ -2527,9 +2532,41 @@ uint32_t AudioFlinger::MixerThread::prepareTracks_l(const SortedVector< wp<Track track->setPaused(); } } else { +#ifdef HAS_SAMSUNG_VOLUME_BUG + if (track->type() == AUDIO_STREAM_MUSIC && !track->isMuted() && !track->isPausing()) { + if(mStreamTypes[AUDIO_STREAM_MUSIC].volume > 0 && !gMusicStreamNeedsPrevVolume) { + gPrevMusicStreamVolume = mStreamTypes[AUDIO_STREAM_MUSIC].volume; + } else { + gMusicStreamIsMuted = true; + } + } else if (track->type() == AUDIO_STREAM_MUSIC && (track->isMuted() || track->isPausing())) { + gMusicStreamIsMuted = true; + } + if (track->type() == AUDIO_STREAM_NOTIFICATION && gMusicStreamIsMuted) { + LOGD("Music stream needs volume restore!"); + LOGD("gPrevMusicStreamVolume = %f", gPrevMusicStreamVolume); + gMusicStreamNeedsPrevVolume = true; + } +#endif // read original volumes with volume control float typeVolume = mStreamTypes[track->type()].volume; + +#ifdef HAS_SAMSUNG_VOLUME_BUG + if (track->type() == AUDIO_STREAM_MUSIC && typeVolume > 0 && !track->isMuted() && + !track->isPausing() && gMusicStreamNeedsPrevVolume) { + LOGI("Restoring last known good volume value on music stream!"); + LOGI("gPrevMusicStreamVolume = %f", gPrevMusicStreamVolume); + mStreamTypes[AUDIO_STREAM_MUSIC].volume = gPrevMusicStreamVolume; + typeVolume = gPrevMusicStreamVolume; + gMusicStreamIsMuted = false; + gMusicStreamNeedsPrevVolume = false; + } else if (track->type() == AUDIO_STREAM_MUSIC && typeVolume > 0 + && !track->isMuted() && !track->isPausing()) { + gMusicStreamIsMuted = false; + } +#endif + float v = masterVolume * typeVolume; vl = (uint32_t)(v * cblk->volume[0]) << 12; vr = (uint32_t)(v * cblk->volume[1]) << 12; diff --git a/services/camera/libcameraservice/CameraHardwareInterface.h b/services/camera/libcameraservice/CameraHardwareInterface.h index 9a29e8f..f787266 100755 --- a/services/camera/libcameraservice/CameraHardwareInterface.h +++ b/services/camera/libcameraservice/CameraHardwareInterface.h @@ -115,10 +115,12 @@ public: LOGV("%s(%s) buf %p", __FUNCTION__, mName.string(), buf.get()); if (mDevice->ops->set_preview_window) { +#ifdef QCOM_HARDWARE LOGV("%s buf %p mPreviewWindow %p", __FUNCTION__, buf.get(), mPreviewWindow.get()); if (mPreviewWindow.get() && (buf.get() != mPreviewWindow.get())) { mDevice->ops->set_preview_window(mDevice, 0); } +#endif mPreviewWindow = buf; mHalPreviewWindow.user = this; diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp index 8d95d65..e15a1b9 100644 --- a/services/camera/libcameraservice/CameraService.cpp +++ b/services/camera/libcameraservice/CameraService.cpp @@ -528,7 +528,9 @@ void CameraService::Client::disconnect() { // Release the held ANativeWindow resources. if (mPreviewWindow != 0) { +#ifdef QCOM_HARDWARE mHardware->setPreviewWindow(0); +#endif disconnectWindow(mPreviewWindow); mPreviewWindow = 0; } @@ -570,8 +572,10 @@ status_t CameraService::Client::setPreviewWindow(const sp<IBinder>& binder, native_window_set_buffers_transform(window.get(), mOrientation); result = mHardware->setPreviewWindow(window); } +#ifdef QCOM_HARDWARE } else { result = mHardware->setPreviewWindow(window); +#endif } if (result == NO_ERROR) { diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index 3bed489..a274891 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -3004,7 +3004,7 @@ public final class ActivityManagerService extends ActivityManagerNative } } - final void logAppTooSlow(ProcessRecord app, long startTime, String msg) { + final void logAppTooSlow(int pid, long startTime, String msg) { if (IS_USER_BUILD) { return; } @@ -3037,7 +3037,7 @@ public final class ActivityManagerService extends ActivityManagerNative sb.append(msg); FileOutputStream fos = new FileOutputStream(tracesFile); fos.write(sb.toString().getBytes()); - if (app == null) { + if (pid <= 0) { fos.write("\n*** No application process!".getBytes()); } fos.close(); @@ -3047,9 +3047,9 @@ public final class ActivityManagerService extends ActivityManagerNative return; } - if (app != null) { + if (pid > 0) { ArrayList<Integer> firstPids = new ArrayList<Integer>(); - firstPids.add(app.pid); + firstPids.add(pid); dumpStackTraces(tracesPath, firstPids, null, null); } diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java index 86d3a1a..d581d33 100644 --- a/services/java/com/android/server/am/ActivityStack.java +++ b/services/java/com/android/server/am/ActivityStack.java @@ -307,11 +307,18 @@ final class ActivityStack { // We don't at this point know if the activity is fullscreen, // so we need to be conservative and assume it isn't. Slog.w(TAG, "Activity pause timeout for " + r); + int pid = -1; + long pauseTime = 0; + String m = null; synchronized (mService) { if (r.app != null) { - mService.logAppTooSlow(r.app, r.pauseTime, - "pausing " + r); + pid = r.app.pid; } + pauseTime = r.pauseTime; + m = "pausing " + r; + } + if (pid > 0) { + mService.logAppTooSlow(pid, pauseTime, m); } activityPaused(r != null ? r.appToken : null, true); @@ -332,12 +339,21 @@ final class ActivityStack { } break; case LAUNCH_TICK_MSG: { ActivityRecord r = (ActivityRecord)msg.obj; + int pid = -1; + long launchTickTime = 0; + String m = null; synchronized (mService) { if (r.continueLaunchTickingLocked()) { - mService.logAppTooSlow(r.app, r.launchTickTime, - "launching " + r); + if (r.app != null) { + pid = r.app.pid; + } + launchTickTime = r.launchTickTime; + m = "launching " + r; } } + if (pid > 0) { + mService.logAppTooSlow(pid, launchTickTime, m); + } } break; case DESTROY_TIMEOUT_MSG: { ActivityRecord r = (ActivityRecord)msg.obj; diff --git a/telephony/java/com/android/internal/telephony/SamsungCDMAQualcommRIL.java b/telephony/java/com/android/internal/telephony/SamsungCDMAQualcommRIL.java index ff5bce1..6a5487f 100644 --- a/telephony/java/com/android/internal/telephony/SamsungCDMAQualcommRIL.java +++ b/telephony/java/com/android/internal/telephony/SamsungCDMAQualcommRIL.java @@ -34,6 +34,8 @@ import android.telephony.PhoneNumberUtils; import com.android.internal.telephony.RILConstants; import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo; import com.android.internal.telephony.cdma.CdmaInformationRecords; +import com.android.internal.telephony.cdma.CdmaInformationRecords.CdmaSignalInfoRec; +import com.android.internal.telephony.cdma.SignalToneUtil; import java.util.ArrayList; import java.util.Collections; @@ -259,6 +261,62 @@ public class SamsungCDMAQualcommRIL extends QualcommSharedRIL implements Command return response; } + // Workaround for Samsung CDMA "ring of death" bug: + // + // Symptom: As soon as the phone receives notice of an incoming call, an + // audible "old fashioned ring" is emitted through the earpiece and + // persists through the duration of the call, or until reboot if the call + // isn't answered. + // + // Background: The CDMA telephony stack implements a number of "signal info + // tones" that are locally generated by ToneGenerator and mixed into the + // voice call path in response to radio RIL_UNSOL_CDMA_INFO_REC requests. + // One of these tones, IS95_CONST_IR_SIG_IS54B_L, is requested by the + // radio just prior to notice of an incoming call when the voice call + // path is muted. CallNotifier is responsible for stopping all signal + // tones (by "playing" the TONE_CDMA_SIGNAL_OFF tone) upon receipt of a + // "new ringing connection", prior to unmuting the voice call path. + // + // Problem: CallNotifier's incoming call path is designed to minimize + // latency to notify users of incoming calls ASAP. Thus, + // SignalInfoTonePlayer requests are handled asynchronously by spawning a + // one-shot thread for each. Unfortunately the ToneGenerator API does + // not provide a mechanism to specify an ordering on requests, and thus, + // unexpected thread interleaving may result in ToneGenerator processing + // them in the opposite order that CallNotifier intended. In this case, + // playing the "signal off" tone first, followed by playing the "old + // fashioned ring" indefinitely. + // + // Solution: An API change to ToneGenerator is required to enable + // SignalInfoTonePlayer to impose an ordering on requests (i.e., drop any + // request that's older than the most recent observed). Such a change, + // or another appropriate fix should be implemented in AOSP first. + // + // Workaround: Intercept RIL_UNSOL_CDMA_INFO_REC requests from the radio, + // check for a signal info record matching IS95_CONST_IR_SIG_IS54B_L, and + // drop it so it's never seen by CallNotifier. If other signal tones are + // observed to cause this problem, they should be dropped here as well. + @Override + protected void + notifyRegistrantsCdmaInfoRec(CdmaInformationRecords infoRec) { + final int response = RIL_UNSOL_CDMA_INFO_REC; + + if (infoRec.record instanceof CdmaSignalInfoRec) { + CdmaSignalInfoRec sir = (CdmaSignalInfoRec)infoRec.record; + if (sir != null && sir.isPresent && + sir.signalType == SignalToneUtil.IS95_CONST_IR_SIGNAL_IS54B && + sir.alertPitch == SignalToneUtil.IS95_CONST_IR_ALERT_MED && + sir.signal == SignalToneUtil.IS95_CONST_IR_SIG_IS54B_L) { + + Log.d(LOG_TAG, "Dropping \"" + responseToString(response) + " " + + retToString(response, sir) + "\" to prevent \"ring of death\" bug."); + return; + } + } + + super.notifyRegistrantsCdmaInfoRec(infoRec); + } + class IccHandler extends Handler implements Runnable { private static final int EVENT_RADIO_ON = 1; private static final int EVENT_ICC_STATUS_CHANGED = 2; diff --git a/telephony/java/com/android/internal/telephony/SamsungQualcommD2RIL.java b/telephony/java/com/android/internal/telephony/SamsungQualcommD2RIL.java new file mode 100644 index 0000000..bd7c1d5 --- /dev/null +++ b/telephony/java/com/android/internal/telephony/SamsungQualcommD2RIL.java @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2012 The CyanogenMod 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; + +import static com.android.internal.telephony.RILConstants.*; + +import android.content.Context; +import android.os.Parcel; +import android.os.SystemProperties; +import android.util.Log; +import com.android.internal.telephony.RILConstants; +import java.util.Collections; +import android.telephony.PhoneNumberUtils; + +import java.util.ArrayList; + +/** + * Custom RIL to handle unique behavior of D2 radio + * + * {@hide} + */ +public class SamsungQualcommD2RIL extends SamsungQualcommUiccRIL implements CommandsInterface { + public SamsungQualcommD2RIL(Context context, int networkMode, int cdmaSubscription) { + super(context, networkMode, cdmaSubscription); + } + + @Override + protected Object + responseCallList(Parcel p) { + int num; + int voiceSettings; + ArrayList<DriverCall> response; + DriverCall dc; + + num = p.readInt(); + response = new ArrayList<DriverCall>(num); + + for (int i = 0 ; i < num ; i++) { + dc = new DriverCall(); + + dc.state = DriverCall.stateFromCLCC(p.readInt()); + dc.index = p.readInt(); + dc.TOA = p.readInt(); + dc.isMpty = (0 != p.readInt()); + dc.isMT = (0 != p.readInt()); + dc.als = p.readInt(); + voiceSettings = p.readInt(); + dc.isVoice = (0 == voiceSettings) ? false : true; + dc.isVoicePrivacy = (0 != p.readInt()); + //Some Samsung magic data for Videocalls + // hack taken from smdk4210ril class + voiceSettings = p.readInt(); + //printing it to cosole for later investigation + Log.d(LOG_TAG, "Samsung magic = " + voiceSettings); + dc.number = p.readString(); + int np = p.readInt(); + dc.numberPresentation = DriverCall.presentationFromCLIP(np); + dc.name = p.readString(); + dc.namePresentation = p.readInt(); + int uusInfoPresent = p.readInt(); + if (uusInfoPresent == 1) { + dc.uusInfo = new UUSInfo(); + dc.uusInfo.setType(p.readInt()); + dc.uusInfo.setDcs(p.readInt()); + byte[] userData = p.createByteArray(); + dc.uusInfo.setUserData(userData); + riljLogv(String.format("Incoming UUS : type=%d, dcs=%d, length=%d", + dc.uusInfo.getType(), dc.uusInfo.getDcs(), + dc.uusInfo.getUserData().length)); + riljLogv("Incoming UUS : data (string)=" + + new String(dc.uusInfo.getUserData())); + riljLogv("Incoming UUS : data (hex): " + + IccUtils.bytesToHexString(dc.uusInfo.getUserData())); + } else { + riljLogv("Incoming UUS : NOT present!"); + } + + // Make sure there's a leading + on addresses with a TOA of 145 + dc.number = PhoneNumberUtils.stringFromStringAndTOA(dc.number, dc.TOA); + + response.add(dc); + + if (dc.isVoicePrivacy) { + mVoicePrivacyOnRegistrants.notifyRegistrants(); + riljLog("InCall VoicePrivacy is enabled"); + } else { + mVoicePrivacyOffRegistrants.notifyRegistrants(); + riljLog("InCall VoicePrivacy is disabled"); + } + } + + Collections.sort(response); + + return response; + } +} diff --git a/telephony/java/com/android/internal/telephony/SamsungRIL.java b/telephony/java/com/android/internal/telephony/SamsungRIL.java index 6851c52..fca571c 100644 --- a/telephony/java/com/android/internal/telephony/SamsungRIL.java +++ b/telephony/java/com/android/internal/telephony/SamsungRIL.java @@ -19,6 +19,8 @@ package com.android.internal.telephony; import java.util.ArrayList; import java.util.Collections; +import java.lang.Runtime; +import java.io.IOException; import android.content.BroadcastReceiver; import android.content.Context; @@ -386,7 +388,7 @@ public class SamsungRIL extends RIL implements CommandsInterface { case RIL_UNSOL_GPS_NOTI: ret = responseVoid(p); break; // Ignored in TW RIL. case RIL_UNSOL_SAMSUNG_UNKNOWN_MAGIC_REQUEST: ret = responseVoid(p); break; case RIL_UNSOL_SAMSUNG_UNKNOWN_MAGIC_REQUEST_2: ret = responseVoid(p); break; - case RIL_UNSOL_AM: ret = responseVoid(p); break; + case RIL_UNSOL_AM: ret = responseString(p); break; default: throw new RuntimeException("Unrecognized unsol response: " + response); @@ -720,6 +722,18 @@ public class SamsungRIL extends RIL implements CommandsInterface { mResendIncallMuteRegistrants.notifyRegistrants( new AsyncResult (null, ret, null)); } + break; + case RIL_UNSOL_AM: + String amString = (String) ret; + Log.d(LOG_TAG, "Executing AM: " + amString); + + try { + Runtime.getRuntime().exec("am " + amString); + } catch (IOException e) { + e.printStackTrace(); + Log.e(LOG_TAG, "am " + amString + " could not be executed."); + } + break; } } diff --git a/telephony/java/com/android/internal/telephony/Smdk4210RIL.java b/telephony/java/com/android/internal/telephony/Smdk4210RIL.java index 4226a7e..fa60598 100644 --- a/telephony/java/com/android/internal/telephony/Smdk4210RIL.java +++ b/telephony/java/com/android/internal/telephony/Smdk4210RIL.java @@ -60,6 +60,7 @@ import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; +import java.lang.Runtime; import java.util.ArrayList; import java.util.Collections; @@ -500,7 +501,7 @@ public class Smdk4210RIL extends RIL implements CommandsInterface { case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS: ret = responseString(p); break; case RIL_UNSOL_RIL_CONNECTED: ret = responseInts(p); break; // SAMSUNG STATES - case RIL_UNSOL_AM: ret = responseVoid(p); break; + case RIL_UNSOL_AM: ret = responseString(p); break; case RIL_UNSOL_DUN_PIN_CONTROL_SIGNAL: ret = responseVoid(p); break; case RIL_UNSOL_DATA_SUSPEND_RESUME: ret = responseInts(p); break; case RIL_UNSOL_STK_CALL_CONTROL_RESULT: ret = responseVoid(p); break; @@ -536,7 +537,20 @@ public class Smdk4210RIL extends RIL implements CommandsInterface { break; // SAMSUNG STATES case RIL_UNSOL_AM: + if (RILJ_LOGD) samsungUnsljLogRet(response, ret); + String amString = (String) ret; + Log.d(LOG_TAG, "Executing AM: " + amString); + + try { + Runtime.getRuntime().exec("am " + amString); + } catch (IOException e) { + e.printStackTrace(); + Log.e(LOG_TAG, "am " + amString + " could not be executed."); + } + break; case RIL_UNSOL_DUN_PIN_CONTROL_SIGNAL: + if (RILJ_LOGD) samsungUnsljLogRet(response, ret); + break; case RIL_UNSOL_DATA_SUSPEND_RESUME: if (RILJ_LOGD) samsungUnsljLogRet(response, ret); break; diff --git a/telephony/tests/telephonytests/src/com/android/internal/telephony/gsm/UsimDataDownloadCommands.java b/telephony/tests/telephonytests/src/com/android/internal/telephony/gsm/UsimDataDownloadCommands.java index 44aee91..4f77473 100644 --- a/telephony/tests/telephonytests/src/com/android/internal/telephony/gsm/UsimDataDownloadCommands.java +++ b/telephony/tests/telephonytests/src/com/android/internal/telephony/gsm/UsimDataDownloadCommands.java @@ -18,6 +18,7 @@ package com.android.internal.telephony.gsm; import android.content.Context; import android.os.AsyncResult; +import android.os.Handler; import android.os.Message; import android.os.SystemClock; import android.util.Log; @@ -611,4 +612,12 @@ class UsimDataDownloadCommands extends BaseCommands { @Override public boolean needsOldRilFeature(String feature) { return false; } + + @Override + public void setOnCatSendSmsResult(Handler h, int what, Object obj) { + } + + @Override + public void unSetOnCatSendSmsResult(Handler h) { + } } |