Merge "Support RSA encrypt using private key and PKCS#1 paddding." into mnc-dev
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index a916887..48e69a1 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -393,7 +393,7 @@
}
mPreserveDetachedSelection = true;
- hideControllers();
+ hideCursorAndSpanControllers();
stopTextActionMode();
mPreserveDetachedSelection = false;
mTemporaryDetach = false;
@@ -605,9 +605,9 @@
}
/**
- * Hides the insertion controller and stops text selection mode, hiding the selection controller
+ * Hides the insertion and span controllers.
*/
- void hideControllers() {
+ void hideCursorAndSpanControllers() {
hideCursorControllers();
hideSpanControllers();
}
@@ -1104,12 +1104,12 @@
// ExtractEditText goes out of focus.
final int selStart = mTextView.getSelectionStart();
final int selEnd = mTextView.getSelectionEnd();
- hideControllers();
+ hideCursorAndSpanControllers();
stopTextActionMode();
Selection.setSelection((Spannable) mTextView.getText(), selStart, selEnd);
} else {
if (mTemporaryDetach) mPreserveDetachedSelection = true;
- hideControllers();
+ hideCursorAndSpanControllers();
stopTextActionMode();
if (mTemporaryDetach) mPreserveDetachedSelection = false;
downgradeEasyCorrectionSpans();
@@ -1182,6 +1182,12 @@
mBlink.uncancel();
makeBlink();
}
+ final InputMethodManager imm = InputMethodManager.peekInstance();
+ final boolean immFullScreen = (imm != null && imm.isFullscreenMode());
+ if (mSelectionModifierCursorController != null && mTextView.hasSelection()
+ && !immFullScreen) {
+ mSelectionModifierCursorController.show();
+ }
} else {
if (mBlink != null) {
mBlink.cancel();
@@ -1190,7 +1196,10 @@
mInputContentType.enterDown = false;
}
// Order matters! Must be done before onParentLostFocus to rely on isShowingUp
- hideControllers();
+ hideCursorAndSpanControllers();
+ if (mSelectionModifierCursorController != null) {
+ mSelectionModifierCursorController.hide();
+ }
if (mSuggestionsPopupWindow != null) {
mSuggestionsPopupWindow.onParentLostFocus();
}
@@ -1913,7 +1922,7 @@
void onTouchUpEvent(MotionEvent event) {
boolean selectAllGotFocus = mSelectAllOnFocus && mTextView.didTouchFocusSelect();
- hideControllers();
+ hideCursorAndSpanControllers();
stopTextActionMode();
CharSequence text = mTextView.getText();
if (!selectAllGotFocus && text.length() > 0) {
@@ -2034,7 +2043,7 @@
if (mSuggestionsPopupWindow == null) {
mSuggestionsPopupWindow = new SuggestionsPopupWindow();
}
- hideControllers();
+ hideCursorAndSpanControllers();
stopTextActionMode();
mSuggestionsPopupWindow.show();
}
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index e84ba99..207605e 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -5230,7 +5230,8 @@
// Phone specific code (there is no ExtractEditText on tablets).
// ExtractEditText does not call onFocus when it is displayed, and mHasSelectionOnFocus can
// not be set. Do the test here instead.
- if (this instanceof ExtractEditText && hasSelection() && mEditor != null) {
+ if (isInExtractedMode() && hasSelection() && mEditor != null
+ && mEditor.mTextActionMode == null) {
mEditor.startSelectionActionMode();
}
@@ -6363,7 +6364,7 @@
// This would stop a possible selection mode, but no such mode is started in case
// extracted mode will start. Some text is selected though, and will trigger an action mode
// in the extracted view.
- mEditor.hideControllers();
+ mEditor.hideCursorAndSpanControllers();
stopTextActionMode();
}
@@ -8192,7 +8193,7 @@
protected void onVisibilityChanged(View changedView, int visibility) {
super.onVisibilityChanged(changedView, visibility);
if (mEditor != null && visibility != VISIBLE) {
- mEditor.hideControllers();
+ mEditor.hideCursorAndSpanControllers();
stopTextActionMode();
}
}
@@ -9644,7 +9645,7 @@
// since we are doing so explicitlty by other means and these
// controllers interact with how selection behaves.
if (mEditor != null) {
- mEditor.hideControllers();
+ mEditor.hideCursorAndSpanControllers();
}
CharSequence text = getIterableTextForAccessibility();
if (Math.min(start, end) >= 0 && Math.max(start, end) <= text.length()) {
diff --git a/services/core/java/com/android/server/LockSettingsService.java b/services/core/java/com/android/server/LockSettingsService.java
index c5ea8bc..ebbd9e5 100644
--- a/services/core/java/com/android/server/LockSettingsService.java
+++ b/services/core/java/com/android/server/LockSettingsService.java
@@ -700,6 +700,15 @@
final KeyStore ks = KeyStore.getInstance();
ks.onUserRemoved(userId);
+
+ try {
+ final IGateKeeperService gk = getGateKeeperService();
+ if (gk != null) {
+ gk.clearSecureUserId(userId);
+ }
+ } catch (RemoteException ex) {
+ Slog.w(TAG, "unable to clear GK secure user id");
+ }
}
private static final String[] VALID_SETTINGS = new String[] {