diff --git a/api/current.txt b/api/current.txt
index 6063368b475ce..5b719bbc7b820 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -7596,6 +7596,7 @@ package android.content {
field public static final java.lang.String ACTION_CHOOSER = "android.intent.action.CHOOSER";
field public static final java.lang.String ACTION_CLOSE_SYSTEM_DIALOGS = "android.intent.action.CLOSE_SYSTEM_DIALOGS";
field public static final java.lang.String ACTION_CONFIGURATION_CHANGED = "android.intent.action.CONFIGURATION_CHANGED";
+ field public static final java.lang.String ACTION_CONFIRM_DEVICE_CREDENTIAL = "android.intent.action.CONFIRM_DEVICE_CREDENTIAL";
field public static final java.lang.String ACTION_CREATE_DOCUMENT = "android.intent.action.CREATE_DOCUMENT";
field public static final java.lang.String ACTION_CREATE_SHORTCUT = "android.intent.action.CREATE_SHORTCUT";
field public static final java.lang.String ACTION_DATE_CHANGED = "android.intent.action.DATE_CHANGED";
@@ -7738,6 +7739,7 @@ package android.content {
field public static final java.lang.String EXTRA_CHANGED_PACKAGE_LIST = "android.intent.extra.changed_package_list";
field public static final java.lang.String EXTRA_CHANGED_UID_LIST = "android.intent.extra.changed_uid_list";
field public static final java.lang.String EXTRA_DATA_REMOVED = "android.intent.extra.DATA_REMOVED";
+ field public static final java.lang.String EXTRA_DETAILS = "android.intent.extra.DETAILS";
field public static final java.lang.String EXTRA_DOCK_STATE = "android.intent.extra.DOCK_STATE";
field public static final int EXTRA_DOCK_STATE_CAR = 2; // 0x2
field public static final int EXTRA_DOCK_STATE_DESK = 1; // 0x1
@@ -25539,11 +25541,13 @@ package android.provider {
field public static final java.lang.String ACTION_SOUND_SETTINGS = "android.settings.SOUND_SETTINGS";
field public static final java.lang.String ACTION_SYNC_SETTINGS = "android.settings.SYNC_SETTINGS";
field public static final java.lang.String ACTION_USER_DICTIONARY_SETTINGS = "android.settings.USER_DICTIONARY_SETTINGS";
+ field public static final java.lang.String ACTION_VOICE_CONTROL_AIRPLANE_MODE = "android.settings.VOICE_CONTROL_AIRPLANE_MODE";
field public static final java.lang.String ACTION_WIFI_IP_SETTINGS = "android.settings.WIFI_IP_SETTINGS";
field public static final java.lang.String ACTION_WIFI_SETTINGS = "android.settings.WIFI_SETTINGS";
field public static final java.lang.String ACTION_WIRELESS_SETTINGS = "android.settings.WIRELESS_SETTINGS";
field public static final java.lang.String AUTHORITY = "settings";
field public static final java.lang.String EXTRA_ACCOUNT_TYPES = "account_types";
+ field public static final java.lang.String EXTRA_AIRPLANE_MODE_ENABLED = "airplane_mode_enabled";
field public static final java.lang.String EXTRA_AUTHORITIES = "authorities";
field public static final java.lang.String EXTRA_INPUT_METHOD_ID = "input_method_id";
}
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index ae6047614a7e9..f224f40610e7c 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -1414,6 +1414,21 @@ public class Intent implements Parcelable, Cloneable {
@SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
public static final String ACTION_UNINSTALL_PACKAGE = "android.intent.action.UNINSTALL_PACKAGE";
+ /**
+ * Activity Action: Prompt the user to confirm credentials (pin, pattern or password)
+ * for the current user of the device. Launch this activity using
+ * {@link android.app.Activity#startActivityForResult(Intent, int)} and check if the
+ * result is {@link android.app.Activity#RESULT_OK} for a successful response to the
+ * challenge.
+ * This intent is handled by the system at a high priority and applications cannot intercept
+ * it.
+ * You can use {@link android.app.KeyguardManager#isKeyguardSecure()} to determine if the user will be
+ * prompted.
+ */
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+ public static final String ACTION_CONFIRM_DEVICE_CREDENTIAL = "android.intent.action.CONFIRM_DEVICE_CREDENTIAL";
+
+
/**
* Specify whether the package should be uninstalled for all users.
* @hide because these should not be part of normal application flow.
@@ -3162,10 +3177,16 @@ public class Intent implements Parcelable, Cloneable {
/**
* A CharSequence dialog title to provide to the user when used with a
- * {@link #ACTION_CHOOSER}.
+ * {@link #ACTION_CHOOSER} or {@link #ACTION_CONFIRM_DEVICE_CREDENTIAL}.
*/
public static final String EXTRA_TITLE = "android.intent.extra.TITLE";
+ /**
+ * A CharSequence description to provide to the user when used with
+ * {@link #ACTION_CONFIRM_DEVICE_CREDENTIAL}.
+ */
+ public static final String EXTRA_DETAILS = "android.intent.extra.DETAILS";
+
/**
* A Parcelable[] of {@link Intent} or
* {@link android.content.pm.LabeledIntent} objects as set with
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 48b763cd19e0c..fe201cdec2aba 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -130,6 +130,31 @@ public final class Settings {
public static final String ACTION_AIRPLANE_MODE_SETTINGS =
"android.settings.AIRPLANE_MODE_SETTINGS";
+ /**
+ * Activity Action: Modify Airplane mode settings using the users voice.
+ *
+ * In some cases, a matching Activity may not exist, so ensure you safeguard against this.
+ *
+ * This intent MUST be started using
+ * {@link android.service.voice.VoiceInteractionSession#startVoiceActivity
+ * startVoiceActivity}.
+ *
+ * To tell which state airplane mode should be set to, add the
+ * {@link #EXTRA_AIRPLANE_MODE_ENABLED} extra to this Intent with the state specified.
+ * If there is no extra in this Intent, no changes will be made.
+ *
+ * The activity should verify that
+ * {@link android.app.Activity#isVoiceInteraction isVoiceInteraction} returns true before
+ * modifying the setting.
+ *
+ * Input: Nothing.
+ *
+ * Output: Nothing.
+ */
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+ public static final String ACTION_VOICE_CONTROL_AIRPLANE_MODE =
+ "android.settings.VOICE_CONTROL_AIRPLANE_MODE";
+
/**
* Activity Action: Show settings for accessibility modules.
*
@@ -207,7 +232,6 @@ public final class Settings {
/**
* Activity Action: Show settings to allow configuration of Wi-Fi.
-
*
* In some cases, a matching Activity may not exist, so ensure you
* safeguard against this.
@@ -779,6 +803,33 @@ public final class Settings {
@SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
public static final String ACTION_ZEN_MODE_SETTINGS = "android.settings.ZEN_MODE_SETTINGS";
+ /**
+ * Activity Action: Modify zen mode settings.
+ *
+ * In some cases, a matching Activity may not exist, so ensure you safeguard against this.
+ *
+ * This intent MUST be started using
+ * {@link android.service.voice.VoiceInteractionSession#startVoiceActivity
+ * startVoiceActivity}.
+ *
+ * To tell which state zen mode should be set to, add the
+ * {@link #EXTRA_ZEN_MODE_INTERRUPTION_STATE} extra to this Intent with the state specified.
+ * If there is no extra in this Intent, no changes will be made.
+ *
+ * The Activity should verify that
+ * {@link android.app.Activity#isVoiceInteraction isVoiceInteraction}.
+ * returns true before modifying the setting.
+ *
+ * Input: Nothing.
+ *
+ * Output: Nothing.
+ *
+ * @hide
+ */
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+ public static final String ACTION_VOICE_CONTROL_ZEN_MODE =
+ "android.settings.VOICE_CONTROL_ZEN_MODE";
+
/**
* Activity Action: Show the regulatory information screen for the device.
*
@@ -891,6 +942,27 @@ public final class Settings {
public static final String EXTRA_INPUT_METHOD_ID = "input_method_id";
+ /**
+ * Activity Extra: Enable or disable Airplane Mode.
+ *
+ * This can be passed as an extra field to the {@link #ACTION_VOICE_CONTROL_AIRPLANE_MODE}
+ * intent as a boolean.
+ */
+ public static final String EXTRA_AIRPLANE_MODE_ENABLED = "airplane_mode_enabled";
+
+ /**
+ * Activity Extra: Modify the zen mode interruption state.
+ *
+ * This can be passed as an extra field to the {@link #ACTION_VOICE_CONTROL_ZEN_MODE}
+ * intent as an integer. The value should be one of
+ * {@link android.provider.Settings.Global#ZEN_MODE_OFF},
+ * {@link android.provider.Settings.Global#ZEN_MODE_IMPORTANT_INTERRUPTIONS},
+ * {@link android.provider.Settings.Global#ZEN_MODE_NO_INTERRUPTIONS}.
+ *
+ * @hide
+ */
+ public static final String EXTRA_ZEN_MODE_INTERRUPTION_STATE = "zen_mode_interruption_state";
+
private static final String JID_RESOURCE_PREFIX = "android";
public static final String AUTHORITY = "settings";
diff --git a/core/java/android/webkit/WebViewFactory.java b/core/java/android/webkit/WebViewFactory.java
index 2c7b3ebccdaf3..0401fb7729f5c 100644
--- a/core/java/android/webkit/WebViewFactory.java
+++ b/core/java/android/webkit/WebViewFactory.java
@@ -16,6 +16,9 @@
package android.webkit;
+import android.app.AppGlobals;
+import android.content.Context;
+import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Process;
import android.os.RemoteException;
@@ -100,9 +103,14 @@ public final class WebViewFactory {
private static Class getFactoryClass() throws ClassNotFoundException {
try {
- return (Class) Class.forName(CHROMIUM_WEBVIEW_FACTORY);
- } catch (ClassNotFoundException e) {
- Log.e(LOGTAG, "Chromium WebView does not exist");
+ Context webViewContext = AppGlobals.getInitialApplication().createPackageContext(
+ getWebViewPackageName(),
+ Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);
+ ClassLoader clazzLoader = webViewContext.getClassLoader();
+ return (Class) Class.forName(CHROMIUM_WEBVIEW_FACTORY, true,
+ clazzLoader);
+ } catch (PackageManager.NameNotFoundException e) {
+ Log.e(LOGTAG, "Chromium WebView package does not exist");
return (Class) Class.forName(NULL_WEBVIEW_FACTORY);
}
}
diff --git a/core/jni/android_hardware_camera2_DngCreator.cpp b/core/jni/android_hardware_camera2_DngCreator.cpp
index 3a3328f75230f..eaadfb205c742 100644
--- a/core/jni/android_hardware_camera2_DngCreator.cpp
+++ b/core/jni/android_hardware_camera2_DngCreator.cpp
@@ -1173,8 +1173,8 @@ static void DngCreator_init(JNIEnv* env, jobject thiz, jobject characteristicsPt
calibrationTransform1[ctr++] = entry1.data.r[i].denominator;
}
- BAIL_IF_INVALID(writer->addEntry(TAG_CAMERACALIBRATION1, entry1.count, calibrationTransform1,
- TIFF_IFD_0), env, TAG_CAMERACALIBRATION1, writer);
+ BAIL_IF_INVALID(writer->addEntry(TAG_CAMERACALIBRATION1, entry1.count,
+ calibrationTransform1, TIFF_IFD_0), env, TAG_CAMERACALIBRATION1, writer);
if (!singleIlluminant) {
camera_metadata_entry entry2 =
@@ -1188,8 +1188,8 @@ static void DngCreator_init(JNIEnv* env, jobject thiz, jobject characteristicsPt
calibrationTransform2[ctr++] = entry2.data.r[i].denominator;
}
- BAIL_IF_INVALID(writer->addEntry(TAG_CAMERACALIBRATION2, entry2.count, calibrationTransform1,
- TIFF_IFD_0), env, TAG_CAMERACALIBRATION2, writer);
+ BAIL_IF_INVALID(writer->addEntry(TAG_CAMERACALIBRATION2, entry2.count,
+ calibrationTransform1, TIFF_IFD_0), env, TAG_CAMERACALIBRATION2, writer);
}
}
@@ -1293,6 +1293,21 @@ static void DngCreator_init(JNIEnv* env, jobject thiz, jobject characteristicsPt
TAG_UNIQUECAMERAMODEL, writer);
}
+ {
+ // Setup sensor noise model
+ camera_metadata_entry entry =
+ results.find(ANDROID_SENSOR_NOISE_PROFILE);
+
+ if (entry.count > 0) {
+ BAIL_IF_INVALID(writer->addEntry(TAG_NOISEPROFILE, entry.count,
+ entry.data.d, TIFF_IFD_0), env,
+ TAG_NOISEPROFILE, writer);
+ } else {
+ ALOGW("%s: No noise profile found in result metadata. Image quality may be reduced.",
+ __FUNCTION__);
+ }
+ }
+
{
// Setup opcode List 2
camera_metadata_entry entry1 =
diff --git a/data/fonts/Android.mk b/data/fonts/Android.mk
index 9f6b64cb921f5..80fb1fdd3a8ab 100644
--- a/data/fonts/Android.mk
+++ b/data/fonts/Android.mk
@@ -47,14 +47,8 @@ extra_font_files := \
DroidSans-Bold.ttf
################################
-# On space-constrained devices, we include a subset of fonts:
-ifeq ($(SMALLER_FONT_FOOTPRINT),true)
-
-droidsans_fallback_src := DroidSansFallback.ttf
-
-else # !SMALLER_FONT_FOOTPRINT
-
-droidsans_fallback_src := DroidSansFallbackFull.ttf
+# Do not include Motoya on space-constrained devices
+ifneq ($(SMALLER_FONT_FOOTPRINT),true)
include $(CLEAR_VARS)
LOCAL_MODULE := MTLmr3m.ttf
@@ -65,24 +59,44 @@ LOCAL_MODULE_PATH := $(TARGET_OUT)/fonts
include $(BUILD_PREBUILT)
extra_font_files += MTLmr3m.ttf
-endif # SMALLER_FONT_FOOTPRINT
+endif # !SMALLER_FONT_FOOTPRINT
################################
+# Use DroidSansMono to hang extra_font_files on
+include $(CLEAR_VARS)
+LOCAL_MODULE := DroidSansMono.ttf
+LOCAL_SRC_FILES := $(LOCAL_MODULE)
+LOCAL_MODULE_CLASS := ETC
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_PATH := $(TARGET_OUT)/fonts
+LOCAL_REQUIRED_MODULES := $(extra_font_files)
+include $(BUILD_PREBUILT)
+extra_font_files :=
+
+################################
+# Include DroidSansFallback only on non-EXTENDED_FONT_FOOTPRINT builds
+ifneq ($(EXTENDED_FONT_FOOTPRINT),true)
+
+# Include a subset of DroidSansFallback on SMALLER_FONT_FOOTPRINT build
+ifeq ($(SMALLER_FONT_FOOTPRINT),true)
+droidsans_fallback_src := DroidSansFallback.ttf
+else # !SMALLER_FONT_FOOTPRINT
+droidsans_fallback_src := DroidSansFallbackFull.ttf
+endif # SMALLER_FONT_FOOTPRINT
+
include $(CLEAR_VARS)
LOCAL_MODULE := DroidSansFallback.ttf
LOCAL_SRC_FILES := $(droidsans_fallback_src)
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_PATH := $(TARGET_OUT)/fonts
-LOCAL_REQUIRED_MODULES := $(extra_font_files)
include $(BUILD_PREBUILT)
-
-font_symlink_src :=
-font_symlink :=
droidsans_fallback_src :=
-extra_font_files :=
+
+endif # !EXTENDED_FONT_FOOTPRINT
+
################################
-# Build the rest font files as prebuilt.
+# Build the rest of font files as prebuilt.
# $(1): The source file name in LOCAL_PATH.
# It also serves as the module name and the dest file name.
@@ -101,7 +115,6 @@ font_src_files := \
Roboto-Bold.ttf \
Roboto-Italic.ttf \
Roboto-BoldItalic.ttf \
- DroidSansMono.ttf \
Clockopia.ttf \
AndroidClock.ttf \
AndroidClock_Highlight.ttf \
diff --git a/data/fonts/DroidKufi-Bold.ttf b/data/fonts/DroidKufi-Bold.ttf
deleted file mode 100644
index 650919e2601de..0000000000000
Binary files a/data/fonts/DroidKufi-Bold.ttf and /dev/null differ
diff --git a/data/fonts/DroidKufi-Regular.ttf b/data/fonts/DroidKufi-Regular.ttf
deleted file mode 100644
index af859750b6997..0000000000000
Binary files a/data/fonts/DroidKufi-Regular.ttf and /dev/null differ
diff --git a/data/fonts/DroidSans-Bold.ttf b/data/fonts/DroidSans-Bold.ttf
deleted file mode 100644
index d065b64eb1863..0000000000000
Binary files a/data/fonts/DroidSans-Bold.ttf and /dev/null differ
diff --git a/data/fonts/DroidSans.ttf b/data/fonts/DroidSans.ttf
deleted file mode 100644
index ad1efca88aed8..0000000000000
Binary files a/data/fonts/DroidSans.ttf and /dev/null differ
diff --git a/data/fonts/DroidSansFallbackFull.ttf b/data/fonts/DroidSansFallbackFull.ttf
index 135723c682939..1dfcc330ebf86 100644
Binary files a/data/fonts/DroidSansFallbackFull.ttf and b/data/fonts/DroidSansFallbackFull.ttf differ
diff --git a/data/fonts/DroidSansJapanese.ttf b/data/fonts/DroidSansJapanese.ttf
deleted file mode 100644
index 412fa3de05e84..0000000000000
Binary files a/data/fonts/DroidSansJapanese.ttf and /dev/null differ
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 64df6c8c75f7b..41f89c254c14e 100755
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -1934,7 +1934,9 @@ status_t OpenGLRenderer::drawRenderNode(RenderNode* renderNode, Rect& dirty, int
return deferredList.flush(*this, dirty) | status;
}
- return DrawGlInfo::kStatusDone;
+ // Even if there is no drawing command(Ex: invisible),
+ // it still needs startFrame to clear buffer and start tiling.
+ return startFrame();
}
void OpenGLRenderer::drawAlphaBitmap(Texture* texture, float left, float top, const SkPaint* paint) {
diff --git a/packages/Keyguard/res/values-zh-rCN/strings.xml b/packages/Keyguard/res/values-zh-rCN/strings.xml
index 09f521a66a759..1e124b8b1393b 100644
--- a/packages/Keyguard/res/values-zh-rCN/strings.xml
+++ b/packages/Keyguard/res/values-zh-rCN/strings.xml
@@ -22,9 +22,9 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
"Keyguard"
"输入 PIN 码"
- "请输入 SIM 卡 PUK 码和新的 PIN 码"
- "SIM 卡 PUK 码"
- "新 SIM 卡 PIN 码"
+ "请输入SIM卡PUK码和新的 PIN 码"
+ "SIM卡PUK码"
+ "新SIM卡PIN码"
"触摸可输入密码"
"输入密码以解锁"
"输入 PIN 进行解锁"
@@ -36,16 +36,16 @@
"请连接充电器。"
"按“菜单”键解锁。"
"网络已锁定"
- "无 SIM 卡"
- "平板电脑中没有 SIM 卡。"
- "手机中没有 SIM 卡。"
- "请插入 SIM 卡。"
- "SIM 卡缺失或无法读取,请插入 SIM 卡。"
- "SIM 卡无法使用。"
- "您的 SIM 卡已永久停用。\n请与您的无线服务提供商联系,以便重新获取一张 SIM 卡。"
- "SIM 卡已被锁定。"
- "SIM 卡已被 PUK 锁定。"
- "正在解锁 SIM 卡..."
+ "无SIM卡"
+ "平板电脑中没有SIM卡。"
+ "手机中没有SIM卡。"
+ "请插入SIM卡。"
+ "SIM卡缺失或无法读取,请插入SIM卡。"
+ "SIM卡无法使用。"
+ "您的SIM卡已永久停用。\n请与您的无线服务提供商联系,以便重新获取一张SIM卡。"
+ "SIM卡已被锁定。"
+ "SIM卡已被PUK码锁定。"
+ "正在解锁SIM卡..."
"%1$s。%3$d的小部件%2$d。"
"添加小部件。"
"空白"
@@ -106,16 +106,16 @@
"PIN 有误"
"请在 %d 秒后重试。"
"绘制您的图案"
- "输入 SIM PIN"
+ "输入SIM卡PIN码"
"输入 PIN"
"输入密码"
- "SIM 卡已被停用,需要输入 PUK 码才能继续使用。有关详情,请联系您的运营商。"
+ "SIM卡已被停用,需要输入PUK码才能继续使用。有关详情,请联系您的运营商。"
"请输入所需 PIN 码"
"请确认所需 PIN 码"
- "正在解锁 SIM 卡..."
+ "正在解锁SIM卡..."
"请输入 4 至 8 位数的 PIN。"
- "PUK 码应至少包含 8 位数字。"
- "请重新输入正确的 PUK 码。如果尝试错误次数过多,SIM 卡将永久停用。"
+ "PUK码应至少包含8位数字。"
+ "请重新输入正确的PUK码。如果尝试错误次数过多,SIM卡将永久停用。"
"PIN 码不匹配"
"图案尝试次数过多"
"要解锁,请登录您的 Google 帐户。"
@@ -136,18 +136,18 @@
"您已经 %d 次错误地绘制了解锁图案。如果再尝试 %d 次后仍不成功,系统就会要求您使用自己的电子邮件帐户解锁手机。\n\n请在 %d 秒后重试。"
" — "
"删除"
- "SIM 卡 PIN 码不正确,您现在必须联系运营商为您解锁设备。"
+ "SIM卡PIN码不正确,您现在必须联系运营商为您解锁设备。"
- - "SIM 卡 PIN 码不正确,您还有%d次尝试机会。如果仍然失败,则必须联系运营商帮您解锁设备。"
- - "SIM 卡 PIN 码不正确,您还有%d次尝试机会。"
+ - "SIM卡PIN码不正确,您还有%d次尝试机会。如果仍然失败,则必须联系运营商帮您解锁设备。"
+ - "SIM卡PIN码不正确,您还有%d次尝试机会。"
- "SIM 卡无法使用,请与您的运营商联系。"
+ "SIM卡无法使用,请与您的运营商联系。"
- - "SIM 卡 PUK 码不正确,您还有%d次尝试机会。如果仍然失败,SIM 卡将永远无法使用。"
- - "SIM 卡 PUK 码不正确,您还有%d次尝试机会。如果仍然失败,SIM 卡将永远无法使用。"
+ - "SIM卡PUK码不正确,您还有%d次尝试机会。如果仍然失败,SIM卡将永远无法使用。"
+ - "SIM卡PUK码不正确,您还有%d次尝试机会。如果仍然失败,SIM卡将永远无法使用。"
- "SIM 卡 PIN 码操作失败!"
- "SIM 卡 PUK 码操作失败!"
+ "SIM卡PIN码操作失败!"
+ "SIM卡PUK码操作失败!"
"代码正确!"
"“上一曲”按钮"
"“下一曲”按钮"
diff --git a/packages/SystemUI/res/layout/status_bar.xml b/packages/SystemUI/res/layout/status_bar.xml
index 595d731d56d01..19dc36ddda05a 100644
--- a/packages/SystemUI/res/layout/status_bar.xml
+++ b/packages/SystemUI/res/layout/status_bar.xml
@@ -87,7 +87,8 @@
android:layout_height="match_parent"
android:gravity="center_vertical"
>
- rootActivityNdx; --i ) {
ActivityRecord target = activities.get(i);
+ if (target.frontOfTask)
+ break;
final int flags = target.info.flags;
final boolean finishOnTaskLaunch =
@@ -2223,6 +2233,8 @@ final class ActivityStack {
// Do not operate on or below the effective root Activity.
for (int i = numActivities - 1; i > rootActivityNdx; --i) {
ActivityRecord target = activities.get(i);
+ if (target.frontOfTask)
+ break;
final int flags = target.info.flags;
boolean finishOnTaskLaunch = (flags & ActivityInfo.FLAG_FINISH_ON_TASK_LAUNCH) != 0;
diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java
index cdcc74b2685bc..4e554eb2c4bba 100644
--- a/services/core/java/com/android/server/am/BroadcastQueue.java
+++ b/services/core/java/com/android/server/am/BroadcastQueue.java
@@ -424,11 +424,16 @@ public final class BroadcastQueue {
Intent intent, int resultCode, String data, Bundle extras,
boolean ordered, boolean sticky, int sendingUser) throws RemoteException {
// Send the intent to the receiver asynchronously using one-way binder calls.
- if (app != null && app.thread != null) {
- // If we have an app thread, do the call through that so it is
- // correctly ordered with other one-way calls.
- app.thread.scheduleRegisteredReceiver(receiver, intent, resultCode,
- data, extras, ordered, sticky, sendingUser, app.repProcState);
+ if (app != null) {
+ if (app.thread != null) {
+ // If we have an app thread, do the call through that so it is
+ // correctly ordered with other one-way calls.
+ app.thread.scheduleRegisteredReceiver(receiver, intent, resultCode,
+ data, extras, ordered, sticky, sendingUser, app.repProcState);
+ } else {
+ // Application has died. Receiver doesn't exist.
+ throw new RemoteException("app.thread must not be null");
+ }
} else {
receiver.performReceive(intent, resultCode, data, extras, ordered,
sticky, sendingUser);
@@ -670,6 +675,7 @@ public final class BroadcastQueue {
// (local and remote) isn't kept in the mBroadcastHistory.
r.resultTo = null;
} catch (RemoteException e) {
+ r.resultTo = null;
Slog.w(TAG, "Failure ["
+ mQueueName + "] sending broadcast result of "
+ r.intent, e);
diff --git a/services/core/java/com/android/server/trust/TrustManagerService.java b/services/core/java/com/android/server/trust/TrustManagerService.java
index 6f72b94563264..14436aad8e1bd 100644
--- a/services/core/java/com/android/server/trust/TrustManagerService.java
+++ b/services/core/java/com/android/server/trust/TrustManagerService.java
@@ -372,7 +372,7 @@ public class TrustManagerService extends SystemService {
private void removeListener(ITrustListener listener) {
for (int i = 0; i < mTrustListeners.size(); i++) {
if (mTrustListeners.get(i).asBinder() == listener.asBinder()) {
- mTrustListeners.get(i);
+ mTrustListeners.remove(i);
return;
}
}
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
index 70a7be8e1d181..03b5211b362fc 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
@@ -619,39 +619,36 @@ public final class BridgeContext extends Context {
}
if (value != null) {
- if ((value.getFirst() == ResourceType.STYLE)
- || (value.getFirst() == ResourceType.ATTR)) {
- // look for the style in the current theme, and its parent:
- ResourceValue item = mRenderResources.findItemInTheme(value.getSecond(),
+ if ((value.getFirst() == ResourceType.STYLE)) {
+ // look for the style in all resources:
+ StyleResourceValue item = mRenderResources.getStyle(value.getSecond(),
isFrameworkRes);
if (item != null) {
- if (item instanceof StyleResourceValue) {
- if (defaultPropMap != null) {
- defaultPropMap.put("style", item.getName());
- }
-
- defStyleValues = (StyleResourceValue)item;
+ if (defaultPropMap != null) {
+ defaultPropMap.put("style", item.getName());
}
+
+ defStyleValues = item;
} else {
Bridge.getLog().error(null,
String.format(
"Style with id 0x%x (resolved to '%s') does not exist.",
defStyleRes, value.getSecond()),
- null /*data*/);
+ null);
}
} else {
Bridge.getLog().error(null,
String.format(
- "Resouce id 0x%x is not of type STYLE (instead %s)",
+ "Resource id 0x%x is not of type STYLE (instead %s)",
defStyleRes, value.getFirst().toString()),
- null /*data*/);
+ null);
}
} else {
Bridge.getLog().error(null,
String.format(
"Failed to find style with id 0x%x in current theme",
defStyleRes),
- null /*data*/);
+ null);
}
}
diff --git a/tools/obbtool/Android.mk b/tools/obbtool/Android.mk
index 9ff56d634c21d..99a56710371a9 100644
--- a/tools/obbtool/Android.mk
+++ b/tools/obbtool/Android.mk
@@ -13,7 +13,7 @@ include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
Main.cpp
-LOCAL_CFLAGS := -Wall -Werror
+LOCAL_CFLAGS := -Wall -Werror -Wno-mismatched-tags
#LOCAL_C_INCLUDES +=
@@ -36,7 +36,7 @@ include $(CLEAR_VARS)
LOCAL_MODULE := pbkdf2gen
LOCAL_MODULE_TAGS := optional
-LOCAL_CFLAGS := -Wall -Werror
+LOCAL_CFLAGS := -Wall -Werror -Wno-mismatched-tags
LOCAL_SRC_FILES := pbkdf2gen.cpp
LOCAL_LDLIBS += -ldl
LOCAL_C_INCLUDES := external/openssl/include $(LOCAL_C_INCLUDES)