diff options
-rw-r--r-- | Android.mk | 3 | ||||
-rw-r--r-- | core/java/android/inputmethodservice/InputMethodService.java | 2 | ||||
-rw-r--r-- | core/java/android/net/http/HttpResponseCache.java | 15 | ||||
-rw-r--r-- | core/java/android/util/SparseArray.java | 18 | ||||
-rw-r--r-- | core/java/android/view/KeyEvent.java | 4 | ||||
-rw-r--r-- | docs/html/guide/topics/data/backup.jd | 2 | ||||
-rw-r--r-- | media/java/android/media/MediaCodec.java | 2 | ||||
-rw-r--r-- | packages/InputDevices/res/raw/keyboard_layout_brazilian.kcm | 339 | ||||
-rw-r--r-- | packages/InputDevices/res/raw/keyboard_layout_english_us_intl.kcm | 379 | ||||
-rw-r--r-- | packages/InputDevices/res/values/strings.xml | 6 | ||||
-rw-r--r-- | packages/InputDevices/res/xml/keyboard_layouts.xml | 8 | ||||
-rw-r--r-- | services/java/com/android/server/InputMethodManagerService.java | 4 | ||||
-rw-r--r-- | services/java/com/android/server/pm/SELinuxMMAC.java | 2 | ||||
-rw-r--r-- | services/java/com/android/server/wm/WindowManagerService.java | 29 |
14 files changed, 786 insertions, 27 deletions
@@ -247,7 +247,7 @@ LOCAL_INTERMEDIATE_SOURCES := \ $(framework_res_source_path)/com/android/internal/R.java LOCAL_NO_STANDARD_LIBRARIES := true -LOCAL_JAVA_LIBRARIES := bouncycastle core core-junit ext +LOCAL_JAVA_LIBRARIES := bouncycastle core core-junit ext okhttp LOCAL_MODULE := framework LOCAL_MODULE_CLASS := JAVA_LIBRARIES @@ -416,6 +416,7 @@ framework_docs_LOCAL_INTERMEDIATE_SOURCES := \ framework_docs_LOCAL_JAVA_LIBRARIES := \ bouncycastle \ core \ + okhttp \ ext \ framework \ mms-common \ diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java index 2b15afd..4881d14 100644 --- a/core/java/android/inputmethodservice/InputMethodService.java +++ b/core/java/android/inputmethodservice/InputMethodService.java @@ -431,7 +431,7 @@ public class InputMethodService extends AbstractInputMethodService { } } // If user uses hard keyboard, IME button should always be shown. - boolean showing = onEvaluateInputViewShown(); + boolean showing = isInputViewShown(); mImm.setImeWindowStatus(mToken, IME_ACTIVE | (showing ? IME_VISIBLE : 0), mBackDisposition); if (resultReceiver != null) { diff --git a/core/java/android/net/http/HttpResponseCache.java b/core/java/android/net/http/HttpResponseCache.java index 73f3d7c..4e986a9 100644 --- a/core/java/android/net/http/HttpResponseCache.java +++ b/core/java/android/net/http/HttpResponseCache.java @@ -17,21 +17,21 @@ package android.net.http; import android.content.Context; +import com.android.okhttp.OkResponseCache; +import com.android.okhttp.ResponseSource; +import com.android.okhttp.internal.DiskLruCache; import java.io.Closeable; import java.io.File; import java.io.IOException; import java.net.CacheRequest; import java.net.CacheResponse; -import java.net.ExtendedResponseCache; import java.net.HttpURLConnection; import java.net.ResponseCache; -import java.net.ResponseSource; import java.net.URI; import java.net.URLConnection; import java.util.List; import java.util.Map; import javax.net.ssl.HttpsURLConnection; -import libcore.io.DiskLruCache; import libcore.io.IoUtils; import org.apache.http.impl.client.DefaultHttpClient; @@ -152,12 +152,12 @@ import org.apache.http.impl.client.DefaultHttpClient; * }}</pre> */ public final class HttpResponseCache extends ResponseCache - implements Closeable, ExtendedResponseCache { + implements Closeable, OkResponseCache { - private final libcore.net.http.HttpResponseCache delegate; + private final com.android.okhttp.internal.http.HttpResponseCache delegate; private HttpResponseCache(File directory, long maxSize) throws IOException { - this.delegate = new libcore.net.http.HttpResponseCache(directory, maxSize); + this.delegate = new com.android.okhttp.internal.http.HttpResponseCache(directory, maxSize); } /** @@ -274,7 +274,8 @@ public final class HttpResponseCache extends ResponseCache } /** @hide */ - @Override public void update(CacheResponse conditionalCacheHit, HttpURLConnection connection) { + @Override public void update(CacheResponse conditionalCacheHit, HttpURLConnection connection) + throws IOException { delegate.update(conditionalCacheHit, connection); } diff --git a/core/java/android/util/SparseArray.java b/core/java/android/util/SparseArray.java index 366abd3..7e8fee5 100644 --- a/core/java/android/util/SparseArray.java +++ b/core/java/android/util/SparseArray.java @@ -118,7 +118,7 @@ public class SparseArray<E> implements Cloneable { mGarbage = true; } } - + private void gc() { // Log.e("SparseArray", "gc start with " + mSize); @@ -214,7 +214,7 @@ public class SparseArray<E> implements Cloneable { /** * Given an index in the range <code>0...size()-1</code>, returns * the key from the <code>index</code>th key-value mapping that this - * SparseArray stores. + * SparseArray stores. */ public int keyAt(int index) { if (mGarbage) { @@ -223,11 +223,11 @@ public class SparseArray<E> implements Cloneable { return mKeys[index]; } - + /** * Given an index in the range <code>0...size()-1</code>, returns * the value from the <code>index</code>th key-value mapping that this - * SparseArray stores. + * SparseArray stores. */ @SuppressWarnings("unchecked") public E valueAt(int index) { @@ -241,7 +241,7 @@ public class SparseArray<E> implements Cloneable { /** * Given an index in the range <code>0...size()-1</code>, sets a new * value for the <code>index</code>th key-value mapping that this - * SparseArray stores. + * SparseArray stores. */ public void setValueAt(int index, E value) { if (mGarbage) { @@ -250,7 +250,7 @@ public class SparseArray<E> implements Cloneable { mValues[index] = value; } - + /** * Returns the index for which {@link #keyAt} would return the * specified key, or a negative number if the specified @@ -268,9 +268,11 @@ public class SparseArray<E> implements Cloneable { * Returns an index for which {@link #valueAt} would return the * specified key, or a negative number if no keys map to the * specified value. - * Beware that this is a linear search, unlike lookups by key, + * <p>Beware that this is a linear search, unlike lookups by key, * and that multiple keys can map to the same value and this will * find only one of them. + * <p>Note also that unlike most collections' {@code indexOf} methods, + * this method compares values using {@code ==} rather than {@code equals}. */ public int indexOfValue(E value) { if (mGarbage) { @@ -332,7 +334,7 @@ public class SparseArray<E> implements Cloneable { mValues[pos] = value; mSize = pos + 1; } - + private static int binarySearch(int[] a, int start, int len, int key) { int high = start + len, low = start - 1, guess; diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java index 7d9f30a..b178ea8 100644 --- a/core/java/android/view/KeyEvent.java +++ b/core/java/android/view/KeyEvent.java @@ -634,8 +634,8 @@ public class KeyEvent extends InputEvent implements Parcelable { // NOTE: If you add a new keycode here you must also add it to: // isSystem() - // native/include/android/keycodes.h - // frameworks/base/include/ui/KeycodeLabels.h + // frameworks/native/include/android/keycodes.h + // frameworks/base/include/androidfw/KeycodeLabels.h // external/webkit/WebKit/android/plugins/ANPKeyCodes.h // frameworks/base/core/res/res/values/attrs.xml // emulator? diff --git a/docs/html/guide/topics/data/backup.jd b/docs/html/guide/topics/data/backup.jd index 598b08a..4903852 100644 --- a/docs/html/guide/topics/data/backup.jd +++ b/docs/html/guide/topics/data/backup.jd @@ -680,7 +680,7 @@ android.app.backup.BackupAgentHelper} looks like this:</p> <pre> public class MyFileBackupAgent extends BackupAgentHelper { - // The name of the SharedPreferences file + // The name of the file static final String TOP_SCORES = "scores"; static final String PLAYER_STATS = "stats"; diff --git a/media/java/android/media/MediaCodec.java b/media/java/android/media/MediaCodec.java index 45a8b99..d703642 100644 --- a/media/java/android/media/MediaCodec.java +++ b/media/java/android/media/MediaCodec.java @@ -171,7 +171,7 @@ final public class MediaCodec { * <li>"audio/3gpp" - AMR narrowband audio * <li>"audio/amr-wb" - AMR wideband audio * <li>"audio/mpeg" - MPEG1/2 audio layer III - * <li>"audio/mp4a-latm" - AAC audio + * <li>"audio/mp4a-latm" - AAC audio (note, this is raw AAC packets, not packaged in LATM!) * <li>"audio/vorbis" - vorbis audio * <li>"audio/g711-alaw" - G.711 alaw audio * <li>"audio/g711-mlaw" - G.711 ulaw audio diff --git a/packages/InputDevices/res/raw/keyboard_layout_brazilian.kcm b/packages/InputDevices/res/raw/keyboard_layout_brazilian.kcm new file mode 100644 index 0000000..140c7ac --- /dev/null +++ b/packages/InputDevices/res/raw/keyboard_layout_brazilian.kcm @@ -0,0 +1,339 @@ +# Copyright (C) 2013 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. + +# +# Brazilian keyboard layout. +# + +type OVERLAY + +map key 86 PLUS +map key 89 RO + +### ROW 1 + +key GRAVE { + label: '\'' + base: '\'' + shift: '"' +} + +key 1 { + label: '1' + base: '1' + shift: '!' + ralt: '\u00b9' +} + +key 2 { + label: '2' + base: '2' + shift: '@' + ralt: '\u00b2' +} + +key 3 { + label: '3' + base: '3' + shift: '#' + ralt: '\u00b3' +} + +key 4 { + label: '4' + base: '4' + shift: '$' + ralt: '\u00a3' +} + +key 5 { + label: '5' + base: '5' + shift: '%' + ralt: '\u00a2' +} + +key 6 { + label: '6' + base: '6' + shift: '\u0308' + ralt: '\u00ac' +} + +key 7 { + label: '7' + base: '7' + shift: '&' +} + +key 8 { + label: '8' + base: '8' + shift: '*' +} + +key 9 { + label: '9' + base: '9' + shift: '(' +} + +key 0 { + label: '0' + base: '0' + shift: ')' + ralt: '}' +} + +key MINUS { + label: '-' + base: '-' + shift: '_' +} + +key EQUALS { + label: '=' + base: '=' + shift: '+' + ralt: '\u00a7' +} + +### ROW 2 + +key Q { + label: 'Q' + base: 'q' + shift, capslock: 'Q' + ralt: '/' +} + +key W { + label: 'W' + base: 'w' + shift, capslock: 'W' + ralt: '?' +} + +key E { + label: 'E' + base: 'e' + shift, capslock: 'E' + ralt: '\u20ac' +} + +key R { + label: 'R' + base: 'r' + shift, capslock: 'R' +} + +key T { + label: 'T' + base: 't' + shift, capslock: 'T' +} + +key Y { + label: 'Y' + base: 'y' + shift, capslock: 'Y' +} + +key U { + label: 'U' + base: 'u' + shift, capslock: 'U' +} + +key I { + label: 'I' + base: 'i' + shift, capslock: 'I' +} + +key O { + label: 'O' + base: 'o' + shift, capslock: 'O' +} + +key P { + label: 'P' + base: 'p' + shift, capslock: 'P' +} + +key LEFT_BRACKET { + label: '\u00b4' + base: '\u0301' + shift: '\u0300' +} + +key RIGHT_BRACKET { + label: '[' + base: '[' + shift: '{' + ralt: '\u00aa' +} + +### ROW 3 + +key A { + label: 'A' + base: 'a' + shift, capslock: 'A' +} + +key S { + label: 'S' + base: 's' + shift, capslock: 'S' +} + +key D { + label: 'D' + base: 'd' + shift, capslock: 'D' +} + +key F { + label: 'F' + base: 'f' + shift, capslock: 'F' +} + +key G { + label: 'G' + base: 'g' + shift, capslock: 'G' +} + +key H { + label: 'H' + base: 'h' + shift, capslock: 'H' +} + +key J { + label: 'J' + base: 'j' + shift, capslock: 'J' +} + +key K { + label: 'K' + base: 'k' + shift, capslock: 'K' +} + +key L { + label: 'L' + base: 'l' + shift, capslock: 'L' +} + +key SEMICOLON { + label: '\u00c7' + base: '\u00e7' + shift, capslock: '\u00c7' +} + +key APOSTROPHE { + label: '\u02dc' + base: '\u0303' + shift: '\u0302' +} + +key BACKSLASH { + label: ']' + base: ']' + shift, capslock: '}' + ralt: '\u00ba' +} + +### ROW 4 + +key PLUS { + label: '\\' + base: '\\' + shift: '|' +} + +key Z { + label: 'Z' + base: 'z' + shift, capslock: 'Z' +} + +key X { + label: 'X' + base: 'x' + shift, capslock: 'X' +} + +key C { + label: 'C' + base: 'c' + shift, capslock: 'C' + ralt: '\u20a2' +} + +key V { + label: 'V' + base: 'v' + shift, capslock: 'V' +} + +key B { + label: 'B' + base: 'b' + shift, capslock: 'B' +} + +key N { + label: 'N' + base: 'n' + shift, capslock: 'N' +} + +key M { + label: 'M' + base: 'm' + shift, capslock: 'M' +} + +key COMMA { + label: ',' + base: ',' + shift: '<' +} + +key PERIOD { + label: '.' + base: '.' + shift: '>' +} + +key SLASH { + label: ';' + base: ';' + shift: ':' +} + +key RO { + label: '/' + base: '/' + shift: '?' + ralt: '\u00b0' +} diff --git a/packages/InputDevices/res/raw/keyboard_layout_english_us_intl.kcm b/packages/InputDevices/res/raw/keyboard_layout_english_us_intl.kcm new file mode 100644 index 0000000..0fabf02 --- /dev/null +++ b/packages/InputDevices/res/raw/keyboard_layout_english_us_intl.kcm @@ -0,0 +1,379 @@ +# Copyright (C) 2013 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. + +# +# English (US) International keyboard layout. +# + +type OVERLAY + +map key 86 PLUS + +### ROW 1 + +key GRAVE { + label: '\u0300' + base: '\u0300' + shift: '\u0303' +} + +key 1 { + label: '1' + base: '1' + shift: '!' + ralt: '\u00a1' + ralt+shift: '\u00b9' +} + +key 2 { + label: '2' + base: '2' + shift: '@' + ralt: '\u00b2' +} + +key 3 { + label: '3' + base: '3' + shift: '#' + ralt: '\u00b3' +} + +key 4 { + label: '4' + base: '4' + shift: '$' + ralt: '\u00a4' + ralt+shift: '\u00a3' +} + +key 5 { + label: '5' + base: '5' + shift: '%' + ralt: '\u20ac' +} + +key 6 { + label: '6' + base: '6' + shift: '\u0302' + ralt: '\u00bc' +} + +key 7 { + label: '7' + base: '7' + shift: '&' + ralt: '\u00bd' +} + +key 8 { + label: '8' + base: '8' + shift: '*' + ralt: '\u00be' +} + +key 9 { + label: '9' + base: '9' + shift: '(' + ralt: '\u2018' +} + +key 0 { + label: '0' + base: '0' + shift: ')' + ralt: '\u2019' +} + +key MINUS { + label: '-' + base: '-' + shift: '_' + ralt: '\u00a5' +} + +key EQUALS { + label: '=' + base: '=' + shift: '+' + ralt: '\u00d7' + shift+ralt: '\u00f7' +} + +### ROW 2 + +key Q { + label: 'Q' + base: 'q' + shift, capslock: 'Q' + ralt: '\u00e4' + shift+ralt: '\u00c4' +} + +key W { + label: 'W' + base: 'w' + shift, capslock: 'W' + ralt: '\u00e5' + shift+ralt: '\u00c5' +} + +key E { + label: 'E' + base: 'e' + shift, capslock: 'E' + ralt: '\u00e9' + shift+ralt: '\u00c9' +} + +key R { + label: 'R' + base: 'r' + shift, capslock: 'R' + ralt: '\u00ae' +} + +key T { + label: 'T' + base: 't' + shift, capslock: 'T' + ralt: '\u00fe' + shift+ralt: '\u00de' +} + +key Y { + label: 'Y' + base: 'y' + shift, capslock: 'Y' + ralt: '\u00fc' + shift+ralt: '\u00dc' +} + +key U { + label: 'U' + base: 'u' + shift, capslock: 'U' + ralt: '\u00fa' + shift+ralt: '\u00da' +} + +key I { + label: 'I' + base: 'i' + shift, capslock: 'I' + ralt: '\u00ed' + shift+ralt: '\u00cd' +} + +key O { + label: 'O' + base: 'o' + shift, capslock: 'O' + ralt: '\u00f3' + shift+ralt: '\u00d3' +} + +key P { + label: 'P' + base: 'p' + shift, capslock: 'P' + ralt: '\u00f6' + shift+ralt: '\u00d6' +} + +key LEFT_BRACKET { + label: '[' + base: '[' + shift: '{' + ralt: '\u00ab' +} + +key RIGHT_BRACKET { + label: ']' + base: ']' + shift: '}' + ralt: '\u00bb' +} + +key BACKSLASH { + label: '\\' + base: '\\' + shift: '|' + ralt: '\u00ac' + shift+ralt: '\u00a6' +} + +### ROW 3 + +key A { + label: 'A' + base: 'a' + shift, capslock: 'A' + ralt: '\u00e1' + shift+ralt: '\u00c1' +} + +key S { + label: 'S' + base: 's' + shift, capslock: 'S' + ralt: '\u00df' + shift+ralt: '\u00a7' +} + +key D { + label: 'D' + base: 'd' + shift, capslock: 'D' + ralt: '\u00f0' + shift+ralt: '\u00d0' +} + +key F { + label: 'F' + base: 'f' + shift, capslock: 'F' +} + +key G { + label: 'G' + base: 'g' + shift, capslock: 'G' +} + +key H { + label: 'H' + base: 'h' + shift, capslock: 'H' +} + +key J { + label: 'J' + base: 'j' + shift, capslock: 'J' +} + +key K { + label: 'K' + base: 'k' + shift, capslock: 'K' +} + +key L { + label: 'L' + base: 'l' + shift, capslock: 'L' + ralt: '\u00f8' + shift+ralt: '\u00d8' +} + +key SEMICOLON { + label: ';' + base: ';' + shift: ':' + ralt: '\u00b6' + shift+ralt: '\u00b0' +} + +key APOSTROPHE { + label: '\'' + base: '\'' + shift: '"' + ralt: '\u0301' + shift+ralt: '\u0308' +} + +### ROW 4 + +key PLUS { + label: '\\' + base: '\\' + shift: '|' + ralt: '\u00ac' + shift+ralt: '\u00a6' +} + +key Z { + label: 'Z' + base: 'z' + shift, capslock: 'Z' + ralt: '\u00e6' + shift+ralt: '\u00c6' +} + +key X { + label: 'X' + base: 'x' + shift, capslock: 'X' +} + +key C { + label: 'C' + base: 'c' + shift, capslock: 'C' + ralt: '\u00a9' + shift+ralt: '\u00a2' +} + +key V { + label: 'V' + base: 'v' + shift, capslock: 'V' +} + +key B { + label: 'B' + base: 'b' + shift, capslock: 'B' +} + +key N { + label: 'N' + base: 'n' + shift, capslock: 'N' + ralt: '\u00f1' + shift+ralt: '\u00d1' +} + +key M { + label: 'M' + base: 'm' + shift, capslock: 'M' + ralt: '\u00b5' +} + +key COMMA { + label: ',' + base: ',' + shift: '<' + ralt: '\u00e7' + shift+ralt: '\u00c7' +} + +key PERIOD { + label: '.' + base: '.' + shift: '>' +} + +key SLASH { + label: '/' + base: '/' + shift: '?' + ralt: '\u00bf' +} diff --git a/packages/InputDevices/res/values/strings.xml b/packages/InputDevices/res/values/strings.xml index 65d3304..32c665a 100644 --- a/packages/InputDevices/res/values/strings.xml +++ b/packages/InputDevices/res/values/strings.xml @@ -12,6 +12,9 @@ <!-- US English keyboard layout label. [CHAR LIMIT=35] --> <string name="keyboard_layout_english_us_label">English (US)</string> + <!-- US English (International style) keyboard layout label. [CHAR LIMIT=35] --> + <string name="keyboard_layout_english_us_intl">English (US), International style</string> + <!-- US English (Dvorak style) keyboard layout label. [CHAR LIMIT=35] --> <string name="keyboard_layout_english_us_dvorak_label">English (US), Dvorak style</string> @@ -75,6 +78,9 @@ <!-- Icelandic keyboard layout label. [CHAR LIMIT=35] --> <string name="keyboard_layout_icelandic">Icelandic</string> + <!-- Brazilian keyboard layout label. [CHAR LIMIT=35] --> + <string name="keyboard_layout_brazilian">Brazilian</string> + <!-- Portuguese keyboard layout label. [CHAR LIMIT=35] --> <string name="keyboard_layout_portuguese">Portuguese</string> diff --git a/packages/InputDevices/res/xml/keyboard_layouts.xml b/packages/InputDevices/res/xml/keyboard_layouts.xml index 3cfa170..ffd1a23 100644 --- a/packages/InputDevices/res/xml/keyboard_layouts.xml +++ b/packages/InputDevices/res/xml/keyboard_layouts.xml @@ -8,6 +8,10 @@ android:label="@string/keyboard_layout_english_us_label" android:keyboardLayout="@raw/keyboard_layout_english_us" /> + <keyboard-layout android:name="keyboard_layout_english_us_intl" + android:label="@string/keyboard_layout_english_us_intl" + android:keyboardLayout="@raw/keyboard_layout_english_us_intl" /> + <keyboard-layout android:name="keyboard_layout_english_us_dvorak" android:label="@string/keyboard_layout_english_us_dvorak_label" android:keyboardLayout="@raw/keyboard_layout_english_us_dvorak" /> @@ -92,6 +96,10 @@ android:label="@string/keyboard_layout_icelandic" android:keyboardLayout="@raw/keyboard_layout_icelandic" /> + <keyboard-layout android:name="keyboard_layout_brazilian" + android:label="@string/keyboard_layout_brazilian" + android:keyboardLayout="@raw/keyboard_layout_brazilian" /> + <keyboard-layout android:name="keyboard_layout_portuguese" android:label="@string/keyboard_layout_portuguese" android:keyboardLayout="@raw/keyboard_layout_portuguese" /> diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java index f872cc3..885fdae 100644 --- a/services/java/com/android/server/InputMethodManagerService.java +++ b/services/java/com/android/server/InputMethodManagerService.java @@ -1493,7 +1493,9 @@ public class InputMethodManagerService extends IInputMethodManager.Stub if (mStatusBar != null) { mStatusBar.setImeWindowStatus(token, vis, backDisposition); } - final boolean iconVisibility = (vis & InputMethodService.IME_ACTIVE) != 0; + final boolean iconVisibility = ((vis & (InputMethodService.IME_ACTIVE)) != 0) + && (mWindowManagerService.isHardKeyboardAvailable() + || (vis & (InputMethodService.IME_VISIBLE)) != 0); final InputMethodInfo imi = mMethodMap.get(mCurMethodId); if (imi != null && iconVisibility && needsToShowImeSwitchOngoingNotification()) { // Used to load label diff --git a/services/java/com/android/server/pm/SELinuxMMAC.java b/services/java/com/android/server/pm/SELinuxMMAC.java index 4bbdb5e..04f43d9 100644 --- a/services/java/com/android/server/pm/SELinuxMMAC.java +++ b/services/java/com/android/server/pm/SELinuxMMAC.java @@ -57,7 +57,7 @@ public final class SELinuxMMAC { // Locations of potential install policy files. private static final File[] INSTALL_POLICY_FILE = { - new File(Environment.getDataDirectory(), "system/mac_permissions.xml"), + new File(Environment.getDataDirectory(), "security/mac_permissions.xml"), new File(Environment.getRootDirectory(), "etc/security/mac_permissions.xml"), null}; diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index bc442ce..de72c26 100644 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -8943,10 +8943,31 @@ public class WindowManagerService extends IWindowManager.Stub if (DEBUG_ORIENTATION && winAnimator.mDrawState == WindowStateAnimator.DRAW_PENDING) Slog.i( TAG, "Resizing " + win + " WITH DRAW PENDING"); - win.mClient.resized(win.mFrame, win.mLastOverscanInsets, win.mLastContentInsets, - win.mLastVisibleInsets, - winAnimator.mDrawState == WindowStateAnimator.DRAW_PENDING, - configChanged ? win.mConfiguration : null); + final IWindow client = win.mClient; + final Rect frame = win.mFrame; + final Rect overscanInsets = win.mLastOverscanInsets; + final Rect contentInsets = win.mLastContentInsets; + final Rect visibleInsets = win.mLastVisibleInsets; + final boolean reportDraw + = winAnimator.mDrawState == WindowStateAnimator.DRAW_PENDING; + final Configuration newConfig = configChanged ? win.mConfiguration : null; + if (win.mClient instanceof IWindow.Stub) { + // To prevent deadlock simulate one-way call if win.mClient is a local object. + mH.post(new Runnable() { + @Override + public void run() { + try { + client.resized(frame, overscanInsets, contentInsets, + visibleInsets, reportDraw, newConfig); + } catch (RemoteException e) { + // Not a remote call, RemoteException won't be raised. + } + } + }); + } else { + client.resized(frame, overscanInsets, contentInsets, visibleInsets, reportDraw, + newConfig); + } win.mOverscanInsetsChanged = false; win.mContentInsetsChanged = false; win.mVisibleInsetsChanged = false; |