diff options
| -rw-r--r-- | core/java/android/widget/TextView.java | 36 | ||||
| -rw-r--r-- | include/media/MediaPlayerInterface.h | 1 | ||||
| -rw-r--r-- | media/jni/android_media_MediaPlayer.cpp | 2 | ||||
| -rw-r--r-- | media/libmedia/mediaplayer.cpp | 1 | ||||
| -rw-r--r-- | media/libmediaplayerservice/MediaPlayerService.cpp | 10 | ||||
| -rw-r--r-- | media/libmediaplayerservice/MediaPlayerService.h | 2 | ||||
| -rw-r--r-- | media/libstagefright/codecs/mp3dec/src/pvmp3_reorder.cpp | 4 | ||||
| -rw-r--r-- | media/libstagefright/codecs/mp3dec/src/pvmp3_reorder.h | 2 | ||||
| -rw-r--r-- | media/libstagefright/codecs/mp3dec/src/s_tmp3dec_file.h | 2 | ||||
| -rw-r--r-- | media/libstagefright/rtsp/MyHandler.h | 35 | ||||
| -rw-r--r-- | voip/java/com/android/server/sip/SipService.java | 25 |
11 files changed, 92 insertions, 28 deletions
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 548002fc6e92..d1974dca36fe 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -4321,6 +4321,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener switch (keyCode) { case KeyEvent.KEYCODE_ENTER: + mEnterKeyIsDown = true; // If ALT modifier is held, then we always insert a // newline character. if ((event.getMetaState()&KeyEvent.META_ALT_ON) == 0) { @@ -4353,6 +4354,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener break; case KeyEvent.KEYCODE_DPAD_CENTER: + mDPadCenterIsDown = true; if (shouldAdvanceFocusOnEnter()) { return 0; } @@ -4447,6 +4449,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener switch (keyCode) { case KeyEvent.KEYCODE_DPAD_CENTER: + mDPadCenterIsDown = false; /* * If there is a click listener, just call through to * super, which will invoke it. @@ -4467,6 +4470,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener return super.onKeyUp(keyCode, event); case KeyEvent.KEYCODE_ENTER: + mEnterKeyIsDown = false; if (mInputContentType != null && mInputContentType.onEditorActionListener != null && mInputContentType.enterDown) { @@ -7249,13 +7253,20 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener return; } - int selectionStart, selectionEnd; + int minOffset, maxOffset; + + if (mDPadCenterIsDown || mEnterKeyIsDown) { + minOffset = getSelectionStart(); + maxOffset = getSelectionEnd(); + } else { + // selectionModifierCursorController is not null at that point + SelectionModifierCursorController selectionModifierCursorController = + ((SelectionModifierCursorController) mSelectionModifierCursorController); + minOffset = selectionModifierCursorController.getMinTouchOffset(); + maxOffset = selectionModifierCursorController.getMaxTouchOffset(); + } - // selectionModifierCursorController is not null at that point - SelectionModifierCursorController selectionModifierCursorController = - ((SelectionModifierCursorController) mSelectionModifierCursorController); - int minOffset = selectionModifierCursorController.getMinTouchOffset(); - int maxOffset = selectionModifierCursorController.getMaxTouchOffset(); + int selectionStart, selectionEnd; long wordLimits = getWordLimitsAt(minOffset); if (wordLimits >= 0) { @@ -7275,11 +7286,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } private String getWordForDictionary() { - if (mLastTouchOffset < 0) { - return null; - } - - long wordLimits = getWordLimitsAt(mLastTouchOffset); + long wordLimits = getWordLimitsAt(getSelectionStart()); if (wordLimits >= 0) { int start = extractRangeStartFromLong(wordLimits); int end = extractRangeEndFromLong(wordLimits); @@ -7881,8 +7888,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener final float newPosX = rawX - mTouchToWindowOffsetX + mHotspotX; final float newPosY = rawY - mTouchToWindowOffsetY + mHotspotY + mTouchOffsetY; - mController.updatePosition(this, (int) Math.round(newPosX), - (int) Math.round(newPosY)); + mController.updatePosition(this, Math.round(newPosX), Math.round(newPosY)); break; } @@ -8254,6 +8260,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener private CursorController mSelectionModifierCursorController; private boolean mIsInTextSelectionMode = false; private int mLastTouchOffset = -1; + // These are needed to desambiguate a long click. If the long click comes from ones of these, we + // select from the current cursor position. Otherwise, select from long pressed position. + private boolean mDPadCenterIsDown = false; + private boolean mEnterKeyIsDown = false; // Created once and shared by different CursorController helper methods. // Only one cursor controller is active at any time which prevent race conditions. private static Rect sCursorControllerTempRect = new Rect(); diff --git a/include/media/MediaPlayerInterface.h b/include/media/MediaPlayerInterface.h index 36629836b52a..05217098eefd 100644 --- a/include/media/MediaPlayerInterface.h +++ b/include/media/MediaPlayerInterface.h @@ -76,6 +76,7 @@ public: virtual uint32_t latency() const = 0; virtual float msecsPerFrame() const = 0; virtual status_t getPosition(uint32_t *position) = 0; + virtual int getSessionId() = 0; // If no callback is specified, use the "write" API below to submit // audio data. diff --git a/media/jni/android_media_MediaPlayer.cpp b/media/jni/android_media_MediaPlayer.cpp index 6f94e8b1816f..49e5e89362fb 100644 --- a/media/jni/android_media_MediaPlayer.cpp +++ b/media/jni/android_media_MediaPlayer.cpp @@ -727,7 +727,7 @@ android_media_MediaPlayer_setAuxEffectSendLevel(JNIEnv *env, jobject thiz, jfloa } static void android_media_MediaPlayer_attachAuxEffect(JNIEnv *env, jobject thiz, jint effectId) { - LOGV("attachAuxEffect(): %d", sessionId); + LOGV("attachAuxEffect(): %d", effectId); sp<MediaPlayer> mp = getMediaPlayer(env, thiz); if (mp == NULL ) { jniThrowException(env, "java/lang/IllegalStateException", NULL); diff --git a/media/libmedia/mediaplayer.cpp b/media/libmedia/mediaplayer.cpp index c6b2efbdf850..cc41e66e6aa3 100644 --- a/media/libmedia/mediaplayer.cpp +++ b/media/libmedia/mediaplayer.cpp @@ -56,6 +56,7 @@ MediaPlayer::MediaPlayer() mVideoWidth = mVideoHeight = 0; mLockThreadId = 0; mAudioSessionId = AudioSystem::newAudioSessionId(); + mSendLevel = 0; } MediaPlayer::~MediaPlayer() diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp index d975cb9150f0..c43e9bb77855 100644 --- a/media/libmediaplayerservice/MediaPlayerService.cpp +++ b/media/libmediaplayerservice/MediaPlayerService.cpp @@ -1546,6 +1546,11 @@ void MediaPlayerService::AudioOutput::CallbackWrapper( } +int MediaPlayerService::AudioOutput::getSessionId() +{ + return mSessionId; +} + #undef LOG_TAG #define LOG_TAG "AudioCache" MediaPlayerService::AudioCache::AudioCache(const char* name) : @@ -1733,4 +1738,9 @@ void MediaPlayerService::AudioCache::notify(void* cookie, int msg, int ext1, int p->mSignal.signal(); } +int MediaPlayerService::AudioCache::getSessionId() +{ + return 0; +} + } // namespace android diff --git a/media/libmediaplayerservice/MediaPlayerService.h b/media/libmediaplayerservice/MediaPlayerService.h index a967ee24cd92..4492e2061e1d 100644 --- a/media/libmediaplayerservice/MediaPlayerService.h +++ b/media/libmediaplayerservice/MediaPlayerService.h @@ -77,6 +77,7 @@ class MediaPlayerService : public BnMediaPlayerService virtual uint32_t latency() const; virtual float msecsPerFrame() const; virtual status_t getPosition(uint32_t *position); + virtual int getSessionId(); virtual status_t open( uint32_t sampleRate, int channelCount, @@ -133,6 +134,7 @@ class MediaPlayerService : public BnMediaPlayerService virtual uint32_t latency() const; virtual float msecsPerFrame() const; virtual status_t getPosition(uint32_t *position); + virtual int getSessionId(); virtual status_t open( uint32_t sampleRate, int channelCount, int format, diff --git a/media/libstagefright/codecs/mp3dec/src/pvmp3_reorder.cpp b/media/libstagefright/codecs/mp3dec/src/pvmp3_reorder.cpp index 35b647551e43..286c6363e2c2 100644 --- a/media/libstagefright/codecs/mp3dec/src/pvmp3_reorder.cpp +++ b/media/libstagefright/codecs/mp3dec/src/pvmp3_reorder.cpp @@ -40,7 +40,7 @@ int32 xr[ ], rescaled data struct gr_info_s *gr_info, granule structure mp3Header *info, mp3 header info - int32 Scratch_mem[168] for temporary usage + int32 Scratch_mem[198] for temporary usage Outputs: @@ -120,7 +120,7 @@ void pvmp3_reorder(int32 xr[SUBBANDS_NUMBER*FILTERBANK_BANDS], granuleInfo *gr_info, int32 *used_freq_lines, mp3Header *info, - int32 Scratch_mem[168]) + int32 Scratch_mem[198]) { int32 sfreq = info->version_x + (info->version_x << 1); sfreq += info->sampling_frequency; diff --git a/media/libstagefright/codecs/mp3dec/src/pvmp3_reorder.h b/media/libstagefright/codecs/mp3dec/src/pvmp3_reorder.h index ba6ec16cff94..52489517d862 100644 --- a/media/libstagefright/codecs/mp3dec/src/pvmp3_reorder.h +++ b/media/libstagefright/codecs/mp3dec/src/pvmp3_reorder.h @@ -89,7 +89,7 @@ extern "C" granuleInfo *gr_info, int32 *used_freq_lines, mp3Header *info, - int32 Scratch_mem[168]); + int32 Scratch_mem[198]); #ifdef __cplusplus } diff --git a/media/libstagefright/codecs/mp3dec/src/s_tmp3dec_file.h b/media/libstagefright/codecs/mp3dec/src/s_tmp3dec_file.h index 805cedb4e15b..611e08fbe584 100644 --- a/media/libstagefright/codecs/mp3dec/src/s_tmp3dec_file.h +++ b/media/libstagefright/codecs/mp3dec/src/s_tmp3dec_file.h @@ -87,7 +87,7 @@ extern "C" int32 num_channels; int32 predicted_frame_size; int32 frame_start; - int32 Scratch_mem[168]; + int32 Scratch_mem[198]; tmp3dec_chan perChan[CHAN]; mp3ScaleFactors scaleFactors[CHAN]; mp3SideInfo sideInfo; diff --git a/media/libstagefright/rtsp/MyHandler.h b/media/libstagefright/rtsp/MyHandler.h index a31b2b20a5ac..2c9cfd3be81e 100644 --- a/media/libstagefright/rtsp/MyHandler.h +++ b/media/libstagefright/rtsp/MyHandler.h @@ -86,6 +86,7 @@ struct MyHandler : public AHandler { mFirstAccessUnitNTP(0), mNumAccessUnitsReceived(0), mCheckPending(false), + mCheckGeneration(0), mTryTCPInterleaving(false), mReceivedFirstRTCPPacket(false) { mNetLooper->setName("rtsp net"); @@ -434,6 +435,13 @@ struct MyHandler : public AHandler { case 'chek': { + int32_t generation; + CHECK(msg->findInt32("generation", &generation)); + if (generation != mCheckGeneration) { + // This is an outdated message. Ignore. + break; + } + if (mNumAccessUnitsReceived == 0) { LOGI("stream ended? aborting."); (new AMessage('abor', id()))->post(); @@ -454,12 +462,7 @@ struct MyHandler : public AHandler { } ++mNumAccessUnitsReceived; - - if (!mCheckPending) { - mCheckPending = true; - sp<AMessage> check = new AMessage('chek', id()); - check->post(kAccessUnitTimeoutUs); - } + postAccessUnitTimeoutCheck(); size_t trackIndex; CHECK(msg->findSize("track-index", &trackIndex)); @@ -557,6 +560,11 @@ struct MyHandler : public AHandler { mSeekPending = true; + // Disable the access unit timeout until we resumed + // playback again. + mCheckPending = true; + ++mCheckGeneration; + AString request = "PAUSE "; request.append(mSessionURL); request.append(" RTSP/1.0\r\n"); @@ -612,6 +620,9 @@ struct MyHandler : public AHandler { LOGI("PLAY completed with result %d (%s)", result, strerror(-result)); + mCheckPending = false; + postAccessUnitTimeoutCheck(); + if (result == OK) { sp<RefBase> obj; CHECK(msg->findObject("response", &obj)); @@ -674,6 +685,17 @@ struct MyHandler : public AHandler { } } + void postAccessUnitTimeoutCheck() { + if (mCheckPending) { + return; + } + + mCheckPending = true; + sp<AMessage> check = new AMessage('chek', id()); + check->setInt32("generation", mCheckGeneration); + check->post(kAccessUnitTimeoutUs); + } + static void SplitString( const AString &s, const char *separator, List<AString> *items) { items->clear(); @@ -783,6 +805,7 @@ private: uint64_t mFirstAccessUnitNTP; int64_t mNumAccessUnitsReceived; bool mCheckPending; + int32_t mCheckGeneration; bool mTryTCPInterleaving; bool mReceivedFirstRTCPPacket; diff --git a/voip/java/com/android/server/sip/SipService.java b/voip/java/com/android/server/sip/SipService.java index 1fa2400fdbf7..db1931b41a9a 100644 --- a/voip/java/com/android/server/sip/SipService.java +++ b/voip/java/com/android/server/sip/SipService.java @@ -123,6 +123,8 @@ public final class SipService extends ISipService.Stub { } public synchronized SipProfile[] getListOfProfiles() { + mContext.enforceCallingOrSelfPermission( + android.Manifest.permission.USE_SIP, null); boolean isCallerRadio = isCallerRadio(); ArrayList<SipProfile> profiles = new ArrayList<SipProfile>(); for (SipSessionGroupExt group : mSipGroups.values()) { @@ -134,6 +136,8 @@ public final class SipService extends ISipService.Stub { } public void open(SipProfile localProfile) { + mContext.enforceCallingOrSelfPermission( + android.Manifest.permission.USE_SIP, null); localProfile.setCallingUid(Binder.getCallingUid()); try { createGroup(localProfile); @@ -146,6 +150,8 @@ public final class SipService extends ISipService.Stub { public synchronized void open3(SipProfile localProfile, PendingIntent incomingCallPendingIntent, ISipSessionListener listener) { + mContext.enforceCallingOrSelfPermission( + android.Manifest.permission.USE_SIP, null); localProfile.setCallingUid(Binder.getCallingUid()); if (incomingCallPendingIntent == null) { Log.w(TAG, "incomingCallPendingIntent cannot be null; " @@ -159,7 +165,7 @@ public final class SipService extends ISipService.Stub { incomingCallPendingIntent, listener); if (localProfile.getAutoRegistration()) { group.openToReceiveCalls(); - if (isWifiOn()) grabWifiLock(); + if (isWifiActive()) grabWifiLock(); } } catch (SipException e) { Log.e(TAG, "openToReceiveCalls()", e); @@ -181,6 +187,8 @@ public final class SipService extends ISipService.Stub { } public synchronized void close(String localProfileUri) { + mContext.enforceCallingOrSelfPermission( + android.Manifest.permission.USE_SIP, null); SipSessionGroupExt group = mSipGroups.get(localProfileUri); if (group == null) return; if (!isCallerCreatorOrRadio(group)) { @@ -191,10 +199,12 @@ public final class SipService extends ISipService.Stub { group = mSipGroups.remove(localProfileUri); notifyProfileRemoved(group.getLocalProfile()); group.close(); - if (isWifiOn() && !anyOpened()) releaseWifiLock(); + if (isWifiActive() && !anyOpened()) releaseWifiLock(); } public synchronized boolean isOpened(String localProfileUri) { + mContext.enforceCallingOrSelfPermission( + android.Manifest.permission.USE_SIP, null); SipSessionGroupExt group = mSipGroups.get(localProfileUri); if (group == null) return false; if (isCallerCreatorOrRadio(group)) { @@ -206,6 +216,8 @@ public final class SipService extends ISipService.Stub { } public synchronized boolean isRegistered(String localProfileUri) { + mContext.enforceCallingOrSelfPermission( + android.Manifest.permission.USE_SIP, null); SipSessionGroupExt group = mSipGroups.get(localProfileUri); if (group == null) return false; if (isCallerCreatorOrRadio(group)) { @@ -218,6 +230,8 @@ public final class SipService extends ISipService.Stub { public synchronized void setRegistrationListener(String localProfileUri, ISipSessionListener listener) { + mContext.enforceCallingOrSelfPermission( + android.Manifest.permission.USE_SIP, null); SipSessionGroupExt group = mSipGroups.get(localProfileUri); if (group == null) return; if (isCallerCreator(group)) { @@ -229,6 +243,8 @@ public final class SipService extends ISipService.Stub { public synchronized ISipSession createSession(SipProfile localProfile, ISipSessionListener listener) { + mContext.enforceCallingOrSelfPermission( + android.Manifest.permission.USE_SIP, null); localProfile.setCallingUid(Binder.getCallingUid()); if (!mConnected) return null; try { @@ -241,6 +257,8 @@ public final class SipService extends ISipService.Stub { } public synchronized ISipSession getPendingSession(String callId) { + mContext.enforceCallingOrSelfPermission( + android.Manifest.permission.USE_SIP, null); if (callId == null) return null; return mPendingSessions.get(callId); } @@ -330,9 +348,8 @@ public final class SipService extends ISipService.Stub { } } - private boolean isWifiOn() { + private boolean isWifiActive() { return "WIFI".equalsIgnoreCase(mNetworkType); - //return (mConnected && "WIFI".equalsIgnoreCase(mNetworkType)); } private synchronized void onConnectivityChanged( |