Merge "Assign default icon to users at creation time and in SystemUI." into lmp-dev
diff --git a/api/current.txt b/api/current.txt
index dd0723c..56bc98f 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -8622,13 +8622,11 @@
}
public class LauncherApps {
- method public void addCallback(android.content.pm.LauncherApps.Callback);
method public java.util.List<android.content.pm.LauncherActivityInfo> getActivityList(java.lang.String, android.os.UserHandle);
method public boolean isActivityEnabled(android.content.ComponentName, android.os.UserHandle);
method public boolean isPackageEnabled(java.lang.String, android.os.UserHandle);
method public void registerCallback(android.content.pm.LauncherApps.Callback);
method public void registerCallback(android.content.pm.LauncherApps.Callback, android.os.Handler);
- method public void removeCallback(android.content.pm.LauncherApps.Callback);
method public android.content.pm.LauncherActivityInfo resolveActivity(android.content.Intent, android.os.UserHandle);
method public void startAppDetailsActivity(android.content.ComponentName, android.os.UserHandle, android.graphics.Rect, android.os.Bundle);
method public void startMainActivity(android.content.ComponentName, android.os.UserHandle, android.graphics.Rect, android.os.Bundle);
diff --git a/core/java/android/app/EnterTransitionCoordinator.java b/core/java/android/app/EnterTransitionCoordinator.java
index 922561d..9ca150d 100644
--- a/core/java/android/app/EnterTransitionCoordinator.java
+++ b/core/java/android/app/EnterTransitionCoordinator.java
@@ -329,7 +329,10 @@
@Override
public void run() {
if (mAnimations++ < MIN_ANIMATION_FRAMES) {
- getDecor().postOnAnimation(this);
+ View decorView = getDecor();
+ if (decorView != null) {
+ decorView.postOnAnimation(this);
+ }
} else if (mResultReceiver != null) {
mResultReceiver.send(MSG_HIDE_SHARED_ELEMENTS, null);
mResultReceiver = null; // all done sending messages.
diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl
index 7d4512b..bdcff38 100644
--- a/core/java/android/app/INotificationManager.aidl
+++ b/core/java/android/app/INotificationManager.aidl
@@ -71,7 +71,6 @@
ComponentName getEffectsSuppressor();
boolean matchesCallFilter(in Bundle extras);
- boolean matchesCallFilterAsUser(in Bundle extras, int userId);
ZenModeConfig getZenModeConfig();
boolean setZenModeConfig(in ZenModeConfig config);
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index f9e4895..31b39ebb2 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -2680,6 +2680,8 @@
contentView.setViewVisibility(R.id.line3, View.GONE);
contentView.setViewVisibility(R.id.overflow_divider, View.GONE);
contentView.setViewVisibility(R.id.progress, View.GONE);
+ contentView.setViewVisibility(R.id.chronometer, View.GONE);
+ contentView.setViewVisibility(R.id.time, View.GONE);
}
private RemoteViews applyStandardTemplate(int resId) {
@@ -2775,8 +2777,6 @@
contentView.setViewVisibility(R.id.time, View.VISIBLE);
contentView.setLong(R.id.time, "setTime", mWhen);
}
- } else {
- contentView.setViewVisibility(R.id.time, View.GONE);
}
// Adjust padding depending on line count and font size.
diff --git a/core/java/android/content/pm/LauncherApps.java b/core/java/android/content/pm/LauncherApps.java
index d49bc50..5ee0b67 100644
--- a/core/java/android/content/pm/LauncherApps.java
+++ b/core/java/android/content/pm/LauncherApps.java
@@ -500,11 +500,18 @@
}
}
- /** STOPSHIP remove when launcher 3 has been updated */
+ /**
+ * TODO Remove after 2014-09-22
+ * @hide
+ */
public void addCallback(Callback callback) {
registerCallback(callback);
}
- /** STOPSHIP remove when launcher 3 has been updated */
+
+ /**
+ * TODO Remove after 2014-09-22
+ * @hide
+ */
public void removeCallback(Callback callback) {
unregisterCallback(callback);
}
diff --git a/core/tests/inputmethodtests/src/android/os/InputMethodTest.java b/core/tests/inputmethodtests/src/android/os/InputMethodTest.java
index 30eb939..cb85fc5 100644
--- a/core/tests/inputmethodtests/src/android/os/InputMethodTest.java
+++ b/core/tests/inputmethodtests/src/android/os/InputMethodTest.java
@@ -45,177 +45,99 @@
private static final Locale LOCALE_EN_GB = new Locale("en", "GB");
private static final Locale LOCALE_EN_IN = new Locale("en", "IN");
private static final Locale LOCALE_HI = new Locale("hi");
+ private static final Locale LOCALE_JA_JP = new Locale("ja", "JP");
+ private static final String SUBTYPE_MODE_KEYBOARD = "keyboard";
+ private static final String SUBTYPE_MODE_VOICE = "voice";
@SmallTest
- public void testDefaultEnabledImesWithDefaultVoiceIme() throws Exception {
- final Context context = getInstrumentation().getTargetContext();
- final ArrayList<InputMethodInfo> imis = new ArrayList<InputMethodInfo>();
- imis.add(createDefaultAutoDummyVoiceIme());
- imis.add(createNonDefaultAutoDummyVoiceIme0());
- imis.add(createNonDefaultAutoDummyVoiceIme1());
- imis.add(createNonDefaultDummyVoiceIme2());
- imis.add(createDefaultDummyLatinKeyboardIme());
- imis.add(createNonDefaultDummyJaJPKeyboardIme());
- imis.add(createNonDefaultDummyJaJPKeyboardImeWithoutSubtypes());
- imis.add(createDefaultDummyHinglishKeyboardIme());
-
- // locale: en_US, system: not ready
- final ArrayList<InputMethodInfo> enabledImisForSystemNotReadyLocaleEnUs =
- callGetDefaultEnabledImesUnderWithLocale(context, !IS_SYSTEM_READY, imis,
- LOCALE_EN_US);
- assertEquals(toSet("DummyDefaultAutoVoiceIme", "DummyDefaultEnKeyboardIme",
+ public void testVoiceImes() throws Exception {
+ // locale: en_US
+ assertDefaultEnabledImes(getImesWithDefaultVoiceIme(), LOCALE_EN_US, !IS_SYSTEM_READY,
"DummyNonDefaultAutoVoiceIme0", "DummyNonDefaultAutoVoiceIme1",
- "DummyDefaultHinglishKeyboardIme"),
- getPackageNames(enabledImisForSystemNotReadyLocaleEnUs));
-
- // locale: en_US, system: ready
- final ArrayList<InputMethodInfo> enabledImisForSystemReadyLocaleEnUs =
- callGetDefaultEnabledImesUnderWithLocale(context, IS_SYSTEM_READY, imis,
- LOCALE_EN_US);
- assertEquals(toSet("DummyDefaultAutoVoiceIme", "DummyDefaultEnKeyboardIme",
- "DummyDefaultHinglishKeyboardIme"),
- getPackageNames(enabledImisForSystemReadyLocaleEnUs));
-
- // locale: en_GB, system: not ready
- final ArrayList<InputMethodInfo> enabledImisForSystemNotReadyLocaleEnGB =
- callGetDefaultEnabledImesUnderWithLocale(context, !IS_SYSTEM_READY, imis,
- LOCALE_EN_GB);
- assertEquals(toSet("DummyDefaultAutoVoiceIme", "DummyDefaultEnKeyboardIme",
+ "DummyDefaultEnKeyboardIme", "DummyDefaultAutoVoiceIme");
+ assertDefaultEnabledImes(getImesWithoutDefaultVoiceIme(), LOCALE_EN_US, !IS_SYSTEM_READY,
"DummyNonDefaultAutoVoiceIme0", "DummyNonDefaultAutoVoiceIme1",
- "DummyDefaultHinglishKeyboardIme"),
- getPackageNames(enabledImisForSystemNotReadyLocaleEnGB));
-
- // locale: en_GB, system: ready
- final ArrayList<InputMethodInfo> enabledImisForSystemReadyLocaleEnGB =
- callGetDefaultEnabledImesUnderWithLocale(context, IS_SYSTEM_READY, imis,
- LOCALE_EN_GB);
- assertEquals(toSet("DummyDefaultAutoVoiceIme", "DummyDefaultEnKeyboardIme",
- "DummyDefaultHinglishKeyboardIme"),
- getPackageNames(enabledImisForSystemReadyLocaleEnGB));
-
- // locale: en_IN, system: not ready
- final ArrayList<InputMethodInfo> enabledImisForSystemNotReadyLocaleEnIN =
- callGetDefaultEnabledImesUnderWithLocale(context, !IS_SYSTEM_READY, imis,
- LOCALE_EN_IN);
- assertEquals(toSet("DummyDefaultAutoVoiceIme", "DummyDefaultEnKeyboardIme",
+ "DummyDefaultEnKeyboardIme");
+ assertDefaultEnabledImes(getImesWithDefaultVoiceIme(), LOCALE_EN_US, IS_SYSTEM_READY,
+ "DummyDefaultAutoVoiceIme", "DummyDefaultEnKeyboardIme");
+ assertDefaultEnabledImes(getImesWithoutDefaultVoiceIme(), LOCALE_EN_US, IS_SYSTEM_READY,
"DummyNonDefaultAutoVoiceIme0", "DummyNonDefaultAutoVoiceIme1",
- "DummyDefaultHinglishKeyboardIme"),
- getPackageNames(enabledImisForSystemNotReadyLocaleEnIN));
+ "DummyDefaultEnKeyboardIme");
- // locale: en_IN, system: ready
- final ArrayList<InputMethodInfo> enabledImisForSystemReadyLocaleEnIN =
- callGetDefaultEnabledImesUnderWithLocale(context, IS_SYSTEM_READY, imis,
- LOCALE_EN_IN);
- assertEquals(toSet("DummyDefaultAutoVoiceIme", "DummyDefaultEnKeyboardIme",
- "DummyDefaultHinglishKeyboardIme"),
- getPackageNames(enabledImisForSystemReadyLocaleEnIN));
-
- // locale: hi, system: not ready
- final ArrayList<InputMethodInfo> enabledImisForSystemNotReadyLocaleHi =
- callGetDefaultEnabledImesUnderWithLocale(context, !IS_SYSTEM_READY, imis,
- LOCALE_HI);
- assertEquals(toSet("DummyDefaultAutoVoiceIme", "DummyDefaultEnKeyboardIme",
+ // locale: en_GB
+ assertDefaultEnabledImes(getImesWithDefaultVoiceIme(), LOCALE_EN_GB, !IS_SYSTEM_READY,
"DummyNonDefaultAutoVoiceIme0", "DummyNonDefaultAutoVoiceIme1",
- "DummyDefaultHinglishKeyboardIme"),
- getPackageNames(enabledImisForSystemNotReadyLocaleHi));
-
- // locale: hi, system: ready
- final ArrayList<InputMethodInfo> enabledImisForSystemReadyLocaleHi =
- callGetDefaultEnabledImesUnderWithLocale(context, IS_SYSTEM_READY, imis,
- LOCALE_HI);
- assertEquals(toSet("DummyDefaultAutoVoiceIme", "DummyDefaultEnKeyboardIme",
+ "DummyDefaultEnKeyboardIme", "DummyDefaultAutoVoiceIme");
+ assertDefaultEnabledImes(getImesWithoutDefaultVoiceIme(), LOCALE_EN_GB, !IS_SYSTEM_READY,
"DummyNonDefaultAutoVoiceIme0", "DummyNonDefaultAutoVoiceIme1",
- "DummyDefaultHinglishKeyboardIme"),
- getPackageNames(enabledImisForSystemReadyLocaleHi));
+ "DummyDefaultEnKeyboardIme");
+ assertDefaultEnabledImes(getImesWithDefaultVoiceIme(), LOCALE_EN_GB, IS_SYSTEM_READY,
+ "DummyDefaultEnKeyboardIme", "DummyDefaultAutoVoiceIme");
+ assertDefaultEnabledImes(getImesWithoutDefaultVoiceIme(), LOCALE_EN_GB, IS_SYSTEM_READY,
+ "DummyNonDefaultAutoVoiceIme0", "DummyNonDefaultAutoVoiceIme1",
+ "DummyDefaultEnKeyboardIme");
+
+ // locale: ja_JP
+ assertDefaultEnabledImes(getImesWithDefaultVoiceIme(), LOCALE_JA_JP, !IS_SYSTEM_READY,
+ "DummyNonDefaultAutoVoiceIme0", "DummyNonDefaultAutoVoiceIme1",
+ "DummyDefaultEnKeyboardIme", "DummyDefaultAutoVoiceIme");
+ assertDefaultEnabledImes(getImesWithoutDefaultVoiceIme(), LOCALE_JA_JP, !IS_SYSTEM_READY,
+ "DummyNonDefaultAutoVoiceIme0", "DummyNonDefaultAutoVoiceIme1",
+ "DummyDefaultEnKeyboardIme");
+ assertDefaultEnabledImes(getImesWithDefaultVoiceIme(), LOCALE_JA_JP, IS_SYSTEM_READY,
+ "DummyNonDefaultAutoVoiceIme0", "DummyNonDefaultAutoVoiceIme1",
+ "DummyDefaultEnKeyboardIme", "DummyDefaultAutoVoiceIme");
+ assertDefaultEnabledImes(getImesWithoutDefaultVoiceIme(), LOCALE_JA_JP, IS_SYSTEM_READY,
+ "DummyNonDefaultAutoVoiceIme0", "DummyNonDefaultAutoVoiceIme1",
+ "DummyDefaultEnKeyboardIme");
}
@SmallTest
- public void testDefaultEnabledImesWithOutDefaultVoiceIme() throws Exception {
- final Context context = getInstrumentation().getTargetContext();
- final ArrayList<InputMethodInfo> imis = new ArrayList<InputMethodInfo>();
- imis.add(createNonDefaultAutoDummyVoiceIme0());
- imis.add(createNonDefaultAutoDummyVoiceIme1());
- imis.add(createNonDefaultDummyVoiceIme2());
- imis.add(createDefaultDummyLatinKeyboardIme());
- imis.add(createNonDefaultDummyJaJPKeyboardIme());
- imis.add(createNonDefaultDummyJaJPKeyboardImeWithoutSubtypes());
- imis.add(createDefaultDummyHinglishKeyboardIme());
+ public void testKeyboardImes() throws Exception {
+ // locale: en_US
+ assertDefaultEnabledImes(getSamplePreinstalledImes(), LOCALE_EN_US, !IS_SYSTEM_READY,
+ "com.android.apps.inputmethod.voice", "com.android.apps.inputmethod.latin",
+ "com.android.apps.inputmethod.hindi");
+ assertDefaultEnabledImes(getSamplePreinstalledImes(), LOCALE_EN_US, IS_SYSTEM_READY,
+ "com.android.apps.inputmethod.voice", "com.android.apps.inputmethod.latin",
+ "com.android.apps.inputmethod.hindi");
- // locale: en_US, system: not ready
- final ArrayList<InputMethodInfo> enabledImisForSystemNotReadyLocaleEnUs =
- callGetDefaultEnabledImesUnderWithLocale(context, !IS_SYSTEM_READY, imis,
- LOCALE_EN_US);
- assertEquals(toSet("DummyNonDefaultAutoVoiceIme0", "DummyNonDefaultAutoVoiceIme1",
- "DummyDefaultEnKeyboardIme", "DummyDefaultHinglishKeyboardIme"),
- getPackageNames(enabledImisForSystemNotReadyLocaleEnUs));
+ // locale: en_GB
+ assertDefaultEnabledImes(getSamplePreinstalledImes(), LOCALE_EN_GB, !IS_SYSTEM_READY,
+ "com.android.apps.inputmethod.voice", "com.android.apps.inputmethod.latin",
+ "com.android.apps.inputmethod.hindi");
+ assertDefaultEnabledImes(getSamplePreinstalledImes(), LOCALE_EN_GB, IS_SYSTEM_READY,
+ "com.android.apps.inputmethod.voice", "com.android.apps.inputmethod.latin",
+ "com.android.apps.inputmethod.hindi");
- // locale: en_US, system: ready
- final ArrayList<InputMethodInfo> enabledImisForSystemReadyLocaleEnUs =
- callGetDefaultEnabledImesUnderWithLocale(context, IS_SYSTEM_READY, imis,
- LOCALE_EN_US);
- assertEquals(toSet("DummyNonDefaultAutoVoiceIme0", "DummyNonDefaultAutoVoiceIme1",
- "DummyDefaultEnKeyboardIme", "DummyDefaultHinglishKeyboardIme"),
- getPackageNames(enabledImisForSystemReadyLocaleEnUs));
+ // locale: en_IN
+ assertDefaultEnabledImes(getSamplePreinstalledImes(), LOCALE_EN_IN, !IS_SYSTEM_READY,
+ "com.android.apps.inputmethod.voice", "com.android.apps.inputmethod.latin",
+ "com.android.apps.inputmethod.hindi");
+ assertDefaultEnabledImes(getSamplePreinstalledImes(), LOCALE_EN_IN, IS_SYSTEM_READY,
+ "com.android.apps.inputmethod.voice", "com.android.apps.inputmethod.latin",
+ "com.android.apps.inputmethod.hindi");
- // locale: en_GB, system: not ready
- final ArrayList<InputMethodInfo> enabledImisForSystemNotReadyLocaleEnGB =
- callGetDefaultEnabledImesUnderWithLocale(context, !IS_SYSTEM_READY, imis,
- LOCALE_EN_GB);
- assertEquals(toSet("DummyNonDefaultAutoVoiceIme0", "DummyNonDefaultAutoVoiceIme1",
- "DummyDefaultEnKeyboardIme", "DummyDefaultHinglishKeyboardIme"),
- getPackageNames(enabledImisForSystemNotReadyLocaleEnGB));
+ // locale: hi
+ assertDefaultEnabledImes(getSamplePreinstalledImes(), LOCALE_HI, !IS_SYSTEM_READY,
+ "com.android.apps.inputmethod.voice", "com.android.apps.inputmethod.latin",
+ "com.android.apps.inputmethod.hindi");
+ assertDefaultEnabledImes(getSamplePreinstalledImes(), LOCALE_HI, IS_SYSTEM_READY,
+ "com.android.apps.inputmethod.voice", "com.android.apps.inputmethod.latin",
+ "com.android.apps.inputmethod.hindi");
- // locale: en_GB, system: ready
- final ArrayList<InputMethodInfo> enabledImisForSystemReadyLocaleEnGB =
- callGetDefaultEnabledImesUnderWithLocale(context, IS_SYSTEM_READY, imis,
- LOCALE_EN_GB);
- assertEquals(toSet("DummyNonDefaultAutoVoiceIme0", "DummyNonDefaultAutoVoiceIme1",
- "DummyDefaultEnKeyboardIme", "DummyDefaultHinglishKeyboardIme"),
- getPackageNames(enabledImisForSystemReadyLocaleEnGB));
-
- // locale: en_IN, system: not ready
- final ArrayList<InputMethodInfo> enabledImisForSystemNotReadyLocaleEnIN =
- callGetDefaultEnabledImesUnderWithLocale(context, !IS_SYSTEM_READY, imis,
- LOCALE_EN_IN);
- assertEquals(toSet("DummyNonDefaultAutoVoiceIme0", "DummyNonDefaultAutoVoiceIme1",
- "DummyDefaultEnKeyboardIme", "DummyDefaultHinglishKeyboardIme"),
- getPackageNames(enabledImisForSystemNotReadyLocaleEnIN));
-
- // locale: en_IN, system: ready
- final ArrayList<InputMethodInfo> enabledImisForSystemReadyLocaleEnIN =
- callGetDefaultEnabledImesUnderWithLocale(context, IS_SYSTEM_READY, imis,
- LOCALE_EN_IN);
- assertEquals(toSet("DummyNonDefaultAutoVoiceIme0", "DummyNonDefaultAutoVoiceIme1",
- "DummyDefaultEnKeyboardIme", "DummyDefaultHinglishKeyboardIme"),
- getPackageNames(enabledImisForSystemReadyLocaleEnIN));
-
- // locale: hi, system: not ready
- final ArrayList<InputMethodInfo> enabledImisForSystemNotReadyLocaleHi =
- callGetDefaultEnabledImesUnderWithLocale(context, !IS_SYSTEM_READY, imis,
- LOCALE_HI);
- assertEquals(toSet("DummyNonDefaultAutoVoiceIme0", "DummyNonDefaultAutoVoiceIme1",
- "DummyDefaultEnKeyboardIme", "DummyDefaultHinglishKeyboardIme"),
- getPackageNames(enabledImisForSystemNotReadyLocaleHi));
-
- // locale: hi, system: ready
- final ArrayList<InputMethodInfo> enabledImisForSystemReadyLocaleHi =
- callGetDefaultEnabledImesUnderWithLocale(context, IS_SYSTEM_READY, imis,
- LOCALE_HI);
- assertEquals(toSet("DummyNonDefaultAutoVoiceIme0", "DummyNonDefaultAutoVoiceIme1",
- "DummyDefaultEnKeyboardIme", "DummyDefaultHinglishKeyboardIme"),
- getPackageNames(enabledImisForSystemReadyLocaleHi));
+ // locale: ja_JP
+ assertDefaultEnabledImes(getSamplePreinstalledImes(), LOCALE_JA_JP, !IS_SYSTEM_READY,
+ "com.android.apps.inputmethod.voice", "com.android.apps.inputmethod.latin",
+ "com.android.apps.inputmethod.hindi");
+ assertDefaultEnabledImes(getSamplePreinstalledImes(), LOCALE_JA_JP, IS_SYSTEM_READY,
+ "com.android.apps.inputmethod.voice", "com.android.apps.inputmethod.latin",
+ "com.android.apps.inputmethod.hindi", "com.android.apps.inputmethod.japanese");
}
@SmallTest
public void testParcelable() throws Exception {
- final ArrayList<InputMethodInfo> originalList = new ArrayList<InputMethodInfo>();
- originalList.add(createNonDefaultAutoDummyVoiceIme0());
- originalList.add(createNonDefaultAutoDummyVoiceIme1());
- originalList.add(createNonDefaultDummyVoiceIme2());
- originalList.add(createDefaultDummyLatinKeyboardIme());
- originalList.add(createNonDefaultDummyJaJPKeyboardIme());
- originalList.add(createNonDefaultDummyJaJPKeyboardImeWithoutSubtypes());
-
+ final ArrayList<InputMethodInfo> originalList = getSamplePreinstalledImes();
final List<InputMethodInfo> clonedList = cloneViaParcel(originalList);
assertNotNull(clonedList);
final List<InputMethodInfo> clonedClonedList = cloneViaParcel(clonedList);
@@ -230,6 +152,14 @@
}
}
+ private void assertDefaultEnabledImes(final ArrayList<InputMethodInfo> preinstalledImes,
+ final Locale systemLocale, final boolean isSystemReady, String... imeNames) {
+ final Context context = getInstrumentation().getTargetContext();
+ assertEquals(new HashSet<String>(Arrays.asList(imeNames)),
+ getPackageNames(callGetDefaultEnabledImesUnderWithLocale(context,
+ isSystemReady, preinstalledImes, systemLocale)));
+ }
+
private static List<InputMethodInfo> cloneViaParcel(final List<InputMethodInfo> list) {
Parcel p = null;
try {
@@ -256,11 +186,6 @@
}
}
- @SafeVarargs
- private static <T> HashSet<T> toSet(final T... xs) {
- return new HashSet<T>(Arrays.asList(xs));
- }
-
private HashSet<String> getPackageNames(final ArrayList<InputMethodInfo> imis) {
final HashSet<String> packageNames = new HashSet<>();
for (final InputMethodInfo imi : imis) {
@@ -315,83 +240,132 @@
.build();
}
- private static InputMethodInfo createDefaultAutoDummyVoiceIme() {
- final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
- subtypes.add(createDummyInputMethodSubtype("auto", "voice", IS_AUX, IS_AUTO,
- !IS_ASCII_CAPABLE));
- subtypes.add(createDummyInputMethodSubtype("en_US", "voice", IS_AUX, !IS_AUTO,
- !IS_ASCII_CAPABLE));
- return createDummyInputMethodInfo("DummyDefaultAutoVoiceIme", "dummy.voice0",
- "DummyVoice0", IS_AUX, IS_DEFAULT, subtypes);
+ private static ArrayList<InputMethodInfo> getImesWithDefaultVoiceIme() {
+ ArrayList<InputMethodInfo> preinstalledImes = new ArrayList<>();
+ {
+ final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
+ subtypes.add(createDummyInputMethodSubtype("auto", SUBTYPE_MODE_VOICE, IS_AUX, IS_AUTO,
+ !IS_ASCII_CAPABLE));
+ subtypes.add(createDummyInputMethodSubtype("en_US", SUBTYPE_MODE_VOICE, IS_AUX,
+ !IS_AUTO, !IS_ASCII_CAPABLE));
+ preinstalledImes.add(createDummyInputMethodInfo("DummyDefaultAutoVoiceIme",
+ "dummy.voice0", "DummyVoice0", IS_AUX, IS_DEFAULT, subtypes));
+ }
+ preinstalledImes.addAll(getImesWithoutDefaultVoiceIme());
+ return preinstalledImes;
}
- private static InputMethodInfo createNonDefaultAutoDummyVoiceIme0() {
- final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
- subtypes.add(createDummyInputMethodSubtype("auto", "voice", IS_AUX, IS_AUTO,
- !IS_ASCII_CAPABLE));
- subtypes.add(createDummyInputMethodSubtype("en_US", "voice", IS_AUX, !IS_AUTO,
- !IS_ASCII_CAPABLE));
- return createDummyInputMethodInfo("DummyNonDefaultAutoVoiceIme0", "dummy.voice1",
- "DummyVoice1", IS_AUX, !IS_DEFAULT, subtypes);
+ private static ArrayList<InputMethodInfo> getImesWithoutDefaultVoiceIme() {
+ ArrayList<InputMethodInfo> preinstalledImes = new ArrayList<>();
+ {
+ final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
+ subtypes.add(createDummyInputMethodSubtype("auto", SUBTYPE_MODE_VOICE, IS_AUX, IS_AUTO,
+ !IS_ASCII_CAPABLE));
+ subtypes.add(createDummyInputMethodSubtype("en_US", SUBTYPE_MODE_VOICE, IS_AUX,
+ !IS_AUTO, !IS_ASCII_CAPABLE));
+ preinstalledImes.add(createDummyInputMethodInfo("DummyNonDefaultAutoVoiceIme0",
+ "dummy.voice1", "DummyVoice1", IS_AUX, !IS_DEFAULT, subtypes));
+ }
+ {
+ final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
+ subtypes.add(createDummyInputMethodSubtype("auto", SUBTYPE_MODE_VOICE, IS_AUX, IS_AUTO,
+ !IS_ASCII_CAPABLE));
+ subtypes.add(createDummyInputMethodSubtype("en_US", SUBTYPE_MODE_VOICE, IS_AUX,
+ !IS_AUTO, !IS_ASCII_CAPABLE));
+ preinstalledImes.add(createDummyInputMethodInfo("DummyNonDefaultAutoVoiceIme1",
+ "dummy.voice2", "DummyVoice2", IS_AUX, !IS_DEFAULT, subtypes));
+ }
+ {
+ final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
+ subtypes.add(createDummyInputMethodSubtype("en_US", SUBTYPE_MODE_VOICE, IS_AUX,
+ !IS_AUTO, !IS_ASCII_CAPABLE));
+ preinstalledImes.add(createDummyInputMethodInfo("DummyNonDefaultVoiceIme2",
+ "dummy.voice3", "DummyVoice3", IS_AUX, !IS_DEFAULT, subtypes));
+ }
+ {
+ final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
+ subtypes.add(createDummyInputMethodSubtype("en_US", SUBTYPE_MODE_KEYBOARD, !IS_AUX,
+ !IS_AUTO, IS_ASCII_CAPABLE));
+ preinstalledImes.add(createDummyInputMethodInfo("DummyDefaultEnKeyboardIme",
+ "dummy.keyboard0", "DummyKeyboard0", !IS_AUX, IS_DEFAULT, subtypes));
+ }
+ return preinstalledImes;
}
- private static InputMethodInfo createNonDefaultAutoDummyVoiceIme1() {
- final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
- subtypes.add(createDummyInputMethodSubtype("auto", "voice", IS_AUX, IS_AUTO,
- !IS_ASCII_CAPABLE));
- subtypes.add(createDummyInputMethodSubtype("en_US", "voice", IS_AUX, !IS_AUTO,
- !IS_ASCII_CAPABLE));
- return createDummyInputMethodInfo("DummyNonDefaultAutoVoiceIme1", "dummy.voice2",
- "DummyVoice2", IS_AUX, !IS_DEFAULT, subtypes);
- }
+ private static ArrayList<InputMethodInfo> getSamplePreinstalledImes() {
+ ArrayList<InputMethodInfo> preinstalledImes = new ArrayList<>();
- private static InputMethodInfo createNonDefaultDummyVoiceIme2() {
- final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
- subtypes.add(createDummyInputMethodSubtype("en_US", "voice", IS_AUX, !IS_AUTO,
- !IS_ASCII_CAPABLE));
- return createDummyInputMethodInfo("DummyNonDefaultVoiceIme2", "dummy.voice3",
- "DummyVoice3", IS_AUX, !IS_DEFAULT, subtypes);
- }
+ // a dummy Voice IME
+ {
+ final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
+ subtypes.add(createDummyInputMethodSubtype("", SUBTYPE_MODE_VOICE, IS_AUX,
+ IS_AUTO, !IS_ASCII_CAPABLE));
+ preinstalledImes.add(createDummyInputMethodInfo("com.android.apps.inputmethod.voice",
+ "com.android.inputmethod.voice", "DummyVoiceIme", IS_AUX, IS_DEFAULT,
+ subtypes));
+ }
- private static InputMethodInfo createDefaultDummyLatinKeyboardIme() {
- final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
- subtypes.add(createDummyInputMethodSubtype("en_US", "keyboard", !IS_AUX, !IS_AUTO,
- IS_ASCII_CAPABLE));
- subtypes.add(createDummyInputMethodSubtype("en_GB", "keyboard", !IS_AUX, !IS_AUTO,
- IS_ASCII_CAPABLE));
- subtypes.add(createDummyInputMethodSubtype("en_IN", "keyboard", !IS_AUX, !IS_AUTO,
- IS_ASCII_CAPABLE));
- subtypes.add(createDummyInputMethodSubtype("hi", "keyboard", !IS_AUX, !IS_AUTO,
- !IS_ASCII_CAPABLE)); // not AsciiCapable!
- subtypes.add(createDummyInputMethodSubtype("hi_ZZ", "keyboard", !IS_AUX, !IS_AUTO,
- IS_ASCII_CAPABLE));
- return createDummyInputMethodInfo("DummyDefaultEnKeyboardIme", "dummy.keyboard0",
- "DummyKeyboard0", !IS_AUX, IS_DEFAULT, subtypes);
- }
+ // a dummy Hindi IME
+ {
+ final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
+ // TODO: This subtype should be marked as IS_ASCII_CAPABLE
+ subtypes.add(createDummyInputMethodSubtype("en_IN", SUBTYPE_MODE_KEYBOARD, !IS_AUX,
+ !IS_AUTO, !IS_ASCII_CAPABLE));
+ subtypes.add(createDummyInputMethodSubtype("hi", SUBTYPE_MODE_KEYBOARD, !IS_AUX,
+ !IS_AUTO, !IS_ASCII_CAPABLE));
+ preinstalledImes.add(createDummyInputMethodInfo("com.android.apps.inputmethod.hindi",
+ "com.android.inputmethod.hindi", "DummyHindiIme", !IS_AUX, IS_DEFAULT,
+ subtypes));
+ }
- private static InputMethodInfo createNonDefaultDummyJaJPKeyboardIme() {
- final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
- subtypes.add(createDummyInputMethodSubtype("ja_JP", "keyboard", !IS_AUX, !IS_AUTO,
- IS_ASCII_CAPABLE));
- return createDummyInputMethodInfo("DummyNonDefaultJaJPKeyboardIme", "dummy.keyboard1",
- "DummyKeyboard1", !IS_AUX, !IS_DEFAULT, subtypes);
- }
+ // a dummy Pinyin IME
+ {
+ final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
+ subtypes.add(createDummyInputMethodSubtype("zh_CN", SUBTYPE_MODE_KEYBOARD, !IS_AUX,
+ !IS_AUTO, !IS_ASCII_CAPABLE));
+ preinstalledImes.add(createDummyInputMethodInfo("ccom.android.apps.inputmethod.pinyin",
+ "com.android.apps.inputmethod.pinyin", "DummyPinyinIme", !IS_AUX, IS_DEFAULT,
+ subtypes));
+ }
- // Although IMEs that have no subtype are considered to be deprecated, the Android framework
- // must still be able to handle such IMEs as well as IMEs that have at least one subtype.
- private static InputMethodInfo createNonDefaultDummyJaJPKeyboardImeWithoutSubtypes() {
- final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
- return createDummyInputMethodInfo("DummyNonDefaultJaJPKeyboardImeWithoutSubtypes",
- "dummy.keyboard2", "DummyKeyboard2", !IS_AUX, !IS_DEFAULT, NO_SUBTYPE);
- }
+ // a dummy Korian IME
+ {
+ final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
+ subtypes.add(createDummyInputMethodSubtype("ko", SUBTYPE_MODE_KEYBOARD, !IS_AUX,
+ !IS_AUTO, !IS_ASCII_CAPABLE));
+ preinstalledImes.add(createDummyInputMethodInfo("com.android.apps.inputmethod.korean",
+ "com.android.apps.inputmethod.korean", "DummyKorianIme", !IS_AUX, IS_DEFAULT,
+ subtypes));
+ }
- private static InputMethodInfo createDefaultDummyHinglishKeyboardIme() {
- final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
- subtypes.add(createDummyInputMethodSubtype("en_IN", "keyboard", !IS_AUX, !IS_AUTO,
- IS_ASCII_CAPABLE));
- subtypes.add(createDummyInputMethodSubtype("hi", "keyboard", !IS_AUX, !IS_AUTO,
- !IS_ASCII_CAPABLE)); // not AsciiCapable!
- return createDummyInputMethodInfo("DummyDefaultHinglishKeyboardIme", "dummy.keyboard2",
- "DummyKeyboard2", !IS_AUX, IS_DEFAULT, subtypes);
+ // a dummy Latin IME
+ {
+ final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
+ subtypes.add(createDummyInputMethodSubtype("en_US", SUBTYPE_MODE_KEYBOARD, !IS_AUX,
+ !IS_AUTO, IS_ASCII_CAPABLE));
+ subtypes.add(createDummyInputMethodSubtype("en_GB", SUBTYPE_MODE_KEYBOARD, !IS_AUX,
+ !IS_AUTO, IS_ASCII_CAPABLE));
+ subtypes.add(createDummyInputMethodSubtype("en_IN", SUBTYPE_MODE_KEYBOARD, !IS_AUX,
+ !IS_AUTO, IS_ASCII_CAPABLE));
+ subtypes.add(createDummyInputMethodSubtype("hi", SUBTYPE_MODE_KEYBOARD, !IS_AUX,
+ !IS_AUTO, IS_ASCII_CAPABLE));
+ preinstalledImes.add(createDummyInputMethodInfo("com.android.apps.inputmethod.latin",
+ "com.android.apps.inputmethod.latin", "DummyLatinIme", !IS_AUX, IS_DEFAULT,
+ subtypes));
+ }
+
+ // a dummy Japanese IME
+ {
+ final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
+ subtypes.add(createDummyInputMethodSubtype("ja", SUBTYPE_MODE_KEYBOARD, !IS_AUX,
+ !IS_AUTO, !IS_ASCII_CAPABLE));
+ subtypes.add(createDummyInputMethodSubtype("emoji", SUBTYPE_MODE_KEYBOARD, !IS_AUX,
+ !IS_AUTO, !IS_ASCII_CAPABLE));
+ preinstalledImes.add(createDummyInputMethodInfo("com.android.apps.inputmethod.japanese",
+ "com.android.apps.inputmethod.japanese", "DummyJapaneseIme", !IS_AUX,
+ IS_DEFAULT, subtypes));
+ }
+
+ return preinstalledImes;
}
}
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
index f802e1e..92171c1 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
@@ -150,6 +150,8 @@
// mDecor itself, or a child of mDecor where the contents go.
private ViewGroup mContentParent;
+ private ViewGroup mContentRoot;
+
SurfaceHolder.Callback2 mTakeSurfaceCallback;
InputQueue.Callback mTakeInputQueueCallback;
@@ -2154,6 +2156,7 @@
private int mLastTopInset = 0;
private int mLastBottomInset = 0;
+ private int mLastRightInset = 0;
private int mLastSystemUiVisibility = 0;
@@ -2732,7 +2735,7 @@
@Override
public WindowInsets onApplyWindowInsets(WindowInsets insets) {
mFrameOffsets.set(insets.getSystemWindowInsets());
- updateColorViews(insets);
+ insets = updateColorViews(insets);
insets = updateStatusGuard(insets);
updateNavigationGuard(insets);
if (getForeground() != null) {
@@ -2749,8 +2752,12 @@
private WindowInsets updateColorViews(WindowInsets insets) {
if (!mIsFloating && ActivityManager.isHighEndGfx()) {
if (insets != null) {
- mLastTopInset = insets.getStableInsetTop();
- mLastBottomInset = insets.getStableInsetBottom();
+ mLastTopInset = Math.min(insets.getStableInsetTop(),
+ insets.getSystemWindowInsetTop());
+ mLastBottomInset = Math.min(insets.getStableInsetBottom(),
+ insets.getSystemWindowInsetBottom());
+ mLastRightInset = Math.min(insets.getStableInsetRight(),
+ insets.getSystemWindowInsetRight());
}
mStatusColorView = updateColorViewInt(mStatusColorView,
SYSTEM_UI_FLAG_FULLSCREEN, FLAG_TRANSLUCENT_STATUS,
@@ -2765,8 +2772,39 @@
com.android.internal.R.id.navigationBarBackground,
false /* hiddenByWindowFlag */);
}
+
+ WindowManager.LayoutParams attrs = getAttributes();
+ int sysUiVisibility = attrs.systemUiVisibility | attrs.subtreeSystemUiVisibility;
+
+ // When we expand the window with FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS, we still need
+ // to ensure that the rest of the view hierarchy doesn't notice it, unless they've
+ // explicitly asked for it.
+
+ boolean consumingNavBar =
+ (attrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0
+ && (sysUiVisibility & SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) == 0
+ && (mLastSystemUiVisibility & SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0;
+
+ int consumedRight = consumingNavBar ? mLastRightInset : 0;
+ int consumedBottom = consumingNavBar ? mLastBottomInset : 0;
+
+ if (mContentRoot != null
+ && mContentRoot.getLayoutParams() instanceof MarginLayoutParams) {
+ MarginLayoutParams lp = (MarginLayoutParams) mContentRoot.getLayoutParams();
+ if (lp.rightMargin != consumedRight || lp.bottomMargin != consumedBottom) {
+ lp.rightMargin = consumedRight;
+ lp.bottomMargin = consumedBottom;
+ mContentRoot.setLayoutParams(lp);
+ }
+ }
+
if (insets != null) {
- insets = insets.consumeStableInsets();
+ insets = insets.consumeStableInsets().replaceSystemWindowInsets(
+ insets.getSystemWindowInsetLeft(),
+ insets.getSystemWindowInsetTop(),
+ insets.getSystemWindowInsetRight() - consumedRight,
+ insets.getSystemWindowInsetBottom() - consumedBottom
+ );
}
return insets;
}
@@ -3381,6 +3419,7 @@
View in = mLayoutInflater.inflate(layoutResource, null);
decor.addView(in, new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT));
+ mContentRoot = (ViewGroup) in;
ViewGroup contentParent = (ViewGroup)findViewById(ID_ANDROID_CONTENT);
if (contentParent == null) {
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index 5874f63..4713a98 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -1521,8 +1521,7 @@
if (ActivityManager.isHighEndGfx()
&& (attrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0) {
- attrs.subtreeSystemUiVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE
- | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+ attrs.subtreeSystemUiVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
}
}
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 3235574..148b9ef 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -1471,14 +1471,7 @@
@Override
public boolean matchesCallFilter(Bundle extras) {
enforceSystemOrSystemUI("INotificationManager.matchesCallFilter");
- return matchesCallFilterAsUser(extras, Binder.getCallingUid());
- }
-
- @Override
- public boolean matchesCallFilterAsUser(Bundle extras, int userId) {
- enforceSystemOrSystemUI("INotificationManager.matchesCallFilter");
- UserHandle userHandle = new UserHandle(userId);
- return mZenModeHelper.matchesCallFilter(userHandle, extras,
+ return mZenModeHelper.matchesCallFilter(UserHandle.getCallingUserHandle(), extras,
mRankingHelper.findExtractor(ValidateNotificationPeople.class));
}
};
diff --git a/services/core/java/com/android/server/notification/ValidateNotificationPeople.java b/services/core/java/com/android/server/notification/ValidateNotificationPeople.java
index f266916..d49dc9a 100644
--- a/services/core/java/com/android/server/notification/ValidateNotificationPeople.java
+++ b/services/core/java/com/android/server/notification/ValidateNotificationPeople.java
@@ -112,6 +112,7 @@
}
public float getContactAffinity(UserHandle userHandle, Bundle extras) {
+ if (DEBUG) Slog.d(TAG, "checking affinity for " + userHandle);
if (extras == null) return NONE;
final String key = Long.toString(System.nanoTime());
final float[] affinityOut = new float[1];