diff options
| -rw-r--r-- | core/java/android/hardware/Camera.java | 21 | ||||
| -rw-r--r-- | core/java/android/nfc/NfcFragment.java | 5 | ||||
| -rw-r--r-- | core/jni/android/graphics/TextLayoutCache.cpp | 76 | ||||
| -rw-r--r-- | include/camera/CameraParameters.h | 20 | ||||
| -rw-r--r-- | libs/rs/rsContext.cpp | 1 | ||||
| -rw-r--r-- | media/java/android/media/AudioService.java | 6 | ||||
| -rw-r--r-- | policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java | 6 |
7 files changed, 79 insertions, 56 deletions
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java index caad6fde9436..68f0247600b1 100644 --- a/core/java/android/hardware/Camera.java +++ b/core/java/android/hardware/Camera.java @@ -1687,15 +1687,18 @@ public class Camera { * aggressive than {@link #FOCUS_MODE_CONTINUOUS_VIDEO}. Auto focus * starts when the parameter is set. * - * <p>If applications call {@link #autoFocus(AutoFocusCallback)} in this - * mode, the focus callback will immediately return with a boolean that - * indicates whether the focus is sharp or not. The apps can then decide - * if they want to take a picture immediately or to change the focus - * mode to auto, and run a full autofocus cycle. The focus position is - * locked after autoFocus call. If applications want to resume the - * continuous focus, cancelAutoFocus must be called. Restarting the - * preview will not resume the continuous autofocus. To stop continuous - * focus, applications should change the focus mode to other modes. + * <p>Applications can call {@link #autoFocus(AutoFocusCallback)} in + * this mode. If the autofocus is in the middle of scanning, the focus + * callback will return when it completes. If the autofocus is not + * scanning, the focus callback will immediately return with a boolean + * that indicates whether the focus is sharp or not. The apps can then + * decide if they want to take a picture immediately or to change the + * focus mode to auto, and run a full autofocus cycle. The focus + * position is locked after autoFocus call. If applications want to + * resume the continuous focus, cancelAutoFocus must be called. + * Restarting the preview will not resume the continuous autofocus. To + * stop continuous focus, applications should change the focus mode to + * other modes. * * @see #FOCUS_MODE_CONTINUOUS_VIDEO */ diff --git a/core/java/android/nfc/NfcFragment.java b/core/java/android/nfc/NfcFragment.java index 17278dc04cc7..d6b15ad1bf5a 100644 --- a/core/java/android/nfc/NfcFragment.java +++ b/core/java/android/nfc/NfcFragment.java @@ -48,7 +48,10 @@ public final class NfcFragment extends Fragment { FragmentManager manager = activity.getFragmentManager(); Fragment fragment = manager.findFragmentByTag(FRAGMENT_TAG); if (fragment != null) { - manager.beginTransaction().remove(fragment).commit(); + // We allow state loss at this point, because the state is only + // lost when activity is being paused *AND* subsequently destroyed. + // In that case, the app will setup foreground dispatch again anyway. + manager.beginTransaction().remove(fragment).commitAllowingStateLoss(); } } diff --git a/core/jni/android/graphics/TextLayoutCache.cpp b/core/jni/android/graphics/TextLayoutCache.cpp index 0b53850c5824..3fdc79b3a90a 100644 --- a/core/jni/android/graphics/TextLayoutCache.cpp +++ b/core/jni/android/graphics/TextLayoutCache.cpp @@ -425,14 +425,10 @@ void TextLayoutCacheValue::computeValuesWithHarfbuzz(SkPaint* paint, const UChar // Initialize Harfbuzz Shaper initShaperItem(shaperItem, &font, &fontData, paint, chars, contextCount); + bool useSingleRun = false; + bool isRTL = forceRTL; if (forceLTR || forceRTL) { -#if DEBUG_GLYPHS - LOGD("computeValuesWithHarfbuzz -- forcing run with LTR=%d RTL=%d", - forceLTR, forceRTL); -#endif - computeRunValuesWithHarfbuzz(shaperItem, paint, - start, count, forceRTL, - outAdvances, outTotalAdvance, outGlyphs); + useSingleRun = true; } else { UBiDi* bidi = ubidi_open(); if (bidi) { @@ -443,43 +439,50 @@ void TextLayoutCacheValue::computeValuesWithHarfbuzz(SkPaint* paint, const UChar ubidi_setPara(bidi, chars, contextCount, bidiReq, NULL, &status); if (U_SUCCESS(status)) { int paraDir = ubidi_getParaLevel(bidi) & kDirection_Mask; // 0 if ltr, 1 if rtl - size_t rc = ubidi_countRuns(bidi, &status); + ssize_t rc = ubidi_countRuns(bidi, &status); #if DEBUG_GLYPHS LOGD("computeValuesWithHarfbuzz -- dirFlags=%d run-count=%d paraDir=%d", dirFlags, rc, paraDir); #endif - if (rc == 1 || !U_SUCCESS(status)) { - bool isRTL = (paraDir == 1); -#if DEBUG_GLYPHS - LOGD("computeValuesWithHarfbuzz -- processing SINGLE run " - "-- run-start=%d run-len=%d isRTL=%d", start, count, isRTL); -#endif - computeRunValuesWithHarfbuzz(shaperItem, paint, - start, count, isRTL, - outAdvances, outTotalAdvance, outGlyphs); + if (!U_SUCCESS(status) || rc <= 1) { + LOGW("computeValuesWithHarfbuzz -- need to force to single run"); + isRTL = (paraDir == 1); + useSingleRun = true; } else { int32_t end = start + count; - for (size_t i = 0; i < rc; ++i) { - int32_t startRun; - int32_t lengthRun; + for (size_t i = 0; i < size_t(rc); ++i) { + int32_t startRun = -1; + int32_t lengthRun = -1; UBiDiDirection runDir = ubidi_getVisualRun(bidi, i, &startRun, &lengthRun); + if (startRun == -1 || lengthRun == -1) { + // Something went wrong when getting the visual run, need to clear + // already computed data before doing a single run pass + LOGW("computeValuesWithHarfbuzz -- visual run is not valid"); + outGlyphs->clear(); + outAdvances->clear(); + *outTotalAdvance = 0; + isRTL = (paraDir == 1); + useSingleRun = true; + break; + } + if (startRun >= end) { continue; } int32_t endRun = startRun + lengthRun; - if (endRun <= start) { + if (endRun <= int32_t(start)) { continue; } - if (startRun < start) { - startRun = start; + if (startRun < int32_t(start)) { + startRun = int32_t(start); } if (endRun > end) { endRun = end; } lengthRun = endRun - startRun; - bool isRTL = (runDir == UBIDI_RTL); + isRTL = (runDir == UBIDI_RTL); jfloat runTotalAdvance = 0; #if DEBUG_GLYPHS LOGD("computeValuesWithHarfbuzz -- run-start=%d run-len=%d isRTL=%d", @@ -492,19 +495,28 @@ void TextLayoutCacheValue::computeValuesWithHarfbuzz(SkPaint* paint, const UChar *outTotalAdvance += runTotalAdvance; } } + } else { + LOGW("computeValuesWithHarfbuzz -- cannot set Para"); + useSingleRun = true; + isRTL = (bidiReq = 1) || (bidiReq = UBIDI_DEFAULT_RTL); } ubidi_close(bidi); } else { - // Cannot run BiDi, just consider one Run - bool isRTL = (bidiReq = 1) || (bidiReq = UBIDI_DEFAULT_RTL); + LOGW("computeValuesWithHarfbuzz -- cannot ubidi_open()"); + useSingleRun = true; + isRTL = (bidiReq = 1) || (bidiReq = UBIDI_DEFAULT_RTL); + } + } + + // Default single run case + if (useSingleRun){ #if DEBUG_GLYPHS - LOGD("computeValuesWithHarfbuzz -- cannot run BiDi, considering a SINGLE Run " - "-- run-start=%d run-len=%d isRTL=%d", start, count, isRTL); + LOGD("computeValuesWithHarfbuzz -- Using a SINGLE Run " + "-- run-start=%d run-len=%d isRTL=%d", start, count, isRTL); #endif - computeRunValuesWithHarfbuzz(shaperItem, paint, - start, count, isRTL, - outAdvances, outTotalAdvance, outGlyphs); - } + computeRunValuesWithHarfbuzz(shaperItem, paint, + start, count, isRTL, + outAdvances, outTotalAdvance, outGlyphs); } // Cleaning diff --git a/include/camera/CameraParameters.h b/include/camera/CameraParameters.h index ef4cf5c705fc..7edf6b4562ff 100644 --- a/include/camera/CameraParameters.h +++ b/include/camera/CameraParameters.h @@ -644,15 +644,17 @@ public: // than FOCUS_MODE_CONTINUOUS_VIDEO. Auto focus starts when the parameter is // set. // - // If applications call CameraHardwareInterface.autoFocus in this mode, the - // focus callback will immediately return with a boolean that indicates - // whether the focus is sharp or not. The apps can then decide if they want - // to take a picture immediately or to change the focus mode to auto, and - // run a full autofocus cycle. The focus position is locked after autoFocus - // call. If applications want to resume the continuous focus, - // cancelAutoFocus must be called. Restarting the preview will not resume - // the continuous autofocus. To stop continuous focus, applications should - // change the focus mode to other modes. + // Applications can call CameraHardwareInterface.autoFocus in this mode. If + // the autofocus is in the middle of scanning, the focus callback will + // return when it completes. If the autofocus is not scanning, focus + // callback will immediately return with a boolean that indicates whether + // the focus is sharp or not. The apps can then decide if they want to take + // a picture immediately or to change the focus mode to auto, and run a full + // autofocus cycle. The focus position is locked after autoFocus call. If + // applications want to resume the continuous focus, cancelAutoFocus must be + // called. Restarting the preview will not resume the continuous autofocus. + // To stop continuous focus, applications should change the focus mode to + // other modes. static const char FOCUS_MODE_CONTINUOUS_PICTURE[]; private: diff --git a/libs/rs/rsContext.cpp b/libs/rs/rsContext.cpp index 948ecf90a732..5291a1f73f2e 100644 --- a/libs/rs/rsContext.cpp +++ b/libs/rs/rsContext.cpp @@ -359,6 +359,7 @@ Context::Context() { mTargetSdkVersion = 14; mDPI = 96; mIsContextLite = false; + memset(&watchdog, 0, sizeof(watchdog)); } Context * Context::createContext(Device *dev, const RsSurfaceConfig *sc) { diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java index 25a37058a0be..2f32bd803ee6 100644 --- a/media/java/android/media/AudioService.java +++ b/media/java/android/media/AudioService.java @@ -1635,8 +1635,10 @@ public class AudioService extends IAudioService.Stub { // "silent mode", but which one? newRingerMode = vibeInSilent ? RINGER_MODE_VIBRATE : RINGER_MODE_SILENT; } - if (uiIndex == 0 || (mPrevVolDirection == AudioManager.ADJUST_LOWER && - mVoiceCapable && streamType == AudioSystem.STREAM_RING)) { + if (uiIndex == 0 || + (!vibeInSilent && + mPrevVolDirection == AudioManager.ADJUST_LOWER && + mVoiceCapable && streamType == AudioSystem.STREAM_RING)) { adjustVolumeIndex = false; } } diff --git a/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java b/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java index 0471dfe8c1d9..c802bc1fc626 100644 --- a/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java +++ b/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java @@ -616,8 +616,8 @@ public class KeyguardViewMediator implements KeyguardViewCallback, final IccCard.State state = mUpdateMonitor.getSimState(); final boolean lockedOrMissing = state.isPinLocked() || ((state == IccCard.State.ABSENT - || state == IccCard.State.PERM_DISABLED) - && requireSim); + || state == IccCard.State.PERM_DISABLED) + && requireSim); if (!lockedOrMissing && !provisioned) { if (DEBUG) Log.d(TAG, "doKeyguard: not showing because device isn't provisioned" @@ -625,7 +625,7 @@ public class KeyguardViewMediator implements KeyguardViewCallback, return; } - if (mLockPatternUtils.isLockScreenDisabled()) { + if (mLockPatternUtils.isLockScreenDisabled() && !lockedOrMissing) { if (DEBUG) Log.d(TAG, "doKeyguard: not showing because lockscreen is off"); return; } |