diff options
271 files changed, 5306 insertions, 6018 deletions
diff --git a/api/current.txt b/api/current.txt index ad240bc95f7c..5670291fd49d 100644 --- a/api/current.txt +++ b/api/current.txt @@ -4171,7 +4171,6 @@ package android.app { method public abstract void onActivityCreated(android.app.Activity, android.os.Bundle); method public abstract void onActivityDestroyed(android.app.Activity); method public abstract void onActivityPaused(android.app.Activity); - method public default void onActivityPreCreated(android.app.Activity, android.os.Bundle); method public abstract void onActivityResumed(android.app.Activity); method public abstract void onActivitySaveInstanceState(android.app.Activity, android.os.Bundle); method public abstract void onActivityStarted(android.app.Activity); @@ -6509,6 +6508,7 @@ package android.app.assist { method public float getAlpha(); method public android.view.autofill.AutoFillId getAutoFillId(); method public android.view.autofill.AutoFillType getAutoFillType(); + method public android.view.autofill.AutoFillValue getAutoFillValue(); method public android.app.assist.AssistStructure.ViewNode getChildAt(int); method public int getChildCount(); method public java.lang.String getClassName(); @@ -9126,6 +9126,7 @@ package android.content { field public static final java.lang.String EXTRA_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER"; field public static final java.lang.String EXTRA_PROCESS_TEXT = "android.intent.extra.PROCESS_TEXT"; field public static final java.lang.String EXTRA_PROCESS_TEXT_READONLY = "android.intent.extra.PROCESS_TEXT_READONLY"; + field public static final java.lang.String EXTRA_QUICK_VIEW_PLAIN = "android.intent.extra.QUICK_VIEW_PLAIN"; field public static final java.lang.String EXTRA_QUIET_MODE = "android.intent.extra.QUIET_MODE"; field public static final java.lang.String EXTRA_REFERRER = "android.intent.extra.REFERRER"; field public static final java.lang.String EXTRA_REFERRER_NAME = "android.intent.extra.REFERRER_NAME"; @@ -22161,6 +22162,7 @@ package android.media { } public static final class MediaMuxer.OutputFormat { + field public static final int MUXER_OUTPUT_3GPP = 2; // 0x2 field public static final int MUXER_OUTPUT_MPEG_4 = 0; // 0x0 field public static final int MUXER_OUTPUT_WEBM = 1; // 0x1 } @@ -35877,7 +35879,7 @@ package android.service.autofill { public final class SaveCallback { method public void onFailure(java.lang.CharSequence); - method public void onSuccess(android.view.autofill.AutoFillId[]); + method public void onSuccess(); } } @@ -44577,8 +44579,6 @@ package android.view { field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0 field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1 field public static final android.util.Property<android.view.View, java.lang.Float> ALPHA; - field public static final int AUTO_FILL_FLAG_TYPE_FILL = 268435456; // 0x10000000 - field public static final int AUTO_FILL_FLAG_TYPE_SAVE = 536870912; // 0x20000000 field public static final int DRAG_FLAG_GLOBAL = 256; // 0x100 field public static final int DRAG_FLAG_GLOBAL_PERSISTABLE_URI_PERMISSION = 64; // 0x40 field public static final int DRAG_FLAG_GLOBAL_PREFIX_URI_PERMISSION = 128; // 0x80 @@ -45214,7 +45214,7 @@ package android.view { method public abstract int addChildCount(int); method public abstract void asyncCommit(); method public abstract android.view.ViewStructure asyncNewChild(int); - method public abstract android.view.ViewStructure asyncNewChild(int, int); + method public abstract android.view.ViewStructure asyncNewChild(int, int, int); method public abstract int getChildCount(); method public abstract android.os.Bundle getExtras(); method public abstract java.lang.CharSequence getHint(); @@ -45223,11 +45223,12 @@ package android.view { method public abstract int getTextSelectionStart(); method public abstract boolean hasExtras(); method public abstract android.view.ViewStructure newChild(int); - method public abstract android.view.ViewStructure newChild(int, int); + method public abstract android.view.ViewStructure newChild(int, int, int); method public abstract void setAccessibilityFocused(boolean); method public abstract void setActivated(boolean); method public abstract void setAlpha(float); method public abstract void setAutoFillType(android.view.autofill.AutoFillType); + method public abstract void setAutoFillValue(android.view.autofill.AutoFillValue); method public abstract void setCheckable(boolean); method public abstract void setChecked(boolean); method public abstract void setChildCount(int); @@ -45250,6 +45251,7 @@ package android.view { method public abstract void setTextStyle(float, int, int, int); method public abstract void setTransformation(android.graphics.Matrix); method public abstract void setVisibility(int); + field public static final int AUTO_FILL_FLAG_SANITIZED = 1; // 0x1 } public final class ViewStub extends android.view.View { @@ -45683,6 +45685,7 @@ package android.view { field public static final int TYPE_APPLICATION = 2; // 0x2 field public static final int TYPE_APPLICATION_ATTACHED_DIALOG = 1003; // 0x3eb field public static final int TYPE_APPLICATION_MEDIA = 1001; // 0x3e9 + field public static final int TYPE_APPLICATION_OVERLAY = 2038; // 0x7f6 field public static final int TYPE_APPLICATION_PANEL = 1000; // 0x3e8 field public static final int TYPE_APPLICATION_STARTING = 3; // 0x3 field public static final int TYPE_APPLICATION_SUB_PANEL = 1002; // 0x3ea @@ -45692,17 +45695,17 @@ package android.view { field public static final int TYPE_INPUT_METHOD = 2011; // 0x7db field public static final int TYPE_INPUT_METHOD_DIALOG = 2012; // 0x7dc field public static final int TYPE_KEYGUARD_DIALOG = 2009; // 0x7d9 - field public static final int TYPE_PHONE = 2002; // 0x7d2 - field public static final int TYPE_PRIORITY_PHONE = 2007; // 0x7d7 + field public static final deprecated int TYPE_PHONE = 2002; // 0x7d2 + field public static final deprecated int TYPE_PRIORITY_PHONE = 2007; // 0x7d7 field public static final int TYPE_PRIVATE_PRESENTATION = 2030; // 0x7ee field public static final int TYPE_SEARCH_BAR = 2001; // 0x7d1 field public static final int TYPE_STATUS_BAR = 2000; // 0x7d0 field public static final int TYPE_STATUS_BAR_PANEL = 2014; // 0x7de - field public static final int TYPE_SYSTEM_ALERT = 2003; // 0x7d3 + field public static final deprecated int TYPE_SYSTEM_ALERT = 2003; // 0x7d3 field public static final int TYPE_SYSTEM_DIALOG = 2008; // 0x7d8 - field public static final int TYPE_SYSTEM_ERROR = 2010; // 0x7da - field public static final int TYPE_SYSTEM_OVERLAY = 2006; // 0x7d6 - field public static final int TYPE_TOAST = 2005; // 0x7d5 + field public static final deprecated int TYPE_SYSTEM_ERROR = 2010; // 0x7da + field public static final deprecated int TYPE_SYSTEM_OVERLAY = 2006; // 0x7d6 + field public static final deprecated int TYPE_TOAST = 2005; // 0x7d5 field public static final int TYPE_WALLPAPER = 2013; // 0x7dd field public float alpha; field public float buttonBrightness; @@ -46472,6 +46475,7 @@ package android.view.autofill { } public final class AutoFillManager { + method public void onValueChanged(android.view.View, android.view.autofill.AutoFillValue); method public void updateAutoFillInput(android.view.View, int); method public void updateAutoFillInput(android.view.View, int, android.graphics.Rect, int); field public static final int FLAG_UPDATE_UI_HIDE = 2; // 0x2 diff --git a/api/system-current.txt b/api/system-current.txt index 95cd81c1202a..a0876e17bd98 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -4313,7 +4313,6 @@ package android.app { method public abstract void onActivityCreated(android.app.Activity, android.os.Bundle); method public abstract void onActivityDestroyed(android.app.Activity); method public abstract void onActivityPaused(android.app.Activity); - method public default void onActivityPreCreated(android.app.Activity, android.os.Bundle); method public abstract void onActivityResumed(android.app.Activity); method public abstract void onActivitySaveInstanceState(android.app.Activity, android.os.Bundle); method public abstract void onActivityStarted(android.app.Activity); @@ -6742,6 +6741,7 @@ package android.app.assist { method public float getAlpha(); method public android.view.autofill.AutoFillId getAutoFillId(); method public android.view.autofill.AutoFillType getAutoFillType(); + method public android.view.autofill.AutoFillValue getAutoFillValue(); method public android.app.assist.AssistStructure.ViewNode getChildAt(int); method public int getChildCount(); method public java.lang.String getClassName(); @@ -9542,6 +9542,7 @@ package android.content { field public static final java.lang.String EXTRA_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER"; field public static final java.lang.String EXTRA_PROCESS_TEXT = "android.intent.extra.PROCESS_TEXT"; field public static final java.lang.String EXTRA_PROCESS_TEXT_READONLY = "android.intent.extra.PROCESS_TEXT_READONLY"; + field public static final java.lang.String EXTRA_QUICK_VIEW_PLAIN = "android.intent.extra.QUICK_VIEW_PLAIN"; field public static final java.lang.String EXTRA_QUIET_MODE = "android.intent.extra.QUIET_MODE"; field public static final java.lang.String EXTRA_REFERRER = "android.intent.extra.REFERRER"; field public static final java.lang.String EXTRA_REFERRER_NAME = "android.intent.extra.REFERRER_NAME"; @@ -23767,6 +23768,7 @@ package android.media { } public static final class MediaMuxer.OutputFormat { + field public static final int MUXER_OUTPUT_3GPP = 2; // 0x2 field public static final int MUXER_OUTPUT_MPEG_4 = 0; // 0x0 field public static final int MUXER_OUTPUT_WEBM = 1; // 0x1 } @@ -38908,7 +38910,7 @@ package android.service.autofill { public final class SaveCallback { method public void onFailure(java.lang.CharSequence); - method public void onSuccess(android.view.autofill.AutoFillId[]); + method public void onSuccess(); } } @@ -47983,8 +47985,6 @@ package android.view { field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0 field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1 field public static final android.util.Property<android.view.View, java.lang.Float> ALPHA; - field public static final int AUTO_FILL_FLAG_TYPE_FILL = 268435456; // 0x10000000 - field public static final int AUTO_FILL_FLAG_TYPE_SAVE = 536870912; // 0x20000000 field public static final int DRAG_FLAG_GLOBAL = 256; // 0x100 field public static final int DRAG_FLAG_GLOBAL_PERSISTABLE_URI_PERMISSION = 64; // 0x40 field public static final int DRAG_FLAG_GLOBAL_PREFIX_URI_PERMISSION = 128; // 0x80 @@ -48620,7 +48620,7 @@ package android.view { method public abstract int addChildCount(int); method public abstract void asyncCommit(); method public abstract android.view.ViewStructure asyncNewChild(int); - method public abstract android.view.ViewStructure asyncNewChild(int, int); + method public abstract android.view.ViewStructure asyncNewChild(int, int, int); method public abstract int getChildCount(); method public abstract android.os.Bundle getExtras(); method public abstract java.lang.CharSequence getHint(); @@ -48629,11 +48629,12 @@ package android.view { method public abstract int getTextSelectionStart(); method public abstract boolean hasExtras(); method public abstract android.view.ViewStructure newChild(int); - method public abstract android.view.ViewStructure newChild(int, int); + method public abstract android.view.ViewStructure newChild(int, int, int); method public abstract void setAccessibilityFocused(boolean); method public abstract void setActivated(boolean); method public abstract void setAlpha(float); method public abstract void setAutoFillType(android.view.autofill.AutoFillType); + method public abstract void setAutoFillValue(android.view.autofill.AutoFillValue); method public abstract void setCheckable(boolean); method public abstract void setChecked(boolean); method public abstract void setChildCount(int); @@ -48656,6 +48657,7 @@ package android.view { method public abstract void setTextStyle(float, int, int, int); method public abstract void setTransformation(android.graphics.Matrix); method public abstract void setVisibility(int); + field public static final int AUTO_FILL_FLAG_SANITIZED = 1; // 0x1 } public final class ViewStub extends android.view.View { @@ -49092,6 +49094,7 @@ package android.view { field public static final int TYPE_APPLICATION = 2; // 0x2 field public static final int TYPE_APPLICATION_ATTACHED_DIALOG = 1003; // 0x3eb field public static final int TYPE_APPLICATION_MEDIA = 1001; // 0x3e9 + field public static final int TYPE_APPLICATION_OVERLAY = 2038; // 0x7f6 field public static final int TYPE_APPLICATION_PANEL = 1000; // 0x3e8 field public static final int TYPE_APPLICATION_STARTING = 3; // 0x3 field public static final int TYPE_APPLICATION_SUB_PANEL = 1002; // 0x3ea @@ -49101,17 +49104,17 @@ package android.view { field public static final int TYPE_INPUT_METHOD = 2011; // 0x7db field public static final int TYPE_INPUT_METHOD_DIALOG = 2012; // 0x7dc field public static final int TYPE_KEYGUARD_DIALOG = 2009; // 0x7d9 - field public static final int TYPE_PHONE = 2002; // 0x7d2 - field public static final int TYPE_PRIORITY_PHONE = 2007; // 0x7d7 + field public static final deprecated int TYPE_PHONE = 2002; // 0x7d2 + field public static final deprecated int TYPE_PRIORITY_PHONE = 2007; // 0x7d7 field public static final int TYPE_PRIVATE_PRESENTATION = 2030; // 0x7ee field public static final int TYPE_SEARCH_BAR = 2001; // 0x7d1 field public static final int TYPE_STATUS_BAR = 2000; // 0x7d0 field public static final int TYPE_STATUS_BAR_PANEL = 2014; // 0x7de - field public static final int TYPE_SYSTEM_ALERT = 2003; // 0x7d3 + field public static final deprecated int TYPE_SYSTEM_ALERT = 2003; // 0x7d3 field public static final int TYPE_SYSTEM_DIALOG = 2008; // 0x7d8 - field public static final int TYPE_SYSTEM_ERROR = 2010; // 0x7da - field public static final int TYPE_SYSTEM_OVERLAY = 2006; // 0x7d6 - field public static final int TYPE_TOAST = 2005; // 0x7d5 + field public static final deprecated int TYPE_SYSTEM_ERROR = 2010; // 0x7da + field public static final deprecated int TYPE_SYSTEM_OVERLAY = 2006; // 0x7d6 + field public static final deprecated int TYPE_TOAST = 2005; // 0x7d5 field public static final int TYPE_WALLPAPER = 2013; // 0x7dd field public float alpha; field public float buttonBrightness; @@ -49881,6 +49884,7 @@ package android.view.autofill { } public final class AutoFillManager { + method public void onValueChanged(android.view.View, android.view.autofill.AutoFillValue); method public void updateAutoFillInput(android.view.View, int); method public void updateAutoFillInput(android.view.View, int, android.graphics.Rect, int); field public static final int FLAG_UPDATE_UI_HIDE = 2; // 0x2 diff --git a/api/test-current.txt b/api/test-current.txt index 9d8f5c668f25..74f279e74206 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -4181,7 +4181,6 @@ package android.app { method public abstract void onActivityCreated(android.app.Activity, android.os.Bundle); method public abstract void onActivityDestroyed(android.app.Activity); method public abstract void onActivityPaused(android.app.Activity); - method public default void onActivityPreCreated(android.app.Activity, android.os.Bundle); method public abstract void onActivityResumed(android.app.Activity); method public abstract void onActivitySaveInstanceState(android.app.Activity, android.os.Bundle); method public abstract void onActivityStarted(android.app.Activity); @@ -6532,6 +6531,7 @@ package android.app.assist { method public float getAlpha(); method public android.view.autofill.AutoFillId getAutoFillId(); method public android.view.autofill.AutoFillType getAutoFillType(); + method public android.view.autofill.AutoFillValue getAutoFillValue(); method public android.app.assist.AssistStructure.ViewNode getChildAt(int); method public int getChildCount(); method public java.lang.String getClassName(); @@ -9152,6 +9152,7 @@ package android.content { field public static final java.lang.String EXTRA_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER"; field public static final java.lang.String EXTRA_PROCESS_TEXT = "android.intent.extra.PROCESS_TEXT"; field public static final java.lang.String EXTRA_PROCESS_TEXT_READONLY = "android.intent.extra.PROCESS_TEXT_READONLY"; + field public static final java.lang.String EXTRA_QUICK_VIEW_PLAIN = "android.intent.extra.QUICK_VIEW_PLAIN"; field public static final java.lang.String EXTRA_QUIET_MODE = "android.intent.extra.QUIET_MODE"; field public static final java.lang.String EXTRA_REFERRER = "android.intent.extra.REFERRER"; field public static final java.lang.String EXTRA_REFERRER_NAME = "android.intent.extra.REFERRER_NAME"; @@ -22253,6 +22254,7 @@ package android.media { } public static final class MediaMuxer.OutputFormat { + field public static final int MUXER_OUTPUT_3GPP = 2; // 0x2 field public static final int MUXER_OUTPUT_MPEG_4 = 0; // 0x0 field public static final int MUXER_OUTPUT_WEBM = 1; // 0x1 } @@ -36012,7 +36014,7 @@ package android.service.autofill { public final class SaveCallback { method public void onFailure(java.lang.CharSequence); - method public void onSuccess(android.view.autofill.AutoFillId[]); + method public void onSuccess(); } } @@ -44884,8 +44886,6 @@ package android.view { field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0 field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1 field public static final android.util.Property<android.view.View, java.lang.Float> ALPHA; - field public static final int AUTO_FILL_FLAG_TYPE_FILL = 268435456; // 0x10000000 - field public static final int AUTO_FILL_FLAG_TYPE_SAVE = 536870912; // 0x20000000 field public static final int DRAG_FLAG_GLOBAL = 256; // 0x100 field public static final int DRAG_FLAG_GLOBAL_PERSISTABLE_URI_PERMISSION = 64; // 0x40 field public static final int DRAG_FLAG_GLOBAL_PREFIX_URI_PERMISSION = 128; // 0x80 @@ -45525,7 +45525,7 @@ package android.view { method public abstract int addChildCount(int); method public abstract void asyncCommit(); method public abstract android.view.ViewStructure asyncNewChild(int); - method public abstract android.view.ViewStructure asyncNewChild(int, int); + method public abstract android.view.ViewStructure asyncNewChild(int, int, int); method public abstract int getChildCount(); method public abstract android.os.Bundle getExtras(); method public abstract java.lang.CharSequence getHint(); @@ -45534,11 +45534,12 @@ package android.view { method public abstract int getTextSelectionStart(); method public abstract boolean hasExtras(); method public abstract android.view.ViewStructure newChild(int); - method public abstract android.view.ViewStructure newChild(int, int); + method public abstract android.view.ViewStructure newChild(int, int, int); method public abstract void setAccessibilityFocused(boolean); method public abstract void setActivated(boolean); method public abstract void setAlpha(float); method public abstract void setAutoFillType(android.view.autofill.AutoFillType); + method public abstract void setAutoFillValue(android.view.autofill.AutoFillValue); method public abstract void setCheckable(boolean); method public abstract void setChecked(boolean); method public abstract void setChildCount(int); @@ -45561,6 +45562,7 @@ package android.view { method public abstract void setTextStyle(float, int, int, int); method public abstract void setTransformation(android.graphics.Matrix); method public abstract void setVisibility(int); + field public static final int AUTO_FILL_FLAG_SANITIZED = 1; // 0x1 } public final class ViewStub extends android.view.View { @@ -45994,6 +45996,7 @@ package android.view { field public static final int TYPE_APPLICATION = 2; // 0x2 field public static final int TYPE_APPLICATION_ATTACHED_DIALOG = 1003; // 0x3eb field public static final int TYPE_APPLICATION_MEDIA = 1001; // 0x3e9 + field public static final int TYPE_APPLICATION_OVERLAY = 2038; // 0x7f6 field public static final int TYPE_APPLICATION_PANEL = 1000; // 0x3e8 field public static final int TYPE_APPLICATION_STARTING = 3; // 0x3 field public static final int TYPE_APPLICATION_SUB_PANEL = 1002; // 0x3ea @@ -46003,17 +46006,17 @@ package android.view { field public static final int TYPE_INPUT_METHOD = 2011; // 0x7db field public static final int TYPE_INPUT_METHOD_DIALOG = 2012; // 0x7dc field public static final int TYPE_KEYGUARD_DIALOG = 2009; // 0x7d9 - field public static final int TYPE_PHONE = 2002; // 0x7d2 - field public static final int TYPE_PRIORITY_PHONE = 2007; // 0x7d7 + field public static final deprecated int TYPE_PHONE = 2002; // 0x7d2 + field public static final deprecated int TYPE_PRIORITY_PHONE = 2007; // 0x7d7 field public static final int TYPE_PRIVATE_PRESENTATION = 2030; // 0x7ee field public static final int TYPE_SEARCH_BAR = 2001; // 0x7d1 field public static final int TYPE_STATUS_BAR = 2000; // 0x7d0 field public static final int TYPE_STATUS_BAR_PANEL = 2014; // 0x7de - field public static final int TYPE_SYSTEM_ALERT = 2003; // 0x7d3 + field public static final deprecated int TYPE_SYSTEM_ALERT = 2003; // 0x7d3 field public static final int TYPE_SYSTEM_DIALOG = 2008; // 0x7d8 - field public static final int TYPE_SYSTEM_ERROR = 2010; // 0x7da - field public static final int TYPE_SYSTEM_OVERLAY = 2006; // 0x7d6 - field public static final int TYPE_TOAST = 2005; // 0x7d5 + field public static final deprecated int TYPE_SYSTEM_ERROR = 2010; // 0x7da + field public static final deprecated int TYPE_SYSTEM_OVERLAY = 2006; // 0x7d6 + field public static final deprecated int TYPE_TOAST = 2005; // 0x7d5 field public static final int TYPE_WALLPAPER = 2013; // 0x7dd field public float alpha; field public float buttonBrightness; @@ -46785,6 +46788,7 @@ package android.view.autofill { } public final class AutoFillManager { + method public void onValueChanged(android.view.View, android.view.autofill.AutoFillValue); method public void updateAutoFillInput(android.view.View, int); method public void updateAutoFillInput(android.view.View, int, android.graphics.Rect, int); field public static final int FLAG_UPDATE_UI_HIDE = 2; // 0x2 diff --git a/compiled-classes-phone b/compiled-classes-phone index e4ffaa358497..ea8f4a4d87fa 100644 --- a/compiled-classes-phone +++ b/compiled-classes-phone @@ -1,5 +1,5 @@ # -# Copyright (C) 2016 The Android Open Source Project +# Copyright (C) 2017 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. @@ -31,7 +31,6 @@ android.R$styleable android.accessibilityservice.AccessibilityServiceInfo android.accessibilityservice.AccessibilityServiceInfo$1 -android.accessibilityservice.AccessibilityServiceInfo$CapabilityInfo android.accessibilityservice.IAccessibilityServiceClient android.accessibilityservice.IAccessibilityServiceConnection android.accessibilityservice.IAccessibilityServiceConnection$Stub @@ -58,6 +57,8 @@ android.accounts.AccountManager$Future2Task android.accounts.AccountManager$Future2Task$1 android.accounts.AccountManagerCallback android.accounts.AccountManagerFuture +android.accounts.AccountManagerInternal +android.accounts.AccountManagerInternal$OnAppPermissionChangeListener android.accounts.AccountsException android.accounts.AuthenticatorDescription android.accounts.AuthenticatorDescription$1 @@ -78,7 +79,6 @@ android.accounts.OnAccountsUpdateListener android.accounts.OperationCanceledException android.animation.AnimationHandler android.animation.AnimationHandler$1 -android.animation.AnimationHandler$2 android.animation.AnimationHandler$AnimationFrameCallback android.animation.AnimationHandler$AnimationFrameCallbackProvider android.animation.AnimationHandler$MyFrameCallbackProvider @@ -90,9 +90,13 @@ android.animation.AnimatorInflater android.animation.AnimatorInflater$PathDataEvaluator android.animation.AnimatorListenerAdapter android.animation.AnimatorSet -android.animation.AnimatorSet$AnimatorSetListener +android.animation.AnimatorSet$1 +android.animation.AnimatorSet$2 +android.animation.AnimatorSet$3 +android.animation.AnimatorSet$AnimationEvent android.animation.AnimatorSet$Builder android.animation.AnimatorSet$Node +android.animation.AnimatorSet$SeekState android.animation.ArgbEvaluator android.animation.FloatArrayEvaluator android.animation.FloatEvaluator @@ -119,14 +123,15 @@ android.animation.ObjectAnimator android.animation.PathKeyframes android.animation.PathKeyframes$1 android.animation.PathKeyframes$2 -android.animation.PathKeyframes$3 -android.animation.PathKeyframes$4 android.animation.PathKeyframes$FloatKeyframesBase android.animation.PathKeyframes$IntKeyframesBase android.animation.PathKeyframes$SimpleKeyframes android.animation.PropertyValuesHolder +android.animation.PropertyValuesHolder$1 android.animation.PropertyValuesHolder$FloatPropertyValuesHolder android.animation.PropertyValuesHolder$IntPropertyValuesHolder +android.animation.PropertyValuesHolder$PropertyValues +android.animation.PropertyValuesHolder$PropertyValues$DataSource android.animation.RectEvaluator android.animation.RevealAnimator android.animation.StateListAnimator @@ -139,22 +144,25 @@ android.animation.TimeInterpolator android.animation.TypeEvaluator android.animation.ValueAnimator android.animation.ValueAnimator$AnimatorUpdateListener -android.annotation.TargetApi +android.app.-$Lambda$36$c44uHH2WE4sJvw5tZZB6gRzEaHI +android.app.-$Lambda$39$c44uHH2WE4sJvw5tZZB6gRzEaHI +android.app.-$Lambda$57$vZ1qb742P9hE4drBY-TrOZB_qKo +android.app.-$Lambda$7$u_rp3dnwvfyMTggc6hVftcuYJ3E +android.app.-$Lambda$71$3eJ3p8XnIxdVOnT82Ns3R0V5ZQE +android.app.-$Lambda$76$3eJ3p8XnIxdVOnT82Ns3R0V5ZQE android.app.ActionBar android.app.ActionBar$LayoutParams android.app.ActionBar$OnMenuVisibilityListener -android.app.ActionBar$OnNavigationListener android.app.ActionBar$Tab android.app.ActionBar$TabListener android.app.Activity android.app.Activity$HostCallbacks -android.app.Activity$NonConfigurationInstances android.app.ActivityManager +android.app.ActivityManager$1 android.app.ActivityManager$AppTask android.app.ActivityManager$MemoryInfo android.app.ActivityManager$MemoryInfo$1 -android.app.ActivityManager$ProcessErrorStateInfo -android.app.ActivityManager$ProcessErrorStateInfo$1 +android.app.ActivityManager$OnUidImportanceListener android.app.ActivityManager$RecentTaskInfo android.app.ActivityManager$RecentTaskInfo$1 android.app.ActivityManager$RunningAppProcessInfo @@ -168,10 +176,12 @@ android.app.ActivityManager$StackInfo android.app.ActivityManager$StackInfo$1 android.app.ActivityManager$TaskDescription android.app.ActivityManager$TaskDescription$1 +android.app.ActivityManager$TaskSnapshot +android.app.ActivityManager$TaskSnapshot$1 android.app.ActivityManager$TaskThumbnail -android.app.ActivityManager$TaskThumbnail$1 android.app.ActivityManager$TaskThumbnailInfo android.app.ActivityManager$TaskThumbnailInfo$1 +android.app.ActivityManager$UidObserver android.app.ActivityManagerInternal android.app.ActivityManagerInternal$SleepToken android.app.ActivityOptions @@ -189,6 +199,7 @@ android.app.ActivityThread$BindServiceData android.app.ActivityThread$ContextCleanupInfo android.app.ActivityThread$CreateServiceData android.app.ActivityThread$DropBoxReporter +android.app.ActivityThread$DumpComponentInfo android.app.ActivityThread$EventLoggingReporter android.app.ActivityThread$GcIdler android.app.ActivityThread$H @@ -199,18 +210,13 @@ android.app.ActivityThread$ProviderClientRecord android.app.ActivityThread$ProviderKey android.app.ActivityThread$ProviderRefCount android.app.ActivityThread$ReceiverData +android.app.ActivityThread$RequestAssistContextExtras android.app.ActivityThread$ResultData android.app.ActivityThread$ServiceArgsData android.app.ActivityThread$StopInfo -android.app.ActivityTransitionCoordinator -android.app.ActivityTransitionCoordinator$1 -android.app.ActivityTransitionCoordinator$2 -android.app.ActivityTransitionCoordinator$ContinueTransitionListener -android.app.ActivityTransitionCoordinator$FixedEpicenterCallback -android.app.ActivityTransitionCoordinator$SharedElementOriginalState android.app.ActivityTransitionState +android.app.AlarmManager android.app.AlarmManager$AlarmClockInfo -android.app.AlarmManager$AlarmClockInfo$1 android.app.AlarmManager$ListenerWrapper android.app.AlarmManager$OnAlarmListener android.app.AlertDialog @@ -227,71 +233,59 @@ android.app.AppOpsManager$PackageOps$1 android.app.Application android.app.Application$ActivityLifecycleCallbacks android.app.ApplicationErrorReport -android.app.ApplicationErrorReport$1 android.app.ApplicationErrorReport$CrashInfo +android.app.ApplicationErrorReport$ParcelableCrashInfo android.app.ApplicationLoaders android.app.ApplicationPackageManager android.app.ApplicationPackageManager$MoveCallbackDelegate android.app.ApplicationPackageManager$OnPermissionsChangeListenerDelegate android.app.ApplicationPackageManager$ResourceName -android.app.ApplicationThreadProxy android.app.AutomaticZenRule android.app.BackStackRecord android.app.BackStackRecord$Op -android.app.BackStackRecord$TransitionState -android.app.BackStackState -android.app.BackStackState$1 android.app.BroadcastOptions android.app.ContentProviderHolder android.app.ContentProviderHolder$1 android.app.ContextImpl -android.app.ContextImpl$1 android.app.ContextImpl$ApplicationContentResolver android.app.DatePickerDialog android.app.DatePickerDialog$OnDateSetListener android.app.Dialog -android.app.Dialog$-void__init__android_content_Context_context_int_themeResId_boolean_createContextThemeWrapper_LambdaImpl0 android.app.Dialog$ListenersHandler android.app.DialogFragment android.app.DownloadManager android.app.DownloadManager$CursorTranslator android.app.DownloadManager$Query android.app.DownloadManager$Request -android.app.EnterTransitionCoordinator -android.app.EnterTransitionCoordinator$1 -android.app.EnterTransitionCoordinator$4 -android.app.EnterTransitionCoordinator$5 -android.app.EnterTransitionCoordinator$5$1 -android.app.EnterTransitionCoordinator$5$1$1 -android.app.EnterTransitionCoordinator$6 -android.app.EnterTransitionCoordinator$7 -android.app.EnterTransitionCoordinator$8 -android.app.ExitTransitionCoordinator -android.app.ExitTransitionCoordinator$10 -android.app.ExitTransitionCoordinator$11 -android.app.ExitTransitionCoordinator$4 android.app.Fragment android.app.Fragment$1 +android.app.Fragment$AnimationInfo +android.app.Fragment$OnStartEnterTransitionListener android.app.Fragment$SavedState -android.app.FragmentBreadCrumbs android.app.FragmentContainer android.app.FragmentController android.app.FragmentHostCallback android.app.FragmentManager android.app.FragmentManager$BackStackEntry +android.app.FragmentManager$FragmentLifecycleCallbacks android.app.FragmentManager$OnBackStackChangedListener android.app.FragmentManagerImpl android.app.FragmentManagerImpl$1 android.app.FragmentManagerImpl$2 -android.app.FragmentManagerImpl$3 -android.app.FragmentManagerImpl$4 -android.app.FragmentManagerImpl$5 android.app.FragmentManagerImpl$AnimateOnHWLayerIfNeededListener +android.app.FragmentManagerImpl$OpGenerator +android.app.FragmentManagerImpl$PopBackStackState +android.app.FragmentManagerImpl$StartEnterTransitionListener android.app.FragmentManagerState android.app.FragmentManagerState$1 android.app.FragmentState android.app.FragmentState$1 android.app.FragmentTransaction +android.app.FragmentTransition +android.app.FragmentTransition$3 +android.app.FragmentTransition$4 +android.app.FragmentTransition$5 +android.app.FragmentTransition$FragmentContainerTransition android.app.IActivityContainer android.app.IActivityContainer$Stub android.app.IActivityContainerCallback @@ -356,12 +350,11 @@ android.app.IntentService$ServiceHandler android.app.JobSchedulerImpl android.app.KeyguardManager android.app.ListActivity -android.app.ListActivity$1 -android.app.ListActivity$2 android.app.ListFragment android.app.ListFragment$1 android.app.ListFragment$2 android.app.LoadedApk +android.app.LoadedApk$DexLoadReporter android.app.LoadedApk$ReceiverDispatcher android.app.LoadedApk$ReceiverDispatcher$Args android.app.LoadedApk$ReceiverDispatcher$InnerReceiver @@ -391,26 +384,34 @@ android.app.Notification$Extender android.app.Notification$InboxStyle android.app.Notification$MediaStyle android.app.Notification$MessagingStyle +android.app.Notification$MessagingStyle$Message +android.app.Notification$StandardTemplateParams android.app.Notification$Style android.app.Notification$WearableExtender +android.app.NotificationChannel +android.app.NotificationChannel$1 android.app.NotificationManager android.app.NotificationManager$Policy android.app.NotificationManager$Policy$1 android.app.OnActivityPausedListener -android.app.PackageDeleteObserver -android.app.PackageDeleteObserver$1 -android.app.PackageInstallObserver -android.app.PackageInstallObserver$1 android.app.PendingIntent android.app.PendingIntent$1 android.app.PendingIntent$CanceledException android.app.PendingIntent$FinishedDispatcher android.app.PendingIntent$OnFinished +android.app.PendingIntent$OnMarshaledListener +android.app.PictureInPictureArgs +android.app.PictureInPictureArgs$1 android.app.Presentation android.app.ProfilerInfo android.app.ProgressDialog android.app.QueuedWork +android.app.QueuedWork$QueuedWorkHandler android.app.ReceiverRestrictedContext +android.app.RemoteAction +android.app.RemoteAction$1 +android.app.RemoteAction$2 +android.app.RemoteAction$OnActionListener android.app.RemoteInput android.app.RemoteInput$1 android.app.RemoteInput$Builder @@ -419,13 +420,14 @@ android.app.ResourcesManager$1 android.app.ResourcesManager$ActivityResources android.app.ResultInfo android.app.ResultInfo$1 +android.app.RetailDemoModeServiceInternal +android.app.SearchManager android.app.SearchableInfo android.app.SearchableInfo$1 android.app.Service android.app.ServiceConnectionLeaked android.app.SharedElementCallback android.app.SharedElementCallback$1 -android.app.SharedElementCallback$OnSharedElementsReadyListener android.app.SharedPreferencesImpl android.app.SharedPreferencesImpl$1 android.app.SharedPreferencesImpl$2 @@ -509,6 +511,11 @@ android.app.SystemServiceRegistry$71 android.app.SystemServiceRegistry$72 android.app.SystemServiceRegistry$73 android.app.SystemServiceRegistry$74 +android.app.SystemServiceRegistry$75 +android.app.SystemServiceRegistry$76 +android.app.SystemServiceRegistry$77 +android.app.SystemServiceRegistry$78 +android.app.SystemServiceRegistry$79 android.app.SystemServiceRegistry$8 android.app.SystemServiceRegistry$9 android.app.SystemServiceRegistry$CachedServiceFetcher @@ -516,29 +523,43 @@ android.app.SystemServiceRegistry$ServiceFetcher android.app.SystemServiceRegistry$StaticApplicationContextServiceFetcher android.app.SystemServiceRegistry$StaticServiceFetcher android.app.TaskStackBuilder -android.app.TimePickerDialog +android.app.TaskStackListener android.app.TimePickerDialog$OnTimeSetListener android.app.UiModeManager -android.app.WaitResult; +android.app.UserSwitchObserver +android.app.VoiceInteractor$PickOptionRequest$Option +android.app.WaitResult android.app.WallpaperInfo +android.app.WallpaperInfo$1 android.app.WallpaperManager android.app.WallpaperManager$Globals -android.app.admin.DeviceAdminInfo -android.app.admin.DeviceAdminInfo$1 -android.app.admin.DeviceAdminInfo$PolicyInfo android.app.admin.DevicePolicyManager android.app.admin.DevicePolicyManagerInternal android.app.admin.DevicePolicyManagerInternal$OnCrossProfileWidgetProvidersChangeListener android.app.admin.IDevicePolicyManager android.app.admin.IDevicePolicyManager$Stub android.app.admin.IDevicePolicyManager$Stub$Proxy +android.app.admin.PasswordMetrics +android.app.admin.PasswordMetrics$1 android.app.admin.SecurityLog android.app.admin.SecurityLog$SecurityEvent android.app.admin.SecurityLog$SecurityEvent$1 +android.app.admin.SystemUpdateInfo +android.app.admin.SystemUpdateInfo$1 android.app.admin.SystemUpdatePolicy android.app.admin.SystemUpdatePolicy$1 android.app.assist.AssistContent +android.app.assist.AssistContent$1 android.app.assist.AssistStructure +android.app.assist.AssistStructure$1 +android.app.assist.AssistStructure$ParcelTransferReader +android.app.assist.AssistStructure$ParcelTransferWriter +android.app.assist.AssistStructure$SendChannel +android.app.assist.AssistStructure$ViewNode +android.app.assist.AssistStructure$ViewNodeBuilder +android.app.assist.AssistStructure$ViewNodeText +android.app.assist.AssistStructure$ViewStackEntry +android.app.assist.AssistStructure$WindowNode android.app.backup.BackupAgent android.app.backup.BackupAgentHelper android.app.backup.BackupDataInput @@ -559,6 +580,7 @@ android.app.backup.IBackupManager$Stub$Proxy android.app.backup.IBackupObserver android.app.backup.IFullBackupRestoreObserver android.app.backup.IRestoreSession +android.app.backup.ISelectBackupTransportCallback android.app.backup.RestoreDescription android.app.backup.RestoreSet android.app.backup.SharedPreferencesBackupHelper @@ -597,10 +619,15 @@ android.app.trust.TrustManager$2 android.app.trust.TrustManager$TrustListener android.app.usage.ConfigurationStats android.app.usage.ConfigurationStats$1 +android.app.usage.ExternalStorageStats +android.app.usage.IStorageStatsManager +android.app.usage.IStorageStatsManager$Stub android.app.usage.IUsageStatsManager android.app.usage.IUsageStatsManager$Stub android.app.usage.IUsageStatsManager$Stub$Proxy android.app.usage.NetworkStatsManager +android.app.usage.StorageStats +android.app.usage.StorageStatsManager android.app.usage.TimeSparseArray android.app.usage.UsageEvents android.app.usage.UsageEvents$1 @@ -626,18 +653,15 @@ android.bluetooth.BluetoothActivityEnergyInfo android.bluetooth.BluetoothActivityEnergyInfo$1 android.bluetooth.BluetoothAdapter android.bluetooth.BluetoothAdapter$1 -android.bluetooth.BluetoothAdapter$2 -android.bluetooth.BluetoothAdapter$BluetoothStateChangeCallback -android.bluetooth.BluetoothAdapter$LeScanCallback -android.bluetooth.BluetoothAudioConfig android.bluetooth.BluetoothClass android.bluetooth.BluetoothClass$1 android.bluetooth.BluetoothCodecConfig +android.bluetooth.BluetoothCodecConfig$1 android.bluetooth.BluetoothCodecStatus +android.bluetooth.BluetoothCodecStatus$1 android.bluetooth.BluetoothDevice android.bluetooth.BluetoothDevice$1 android.bluetooth.BluetoothDevice$2 -android.bluetooth.BluetoothGattCallbackWrapper android.bluetooth.BluetoothGattCharacteristic android.bluetooth.BluetoothGattDescriptor android.bluetooth.BluetoothGattService @@ -674,8 +698,6 @@ android.bluetooth.IBluetooth$Stub$Proxy android.bluetooth.IBluetoothA2dp android.bluetooth.IBluetoothA2dp$Stub android.bluetooth.IBluetoothA2dp$Stub$Proxy -android.bluetooth.IBluetoothA2dpSink -android.bluetooth.IBluetoothA2dpSink$Stub android.bluetooth.IBluetoothCallback android.bluetooth.IBluetoothCallback$Stub android.bluetooth.IBluetoothCallback$Stub$Proxy @@ -683,14 +705,10 @@ android.bluetooth.IBluetoothGatt android.bluetooth.IBluetoothGatt$Stub android.bluetooth.IBluetoothGatt$Stub$Proxy android.bluetooth.IBluetoothGattCallback -android.bluetooth.IBluetoothGattCallback$Stub -android.bluetooth.IBluetoothGattCallback$Stub$Proxy android.bluetooth.IBluetoothGattServerCallback android.bluetooth.IBluetoothHeadset android.bluetooth.IBluetoothHeadset$Stub android.bluetooth.IBluetoothHeadset$Stub$Proxy -android.bluetooth.IBluetoothHeadsetClient -android.bluetooth.IBluetoothHeadsetClient$Stub android.bluetooth.IBluetoothHeadsetPhone android.bluetooth.IBluetoothHeadsetPhone$Stub android.bluetooth.IBluetoothHeadsetPhone$Stub$Proxy @@ -715,8 +733,6 @@ android.bluetooth.IBluetoothPan$Stub$Proxy android.bluetooth.IBluetoothPbap android.bluetooth.IBluetoothPbap$Stub android.bluetooth.IBluetoothPbap$Stub$Proxy -android.bluetooth.IBluetoothPbapClient -android.bluetooth.IBluetoothPbapClient$Stub android.bluetooth.IBluetoothProfileServiceConnection android.bluetooth.IBluetoothProfileServiceConnection$Stub android.bluetooth.IBluetoothProfileServiceConnection$Stub$Proxy @@ -736,11 +752,15 @@ android.bluetooth.UidTraffic android.bluetooth.UidTraffic$1 android.bluetooth.le.AdvertiseData android.bluetooth.le.AdvertiseSettings -android.bluetooth.le.BluetoothLeAdvertiser android.bluetooth.le.BluetoothLeScanner android.bluetooth.le.BluetoothLeScanner$BleScanCallbackWrapper android.bluetooth.le.BluetoothLeScanner$BleScanCallbackWrapper$1 +android.bluetooth.le.BluetoothLeScanner$BleScanCallbackWrapper$2 android.bluetooth.le.BluetoothLeUtils +android.bluetooth.le.IAdvertiserCallback +android.bluetooth.le.IScannerCallback +android.bluetooth.le.IScannerCallback$Stub +android.bluetooth.le.IScannerCallback$Stub$Proxy android.bluetooth.le.ScanCallback android.bluetooth.le.ScanFilter android.bluetooth.le.ScanFilter$1 @@ -826,6 +846,7 @@ android.content.IIntentSender$Stub android.content.IIntentSender$Stub$Proxy android.content.IOnPrimaryClipChangedListener android.content.IOnPrimaryClipChangedListener$Stub +android.content.IOnPrimaryClipChangedListener$Stub$Proxy android.content.IRestrictionsManager android.content.IRestrictionsManager$Stub android.content.IRestrictionsManager$Stub$Proxy @@ -841,14 +862,11 @@ android.content.ISyncStatusObserver$Stub$Proxy android.content.Intent android.content.Intent$1 android.content.Intent$FilterComparison -android.content.Intent$ShortcutIconResource -android.content.Intent$ShortcutIconResource$1 android.content.IntentFilter android.content.IntentFilter$1 android.content.IntentFilter$AuthorityEntry android.content.IntentFilter$MalformedMimeTypeException android.content.IntentSender -android.content.IntentSender$1 android.content.IntentSender$SendIntentException android.content.Loader android.content.Loader$ForceLoadContentObserver @@ -893,11 +911,14 @@ android.content.UriMatcher android.content.UriPermission android.content.pm.ActivityInfo android.content.pm.ActivityInfo$1 +android.content.pm.ActivityInfo$WindowLayout android.content.pm.ApplicationInfo android.content.pm.ApplicationInfo$1 android.content.pm.ComponentInfo android.content.pm.ConfigurationInfo android.content.pm.ConfigurationInfo$1 +android.content.pm.EphemeralResponse +android.content.pm.FallbackCategoryProvider android.content.pm.FeatureGroupInfo android.content.pm.FeatureGroupInfo$1 android.content.pm.FeatureInfo @@ -914,16 +935,9 @@ android.content.pm.IOnPermissionsChangeListener$Stub$Proxy android.content.pm.IOtaDexopt android.content.pm.IOtaDexopt$Stub android.content.pm.IPackageDataObserver -android.content.pm.IPackageDataObserver$Stub -android.content.pm.IPackageDataObserver$Stub$Proxy android.content.pm.IPackageDeleteObserver -android.content.pm.IPackageDeleteObserver$Stub android.content.pm.IPackageDeleteObserver2 -android.content.pm.IPackageDeleteObserver2$Stub -android.content.pm.IPackageInstallObserver -android.content.pm.IPackageInstallObserver$Stub android.content.pm.IPackageInstallObserver2 -android.content.pm.IPackageInstallObserver2$Stub android.content.pm.IPackageInstaller android.content.pm.IPackageInstaller$Stub android.content.pm.IPackageInstaller$Stub$Proxy @@ -931,8 +945,6 @@ android.content.pm.IPackageInstallerCallback android.content.pm.IPackageInstallerCallback$Stub android.content.pm.IPackageInstallerCallback$Stub$Proxy android.content.pm.IPackageInstallerSession -android.content.pm.IPackageInstallerSession$Stub -android.content.pm.IPackageInstallerSession$Stub$Proxy android.content.pm.IPackageManager android.content.pm.IPackageManager$Stub android.content.pm.IPackageManager$Stub$Proxy @@ -944,6 +956,7 @@ android.content.pm.IPackageStatsObserver$Stub android.content.pm.IPackageStatsObserver$Stub$Proxy android.content.pm.IShortcutService android.content.pm.IShortcutService$Stub +android.content.pm.IShortcutService$Stub$Proxy android.content.pm.InstrumentationInfo android.content.pm.InstrumentationInfo$1 android.content.pm.IntentFilterVerificationInfo @@ -956,46 +969,49 @@ android.content.pm.LauncherApps$1 android.content.pm.LauncherApps$Callback android.content.pm.LauncherApps$CallbackMessageHandler android.content.pm.LauncherApps$CallbackMessageHandler$CallbackInfo +android.content.pm.LauncherApps$ShortcutQuery android.content.pm.PackageCleanItem -android.content.pm.PackageCleanItem$1 android.content.pm.PackageInfo android.content.pm.PackageInfo$1 android.content.pm.PackageInfoLite -android.content.pm.PackageInfoLite$1 android.content.pm.PackageInstaller android.content.pm.PackageInstaller$Session android.content.pm.PackageInstaller$SessionCallback android.content.pm.PackageInstaller$SessionCallbackDelegate android.content.pm.PackageInstaller$SessionInfo -android.content.pm.PackageInstaller$SessionInfo$1 android.content.pm.PackageInstaller$SessionParams -android.content.pm.PackageInstaller$SessionParams$1 android.content.pm.PackageItemInfo android.content.pm.PackageManager -android.content.pm.PackageManager$LegacyPackageDeleteObserver android.content.pm.PackageManager$MoveCallback android.content.pm.PackageManager$NameNotFoundException android.content.pm.PackageManager$OnPermissionsChangedListener android.content.pm.PackageManagerInternal +android.content.pm.PackageManagerInternal$ExternalSourcesPolicy android.content.pm.PackageManagerInternal$PackagesProvider android.content.pm.PackageManagerInternal$SyncAdapterPackagesProvider android.content.pm.PackageParser android.content.pm.PackageParser$Activity +android.content.pm.PackageParser$Activity$1 android.content.pm.PackageParser$ActivityIntentInfo android.content.pm.PackageParser$ApkLite android.content.pm.PackageParser$Component android.content.pm.PackageParser$IntentInfo android.content.pm.PackageParser$NewPermissionInfo android.content.pm.PackageParser$Package +android.content.pm.PackageParser$Package$1 android.content.pm.PackageParser$PackageLite android.content.pm.PackageParser$PackageParserException android.content.pm.PackageParser$ParseComponentArgs android.content.pm.PackageParser$ParsePackageItemArgs android.content.pm.PackageParser$Permission +android.content.pm.PackageParser$Permission$1 android.content.pm.PackageParser$PermissionGroup +android.content.pm.PackageParser$PermissionGroup$1 android.content.pm.PackageParser$Provider +android.content.pm.PackageParser$Provider$1 android.content.pm.PackageParser$ProviderIntentInfo android.content.pm.PackageParser$Service +android.content.pm.PackageParser$Service$1 android.content.pm.PackageParser$ServiceIntentInfo android.content.pm.PackageParser$SplitNameComparator android.content.pm.PackageParser$SplitPermissionInfo @@ -1024,6 +1040,11 @@ android.content.pm.ResolveInfo android.content.pm.ResolveInfo$1 android.content.pm.ServiceInfo android.content.pm.ServiceInfo$1 +android.content.pm.SharedLibraryInfo +android.content.pm.SharedLibraryInfo$1 +android.content.pm.ShortcutInfo +android.content.pm.ShortcutInfo$1 +android.content.pm.ShortcutInfo$Builder android.content.pm.ShortcutManager android.content.pm.ShortcutServiceInternal android.content.pm.ShortcutServiceInternal$ShortcutChangeListener @@ -1033,7 +1054,18 @@ android.content.pm.UserInfo android.content.pm.UserInfo$1 android.content.pm.VerifierDeviceIdentity android.content.pm.VerifierInfo +android.content.pm.VersionedPackage +android.content.pm.VersionedPackage$1 android.content.pm.XmlSerializerAndParser +android.content.pm.permission.IRuntimePermissionPresenter +android.content.pm.permission.IRuntimePermissionPresenter$Stub +android.content.pm.permission.IRuntimePermissionPresenter$Stub$Proxy +android.content.pm.permission.RuntimePermissionPresentationInfo +android.content.pm.permission.RuntimePermissionPresentationInfo$1 +android.content.pm.permission.RuntimePermissionPresenter +android.content.pm.permission.RuntimePermissionPresenter$OnResultCallback +android.content.pm.permission.RuntimePermissionPresenter$RemoteService +android.content.pm.permission.RuntimePermissionPresenter$RemoteService$1 android.content.res.AssetFileDescriptor android.content.res.AssetFileDescriptor$1 android.content.res.AssetFileDescriptor$AutoCloseInputStream @@ -1109,6 +1141,7 @@ android.database.Observable android.database.SQLException android.database.sqlite.DatabaseObjectNotClosedException android.database.sqlite.SQLiteAbortException +android.database.sqlite.SQLiteAccessPermException android.database.sqlite.SQLiteCantOpenDatabaseException android.database.sqlite.SQLiteClosable android.database.sqlite.SQLiteConnection @@ -1144,6 +1177,7 @@ android.database.sqlite.SQLiteOpenHelper android.database.sqlite.SQLiteProgram android.database.sqlite.SQLiteQuery android.database.sqlite.SQLiteQueryBuilder +android.database.sqlite.SQLiteReadOnlyDatabaseException android.database.sqlite.SQLiteSession android.database.sqlite.SQLiteSession$Transaction android.database.sqlite.SQLiteStatement @@ -1170,6 +1204,7 @@ android.drm.DrmManagerClient$OnEventListener android.drm.DrmManagerClient$OnInfoListener android.drm.DrmOutputStream android.drm.DrmSupportInfo +android.graphics.BaseCanvas android.graphics.Bitmap android.graphics.Bitmap$1 android.graphics.Bitmap$CompressFormat @@ -1196,23 +1231,20 @@ android.graphics.DashPathEffect android.graphics.DiscretePathEffect android.graphics.DrawFilter android.graphics.EmbossMaskFilter -android.graphics.FontConfig -android.graphics.FontConfig$Alias -android.graphics.FontConfig$Axis -android.graphics.FontConfig$Family -android.graphics.FontConfig$Font android.graphics.FontFamily android.graphics.FontListParser +android.graphics.GraphicBuffer +android.graphics.GraphicBuffer$1 android.graphics.ImageFormat android.graphics.Insets android.graphics.Interpolator android.graphics.Interpolator$Result -android.graphics.LayerRasterizer android.graphics.LightingColorFilter android.graphics.LinearGradient android.graphics.MaskFilter android.graphics.Matrix android.graphics.Matrix$1 +android.graphics.Matrix$NoImagePreloadHolder android.graphics.Matrix$ScaleToFit android.graphics.Movie android.graphics.NinePatch @@ -1246,7 +1278,6 @@ android.graphics.PorterDuff$Mode android.graphics.PorterDuffColorFilter android.graphics.PorterDuffXfermode android.graphics.RadialGradient -android.graphics.Rasterizer android.graphics.Rect android.graphics.Rect$1 android.graphics.Rect$UnflattenHelper @@ -1270,7 +1301,6 @@ android.graphics.Xfermode android.graphics.YuvImage android.graphics.drawable.Animatable android.graphics.drawable.Animatable2 -android.graphics.drawable.Animatable2$AnimationCallback android.graphics.drawable.AnimatedRotateDrawable android.graphics.drawable.AnimatedRotateDrawable$1 android.graphics.drawable.AnimatedRotateDrawable$AnimatedRotateState @@ -1282,7 +1312,6 @@ android.graphics.drawable.AnimatedStateListDrawable$FrameInterpolator android.graphics.drawable.AnimatedStateListDrawable$Transition android.graphics.drawable.AnimatedVectorDrawable android.graphics.drawable.AnimatedVectorDrawable$1 -android.graphics.drawable.AnimatedVectorDrawable$2 android.graphics.drawable.AnimatedVectorDrawable$AnimatedVectorDrawableState android.graphics.drawable.AnimatedVectorDrawable$AnimatedVectorDrawableState$PendingAnimator android.graphics.drawable.AnimatedVectorDrawable$VectorDrawableAnimator @@ -1301,6 +1330,7 @@ android.graphics.drawable.Drawable$Callback android.graphics.drawable.Drawable$ConstantState android.graphics.drawable.DrawableContainer android.graphics.drawable.DrawableContainer$1 +android.graphics.drawable.DrawableContainer$BlockInvalidateCallback android.graphics.drawable.DrawableContainer$DrawableContainerState android.graphics.drawable.DrawableInflater android.graphics.drawable.DrawableWrapper @@ -1349,13 +1379,31 @@ android.graphics.drawable.VectorDrawable android.graphics.drawable.VectorDrawable$VClipPath android.graphics.drawable.VectorDrawable$VFullPath android.graphics.drawable.VectorDrawable$VFullPath$1 +android.graphics.drawable.VectorDrawable$VFullPath$10 +android.graphics.drawable.VectorDrawable$VFullPath$2 +android.graphics.drawable.VectorDrawable$VFullPath$3 +android.graphics.drawable.VectorDrawable$VFullPath$4 +android.graphics.drawable.VectorDrawable$VFullPath$5 +android.graphics.drawable.VectorDrawable$VFullPath$6 +android.graphics.drawable.VectorDrawable$VFullPath$7 +android.graphics.drawable.VectorDrawable$VFullPath$8 +android.graphics.drawable.VectorDrawable$VFullPath$9 android.graphics.drawable.VectorDrawable$VGroup android.graphics.drawable.VectorDrawable$VGroup$1 +android.graphics.drawable.VectorDrawable$VGroup$2 +android.graphics.drawable.VectorDrawable$VGroup$3 +android.graphics.drawable.VectorDrawable$VGroup$4 +android.graphics.drawable.VectorDrawable$VGroup$5 +android.graphics.drawable.VectorDrawable$VGroup$6 +android.graphics.drawable.VectorDrawable$VGroup$7 +android.graphics.drawable.VectorDrawable$VGroup$8 +android.graphics.drawable.VectorDrawable$VGroup$9 android.graphics.drawable.VectorDrawable$VObject android.graphics.drawable.VectorDrawable$VPath +android.graphics.drawable.VectorDrawable$VPath$1 android.graphics.drawable.VectorDrawable$VectorDrawableState +android.graphics.drawable.VectorDrawable$VectorDrawableState$1 android.graphics.drawable.shapes.OvalShape -android.graphics.drawable.shapes.PathShape android.graphics.drawable.shapes.RectShape android.graphics.drawable.shapes.RoundRectShape android.graphics.drawable.shapes.Shape @@ -1363,7 +1411,6 @@ android.graphics.pdf.PdfDocument android.graphics.pdf.PdfEditor android.graphics.pdf.PdfRenderer android.hardware.Camera -android.hardware.Camera$Area android.hardware.Camera$AutoFocusCallback android.hardware.Camera$AutoFocusMoveCallback android.hardware.Camera$CameraInfo @@ -1377,9 +1424,13 @@ android.hardware.Camera$PictureCallback android.hardware.Camera$PreviewCallback android.hardware.Camera$ShutterCallback android.hardware.Camera$Size +android.hardware.CameraStatus +android.hardware.CameraStatus$1 android.hardware.ConsumerIrManager android.hardware.GeomagneticField android.hardware.GeomagneticField$LegendreTable +android.hardware.HardwareBuffer +android.hardware.HardwareBuffer$1 android.hardware.ICameraService android.hardware.ICameraService$Stub android.hardware.ICameraService$Stub$Proxy @@ -1419,8 +1470,11 @@ android.hardware.camera2.CameraDevice$StateCallback android.hardware.camera2.CameraManager android.hardware.camera2.CameraManager$AvailabilityCallback android.hardware.camera2.CameraManager$CameraManagerGlobal +android.hardware.camera2.CameraManager$CameraManagerGlobal$1 +android.hardware.camera2.CameraManager$CameraManagerGlobal$2 android.hardware.camera2.CameraManager$CameraManagerGlobal$3 android.hardware.camera2.CameraManager$CameraManagerGlobal$4 +android.hardware.camera2.CameraManager$CameraManagerGlobal$5 android.hardware.camera2.CameraManager$TorchCallback android.hardware.camera2.CameraMetadata android.hardware.camera2.CaptureFailure @@ -1461,6 +1515,7 @@ android.hardware.camera2.impl.CameraCaptureSessionImpl$SequenceDrainListener android.hardware.camera2.impl.CameraDeviceImpl android.hardware.camera2.impl.CameraDeviceImpl$1 android.hardware.camera2.impl.CameraDeviceImpl$10 +android.hardware.camera2.impl.CameraDeviceImpl$11 android.hardware.camera2.impl.CameraDeviceImpl$2 android.hardware.camera2.impl.CameraDeviceImpl$3 android.hardware.camera2.impl.CameraDeviceImpl$4 @@ -1472,7 +1527,6 @@ android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks$2 android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks$3 android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks$4 -android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks$5 android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks$6 android.hardware.camera2.impl.CameraDeviceImpl$CaptureCallback android.hardware.camera2.impl.CameraDeviceImpl$CaptureCallbackHolder @@ -1565,7 +1619,6 @@ android.hardware.camera2.params.StreamConfiguration android.hardware.camera2.params.StreamConfigurationDuration android.hardware.camera2.params.StreamConfigurationMap android.hardware.camera2.params.TonemapCurve -android.hardware.camera2.utils.ArrayUtils android.hardware.camera2.utils.HashCodeHelpers android.hardware.camera2.utils.SubmitInfo android.hardware.camera2.utils.SubmitInfo$1 @@ -1605,21 +1658,11 @@ android.hardware.fingerprint.Fingerprint$1 android.hardware.fingerprint.FingerprintManager android.hardware.fingerprint.FingerprintManager$1 android.hardware.fingerprint.FingerprintManager$2 -android.hardware.fingerprint.FingerprintManager$2$1 android.hardware.fingerprint.FingerprintManager$AuthenticationCallback android.hardware.fingerprint.FingerprintManager$AuthenticationResult -android.hardware.fingerprint.FingerprintManager$CryptoObject -android.hardware.fingerprint.FingerprintManager$EnrollmentCallback android.hardware.fingerprint.FingerprintManager$LockoutResetCallback android.hardware.fingerprint.FingerprintManager$MyHandler -android.hardware.fingerprint.FingerprintManager$OnAuthenticationCancelListener -android.hardware.fingerprint.FingerprintManager$OnEnrollCancelListener -android.hardware.fingerprint.FingerprintManager$RemovalCallback -android.hardware.fingerprint.IFingerprintDaemon -android.hardware.fingerprint.IFingerprintDaemon$Stub -android.hardware.fingerprint.IFingerprintDaemon$Stub$Proxy -android.hardware.fingerprint.IFingerprintDaemonCallback -android.hardware.fingerprint.IFingerprintDaemonCallback$Stub +android.hardware.fingerprint.IFingerprintClientActiveCallback android.hardware.fingerprint.IFingerprintService android.hardware.fingerprint.IFingerprintService$Stub android.hardware.fingerprint.IFingerprintService$Stub$Proxy @@ -1628,14 +1671,8 @@ android.hardware.fingerprint.IFingerprintServiceLockoutResetCallback$Stub android.hardware.fingerprint.IFingerprintServiceLockoutResetCallback$Stub$Proxy android.hardware.fingerprint.IFingerprintServiceReceiver android.hardware.fingerprint.IFingerprintServiceReceiver$Stub -android.hardware.fingerprint.IFingerprintServiceReceiver$Stub$Proxy -android.hardware.hdmi.HdmiClient android.hardware.hdmi.HdmiControlManager -android.hardware.hdmi.HdmiPlaybackClient android.hardware.hdmi.HdmiPlaybackClient$DisplayStatusCallback -android.hardware.hdmi.HdmiTvClient -android.hardware.hdmi.IHdmiControlService -android.hardware.hdmi.IHdmiControlService$Stub android.hardware.input.IInputDevicesChangedListener android.hardware.input.IInputDevicesChangedListener$Stub android.hardware.input.IInputDevicesChangedListener$Stub$Proxy @@ -1655,13 +1692,15 @@ android.hardware.input.KeyboardLayout android.hardware.input.KeyboardLayout$1 android.hardware.input.TouchCalibration android.hardware.input.TouchCalibration$1 -android.hardware.location.ActivityChangedEvent android.hardware.location.ActivityRecognitionHardware -android.hardware.location.ActivityRecognitionHardware$SinkList android.hardware.location.ContextHubInfo android.hardware.location.ContextHubInfo$1 android.hardware.location.ContextHubManager -android.hardware.location.ContextHubService +android.hardware.location.ContextHubManager$1 +android.hardware.location.ContextHubManager$Callback +android.hardware.location.ContextHubManager$ICallback +android.hardware.location.ContextHubMessage +android.hardware.location.ContextHubMessage$1 android.hardware.location.GeofenceHardware android.hardware.location.GeofenceHardware$GeofenceHardwareMonitorCallbackWrapper android.hardware.location.GeofenceHardwareCallback @@ -1671,27 +1710,21 @@ android.hardware.location.GeofenceHardwareImpl$2 android.hardware.location.GeofenceHardwareImpl$3 android.hardware.location.GeofenceHardwareImpl$Reaper android.hardware.location.GeofenceHardwareMonitorCallback -android.hardware.location.GeofenceHardwareRequestParcelable android.hardware.location.GeofenceHardwareService android.hardware.location.GeofenceHardwareService$1 android.hardware.location.IActivityRecognitionHardware android.hardware.location.IActivityRecognitionHardware$Stub -android.hardware.location.IActivityRecognitionHardware$Stub$Proxy android.hardware.location.IActivityRecognitionHardwareClient android.hardware.location.IActivityRecognitionHardwareClient$Stub android.hardware.location.IActivityRecognitionHardwareClient$Stub$Proxy -android.hardware.location.IActivityRecognitionHardwareSink -android.hardware.location.IActivityRecognitionHardwareSink$Stub -android.hardware.location.IActivityRecognitionHardwareSink$Stub$Proxy android.hardware.location.IActivityRecognitionHardwareWatcher +android.hardware.location.IContextHubCallback +android.hardware.location.IContextHubCallback$Stub +android.hardware.location.IContextHubCallback$Stub$Proxy android.hardware.location.IContextHubService android.hardware.location.IContextHubService$Stub +android.hardware.location.IContextHubService$Stub$Proxy android.hardware.location.IFusedLocationHardware -android.hardware.location.IFusedLocationHardware$Stub -android.hardware.location.IFusedLocationHardware$Stub$Proxy -android.hardware.location.IFusedLocationHardwareSink -android.hardware.location.IFusedLocationHardwareSink$Stub -android.hardware.location.IFusedLocationHardwareSink$Stub$Proxy android.hardware.location.IGeofenceHardware android.hardware.location.IGeofenceHardware$Stub android.hardware.location.IGeofenceHardware$Stub$Proxy @@ -1699,6 +1732,10 @@ android.hardware.location.IGeofenceHardwareMonitorCallback android.hardware.location.IGeofenceHardwareMonitorCallback$Stub android.hardware.location.IGeofenceHardwareMonitorCallback$Stub$Proxy android.hardware.location.MemoryRegion +android.hardware.location.MemoryRegion$1 +android.hardware.location.NanoApp +android.hardware.location.NanoAppFilter +android.hardware.location.NanoAppFilter$1 android.hardware.location.NanoAppInstanceInfo android.hardware.location.NanoAppInstanceInfo$1 android.hardware.radio.RadioManager @@ -1722,6 +1759,21 @@ android.hardware.radio.RadioMetadata android.hardware.radio.RadioMetadata$1 android.hardware.radio.RadioModule android.hardware.radio.RadioTuner +android.hardware.radio.V1_0.Call +android.hardware.radio.V1_0.CardStatus +android.hardware.radio.V1_0.CdmaSignalStrength +android.hardware.radio.V1_0.EvdoSignalStrength +android.hardware.radio.V1_0.GsmSignalStrength +android.hardware.radio.V1_0.IRadio +android.hardware.radio.V1_0.IRadio$Proxy +android.hardware.radio.V1_0.IRadioIndication +android.hardware.radio.V1_0.IRadioIndication$Stub +android.hardware.radio.V1_0.IRadioResponse +android.hardware.radio.V1_0.IRadioResponse$Stub +android.hardware.radio.V1_0.LteSignalStrength +android.hardware.radio.V1_0.RadioResponseInfo +android.hardware.radio.V1_0.SignalStrength +android.hardware.radio.V1_0.TdScdmaSignalStrength android.hardware.soundtrigger.IRecognitionStatusCallback android.hardware.soundtrigger.IRecognitionStatusCallback$Stub android.hardware.soundtrigger.KeyphraseEnrollmentInfo @@ -1757,21 +1809,28 @@ android.hardware.usb.IUsbManager$Stub$Proxy android.hardware.usb.UsbAccessory android.hardware.usb.UsbDevice android.hardware.usb.UsbDeviceConnection -android.hardware.usb.UsbInterface android.hardware.usb.UsbManager android.hardware.usb.UsbPort android.hardware.usb.UsbPort$1 android.hardware.usb.UsbPortStatus android.hardware.usb.UsbPortStatus$1 android.hardware.usb.UsbRequest +android.hidl.base.V1_0.IBase android.icu.impl.BMPSet android.icu.impl.CacheBase android.icu.impl.CacheValue android.icu.impl.CacheValue$NullValue android.icu.impl.CacheValue$SoftValue android.icu.impl.CacheValue$Strength -android.icu.impl.CalendarData +android.icu.impl.CalendarAstronomer +android.icu.impl.CalendarAstronomer$2 +android.icu.impl.CalendarAstronomer$CoordFunc +android.icu.impl.CalendarAstronomer$Equatorial +android.icu.impl.CalendarAstronomer$MoonAge +android.icu.impl.CalendarAstronomer$SolarLongitude android.icu.impl.CalendarUtil +android.icu.impl.CalendarUtil$CalendarPreferences +android.icu.impl.CaseMap$StringContextIterator android.icu.impl.CharTrie android.icu.impl.CharacterIteration android.icu.impl.ClassLoaderUtil @@ -1779,6 +1838,8 @@ android.icu.impl.CurrencyData android.icu.impl.CurrencyData$CurrencyDisplayInfo android.icu.impl.CurrencyData$CurrencyDisplayInfoProvider android.icu.impl.CurrencyData$CurrencySpacingInfo +android.icu.impl.CurrencyData$CurrencySpacingInfo$SpacingPattern +android.icu.impl.CurrencyData$CurrencySpacingInfo$SpacingType android.icu.impl.DateNumberFormat android.icu.impl.DontCareFieldPosition android.icu.impl.Grego @@ -1792,6 +1853,7 @@ android.icu.impl.ICUCache android.icu.impl.ICUConfig android.icu.impl.ICUCurrencyDisplayInfoProvider android.icu.impl.ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo +android.icu.impl.ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$SpacingInfoSink android.icu.impl.ICUCurrencyMetaInfo android.icu.impl.ICUCurrencyMetaInfo$Collector android.icu.impl.ICUCurrencyMetaInfo$CurrencyCollector @@ -1809,8 +1871,11 @@ android.icu.impl.ICURegionDataTables android.icu.impl.ICUResourceBundle android.icu.impl.ICUResourceBundle$1 android.icu.impl.ICUResourceBundle$2 -android.icu.impl.ICUResourceBundle$2$1 +android.icu.impl.ICUResourceBundle$3 +android.icu.impl.ICUResourceBundle$3$1 +android.icu.impl.ICUResourceBundle$4 android.icu.impl.ICUResourceBundle$AvailEntry +android.icu.impl.ICUResourceBundle$Loader android.icu.impl.ICUResourceBundle$OpenType android.icu.impl.ICUResourceBundle$WholeBundle android.icu.impl.ICUResourceBundleImpl @@ -1844,6 +1909,7 @@ android.icu.impl.IDNA2003 android.icu.impl.JavaTimeZone android.icu.impl.LocaleDisplayNamesImpl android.icu.impl.LocaleDisplayNamesImpl$Cache +android.icu.impl.LocaleDisplayNamesImpl$CapitalizationContextSink android.icu.impl.LocaleDisplayNamesImpl$CapitalizationContextUsage android.icu.impl.LocaleDisplayNamesImpl$DataTable android.icu.impl.LocaleDisplayNamesImpl$DataTables @@ -1875,21 +1941,10 @@ android.icu.impl.PluralRulesLoader android.icu.impl.ReplaceableUCharacterIterator android.icu.impl.RuleCharacterIterator android.icu.impl.SimpleCache -android.icu.impl.SimplePatternFormatter +android.icu.impl.SimpleFormatterImpl android.icu.impl.SoftCache android.icu.impl.StandardPlural android.icu.impl.StringPrepDataReader -android.icu.impl.TextTrieMap -android.icu.impl.TextTrieMap$CharIterator -android.icu.impl.TextTrieMap$Node -android.icu.impl.TimeZoneNamesFactoryImpl -android.icu.impl.TimeZoneNamesImpl -android.icu.impl.TimeZoneNamesImpl$MZ2TZsCache -android.icu.impl.TimeZoneNamesImpl$MZMapEntry -android.icu.impl.TimeZoneNamesImpl$NameInfo -android.icu.impl.TimeZoneNamesImpl$TZ2MZsCache -android.icu.impl.TimeZoneNamesImpl$ZNames -android.icu.impl.TimeZoneNamesImpl$ZNamesLoader android.icu.impl.Trie android.icu.impl.Trie$DataManipulate android.icu.impl.Trie$DefaultGetFoldingOffset @@ -1942,8 +1997,10 @@ android.icu.impl.UCharacterProperty$NormQuickCheckIntProperty android.icu.impl.UPropertyAliases android.icu.impl.UPropertyAliases$IsAcceptable android.icu.impl.URLHandler$URLVisitor +android.icu.impl.UResource$Array android.icu.impl.UResource$Key -android.icu.impl.UResource$TableSink +android.icu.impl.UResource$Sink +android.icu.impl.UResource$Table android.icu.impl.UResource$Value android.icu.impl.USerializedSet android.icu.impl.Utility @@ -1979,7 +2036,6 @@ android.icu.impl.locale.LocaleObjectCache android.icu.impl.locale.LocaleObjectCache$CacheEntry android.icu.impl.locale.LocaleSyntaxException android.icu.lang.UCharacter -android.icu.lang.UCharacter$StringContextIterator android.icu.lang.UCharacterEnums$ECharacterCategory android.icu.lang.UCharacterEnums$ECharacterDirection android.icu.lang.UScript @@ -2014,26 +2070,36 @@ android.icu.text.DateFormat android.icu.text.DateFormat$BooleanAttribute android.icu.text.DateFormat$Field android.icu.text.DateFormatSymbols +android.icu.text.DateFormatSymbols$1 +android.icu.text.DateFormatSymbols$CalendarDataSink +android.icu.text.DateFormatSymbols$CalendarDataSink$AliasType android.icu.text.DateFormatSymbols$CapitalizationContextUsage android.icu.text.DateIntervalFormat android.icu.text.DateIntervalFormat$BestMatchInfo android.icu.text.DateIntervalFormat$SkeletonAndItsBestMatch android.icu.text.DateIntervalInfo +android.icu.text.DateIntervalInfo$DateIntervalSink android.icu.text.DateIntervalInfo$PatternInfo android.icu.text.DateTimePatternGenerator +android.icu.text.DateTimePatternGenerator$AppendItemFormatsSink +android.icu.text.DateTimePatternGenerator$AppendItemNamesSink +android.icu.text.DateTimePatternGenerator$AvailableFormatsSink android.icu.text.DateTimePatternGenerator$DTPGflags android.icu.text.DateTimePatternGenerator$DateTimeMatcher +android.icu.text.DateTimePatternGenerator$DayPeriodAllowedHoursSink android.icu.text.DateTimePatternGenerator$DistanceInfo android.icu.text.DateTimePatternGenerator$FormatParser android.icu.text.DateTimePatternGenerator$PatternInfo android.icu.text.DateTimePatternGenerator$PatternWithMatcher android.icu.text.DateTimePatternGenerator$PatternWithSkeletonFlag +android.icu.text.DateTimePatternGenerator$SkeletonFields android.icu.text.DateTimePatternGenerator$VariableField android.icu.text.DecimalFormat android.icu.text.DecimalFormat$Unit android.icu.text.DecimalFormatSymbols android.icu.text.DecimalFormatSymbols$1 android.icu.text.DecimalFormatSymbols$CacheData +android.icu.text.DecimalFormatSymbols$DecFmtDataSink android.icu.text.DigitList android.icu.text.DisplayContext android.icu.text.DisplayContext$Type @@ -2045,14 +2111,6 @@ android.icu.text.ListFormatter$FormattedListBuilder android.icu.text.ListFormatter$Style android.icu.text.LocaleDisplayNames android.icu.text.LocaleDisplayNames$DialectHandling -android.icu.text.MessageFormat -android.icu.text.MessageFormat$AppendableWrapper -android.icu.text.MessageFormat$Field -android.icu.text.MessagePattern -android.icu.text.MessagePattern$ApostropheMode -android.icu.text.MessagePattern$ArgType -android.icu.text.MessagePattern$Part -android.icu.text.MessagePattern$Part$Type android.icu.text.Normalizer android.icu.text.Normalizer$FCDMode android.icu.text.Normalizer$Mode @@ -2074,6 +2132,9 @@ android.icu.text.NumberFormatServiceShim android.icu.text.NumberFormatServiceShim$NFService android.icu.text.NumberFormatServiceShim$NFService$1RBNumberFormatFactory android.icu.text.NumberingSystem +android.icu.text.NumberingSystem$1 +android.icu.text.NumberingSystem$2 +android.icu.text.NumberingSystem$LocaleLookupData android.icu.text.PluralRanges android.icu.text.PluralRanges$Matrix android.icu.text.PluralRules @@ -2101,20 +2162,18 @@ android.icu.text.RawCollationKey android.icu.text.RelativeDateTimeFormatter android.icu.text.RelativeDateTimeFormatter$AbsoluteUnit android.icu.text.RelativeDateTimeFormatter$Cache +android.icu.text.RelativeDateTimeFormatter$Cache$1 android.icu.text.RelativeDateTimeFormatter$Direction android.icu.text.RelativeDateTimeFormatter$Loader -android.icu.text.RelativeDateTimeFormatter$RelDateTimeFmtDataSink -android.icu.text.RelativeDateTimeFormatter$RelDateTimeFmtDataSink$DateTimeUnit -android.icu.text.RelativeDateTimeFormatter$RelDateTimeFmtDataSink$RelativeSink -android.icu.text.RelativeDateTimeFormatter$RelDateTimeFmtDataSink$RelativeTimeDetailSink -android.icu.text.RelativeDateTimeFormatter$RelDateTimeFmtDataSink$RelativeTimeSink -android.icu.text.RelativeDateTimeFormatter$RelDateTimeFmtDataSink$UnitSink +android.icu.text.RelativeDateTimeFormatter$RelDateTimeDataSink +android.icu.text.RelativeDateTimeFormatter$RelDateTimeDataSink$DateTimeUnit android.icu.text.RelativeDateTimeFormatter$RelativeDateTimeFormatterData android.icu.text.RelativeDateTimeFormatter$RelativeUnit android.icu.text.RelativeDateTimeFormatter$Style android.icu.text.Replaceable android.icu.text.ReplaceableString android.icu.text.RuleBasedBreakIterator +android.icu.text.RuleBasedBreakIterator$LookAheadResults android.icu.text.RuleBasedCollator android.icu.text.RuleBasedCollator$CollationBuffer android.icu.text.RuleBasedCollator$CollationKeyByteSink @@ -2125,9 +2184,6 @@ android.icu.text.SimpleDateFormat android.icu.text.SimpleDateFormat$PatternItem android.icu.text.StringPrep android.icu.text.StringPrepParseException -android.icu.text.TimeZoneNames -android.icu.text.TimeZoneNames$Cache -android.icu.text.TimeZoneNames$Factory android.icu.text.TimeZoneNames$NameType android.icu.text.UCharacterIterator android.icu.text.UFieldPosition @@ -2156,12 +2212,19 @@ android.icu.util.Calendar$WeekDataCache android.icu.util.CharsTrie android.icu.util.CharsTrie$Entry android.icu.util.CharsTrie$Iterator +android.icu.util.ChineseCalendar android.icu.util.Currency +android.icu.util.Currency$1 android.icu.util.Currency$CurrencyUsage android.icu.util.Currency$EquivalenceRelation android.icu.util.CurrencyAmount android.icu.util.Freezable android.icu.util.GregorianCalendar +android.icu.util.HebrewCalendar +android.icu.util.ICUException +android.icu.util.IndianCalendar +android.icu.util.IslamicCalendar +android.icu.util.IslamicCalendar$CalculationType android.icu.util.LocaleData android.icu.util.Measure android.icu.util.MeasureUnit @@ -2175,11 +2238,13 @@ android.icu.util.TimeUnit android.icu.util.TimeZone android.icu.util.TimeZone$ConstantZone android.icu.util.ULocale +android.icu.util.ULocale$1 +android.icu.util.ULocale$2 android.icu.util.ULocale$Category android.icu.util.ULocale$JDKLocaleHelper android.icu.util.ULocale$Type android.icu.util.UResourceBundle -android.icu.util.UResourceBundle$ResourceCacheKey +android.icu.util.UResourceBundle$RootType android.icu.util.UResourceBundleIterator android.icu.util.UResourceTypeMismatchException android.icu.util.VersionInfo @@ -2197,26 +2262,17 @@ android.inputmethodservice.InputMethodService$InputMethodImpl android.inputmethodservice.InputMethodService$InputMethodSessionImpl android.inputmethodservice.InputMethodService$Insets android.inputmethodservice.InputMethodService$SettingsObserver -android.inputmethodservice.Keyboard -android.inputmethodservice.Keyboard$Key -android.inputmethodservice.Keyboard$Row -android.inputmethodservice.KeyboardView -android.inputmethodservice.KeyboardView$1 -android.inputmethodservice.KeyboardView$2 -android.inputmethodservice.KeyboardView$OnKeyboardActionListener -android.inputmethodservice.KeyboardView$SwipeTracker android.inputmethodservice.SoftInputWindow +android.inputmethodservice.SoftInputWindow$Callback android.location.Address android.location.Address$1 android.location.Country android.location.Country$1 android.location.CountryDetector android.location.CountryDetector$ListenerTransport +android.location.CountryDetector$ListenerTransport$1 android.location.CountryListener android.location.Criteria -android.location.Criteria$1 -android.location.FusedBatchOptions -android.location.FusedBatchOptions$1 android.location.Geocoder android.location.GeocoderParams android.location.GeocoderParams$1 @@ -2238,11 +2294,8 @@ android.location.ICountryDetector$Stub$Proxy android.location.ICountryListener android.location.ICountryListener$Stub android.location.ICountryListener$Stub$Proxy -android.location.IFusedGeofenceHardware -android.location.IFusedGeofenceHardware$Stub android.location.IFusedProvider android.location.IFusedProvider$Stub -android.location.IFusedProvider$Stub$Proxy android.location.IGeocodeProvider android.location.IGeocodeProvider$Stub android.location.IGeocodeProvider$Stub$Proxy @@ -2284,7 +2337,6 @@ android.location.LocationManager$ListenerTransport$2 android.location.LocationProvider android.location.LocationRequest android.location.LocationRequest$1 -android.media.AmrInputStream android.media.AudioAttributes android.media.AudioAttributes$1 android.media.AudioAttributes$Builder @@ -2303,6 +2355,7 @@ android.media.AudioHandle android.media.AudioManager android.media.AudioManager$1 android.media.AudioManager$2 +android.media.AudioManager$3 android.media.AudioManager$NativeEventHandlerDelegate android.media.AudioManager$NativeEventHandlerDelegate$1 android.media.AudioManager$OnAmPortUpdateListener @@ -2315,6 +2368,10 @@ android.media.AudioManagerInternal$RingerModeDelegate android.media.AudioMixPort android.media.AudioMixPortConfig android.media.AudioPatch +android.media.AudioPlaybackConfiguration +android.media.AudioPlaybackConfiguration$1 +android.media.AudioPlaybackConfiguration$IPlayerShell +android.media.AudioPlaybackConfiguration$PlayerDeathMonitor android.media.AudioPort android.media.AudioPortConfig android.media.AudioPortEventHandler @@ -2331,6 +2388,8 @@ android.media.AudioSystem$DynamicPolicyCallback android.media.AudioSystem$ErrorCallback android.media.AudioTimestamp android.media.AudioTrack +android.media.BufferingParams +android.media.BufferingParams$1 android.media.CamcorderProfile android.media.CameraProfile android.media.Cea708CaptionRenderer @@ -2339,11 +2398,9 @@ android.media.DecoderCapabilities android.media.DeniedByServerException android.media.EncoderCapabilities android.media.ExifInterface -android.media.ExifInterface$ByteOrderAwarenessDataInputStream -android.media.ExifInterface$ByteOrderAwarenessDataOutputStream +android.media.ExifInterface$ByteOrderedDataInputStream android.media.ExifInterface$ExifAttribute android.media.ExifInterface$ExifTag -android.media.ExifInterface$Rational android.media.IAudioFocusDispatcher android.media.IAudioFocusDispatcher$Stub android.media.IAudioFocusDispatcher$Stub$Proxy @@ -2357,12 +2414,23 @@ android.media.IMediaHTTPConnection android.media.IMediaHTTPConnection$Stub android.media.IMediaHTTPService android.media.IMediaHTTPService$Stub +android.media.IMediaResourceMonitor +android.media.IMediaResourceMonitor$Stub android.media.IMediaRouterClient android.media.IMediaRouterClient$Stub android.media.IMediaRouterClient$Stub$Proxy android.media.IMediaRouterService android.media.IMediaRouterService$Stub android.media.IMediaRouterService$Stub$Proxy +android.media.IMediaScannerListener +android.media.IMediaScannerListener$Stub +android.media.IMediaScannerService +android.media.IMediaScannerService$Stub +android.media.IPlaybackConfigDispatcher +android.media.IPlaybackConfigDispatcher$Stub +android.media.IPlayer +android.media.IPlayer$Stub +android.media.IPlayer$Stub$Proxy android.media.IRecordingConfigDispatcher android.media.IRecordingConfigDispatcher$Stub android.media.IRemoteVolumeController @@ -2390,14 +2458,10 @@ android.media.ImageWriter$OnImageReleasedListener android.media.ImageWriter$WriterSurfaceImage android.media.ImageWriter$WriterSurfaceImage$SurfacePlane android.media.JetPlayer -android.media.MediaActionSound -android.media.MediaActionSound$1 -android.media.MediaActionSound$SoundState android.media.MediaCodec android.media.MediaCodec$BufferInfo android.media.MediaCodec$BufferMap android.media.MediaCodec$BufferMap$CodecBuffer -android.media.MediaCodec$Callback android.media.MediaCodec$CodecException android.media.MediaCodec$CryptoException android.media.MediaCodec$CryptoInfo @@ -2413,7 +2477,6 @@ android.media.MediaCodecInfo$Feature android.media.MediaCodecInfo$VideoCapabilities android.media.MediaCodecList android.media.MediaCrypto -android.media.MediaCryptoException android.media.MediaDescription android.media.MediaDescription$1 android.media.MediaDescription$Builder @@ -2423,7 +2486,6 @@ android.media.MediaDrm$CryptoSession android.media.MediaDrm$EventHandler android.media.MediaDrm$KeyRequest android.media.MediaDrm$MediaDrmStateException -android.media.MediaDrm$OnEventListener android.media.MediaDrm$ProvisionRequest android.media.MediaDrmException android.media.MediaExtractor @@ -2441,7 +2503,8 @@ android.media.MediaMuxer android.media.MediaPlayer android.media.MediaPlayer$1 android.media.MediaPlayer$2 -android.media.MediaPlayer$2$1 +android.media.MediaPlayer$3 +android.media.MediaPlayer$3$1 android.media.MediaPlayer$EventHandler android.media.MediaPlayer$OnBufferingUpdateListener android.media.MediaPlayer$OnCompletionListener @@ -2473,6 +2536,7 @@ android.media.MediaRouter$Static$Client android.media.MediaRouter$Static$Client$1 android.media.MediaRouter$UserRouteInfo android.media.MediaRouter$VolumeCallback +android.media.MediaRouter$VolumeCallbackInfo android.media.MediaRouter$VolumeChangeReceiver android.media.MediaRouter$WifiDisplayStatusChangedReceiver android.media.MediaRouterClientState @@ -2480,7 +2544,13 @@ android.media.MediaRouterClientState$1 android.media.MediaRouterClientState$RouteInfo android.media.MediaRouterClientState$RouteInfo$1 android.media.MediaScanner +android.media.MediaScanner$FileEntry +android.media.MediaScanner$MediaBulkDeleter +android.media.MediaScanner$MyMediaScannerClient +android.media.MediaScannerClient android.media.MediaScannerConnection +android.media.MediaScannerConnection$1 +android.media.MediaScannerConnection$ClientProxy android.media.MediaScannerConnection$MediaScannerConnectionClient android.media.MediaScannerConnection$OnScanCompletedListener android.media.MediaSync @@ -2493,6 +2563,9 @@ android.media.PlaybackParams android.media.PlaybackParams$1 android.media.PlayerBase android.media.PlayerBase$1 +android.media.PlayerBase$2 +android.media.PlayerBase$PlayerIdCard +android.media.PlayerBase$PlayerIdCard$1 android.media.Rating android.media.Rating$1 android.media.RemoteControlClient @@ -2504,7 +2577,6 @@ android.media.Ringtone android.media.Ringtone$MyOnCompletionListener android.media.RingtoneManager android.media.SoundPool -android.media.SoundPool$1 android.media.SoundPool$Builder android.media.SoundPool$EventHandler android.media.SoundPool$OnLoadCompleteListener @@ -2520,7 +2592,6 @@ android.media.ThumbnailUtils android.media.ThumbnailUtils$SizedThumbnailBitmap android.media.ToneGenerator android.media.TtmlRenderer -android.media.UnsupportedSchemeException android.media.Utils android.media.Utils$1 android.media.Utils$2 @@ -2528,10 +2599,8 @@ android.media.VolumePolicy android.media.VolumePolicy$1 android.media.VolumeProvider android.media.WebVttRenderer -android.media.audiofx.AcousticEchoCanceler android.media.audiofx.AudioEffect android.media.audiofx.AudioEffect$Descriptor -android.media.audiofx.AutomaticGainControl android.media.audiofx.BassBoost android.media.audiofx.BassBoost$Settings android.media.audiofx.Equalizer @@ -2541,12 +2610,20 @@ android.media.audiofx.PresetReverb android.media.audiofx.Virtualizer android.media.audiofx.Virtualizer$Settings android.media.audiofx.Visualizer +android.media.audiofx.Visualizer$OnDataCaptureListener android.media.audiopolicy.AudioMix android.media.audiopolicy.AudioMixingRule android.media.audiopolicy.AudioMixingRule$AudioMixMatchCriterion android.media.audiopolicy.AudioPolicyConfig android.media.audiopolicy.IAudioPolicyCallback android.media.audiopolicy.IAudioPolicyCallback$Stub +android.media.browse.MediaBrowser +android.media.browse.MediaBrowser$10 +android.media.browse.MediaBrowser$ConnectionCallback +android.media.browse.MediaBrowser$MediaItem +android.media.browse.MediaBrowser$MediaServiceConnection +android.media.browse.MediaBrowser$MediaServiceConnection$1 +android.media.browse.MediaBrowser$ServiceCallbacks android.media.midi.IMidiDeviceListener android.media.midi.IMidiDeviceOpenCallback android.media.midi.IMidiDeviceServer @@ -2569,6 +2646,8 @@ android.media.projection.MediaProjectionManager$CallbackDelegate android.media.session.IActiveSessionsListener android.media.session.IActiveSessionsListener$Stub android.media.session.IActiveSessionsListener$Stub$Proxy +android.media.session.IOnMediaKeyListener +android.media.session.IOnVolumeKeyLongPressListener android.media.session.ISession android.media.session.ISession$Stub android.media.session.ISession$Stub$Proxy @@ -2617,12 +2696,12 @@ android.media.tv.TvInputHardwareInfo$Builder android.media.tv.TvInputManager android.media.tv.TvStreamConfig android.media.tv.TvStreamConfig$Builder +android.metrics.LogMaker android.mtp.MtpDatabase android.mtp.MtpDevice android.mtp.MtpDeviceInfo android.mtp.MtpEvent android.mtp.MtpObjectInfo -android.mtp.MtpObjectInfo$Builder android.mtp.MtpPropertyGroup android.mtp.MtpPropertyList android.mtp.MtpServer @@ -2632,14 +2711,13 @@ android.net.ConnectivityManager android.net.ConnectivityManager$CallbackHandler android.net.ConnectivityManager$NetworkCallback android.net.ConnectivityManager$OnNetworkActiveListener -android.net.ConnectivityManager$OnStartTetheringCallback android.net.ConnectivityManager$PacketKeepalive android.net.ConnectivityManager$PacketKeepaliveCallback android.net.ConnectivityMetricsEvent android.net.ConnectivityMetricsEvent$1 android.net.ConnectivityMetricsEvent$Reference -android.net.ConnectivityMetricsLogger android.net.ConnectivityThread +android.net.ConnectivityThread$Singleton android.net.Credentials android.net.DataUsageRequest android.net.DhcpInfo @@ -2649,16 +2727,22 @@ android.net.DhcpResults$1 android.net.EthernetManager android.net.EthernetManager$1 android.net.EthernetManager$2 +android.net.EventLogTags android.net.IConnectivityManager android.net.IConnectivityManager$Stub android.net.IConnectivityManager$Stub$Proxy android.net.IConnectivityMetricsLogger android.net.IConnectivityMetricsLogger$Stub -android.net.IConnectivityMetricsLogger$Stub$Proxy android.net.IEthernetManager android.net.IEthernetManager$Stub android.net.IEthernetServiceListener android.net.IEthernetServiceListener$Stub +android.net.IIpConnectivityMetrics +android.net.IIpConnectivityMetrics$Stub +android.net.INetd +android.net.INetd$Stub +android.net.INetd$Stub$Proxy +android.net.INetdEventCallback android.net.INetworkManagementEventObserver android.net.INetworkManagementEventObserver$Stub android.net.INetworkPolicyListener @@ -2669,6 +2753,7 @@ android.net.INetworkPolicyManager$Stub android.net.INetworkPolicyManager$Stub$Proxy android.net.INetworkScoreCache android.net.INetworkScoreCache$Stub +android.net.INetworkScoreCache$Stub$Proxy android.net.INetworkScoreService android.net.INetworkScoreService$Stub android.net.INetworkScoreService$Stub$Proxy @@ -2704,6 +2789,7 @@ android.net.Network$1 android.net.Network$2 android.net.Network$NetworkBoundSocketFactory android.net.NetworkAgent +android.net.NetworkBadging android.net.NetworkCapabilities android.net.NetworkCapabilities$1 android.net.NetworkConfig @@ -2725,6 +2811,7 @@ android.net.NetworkQuotaInfo android.net.NetworkRequest android.net.NetworkRequest$1 android.net.NetworkRequest$Builder +android.net.NetworkRequest$Type android.net.NetworkScoreManager android.net.NetworkScorerAppManager android.net.NetworkState @@ -2745,13 +2832,17 @@ android.net.ParseException android.net.Proxy android.net.ProxyInfo android.net.ProxyInfo$1 +android.net.RecommendationRequest +android.net.RecommendationResult android.net.RouteInfo android.net.RouteInfo$1 android.net.RssiCurve +android.net.RssiCurve$1 android.net.SSLCertificateSocketFactory android.net.SSLCertificateSocketFactory$1 android.net.SSLSessionCache android.net.ScoredNetwork +android.net.ScoredNetwork$1 android.net.SntpClient android.net.StaticIpConfiguration android.net.StaticIpConfiguration$1 @@ -2771,7 +2862,7 @@ android.net.Uri$PathSegments android.net.Uri$PathSegmentsBuilder android.net.Uri$StringUri android.net.UrlQuerySanitizer -android.net.UrlQuerySanitizer$ValueSanitizer +android.net.VpnService android.net.WebAddress android.net.WifiKey android.net.WifiKey$1 @@ -2784,19 +2875,23 @@ android.net.http.HttpResponseCache android.net.http.SslCertificate android.net.http.SslError android.net.http.X509TrustManagerExtensions +android.net.metrics.ApfProgramEvent +android.net.metrics.ApfProgramEvent$1 +android.net.metrics.ConnectStats android.net.metrics.DefaultNetworkEvent android.net.metrics.DefaultNetworkEvent$1 android.net.metrics.DhcpClientEvent android.net.metrics.DhcpClientEvent$1 android.net.metrics.DnsEvent android.net.metrics.DnsEvent$1 -android.net.metrics.IpConnectivityEvent +android.net.metrics.IpConnectivityLog android.net.metrics.IpManagerEvent android.net.metrics.IpManagerEvent$1 -android.net.metrics.IpReachabilityEvent -android.net.metrics.IpReachabilityEvent$1 android.net.metrics.NetworkEvent android.net.metrics.NetworkEvent$1 +android.net.metrics.RaEvent +android.net.metrics.RaEvent$1 +android.net.metrics.RaEvent$Builder android.net.metrics.ValidationProbeEvent android.net.metrics.ValidationProbeEvent$1 android.net.metrics.ValidationProbeEvent$Decoder @@ -2806,8 +2901,6 @@ android.net.nsd.NsdManager android.net.sip.ISipService android.net.sip.ISipService$Stub android.net.sip.SipManager -android.net.sip.SipProfile -android.net.sip.SipProfile$Builder android.net.wifi.IRttManager android.net.wifi.IRttManager$Stub android.net.wifi.IRttManager$Stub$Proxy @@ -2817,9 +2910,10 @@ android.net.wifi.IWifiManager$Stub$Proxy android.net.wifi.IWifiScanner android.net.wifi.IWifiScanner$Stub android.net.wifi.IWifiScanner$Stub$Proxy +android.net.wifi.ParcelUtil +android.net.wifi.RssiPacketCountInfo android.net.wifi.RttManager android.net.wifi.RttManager$RttCapabilities -android.net.wifi.RttManager$RttCapabilities$1 android.net.wifi.RttManager$RttListener android.net.wifi.RttManager$RttResult android.net.wifi.RttManager$ServiceHandler @@ -2831,6 +2925,7 @@ android.net.wifi.SupplicantState android.net.wifi.SupplicantState$1 android.net.wifi.WifiActivityEnergyInfo android.net.wifi.WifiActivityEnergyInfo$1 +android.net.wifi.WifiChannel android.net.wifi.WifiConfiguration android.net.wifi.WifiConfiguration$1 android.net.wifi.WifiConfiguration$AuthAlgorithm @@ -2844,9 +2939,6 @@ android.net.wifi.WifiConnectionStatistics android.net.wifi.WifiConnectionStatistics$1 android.net.wifi.WifiEnterpriseConfig android.net.wifi.WifiEnterpriseConfig$1 -android.net.wifi.WifiEnterpriseConfig$Eap -android.net.wifi.WifiEnterpriseConfig$Phase2 -android.net.wifi.WifiEnterpriseConfig$SupplicantLoader android.net.wifi.WifiInfo android.net.wifi.WifiInfo$1 android.net.wifi.WifiLinkLayerStats @@ -2855,25 +2947,30 @@ android.net.wifi.WifiManager android.net.wifi.WifiManager$ActionListener android.net.wifi.WifiManager$MulticastLock android.net.wifi.WifiManager$WifiLock +android.net.wifi.WifiNetworkScoreCache +android.net.wifi.WifiNetworkScoreCache$CacheListener android.net.wifi.WifiScanner android.net.wifi.WifiScanner$ActionListener android.net.wifi.WifiScanner$ChannelSpec -android.net.wifi.WifiScanner$OperationResult -android.net.wifi.WifiScanner$OperationResult$1 android.net.wifi.WifiScanner$ParcelableScanData android.net.wifi.WifiScanner$ParcelableScanData$1 +android.net.wifi.WifiScanner$ParcelableScanResults +android.net.wifi.WifiScanner$ParcelableScanResults$1 android.net.wifi.WifiScanner$PnoScanListener android.net.wifi.WifiScanner$ScanData android.net.wifi.WifiScanner$ScanData$1 android.net.wifi.WifiScanner$ScanListener android.net.wifi.WifiScanner$ScanSettings android.net.wifi.WifiScanner$ScanSettings$1 +android.net.wifi.WifiScanner$ScanSettings$HiddenNetwork android.net.wifi.WifiScanner$ServiceHandler android.net.wifi.WifiSsid android.net.wifi.WifiSsid$1 +android.net.wifi.WifiWakeReasonAndCounts android.net.wifi.WpsInfo android.net.wifi.WpsInfo$1 -android.net.wifi.nan.WifiNanManager +android.net.wifi.aware.WifiAwareManager +android.net.wifi.hotspot2.PasspointConfiguration android.net.wifi.p2p.IWifiP2pManager android.net.wifi.p2p.IWifiP2pManager$Stub android.net.wifi.p2p.WifiP2pConfig @@ -2925,7 +3022,6 @@ android.nfc.NfcAdapter android.nfc.NfcAdapter$1 android.nfc.NfcAdapter$CreateBeamUrisCallback android.nfc.NfcAdapter$CreateNdefMessageCallback -android.nfc.NfcAdapter$NfcUnlockHandler android.nfc.NfcAdapter$OnNdefPushCompleteCallback android.nfc.NfcEvent android.nfc.NfcManager @@ -2976,11 +3072,17 @@ android.opengl.GLSurfaceView$EglHelper android.opengl.GLSurfaceView$GLThread android.opengl.GLSurfaceView$GLThreadManager android.opengl.GLSurfaceView$Renderer +android.opengl.GLSurfaceView$SimpleEGLConfigChooser android.opengl.GLU android.opengl.GLUtils android.opengl.Matrix android.opengl.Visibility +android.os.-$Lambda$0$-dncxFEc2F2bgG2fsIoC6FC6WNE +android.os.-$Lambda$1$-dncxFEc2F2bgG2fsIoC6FC6WNE +android.os.-$Lambda$5$6x30vPJhBKUfNY8tswxuZo3DCe0 +android.os.-$Lambda$67$OsaxDBgigpqjZN1F4C6nYRYm1YQ android.os.AsyncResult +android.os.AsyncTask android.os.AsyncTask$1 android.os.AsyncTask$2 android.os.AsyncTask$3 @@ -3000,12 +3102,14 @@ android.os.BatteryProperties$1 android.os.BatteryStats android.os.BatteryStats$BitDescription android.os.BatteryStats$ControllerActivityCounter +android.os.BatteryStats$Counter android.os.BatteryStats$DailyItem android.os.BatteryStats$HistoryEventTracker android.os.BatteryStats$HistoryItem android.os.BatteryStats$HistoryPrinter android.os.BatteryStats$HistoryStepDetails android.os.BatteryStats$HistoryTag +android.os.BatteryStats$IntToString android.os.BatteryStats$LevelStepTracker android.os.BatteryStats$LongCounter android.os.BatteryStats$PackageChange @@ -3014,6 +3118,7 @@ android.os.BatteryStats$Uid android.os.BatteryStats$Uid$Pid android.os.BatteryStats$Uid$Pkg android.os.BatteryStats$Uid$Pkg$Serv +android.os.BatteryStats$Uid$Proc android.os.BatteryStats$Uid$Sensor android.os.BatteryStats$Uid$Wakelock android.os.Binder @@ -3042,16 +3147,20 @@ android.os.DropBoxManager$Entry$1 android.os.Environment android.os.Environment$UserEnvironment android.os.FactoryTest -android.os.FileBridge -android.os.FileBridge$FileBridgeOutputStream +android.os.FileObserver android.os.FileObserver$ObserverThread android.os.FileUtils +android.os.GraphicsEnvironment android.os.Handler android.os.Handler$BlockingRunnable android.os.Handler$Callback android.os.Handler$MessengerImpl android.os.HandlerThread android.os.HardwarePropertiesManager +android.os.HwBinder +android.os.HwBlob +android.os.HwParcel +android.os.HwRemoteBinder android.os.IBatteryPropertiesListener android.os.IBatteryPropertiesListener$Stub android.os.IBatteryPropertiesRegistrar @@ -3062,11 +3171,22 @@ android.os.IBinder$DeathRecipient android.os.ICancellationSignal android.os.ICancellationSignal$Stub android.os.ICancellationSignal$Stub$Proxy +android.os.IDeviceIdentifiersPolicyService +android.os.IDeviceIdentifiersPolicyService$Stub android.os.IDeviceIdleController android.os.IDeviceIdleController$Stub android.os.IDeviceIdleController$Stub$Proxy android.os.IHardwarePropertiesManager android.os.IHardwarePropertiesManager$Stub +android.os.IHardwarePropertiesManager$Stub$Proxy +android.os.IHwBinder +android.os.IHwBinder$DeathRecipient +android.os.IHwInterface +android.os.IIncidentManager +android.os.IIncidentManager$Stub +android.os.IInstalld +android.os.IInstalld$Stub +android.os.IInstalld$Stub$Proxy android.os.IInterface android.os.IMaintenanceActivityListener android.os.IMessenger @@ -3084,10 +3204,8 @@ android.os.IPowerManager$Stub$Proxy android.os.IProcessInfoService android.os.IProcessInfoService$Stub android.os.IProgressListener -android.os.IProgressListener$Stub android.os.IRecoverySystem android.os.IRecoverySystem$Stub -android.os.IRecoverySystem$Stub$Proxy android.os.IRecoverySystemProgressListener android.os.IRemoteCallback android.os.IRemoteCallback$Stub @@ -3103,6 +3221,7 @@ android.os.IUserManager$Stub$Proxy android.os.IVibratorService android.os.IVibratorService$Stub android.os.IVibratorService$Stub$Proxy +android.os.IncidentManager android.os.LocaleList android.os.LocaleList$1 android.os.Looper @@ -3115,7 +3234,6 @@ android.os.MessageQueue$IdleHandler android.os.MessageQueue$OnFileDescriptorEventListener android.os.Messenger android.os.Messenger$1 -android.os.NetworkOnMainThreadException android.os.NullVibrator android.os.OperationCanceledException android.os.Parcel @@ -3141,6 +3259,8 @@ android.os.PatternMatcher$1 android.os.PersistableBundle android.os.PersistableBundle$1 android.os.PersistableBundle$MyReadMapCallback +android.os.PooledStringReader +android.os.PooledStringWriter android.os.PowerManager android.os.PowerManager$WakeLock android.os.PowerManager$WakeLock$1 @@ -3148,12 +3268,14 @@ android.os.PowerManagerInternal android.os.PowerManagerInternal$LowPowerModeListener android.os.Process android.os.Process$ProcessStartResult -android.os.Process$ZygoteState android.os.RecoverySystem -android.os.RecoverySystem$ProgressListener android.os.Registrant android.os.RegistrantList android.os.RemoteCallback +android.os.RemoteCallback$1 +android.os.RemoteCallback$2 +android.os.RemoteCallback$3 +android.os.RemoteCallback$OnResultListener android.os.RemoteCallbackList android.os.RemoteCallbackList$Callback android.os.RemoteException @@ -3163,9 +3285,13 @@ android.os.ResultReceiver$MyResultReceiver android.os.ResultReceiver$MyRunnable android.os.SELinux android.os.ServiceManager +android.os.ServiceManager$ServiceNotFoundException android.os.ServiceManagerNative android.os.ServiceManagerProxy android.os.ServiceSpecificException +android.os.ShellCallback +android.os.ShellCallback$1 +android.os.ShellCommand android.os.StatFs android.os.StrictMode android.os.StrictMode$1 @@ -3191,6 +3317,7 @@ android.os.StrictMode$ThreadPolicy android.os.StrictMode$ThreadPolicy$Builder android.os.StrictMode$ThreadSpanState android.os.StrictMode$ViolationInfo +android.os.StrictMode$ViolationInfo$1 android.os.StrictMode$VmPolicy android.os.StrictMode$VmPolicy$Builder android.os.SynchronousResultReceiver @@ -3203,11 +3330,9 @@ android.os.SystemService$State android.os.SystemVibrator android.os.TokenWatcher android.os.TokenWatcher$1 -android.os.TokenWatcher$Death android.os.Trace android.os.Trace$1 android.os.TransactionTooLargeException -android.os.TransactionTracker android.os.UEventObserver android.os.UEventObserver$UEvent android.os.UEventObserver$UEventThread @@ -3220,26 +3345,30 @@ android.os.UserManagerInternal$UserRestrictionsListener android.os.Vibrator android.os.WorkSource android.os.WorkSource$1 +android.os.ZygoteProcess +android.os.ZygoteProcess$ZygoteState android.os.ZygoteStartFailedEx +android.os.health.HealthStats android.os.health.HealthStatsParceler android.os.health.SystemHealthManager +android.os.health.TimerStat android.os.storage.DiskInfo android.os.storage.DiskInfo$1 -android.os.storage.IStorageManager -android.os.storage.IStorageManager$Stub -android.os.storage.IStorageManager$Stub$Proxy +android.os.storage.IObbActionListener +android.os.storage.IObbActionListener$Stub android.os.storage.IStorageEventListener android.os.storage.IStorageEventListener$Stub android.os.storage.IStorageEventListener$Stub$Proxy +android.os.storage.IStorageManager +android.os.storage.IStorageManager$Stub +android.os.storage.IStorageManager$Stub$Proxy android.os.storage.IStorageShutdownObserver -android.os.storage.IObbActionListener -android.os.storage.IObbActionListener$Stub -android.os.storage.StorageManagerInternal -android.os.storage.StorageManagerInternal$ExternalStorageMountPolicy android.os.storage.StorageEventListener android.os.storage.StorageManager android.os.storage.StorageManager$ObbActionListener android.os.storage.StorageManager$StorageEventListenerDelegate +android.os.storage.StorageManagerInternal +android.os.storage.StorageManagerInternal$ExternalStorageMountPolicy android.os.storage.StorageVolume android.os.storage.StorageVolume$1 android.os.storage.VolumeInfo @@ -3247,30 +3376,30 @@ android.os.storage.VolumeInfo$1 android.os.storage.VolumeInfo$2 android.os.storage.VolumeRecord android.os.storage.VolumeRecord$1 +android.permissionpresenterservice.RuntimePermissionPresenterService +android.permissionpresenterservice.RuntimePermissionPresenterService$1 +android.permissionpresenterservice.RuntimePermissionPresenterService$MyHandler +android.preference.CheckBoxPreference android.preference.DialogPreference -android.preference.GenericInflater android.preference.GenericInflater$Parent android.preference.ListPreference android.preference.Preference +android.preference.Preference$BaseSavedState +android.preference.Preference$BaseSavedState$1 android.preference.Preference$OnPreferenceChangeInternalListener android.preference.Preference$OnPreferenceChangeListener android.preference.Preference$OnPreferenceClickListener android.preference.PreferenceActivity -android.preference.PreferenceActivity$1 -android.preference.PreferenceActivity$Header -android.preference.PreferenceActivity$Header$1 android.preference.PreferenceFragment android.preference.PreferenceFragment$1 android.preference.PreferenceFragment$2 android.preference.PreferenceFragment$3 android.preference.PreferenceFragment$OnPreferenceStartFragmentCallback android.preference.PreferenceFrameLayout -android.preference.PreferenceFrameLayout$LayoutParams android.preference.PreferenceGroup android.preference.PreferenceGroupAdapter android.preference.PreferenceGroupAdapter$1 android.preference.PreferenceGroupAdapter$PreferenceLayout -android.preference.PreferenceInflater android.preference.PreferenceManager android.preference.PreferenceManager$OnActivityDestroyListener android.preference.PreferenceManager$OnPreferenceTreeClickListener @@ -3285,8 +3414,6 @@ android.preference.SwitchPreference$Listener android.preference.TwoStatePreference android.print.IPrintDocumentAdapter android.print.IPrintJobStateChangeListener -android.print.IPrintJobStateChangeListener$Stub -android.print.IPrintJobStateChangeListener$Stub$Proxy android.print.IPrintManager android.print.IPrintManager$Stub android.print.IPrintManager$Stub$Proxy @@ -3298,7 +3425,6 @@ android.print.IPrintSpooler$Stub android.print.IPrintSpooler$Stub$Proxy android.print.IPrintSpoolerCallbacks android.print.IPrintSpoolerCallbacks$Stub -android.print.IPrintSpoolerCallbacks$Stub$Proxy android.print.IPrintSpoolerClient android.print.IPrintSpoolerClient$Stub android.print.IPrintSpoolerClient$Stub$Proxy @@ -3314,31 +3440,25 @@ android.print.PrintDocumentAdapter$LayoutResultCallback android.print.PrintDocumentAdapter$WriteResultCallback android.print.PrintDocumentInfo android.print.PrintDocumentInfo$Builder -android.print.PrintJob android.print.PrintJobId android.print.PrintJobInfo -android.print.PrintJobInfo$1 android.print.PrintManager android.print.PrintManager$1 -android.print.PrintManager$PrintJobStateChangeListener -android.print.PrintManager$PrintJobStateChangeListenerWrapper android.print.PrintManager$PrintServicesChangeListener android.print.PrintManager$PrintServicesChangeListenerWrapper android.print.PrintServicesLoader android.print.PrintServicesLoader$1 android.print.PrintServicesLoader$MyHandler android.print.PrinterId -android.print.pdf.PrintedPdfDocument android.printservice.IPrintServiceClient android.printservice.IPrintServiceClient$Stub android.printservice.PrintServiceInfo android.printservice.PrintServiceInfo$1 android.printservice.recommendation.IRecommendationsChangeListener +android.provider.-$Lambda$46$87WmhkvObehVg0OMBzwa_MTVV8g android.provider.BaseColumns android.provider.BlockedNumberContract android.provider.BlockedNumberContract$BlockedNumbers -android.provider.BlockedNumberContract$SystemContract -android.provider.BlockedNumberContract$SystemContract$BlockSuppressionStatus android.provider.CalendarContract android.provider.CalendarContract$Attendees android.provider.CalendarContract$AttendeesColumns @@ -3367,12 +3487,16 @@ android.provider.CalendarContract$SyncState android.provider.CallLog android.provider.CallLog$Calls android.provider.Contacts +android.provider.Contacts$ContactMethods +android.provider.Contacts$ContactMethodsColumns +android.provider.Contacts$PeopleColumns android.provider.ContactsContract android.provider.ContactsContract$AggregationExceptions android.provider.ContactsContract$BaseSyncColumns android.provider.ContactsContract$CommonDataKinds$BaseTypes android.provider.ContactsContract$CommonDataKinds$Callable android.provider.ContactsContract$CommonDataKinds$CommonColumns +android.provider.ContactsContract$CommonDataKinds$Contactables android.provider.ContactsContract$CommonDataKinds$Email android.provider.ContactsContract$CommonDataKinds$Event android.provider.ContactsContract$CommonDataKinds$Im @@ -3385,7 +3509,6 @@ android.provider.ContactsContract$ContactNameColumns android.provider.ContactsContract$ContactOptionsColumns android.provider.ContactsContract$ContactStatusColumns android.provider.ContactsContract$Contacts -android.provider.ContactsContract$Contacts$AggregationSuggestions$Builder android.provider.ContactsContract$ContactsColumns android.provider.ContactsContract$Data android.provider.ContactsContract$DataColumns @@ -3397,7 +3520,6 @@ android.provider.ContactsContract$DeletedContactsColumns android.provider.ContactsContract$Directory android.provider.ContactsContract$DisplayPhoto android.provider.ContactsContract$Groups -android.provider.ContactsContract$Groups$EntityIteratorImpl android.provider.ContactsContract$GroupsColumns android.provider.ContactsContract$MetadataSync android.provider.ContactsContract$MetadataSyncColumns @@ -3408,7 +3530,6 @@ android.provider.ContactsContract$Profile android.provider.ContactsContract$ProviderStatus android.provider.ContactsContract$QuickContact android.provider.ContactsContract$RawContacts -android.provider.ContactsContract$RawContacts$EntityIteratorImpl android.provider.ContactsContract$RawContactsColumns android.provider.ContactsContract$RawContactsEntity android.provider.ContactsContract$Settings @@ -3418,8 +3539,8 @@ android.provider.ContactsContract$StreamItems android.provider.ContactsContract$StreamItemsColumns android.provider.ContactsContract$SyncColumns android.provider.ContactsContract$SyncState +android.provider.ContactsInternal android.provider.DocumentsContract -android.provider.DocumentsContract$Root android.provider.DocumentsProvider android.provider.Downloads android.provider.Downloads$Impl @@ -3450,12 +3571,11 @@ android.provider.SearchIndexableResource android.provider.SearchIndexablesContract android.provider.SearchIndexablesProvider android.provider.SearchRecentSuggestions -android.provider.SearchRecentSuggestions$1 android.provider.Settings +android.provider.Settings$ContentProviderHolder android.provider.Settings$GenerationTracker android.provider.Settings$Global android.provider.Settings$NameValueCache -android.provider.Settings$NameValueCache$-java_lang_String_getStringForUser_android_content_ContentResolver_cr_java_lang_String_name_int_userHandle_LambdaImpl0 android.provider.Settings$NameValueTable android.provider.Settings$Secure android.provider.Settings$SettingNotFoundException @@ -3492,18 +3612,21 @@ android.provider.UserDictionary$Words android.provider.VoicemailContract$Status android.provider.VoicemailContract$Voicemails android.renderscript.Allocation +android.renderscript.Allocation$MipmapControl android.renderscript.BaseObj android.renderscript.Element -android.renderscript.Matrix4f -android.renderscript.RSRuntimeException +android.renderscript.Element$DataKind +android.renderscript.Element$DataType android.renderscript.RenderScript +android.renderscript.RenderScript$ContextType +android.renderscript.RenderScript$MessageThread android.renderscript.RenderScriptCacheDir android.renderscript.Script android.renderscript.ScriptIntrinsic android.renderscript.ScriptIntrinsicBlur android.renderscript.Type -android.security.Credentials -android.security.FrameworkNetworkSecurityPolicy +android.renderscript.Type$Builder +android.renderscript.Type$CubemapFace android.security.GateKeeper android.security.IKeyChainService android.security.IKeyChainService$Stub @@ -3514,10 +3637,11 @@ android.security.IKeystoreService$Stub$Proxy android.security.KeyChain android.security.KeyChain$1 android.security.KeyChain$KeyChainConnection -android.security.KeyChainAliasCallback android.security.KeyStore -android.security.KeyStore$State android.security.NetworkSecurityPolicy +android.security.keymaster.IKeyAttestationApplicationIdProvider +android.security.keymaster.IKeyAttestationApplicationIdProvider$Stub +android.security.keymaster.KeyAttestationApplicationId android.security.keymaster.KeymasterArguments android.security.keymaster.KeymasterArguments$1 android.security.keystore.AndroidKeyStoreBCWorkaroundProvider @@ -3559,12 +3683,20 @@ android.security.net.config.PinSet android.security.net.config.RootTrustManager android.security.net.config.RootTrustManagerFactorySpi android.security.net.config.SystemCertificateSource -android.security.net.config.TrustAnchor +android.security.net.config.SystemCertificateSource$NoPreloadHolder android.security.net.config.TrustedCertificateStoreAdapter android.security.net.config.UserCertificateSource +android.security.net.config.UserCertificateSource$NoPreloadHolder +android.security.net.config.XmlConfigSource +android.security.net.config.XmlConfigSource$ParserException +android.service.autofill.IAutoFillManagerService +android.service.autofill.IAutoFillManagerService$Stub +android.service.autofill.IAutoFillManagerService$Stub$Proxy android.service.carrier.CarrierIdentifier +android.service.carrier.CarrierIdentifier$1 android.service.carrier.ICarrierService android.service.carrier.ICarrierService$Stub +android.service.carrier.ICarrierService$Stub$Proxy android.service.chooser.ChooserTarget android.service.chooser.ChooserTargetService android.service.dreams.DreamManagerInternal @@ -3580,13 +3712,22 @@ android.service.dreams.IDreamManager$Stub$Proxy android.service.dreams.IDreamService android.service.dreams.IDreamService$Stub android.service.dreams.IDreamService$Stub$Proxy -android.service.gatekeeper.GateKeeperResponse -android.service.gatekeeper.GateKeeperResponse$1 android.service.gatekeeper.IGateKeeperService android.service.gatekeeper.IGateKeeperService$Stub android.service.gatekeeper.IGateKeeperService$Stub$Proxy -android.service.media.CameraPrewarmService +android.service.media.IMediaBrowserService +android.service.media.IMediaBrowserService$Stub +android.service.media.IMediaBrowserService$Stub$Proxy +android.service.media.IMediaBrowserServiceCallbacks +android.service.media.IMediaBrowserServiceCallbacks$Stub +android.service.media.IMediaBrowserServiceCallbacks$Stub$Proxy android.service.media.MediaBrowserService +android.service.media.MediaBrowserService$1 +android.service.media.MediaBrowserService$BrowserRoot +android.service.media.MediaBrowserService$ConnectionRecord +android.service.media.MediaBrowserService$Result +android.service.media.MediaBrowserService$ServiceBinder +android.service.media.MediaBrowserService$ServiceBinder$1 android.service.notification.Adjustment android.service.notification.Condition android.service.notification.Condition$1 @@ -3597,6 +3738,7 @@ android.service.notification.IConditionListener android.service.notification.IConditionListener$Stub android.service.notification.IConditionProvider android.service.notification.IConditionProvider$Stub +android.service.notification.IConditionProvider$Stub$Proxy android.service.notification.INotificationListener android.service.notification.INotificationListener$Stub android.service.notification.INotificationListener$Stub$Proxy @@ -3609,9 +3751,6 @@ android.service.notification.NotificationListenerService$NotificationListenerWra android.service.notification.NotificationListenerService$Ranking android.service.notification.NotificationListenerService$RankingMap android.service.notification.NotificationListenerService$RankingMap$1 -android.service.notification.NotificationAssistantService -android.service.notification.NotificationAssistantService$MyHandler -android.service.notification.NotificationAssistantService$NotificationRankingServiceWrapper android.service.notification.NotificationRankingUpdate android.service.notification.NotificationRankingUpdate$1 android.service.notification.StatusBarNotification @@ -3620,9 +3759,7 @@ android.service.notification.ZenModeConfig android.service.notification.ZenModeConfig$1 android.service.notification.ZenModeConfig$Diff android.service.notification.ZenModeConfig$EventInfo -android.service.notification.ZenModeConfig$Migration android.service.notification.ZenModeConfig$ScheduleInfo -android.service.notification.ZenModeConfig$XmlV1 android.service.notification.ZenModeConfig$ZenRule android.service.notification.ZenModeConfig$ZenRule$1 android.service.persistentdata.IPersistentDataBlockService @@ -3633,6 +3770,7 @@ android.service.quicksettings.IQSService android.service.quicksettings.IQSService$Stub android.service.quicksettings.IQSTileService android.service.quicksettings.Tile +android.service.quicksettings.Tile$1 android.service.quicksettings.TileService android.service.textservice.SpellCheckerService android.service.textservice.SpellCheckerService$InternalISpellCheckerSession @@ -3641,16 +3779,6 @@ android.service.textservice.SpellCheckerService$SentenceLevelAdapter$SentenceTex android.service.textservice.SpellCheckerService$SentenceLevelAdapter$SentenceWordItem android.service.textservice.SpellCheckerService$Session android.service.textservice.SpellCheckerService$SpellCheckerServiceBinder -android.service.trust.ITrustAgentService -android.service.trust.ITrustAgentService$Stub -android.service.trust.ITrustAgentService$Stub$Proxy -android.service.trust.ITrustAgentServiceCallback -android.service.trust.ITrustAgentServiceCallback$Stub -android.service.trust.ITrustAgentServiceCallback$Stub$Proxy -android.service.trust.TrustAgentService -android.service.trust.TrustAgentService$1 -android.service.trust.TrustAgentService$ConfigurationData -android.service.trust.TrustAgentService$TrustAgentServiceWrapper android.service.voice.AlwaysOnHotwordDetector android.service.voice.AlwaysOnHotwordDetector$Callback android.service.voice.AlwaysOnHotwordDetector$EventPayload @@ -3661,12 +3789,33 @@ android.service.voice.IVoiceInteractionService android.service.voice.IVoiceInteractionService$Stub android.service.voice.IVoiceInteractionService$Stub$Proxy android.service.voice.IVoiceInteractionSession +android.service.voice.IVoiceInteractionSession$Stub +android.service.voice.IVoiceInteractionSession$Stub$Proxy +android.service.voice.IVoiceInteractionSessionService +android.service.voice.IVoiceInteractionSessionService$Stub +android.service.voice.IVoiceInteractionSessionService$Stub$Proxy android.service.voice.VoiceInteractionManagerInternal android.service.voice.VoiceInteractionService android.service.voice.VoiceInteractionService$1 android.service.voice.VoiceInteractionService$MyHandler android.service.voice.VoiceInteractionServiceInfo android.service.voice.VoiceInteractionSession +android.service.voice.VoiceInteractionSession$1 +android.service.voice.VoiceInteractionSession$2 +android.service.voice.VoiceInteractionSession$2$1 +android.service.voice.VoiceInteractionSession$3 +android.service.voice.VoiceInteractionSession$4 +android.service.voice.VoiceInteractionSession$AbortVoiceRequest +android.service.voice.VoiceInteractionSession$CommandRequest +android.service.voice.VoiceInteractionSession$CompleteVoiceRequest +android.service.voice.VoiceInteractionSession$ConfirmationRequest +android.service.voice.VoiceInteractionSession$Insets +android.service.voice.VoiceInteractionSession$MyCallbacks +android.service.voice.VoiceInteractionSession$PickOptionRequest +android.service.voice.VoiceInteractionSession$Request +android.service.voice.VoiceInteractionSessionService +android.service.voice.VoiceInteractionSessionService$1 +android.service.voice.VoiceInteractionSessionService$2 android.service.vr.IVrManager android.service.vr.IVrManager$Stub android.service.vr.IVrManager$Stub$Proxy @@ -3733,6 +3882,7 @@ android.system.StructAddrinfo android.system.StructFlock android.system.StructGroupReq android.system.StructGroupSourceReq +android.system.StructIfaddrs android.system.StructLinger android.system.StructPasswd android.system.StructPollfd @@ -3742,6 +3892,7 @@ android.system.StructTimeval android.system.StructUcred android.system.StructUtsname android.system.UnixSocketAddress +android.telecom.-$Lambda$3$afyb_ODGzn3xMew6fjs8ANSIdVo android.telecom.AudioState android.telecom.AudioState$1 android.telecom.Call @@ -3760,8 +3911,8 @@ android.telecom.Conferenceable android.telecom.Connection android.telecom.Connection$1 android.telecom.Connection$2 +android.telecom.Connection$FailureSignalingConnection android.telecom.Connection$Listener -android.telecom.Connection$VideoProvider android.telecom.ConnectionRequest android.telecom.ConnectionRequest$1 android.telecom.ConnectionService @@ -3783,12 +3934,29 @@ android.telecom.InCallService$1 android.telecom.InCallService$2 android.telecom.InCallService$InCallServiceBinder android.telecom.InCallService$VideoCall -android.telecom.InCallService$VideoCall$Callback android.telecom.Log android.telecom.Log$1 +android.telecom.Logging.-$Lambda$2$OwO3BlCgqcOx28O1BaOAPVPor24 +android.telecom.Logging.-$Lambda$35$OwO3BlCgqcOx28O1BaOAPVPor24 +android.telecom.Logging.-$Lambda$47$OwO3BlCgqcOx28O1BaOAPVPor24 +android.telecom.Logging.EventManager +android.telecom.Logging.EventManager$Event +android.telecom.Logging.EventManager$EventListener +android.telecom.Logging.EventManager$EventRecord +android.telecom.Logging.EventManager$Loggable +android.telecom.Logging.EventManager$TimedEventPair +android.telecom.Logging.Runnable +android.telecom.Logging.Runnable$1 +android.telecom.Logging.Session +android.telecom.Logging.Session$Info +android.telecom.Logging.Session$Info$1 +android.telecom.Logging.SessionManager +android.telecom.Logging.SessionManager$ICurrentThreadId +android.telecom.Logging.SessionManager$ISessionCleanupTimeoutMs +android.telecom.Logging.SessionManager$ISessionIdQueryHandler +android.telecom.Logging.SessionManager$ISessionListener android.telecom.ParcelableCall android.telecom.ParcelableCall$1 -android.telecom.ParcelableCallAnalytics android.telecom.ParcelableConference android.telecom.ParcelableConnection android.telecom.ParcelableConnection$1 @@ -3800,40 +3968,41 @@ android.telecom.PhoneAccount$Builder android.telecom.PhoneAccountHandle android.telecom.PhoneAccountHandle$1 android.telecom.RemoteConnectionManager -android.telecom.Response android.telecom.StatusHints +android.telecom.TelecomAnalytics +android.telecom.TelecomAnalytics$SessionTiming +android.telecom.TelecomAnalytics$SessionTiming$1 android.telecom.TelecomManager +android.telecom.TimedEvent android.telecom.VideoProfile android.telecom.VideoProfile$1 -android.telecom.Voicemail -android.telecom.Voicemail$Builder android.telephony.CarrierConfigManager android.telephony.CellBroadcastMessage android.telephony.CellIdentityCdma android.telephony.CellIdentityGsm android.telephony.CellIdentityLte -android.telephony.CellIdentityLte$1 android.telephony.CellIdentityWcdma +android.telephony.CellIdentityWcdma$1 android.telephony.CellInfo android.telephony.CellInfo$1 android.telephony.CellInfoCdma android.telephony.CellInfoGsm android.telephony.CellInfoLte -android.telephony.CellInfoLte$1 android.telephony.CellInfoWcdma +android.telephony.CellInfoWcdma$1 android.telephony.CellLocation android.telephony.CellSignalStrength android.telephony.CellSignalStrengthCdma android.telephony.CellSignalStrengthGsm android.telephony.CellSignalStrengthLte -android.telephony.CellSignalStrengthLte$1 android.telephony.CellSignalStrengthWcdma +android.telephony.CellSignalStrengthWcdma$1 +android.telephony.ClientRequestStats +android.telephony.ClientRequestStats$1 android.telephony.DisconnectCause android.telephony.IccOpenLogicalChannelResponse android.telephony.ModemActivityInfo android.telephony.ModemActivityInfo$1 -android.telephony.NeighboringCellInfo -android.telephony.NeighboringCellInfo$1 android.telephony.PhoneNumberFormattingTextWatcher android.telephony.PhoneNumberUtils android.telephony.PhoneStateListener @@ -3844,7 +4013,6 @@ android.telephony.PreciseCallState$1 android.telephony.PreciseDataConnectionState android.telephony.PreciseDataConnectionState$1 android.telephony.RadioAccessFamily -android.telephony.RadioAccessFamily$1 android.telephony.Rlog android.telephony.ServiceState android.telephony.ServiceState$1 @@ -3859,26 +4027,41 @@ android.telephony.SubscriptionManager android.telephony.SubscriptionManager$OnSubscriptionsChangedListener android.telephony.SubscriptionManager$OnSubscriptionsChangedListener$1 android.telephony.SubscriptionManager$OnSubscriptionsChangedListener$2 +android.telephony.TelephonyHistogram +android.telephony.TelephonyHistogram$1 android.telephony.TelephonyManager android.telephony.TelephonyManager$MultiSimVariants +android.telephony.VisualVoicemailSmsFilterSettings android.telephony.VoLteServiceState android.telephony.VoLteServiceState$1 android.telephony.cdma.CdmaCellLocation +android.telephony.cdma.CdmaSmsCbProgramData android.telephony.gsm.GsmCellLocation android.telephony.gsm.SmsMessage android.text.AndroidBidi android.text.AndroidCharacter android.text.Annotation -android.text.AutoText android.text.BidiFormatter android.text.BidiFormatter$DirectionalityEstimator android.text.BoringLayout android.text.BoringLayout$Metrics +android.text.CharSequenceCharacterIterator android.text.ClipboardManager android.text.DynamicLayout android.text.DynamicLayout$ChangeWatcher android.text.Editable android.text.Editable$Factory +android.text.FontConfig +android.text.FontConfig$1 +android.text.FontConfig$Alias +android.text.FontConfig$Alias$1 +android.text.FontConfig$Axis +android.text.FontConfig$Axis$1 +android.text.FontConfig$Family +android.text.FontConfig$Family$1 +android.text.FontConfig$Font +android.text.FontConfig$Font$1 +android.text.FontManager android.text.GetChars android.text.GraphicsOperations android.text.Html @@ -3889,6 +4072,8 @@ android.text.HtmlToSpannedConverter android.text.HtmlToSpannedConverter$Bold android.text.HtmlToSpannedConverter$Href android.text.Hyphenator +android.text.ITextClassificationService +android.text.ITextClassificationService$Stub android.text.InputFilter android.text.InputFilter$LengthFilter android.text.InputType @@ -3948,16 +4133,12 @@ android.text.method.ArrowKeyMovementMethod android.text.method.BaseKeyListener android.text.method.BaseMovementMethod android.text.method.DialerKeyListener -android.text.method.DigitsKeyListener android.text.method.KeyListener android.text.method.LinkMovementMethod android.text.method.MetaKeyKeyListener android.text.method.MovementMethod android.text.method.NumberKeyListener android.text.method.PasswordTransformationMethod -android.text.method.PasswordTransformationMethod$PasswordCharSequence -android.text.method.PasswordTransformationMethod$ViewReference -android.text.method.PasswordTransformationMethod$Visible android.text.method.QwertyKeyListener android.text.method.QwertyKeyListener$Replaced android.text.method.ReplacementTransformationMethod @@ -3975,7 +4156,6 @@ android.text.method.TransformationMethod2 android.text.method.WordIterator android.text.style.AbsoluteSizeSpan android.text.style.AlignmentSpan -android.text.style.AlignmentSpan$Standard android.text.style.BackgroundColorSpan android.text.style.BulletSpan android.text.style.CharacterStyle @@ -3994,7 +4174,6 @@ android.text.style.LineHeightSpan$WithDensity android.text.style.MetricAffectingSpan android.text.style.MetricAffectingSpan$Passthrough android.text.style.ParagraphStyle -android.text.style.QuoteSpan android.text.style.RelativeSizeSpan android.text.style.ReplacementSpan android.text.style.SpellCheckSpan @@ -4002,7 +4181,6 @@ android.text.style.StrikethroughSpan android.text.style.StyleSpan android.text.style.SubscriptSpan android.text.style.SuggestionSpan -android.text.style.SuggestionSpan$1 android.text.style.SuperscriptSpan android.text.style.TabStopSpan android.text.style.TextAppearanceSpan @@ -4012,7 +4190,6 @@ android.text.style.TtsSpan$DigitsBuilder android.text.style.TtsSpan$SemioticClassBuilder android.text.style.TtsSpan$TelephoneBuilder android.text.style.TtsSpan$TextBuilder -android.text.style.TtsSpan$VerbatimBuilder android.text.style.TypefaceSpan android.text.style.URLSpan android.text.style.UnderlineSpan @@ -4028,7 +4205,6 @@ android.text.util.Linkify$MatchFilter android.text.util.Linkify$TransformFilter android.text.util.Rfc822Token android.text.util.Rfc822Tokenizer -android.transition.ArcMotion android.transition.AutoTransition android.transition.ChangeBounds android.transition.ChangeBounds$1 @@ -4051,8 +4227,6 @@ android.transition.ChangeTransform$3 android.transition.ChangeTransform$GhostListener android.transition.ChangeTransform$PathAnimatorMatrix android.transition.ChangeTransform$Transforms -android.transition.CircularPropagation -android.transition.Explode android.transition.Fade android.transition.Fade$1 android.transition.Fade$FadeAnimatorListener @@ -4074,7 +4248,6 @@ android.transition.Transition$1 android.transition.Transition$2 android.transition.Transition$3 android.transition.Transition$AnimationInfo -android.transition.Transition$ArrayListManager android.transition.Transition$EpicenterCallback android.transition.Transition$TransitionListener android.transition.Transition$TransitionListenerAdapter @@ -4087,7 +4260,6 @@ android.transition.TransitionSet android.transition.TransitionSet$1 android.transition.TransitionSet$TransitionSetListener android.transition.TransitionUtils -android.transition.TransitionUtils$MatrixEvaluator android.transition.TransitionValues android.transition.TransitionValuesMaps android.transition.TranslationAnimationCreator @@ -4109,7 +4281,7 @@ android.util.Base64 android.util.Base64$Coder android.util.Base64$Decoder android.util.Base64$Encoder -android.util.Base64DataException +android.util.BootTimingsTraceLog android.util.ContainerHelpers android.util.DebugUtils android.util.DisplayMetrics @@ -4130,12 +4302,14 @@ android.util.LocalLog$ReadOnlyLocalLog android.util.Log android.util.Log$1 android.util.Log$ImmediateLogWriter -android.util.Log$TerribleFailure +android.util.Log$NoPreloadHolder android.util.Log$TerribleFailureHandler android.util.LogPrinter +android.util.LongArray android.util.LongSparseArray android.util.LongSparseLongArray android.util.LruCache +android.util.MalformedJsonException android.util.MapCollections android.util.MapCollections$ArrayIterator android.util.MapCollections$EntrySet @@ -4161,6 +4335,7 @@ android.util.Printer android.util.Property android.util.Range android.util.Rational +android.util.ReflectiveProperty android.util.Singleton android.util.Size android.util.SizeF @@ -4172,7 +4347,6 @@ android.util.SparseLongArray android.util.Spline android.util.Spline$MonotoneCubicSpline android.util.StateSet -android.util.StringBuilderPrinter android.util.SuperNotCalledException android.util.TimeFormatException android.util.TimeUtils @@ -4184,18 +4358,17 @@ android.util.Xml android.util.Xml$Encoding android.util.Xml$XmlSerializerFactory android.util.apk.ApkSignatureSchemeV2Verifier +android.util.apk.ApkSignatureSchemeV2Verifier$ByteBufferDataSource +android.util.apk.ApkSignatureSchemeV2Verifier$DataSource +android.util.apk.ApkSignatureSchemeV2Verifier$MemoryMappedFileDataSource +android.util.apk.ApkSignatureSchemeV2Verifier$SignatureInfo android.util.apk.ApkSignatureSchemeV2Verifier$SignatureNotFoundException +android.util.apk.ApkSignatureSchemeV2Verifier$VerbatimX509Certificate +android.util.apk.ApkSignatureSchemeV2Verifier$WrappedX509Certificate android.util.apk.ZipUtils android.util.jar.StrictJarFile -android.util.jar.StrictJarFile$EntryIterator -android.util.jar.StrictJarFile$JarFileInputStream -android.util.jar.StrictJarFile$RAFStream -android.util.jar.StrictJarFile$ZipInflaterInputStream -android.util.jar.StrictJarManifest -android.util.jar.StrictJarManifest$Chunk -android.util.jar.StrictJarManifestReader -android.util.jar.StrictJarVerifier -android.util.jar.StrictJarVerifier$VerifierEntry +android.view.-$Lambda$48$iU_USrtPm1XIm5H9QYQvXfBGDE4 +android.view.-$Lambda$49$iU_USrtPm1XIm5H9QYQvXfBGDE4 android.view.AbsSavedState android.view.AbsSavedState$1 android.view.AbsSavedState$2 @@ -4219,8 +4392,6 @@ android.view.ContextMenu android.view.ContextMenu$ContextMenuInfo android.view.ContextThemeWrapper android.view.Display -android.view.Display$ColorTransform -android.view.Display$ColorTransform$1 android.view.Display$HdrCapabilities android.view.Display$HdrCapabilities$1 android.view.Display$Mode @@ -4247,8 +4418,6 @@ android.view.GestureDetector$OnDoubleTapListener android.view.GestureDetector$OnGestureListener android.view.GestureDetector$SimpleOnGestureListener android.view.GhostView -android.view.GraphicBuffer -android.view.GraphicBuffer$1 android.view.Gravity android.view.HandlerActionQueue android.view.HandlerActionQueue$HandlerAction @@ -4266,8 +4435,15 @@ android.view.IGraphicsStats$Stub android.view.IGraphicsStats$Stub$Proxy android.view.IInputFilter android.view.IOnKeyguardExitResult +android.view.IPinnedStackController +android.view.IPinnedStackController$Stub +android.view.IPinnedStackController$Stub$Proxy +android.view.IPinnedStackListener +android.view.IPinnedStackListener$Stub +android.view.IPinnedStackListener$Stub$Proxy android.view.IRotationWatcher android.view.IRotationWatcher$Stub +android.view.IRotationWatcher$Stub$Proxy android.view.IWindow android.view.IWindow$Stub android.view.IWindow$Stub$Proxy @@ -4307,8 +4483,6 @@ android.view.KeyEvent android.view.KeyEvent$1 android.view.KeyEvent$Callback android.view.KeyEvent$DispatcherState -android.view.KeyboardShortcutGroup -android.view.KeyboardShortcutInfo android.view.LayoutInflater android.view.LayoutInflater$Factory android.view.LayoutInflater$Factory2 @@ -4327,16 +4501,20 @@ android.view.MotionEvent$PointerCoords android.view.MotionEvent$PointerProperties android.view.NotificationHeaderView android.view.NotificationHeaderView$1 +android.view.NotificationHeaderView$2 android.view.NotificationHeaderView$HeaderTouchListener android.view.OrientationEventListener android.view.OrientationEventListener$SensorEventListenerImpl android.view.PointerIcon android.view.PointerIcon$1 +android.view.RecordingCanvas android.view.RemotableViewMethod android.view.RenderNode +android.view.RenderNode$NoImagePreloadHolder android.view.RenderNodeAnimator android.view.RenderNodeAnimator$1 android.view.RenderNodeAnimator$DelayedAnimationHelper +android.view.RenderNodeAnimatorSetHelper android.view.ScaleGestureDetector android.view.ScaleGestureDetector$1 android.view.ScaleGestureDetector$OnScaleGestureListener @@ -4347,6 +4525,7 @@ android.view.SubMenu android.view.Surface android.view.Surface$1 android.view.Surface$CompatibleCanvas +android.view.Surface$HwuiContext android.view.Surface$OutOfResourcesException android.view.SurfaceControl android.view.SurfaceControl$PhysicalDisplayInfo @@ -4364,7 +4543,7 @@ android.view.TextureView android.view.TextureView$1 android.view.TextureView$SurfaceTextureListener android.view.ThreadedRenderer -android.view.ThreadedRenderer$HardwareDrawCallbacks +android.view.ThreadedRenderer$DrawCallbacks android.view.ThreadedRenderer$ProcessInitializer android.view.TouchDelegate android.view.VelocityTracker @@ -4412,21 +4591,24 @@ android.view.View$OnTouchListener android.view.View$PerformClick android.view.View$ScrollabilityCache android.view.View$TintInfo +android.view.View$TooltipInfo android.view.View$TransformationInfo android.view.View$UnsetPressedState android.view.ViewAnimationUtils android.view.ViewConfiguration +android.view.ViewDebug$CapturedViewProperty +android.view.ViewDebug$ExportedProperty android.view.ViewDebug$HierarchyHandler android.view.ViewGroup android.view.ViewGroup$1 android.view.ViewGroup$2 android.view.ViewGroup$3 +android.view.ViewGroup$4 android.view.ViewGroup$LayoutParams android.view.ViewGroup$MarginLayoutParams android.view.ViewGroup$OnHierarchyChangeListener android.view.ViewGroup$TouchTarget android.view.ViewGroupOverlay -android.view.ViewHierarchyEncoder android.view.ViewManager android.view.ViewOutlineProvider android.view.ViewOutlineProvider$1 @@ -4489,6 +4671,7 @@ android.view.ViewTreeObserver$OnTouchModeChangeListener android.view.Window android.view.Window$Callback android.view.Window$OnWindowDismissedCallback +android.view.Window$OnWindowSwipeDismissedCallback android.view.Window$WindowControllerCallback android.view.WindowAnimationFrameStats android.view.WindowAnimationFrameStats$1 @@ -4520,18 +4703,20 @@ android.view.WindowManagerPolicy$InputConsumer android.view.WindowManagerPolicy$OnKeyguardExitResult android.view.WindowManagerPolicy$PointerEventListener android.view.WindowManagerPolicy$ScreenOnListener +android.view.WindowManagerPolicy$StartingSurface android.view.WindowManagerPolicy$WindowManagerFuncs android.view.WindowManagerPolicy$WindowState android.view.accessibility.AccessibilityEvent -android.view.accessibility.AccessibilityEvent$1 android.view.accessibility.AccessibilityEventSource android.view.accessibility.AccessibilityManager android.view.accessibility.AccessibilityManager$1 +android.view.accessibility.AccessibilityManager$AccessibilityServicesStateChangeListener android.view.accessibility.AccessibilityManager$AccessibilityStateChangeListener android.view.accessibility.AccessibilityManager$HighTextContrastChangeListener android.view.accessibility.AccessibilityManager$MyHandler android.view.accessibility.AccessibilityManager$TouchExplorationStateChangeListener android.view.accessibility.AccessibilityNodeInfo +android.view.accessibility.AccessibilityNodeInfo$1 android.view.accessibility.AccessibilityNodeInfo$AccessibilityAction android.view.accessibility.AccessibilityNodeInfo$CollectionInfo android.view.accessibility.AccessibilityNodeInfo$CollectionItemInfo @@ -4561,6 +4746,8 @@ android.view.animation.Animation$Description android.view.animation.Animation$NoImagePreloadHolder android.view.animation.AnimationSet android.view.animation.AnimationUtils +android.view.animation.AnimationUtils$1 +android.view.animation.AnimationUtils$AnimationState android.view.animation.BaseInterpolator android.view.animation.ClipRectAnimation android.view.animation.CycleInterpolator @@ -4576,12 +4763,16 @@ android.view.animation.RotateAnimation android.view.animation.ScaleAnimation android.view.animation.Transformation android.view.animation.TranslateAnimation +android.view.autofill.AutoFillId +android.view.autofill.AutoFillId$1 +android.view.autofill.AutoFillManager +android.view.autofill.AutoFillType +android.view.autofill.AutoFillType$1 android.view.inputmethod.BaseInputConnection android.view.inputmethod.CompletionInfo android.view.inputmethod.CompletionInfo$1 android.view.inputmethod.ComposingText android.view.inputmethod.CorrectionInfo -android.view.inputmethod.CorrectionInfo$1 android.view.inputmethod.CursorAnchorInfo android.view.inputmethod.CursorAnchorInfo$Builder android.view.inputmethod.EditorInfo @@ -4595,6 +4786,7 @@ android.view.inputmethod.InputBinding$1 android.view.inputmethod.InputConnection android.view.inputmethod.InputConnectionInspector android.view.inputmethod.InputConnectionWrapper +android.view.inputmethod.InputContentInfo android.view.inputmethod.InputMethod android.view.inputmethod.InputMethod$SessionCallback android.view.inputmethod.InputMethodInfo @@ -4614,6 +4806,8 @@ android.view.inputmethod.InputMethodSubtype android.view.inputmethod.InputMethodSubtype$1 android.view.inputmethod.InputMethodSubtype$InputMethodSubtypeBuilder android.view.inputmethod.InputMethodSubtypeArray +android.view.textclassifier.TextClassificationManager +android.view.textclassifier.TextLanguage android.view.textservice.SentenceSuggestionsInfo android.view.textservice.SentenceSuggestionsInfo$1 android.view.textservice.SpellCheckerInfo @@ -4645,10 +4839,13 @@ android.webkit.JavascriptInterface android.webkit.JsPromptResult android.webkit.JsResult android.webkit.MimeTypeMap +android.webkit.ServiceWorkerClient android.webkit.ServiceWorkerController +android.webkit.ServiceWorkerWebSettings android.webkit.SslErrorHandler android.webkit.TokenBindingService android.webkit.URLUtil +android.webkit.UserPackage android.webkit.ValueCallback android.webkit.WebBackForwardList android.webkit.WebChromeClient @@ -4657,7 +4854,6 @@ android.webkit.WebHistoryItem android.webkit.WebIconDatabase android.webkit.WebMessage android.webkit.WebMessagePort -android.webkit.WebResourceError android.webkit.WebResourceRequest android.webkit.WebResourceResponse android.webkit.WebSettings @@ -4693,12 +4889,13 @@ android.webkit.WebViewProviderInfo android.webkit.WebViewProviderInfo$1 android.webkit.WebViewProviderResponse android.webkit.WebViewProviderResponse$1 +android.webkit.WebViewZygote +android.widget.-$Lambda$50$tfOQKOmkDz_xLYaBQX_cysn8vbE android.widget.AbsListView android.widget.AbsListView$3 android.widget.AbsListView$4 android.widget.AbsListView$AbsPositionScroller android.widget.AbsListView$AdapterDataSetObserver -android.widget.AbsListView$CheckForLongPress android.widget.AbsListView$CheckForTap android.widget.AbsListView$FlingRunnable android.widget.AbsListView$FlingRunnable$1 @@ -4709,6 +4906,7 @@ android.widget.AbsListView$MultiChoiceModeWrapper android.widget.AbsListView$OnScrollListener android.widget.AbsListView$PerformClick android.widget.AbsListView$PositionScroller +android.widget.AbsListView$PositionScroller$1 android.widget.AbsListView$RecycleBin android.widget.AbsListView$RecyclerListener android.widget.AbsListView$SavedState @@ -4746,7 +4944,6 @@ android.widget.AdapterView$OnItemClickListener android.widget.AdapterView$OnItemLongClickListener android.widget.AdapterView$OnItemSelectedListener android.widget.AdapterView$SelectionNotifier -android.widget.Advanceable android.widget.ArrayAdapter android.widget.AutoCompleteTextView android.widget.AutoCompleteTextView$DropDownItemClickListener @@ -4768,7 +4965,6 @@ android.widget.CompoundButton$SavedState android.widget.CompoundButton$SavedState$1 android.widget.CursorAdapter android.widget.CursorFilter$CursorFilterClient -android.widget.DatePicker android.widget.DatePicker$OnDateChangedListener android.widget.DateTimeView android.widget.DateTimeView$ReceiverInfo @@ -4781,7 +4977,6 @@ android.widget.Editor android.widget.Editor$1 android.widget.Editor$2 android.widget.Editor$Blink -android.widget.Editor$CorrectionHighlighter android.widget.Editor$CursorAnchorInfoNotifier android.widget.Editor$CursorController android.widget.Editor$EditOperation @@ -4794,6 +4989,7 @@ android.widget.Editor$InsertionHandleView$2 android.widget.Editor$InsertionPointCursorController android.widget.Editor$PositionListener android.widget.Editor$ProcessTextIntentActionsHandler +android.widget.Editor$SelectionHandleView android.widget.Editor$SelectionModifierCursorController android.widget.Editor$SpanController android.widget.Editor$SuggestionHelper @@ -4802,7 +4998,6 @@ android.widget.Editor$TextRenderNode android.widget.Editor$TextViewPositionListener android.widget.Editor$UndoInputFilter android.widget.ExpandableListConnector -android.widget.ExpandableListView android.widget.FastScroller android.widget.FastScroller$1 android.widget.FastScroller$2 @@ -4896,7 +5091,6 @@ android.widget.PopupWindow android.widget.PopupWindow$1 android.widget.PopupWindow$2 android.widget.PopupWindow$3 -android.widget.PopupWindow$4 android.widget.PopupWindow$OnDismissListener android.widget.PopupWindow$PopupBackgroundView android.widget.PopupWindow$PopupDecorView @@ -4904,6 +5098,7 @@ android.widget.PopupWindow$PopupDecorView$1 android.widget.PopupWindow$PopupDecorView$2 android.widget.PopupWindow$PopupDecorView$2$1 android.widget.PopupWindow$PopupDecorView$3 +android.widget.PopupWindow$PopupDecorView$4 android.widget.ProgressBar android.widget.ProgressBar$1 android.widget.ProgressBar$ProgressTintInfo @@ -4943,10 +5138,7 @@ android.widget.RemoteViews$RuntimeAction android.widget.RemoteViews$SetDrawableParameters android.widget.RemoteViews$SetOnClickPendingIntent android.widget.RemoteViews$SetOnClickPendingIntent$1 -android.widget.RemoteViews$SetRemoteInputsAction -android.widget.RemoteViews$TextViewDrawableAction android.widget.RemoteViews$ViewGroupAction -android.widget.RemoteViews$ViewPaddingAction android.widget.RemoteViewsAdapter$RemoteAdapterConnectionCallback android.widget.RemoteViewsService android.widget.RemoteViewsService$RemoteViewsFactory @@ -4973,11 +5165,10 @@ android.widget.SearchView$9 android.widget.SearchView$OnCloseListener android.widget.SearchView$OnQueryTextListener android.widget.SearchView$SearchAutoComplete +android.widget.SearchView$UpdatableTouchDelegate android.widget.SectionIndexer android.widget.SeekBar android.widget.SeekBar$OnSeekBarChangeListener -android.widget.SimpleAdapter -android.widget.SimpleAdapter$ViewBinder android.widget.SimpleCursorAdapter android.widget.Space android.widget.SpellChecker @@ -4985,7 +5176,6 @@ android.widget.SpellChecker$1 android.widget.SpellChecker$SpellParser android.widget.Spinner android.widget.Spinner$1 -android.widget.Spinner$DialogPopup android.widget.Spinner$DropDownAdapter android.widget.Spinner$DropdownPopup android.widget.Spinner$DropdownPopup$1 @@ -5035,7 +5225,6 @@ android.widget.TimePicker$OnTimeChangedListener android.widget.Toast android.widget.Toast$TN android.widget.Toast$TN$1 -android.widget.Toast$TN$2 android.widget.ToggleButton android.widget.Toolbar android.widget.Toolbar$1 @@ -5059,6 +5248,7 @@ android.widget.ViewFlipper$1 android.widget.ViewFlipper$2 android.widget.ViewSwitcher android.widget.WrapperListAdapter +android.widget.ZoomButtonsController com.android.dex.ClassData com.android.dex.ClassData$Method com.android.dex.ClassDef @@ -5085,9 +5275,19 @@ com.android.dex.util.ByteInput com.android.dex.util.ByteOutput com.android.dex.util.ExceptionWithContext com.android.dex.util.FileUtils +com.android.framework.protobuf.nano.CodedInputByteBufferNano +com.android.framework.protobuf.nano.CodedOutputByteBufferNano +com.android.framework.protobuf.nano.ExtendableMessageNano +com.android.framework.protobuf.nano.InternalNano +com.android.framework.protobuf.nano.InvalidProtocolBufferNanoException +com.android.framework.protobuf.nano.MessageNano +com.android.framework.protobuf.nano.WireFormatNano +com.android.i18n.phonenumbers.AlternateFormatsCountryCodeSet com.android.i18n.phonenumbers.AsYouTypeFormatter com.android.i18n.phonenumbers.CountryCodeToRegionCodeMap com.android.i18n.phonenumbers.MetadataLoader +com.android.i18n.phonenumbers.MetadataManager +com.android.i18n.phonenumbers.MetadataManager$1 com.android.i18n.phonenumbers.MetadataSource com.android.i18n.phonenumbers.MultiFileMetadataSourceImpl com.android.i18n.phonenumbers.NumberParseException @@ -5096,7 +5296,6 @@ com.android.i18n.phonenumbers.PhoneNumberMatcher com.android.i18n.phonenumbers.PhoneNumberMatcher$State com.android.i18n.phonenumbers.PhoneNumberUtil com.android.i18n.phonenumbers.PhoneNumberUtil$1 -com.android.i18n.phonenumbers.PhoneNumberUtil$2 com.android.i18n.phonenumbers.PhoneNumberUtil$Leniency com.android.i18n.phonenumbers.PhoneNumberUtil$Leniency$1 com.android.i18n.phonenumbers.PhoneNumberUtil$Leniency$2 @@ -5114,19 +5313,13 @@ com.android.i18n.phonenumbers.Phonenumber$PhoneNumber$CountryCodeSource com.android.i18n.phonenumbers.RegexCache com.android.i18n.phonenumbers.RegexCache$LRUCache com.android.i18n.phonenumbers.RegexCache$LRUCache$1 +com.android.i18n.phonenumbers.ShortNumbersRegionCodeSet com.android.i18n.phonenumbers.geocoding.PhoneNumberOfflineGeocoder -com.android.i18n.phonenumbers.prefixmapper.DefaultMapStorage com.android.i18n.phonenumbers.prefixmapper.MappingFileProvider -com.android.i18n.phonenumbers.prefixmapper.PhonePrefixMap -com.android.i18n.phonenumbers.prefixmapper.PhonePrefixMapStorageStrategy com.android.i18n.phonenumbers.prefixmapper.PrefixFileReader -com.android.ims.ImsCall -com.android.ims.ImsCall$ImsCallSessionListenerProxy com.android.ims.ImsCall$Listener com.android.ims.ImsCallForwardInfo com.android.ims.ImsCallProfile -com.android.ims.ImsCallProfile$1 -com.android.ims.ImsConferenceState com.android.ims.ImsConfig com.android.ims.ImsConfigListener com.android.ims.ImsConfigListener$Stub @@ -5141,37 +5334,77 @@ com.android.ims.ImsManager$1 com.android.ims.ImsManager$2 com.android.ims.ImsManager$ImsRegistrationListenerProxy com.android.ims.ImsManager$ImsServiceDeathRecipient +com.android.ims.ImsMultiEndpoint +com.android.ims.ImsMultiEndpoint$ImsExternalCallStateListenerProxy com.android.ims.ImsReasonInfo com.android.ims.ImsReasonInfo$1 com.android.ims.ImsSsInfo -com.android.ims.ImsStreamMediaProfile -com.android.ims.ImsStreamMediaProfile$1 -com.android.ims.ImsSuppServiceNotification -com.android.ims.internal.ICall com.android.ims.internal.IImsCallSession -com.android.ims.internal.IImsCallSession$Stub com.android.ims.internal.IImsCallSessionListener -com.android.ims.internal.IImsCallSessionListener$Stub com.android.ims.internal.IImsConfig com.android.ims.internal.IImsConfig$Stub +com.android.ims.internal.IImsConfig$Stub$Proxy com.android.ims.internal.IImsEcbm com.android.ims.internal.IImsEcbm$Stub com.android.ims.internal.IImsEcbmListener com.android.ims.internal.IImsEcbmListener$Stub +com.android.ims.internal.IImsExternalCallStateListener +com.android.ims.internal.IImsExternalCallStateListener$Stub com.android.ims.internal.IImsMultiEndpoint +com.android.ims.internal.IImsMultiEndpoint$Stub com.android.ims.internal.IImsRegistrationListener com.android.ims.internal.IImsRegistrationListener$Stub +com.android.ims.internal.IImsRegistrationListener$Stub$Proxy com.android.ims.internal.IImsService com.android.ims.internal.IImsService$Stub +com.android.ims.internal.IImsService$Stub$Proxy +com.android.ims.internal.IImsServiceController +com.android.ims.internal.IImsServiceFeatureListener com.android.ims.internal.IImsUt com.android.ims.internal.IImsUt$Stub com.android.ims.internal.IImsUtListener com.android.ims.internal.IImsUtListener$Stub -com.android.ims.internal.IImsVideoCallProvider -com.android.ims.internal.ImsCallSession -com.android.ims.internal.ImsCallSession$IImsCallSessionListenerProxy -com.android.ims.internal.ImsCallSession$Listener -com.android.ims.internal.ImsCallSession$State +com.android.ims.internal.uce.common.CapInfo +com.android.ims.internal.uce.common.CapInfo$1 +com.android.ims.internal.uce.common.StatusCode +com.android.ims.internal.uce.common.StatusCode$1 +com.android.ims.internal.uce.common.UceLong +com.android.ims.internal.uce.common.UceLong$1 +com.android.ims.internal.uce.options.IOptionsListener +com.android.ims.internal.uce.options.IOptionsService +com.android.ims.internal.uce.presence.IPresenceListener +com.android.ims.internal.uce.presence.IPresenceListener$Stub +com.android.ims.internal.uce.presence.IPresenceListener$Stub$Proxy +com.android.ims.internal.uce.presence.IPresenceService +com.android.ims.internal.uce.presence.IPresenceService$Stub +com.android.ims.internal.uce.presence.IPresenceService$Stub$Proxy +com.android.ims.internal.uce.presence.PresCapInfo +com.android.ims.internal.uce.presence.PresCmdId +com.android.ims.internal.uce.presence.PresCmdId$1 +com.android.ims.internal.uce.presence.PresCmdStatus +com.android.ims.internal.uce.presence.PresCmdStatus$1 +com.android.ims.internal.uce.presence.PresPublishTriggerType +com.android.ims.internal.uce.presence.PresPublishTriggerType$1 +com.android.ims.internal.uce.presence.PresResInfo +com.android.ims.internal.uce.presence.PresResInfo$1 +com.android.ims.internal.uce.presence.PresResInstanceInfo +com.android.ims.internal.uce.presence.PresResInstanceInfo$1 +com.android.ims.internal.uce.presence.PresRlmiInfo +com.android.ims.internal.uce.presence.PresRlmiInfo$1 +com.android.ims.internal.uce.presence.PresServiceInfo +com.android.ims.internal.uce.presence.PresSipResponse +com.android.ims.internal.uce.presence.PresSipResponse$1 +com.android.ims.internal.uce.presence.PresSubscriptionState +com.android.ims.internal.uce.presence.PresSubscriptionState$1 +com.android.ims.internal.uce.presence.PresTupleInfo +com.android.ims.internal.uce.presence.PresTupleInfo$1 +com.android.ims.internal.uce.uceservice.IUceListener +com.android.ims.internal.uce.uceservice.IUceListener$Stub +com.android.ims.internal.uce.uceservice.IUceService +com.android.ims.internal.uce.uceservice.IUceService$Stub +com.android.ims.internal.uce.uceservice.IUceService$Stub$Proxy +com.android.ims.internal.uce.uceservice.ImsUceManager +com.android.ims.internal.uce.uceservice.ImsUceManager$UceServiceDeathRecipient com.android.internal.R$styleable com.android.internal.alsa.AlsaCardsParser com.android.internal.alsa.AlsaCardsParser$AlsaCardRecord @@ -5186,17 +5419,6 @@ com.android.internal.app.AlertController$ButtonHandler com.android.internal.app.AlertController$CheckedItemAdapter com.android.internal.app.AlertController$RecycleListView com.android.internal.app.AssistUtils -com.android.internal.app.ChooserActivity -com.android.internal.app.ChooserActivity$1 -com.android.internal.app.ChooserActivity$BaseChooserTargetComparator -com.android.internal.app.ChooserActivity$ChooserListAdapter -com.android.internal.app.ChooserActivity$ChooserRowAdapter -com.android.internal.app.ChooserActivity$ChooserRowAdapter$1 -com.android.internal.app.ChooserActivity$ChooserRowAdapter$2 -com.android.internal.app.ChooserActivity$ChooserRowAdapter$3 -com.android.internal.app.ChooserActivity$OffsetDataSetObserver -com.android.internal.app.ChooserActivity$RowScale -com.android.internal.app.ChooserActivity$RowViewHolder com.android.internal.app.IAppOpsCallback com.android.internal.app.IAppOpsCallback$Stub com.android.internal.app.IAppOpsCallback$Stub$Proxy @@ -5204,6 +5426,7 @@ com.android.internal.app.IAppOpsService com.android.internal.app.IAppOpsService$Stub com.android.internal.app.IAppOpsService$Stub$Proxy com.android.internal.app.IAssistScreenshotReceiver +com.android.internal.app.IAssistScreenshotReceiver$Stub com.android.internal.app.IBatteryStats com.android.internal.app.IBatteryStats$Stub com.android.internal.app.IBatteryStats$Stub$Proxy @@ -5215,41 +5438,34 @@ com.android.internal.app.ISoundTriggerService$Stub com.android.internal.app.IVoiceInteractionManagerService com.android.internal.app.IVoiceInteractionManagerService$Stub com.android.internal.app.IVoiceInteractionManagerService$Stub$Proxy +com.android.internal.app.IVoiceInteractionSessionListener +com.android.internal.app.IVoiceInteractionSessionListener$Stub +com.android.internal.app.IVoiceInteractionSessionListener$Stub$Proxy com.android.internal.app.IVoiceInteractionSessionShowCallback com.android.internal.app.IVoiceInteractionSessionShowCallback$Stub +com.android.internal.app.IVoiceInteractionSessionShowCallback$Stub$Proxy com.android.internal.app.IVoiceInteractor com.android.internal.app.IVoiceInteractor$Stub -com.android.internal.app.IntentForwarderActivity +com.android.internal.app.IVoiceInteractor$Stub$Proxy com.android.internal.app.LocaleHelper com.android.internal.app.LocalePicker com.android.internal.app.LocalePickerWithRegion$LocaleSelectedListener -com.android.internal.app.PlatLogoActivity +com.android.internal.app.NightDisplayController +com.android.internal.app.NightDisplayController$1 +com.android.internal.app.NightDisplayController$Callback +com.android.internal.app.NightDisplayController$LocalTime com.android.internal.app.ProcessMap com.android.internal.app.ResolverActivity -com.android.internal.app.ResolverActivity$1 -com.android.internal.app.ResolverActivity$2 -com.android.internal.app.ResolverActivity$3 -com.android.internal.app.ResolverActivity$DisplayResolveInfo -com.android.internal.app.ResolverActivity$LoadAdapterIconTask -com.android.internal.app.ResolverActivity$LoadIconTask -com.android.internal.app.ResolverActivity$ResolveListAdapter -com.android.internal.app.ResolverActivity$ResolvedComponentInfo -com.android.internal.app.ResolverActivity$TargetInfo -com.android.internal.app.ResolverActivity$ViewHolder -com.android.internal.app.ResolverComparator -com.android.internal.app.ResolverComparator$ScoredTarget com.android.internal.app.ToolbarActionBar com.android.internal.app.ToolbarActionBar$1 com.android.internal.app.ToolbarActionBar$2 com.android.internal.app.ToolbarActionBar$ActionMenuPresenterCallback com.android.internal.app.ToolbarActionBar$MenuBuilderCallback com.android.internal.app.ToolbarActionBar$ToolbarCallbackWrapper -com.android.internal.app.UnlaunchableAppActivity com.android.internal.app.WindowDecorActionBar com.android.internal.app.WindowDecorActionBar$1 com.android.internal.app.WindowDecorActionBar$2 com.android.internal.app.WindowDecorActionBar$3 -com.android.internal.app.WindowDecorActionBar$ActionModeImpl com.android.internal.app.procstats.DumpUtils com.android.internal.app.procstats.DurationsTable com.android.internal.app.procstats.IProcessStats @@ -5281,11 +5497,16 @@ com.android.internal.backup.IBackupTransport$Stub$Proxy com.android.internal.backup.LocalTransport com.android.internal.backup.LocalTransportService com.android.internal.content.NativeLibraryHelper -com.android.internal.content.NativeLibraryHelper$Handle com.android.internal.content.PackageHelper com.android.internal.content.PackageMonitor com.android.internal.content.ReferrerIntent com.android.internal.content.ReferrerIntent$1 +com.android.internal.font.IFontManager +com.android.internal.font.IFontManager$Stub +com.android.internal.graphics.drawable.AnimationScaleListDrawable +com.android.internal.graphics.drawable.AnimationScaleListDrawable$AnimationScaleListState +com.android.internal.hardware.AmbientDisplayConfiguration +com.android.internal.inputmethod.IInputContentUriToken com.android.internal.inputmethod.InputMethodSubtypeHandle com.android.internal.inputmethod.InputMethodSubtypeSwitchingController com.android.internal.inputmethod.InputMethodSubtypeSwitchingController$ControllerImpl @@ -5296,6 +5517,7 @@ com.android.internal.inputmethod.InputMethodSubtypeSwitchingController$InputMeth com.android.internal.inputmethod.InputMethodSubtypeSwitchingController$StaticRotationList com.android.internal.inputmethod.InputMethodUtils com.android.internal.inputmethod.InputMethodUtils$1 +com.android.internal.inputmethod.InputMethodUtils$InputMethodListBuilder com.android.internal.inputmethod.InputMethodUtils$InputMethodSettings com.android.internal.inputmethod.LocaleUtils com.android.internal.inputmethod.LocaleUtils$LocaleExtractor @@ -5321,6 +5543,7 @@ com.android.internal.net.VpnConfig com.android.internal.net.VpnInfo com.android.internal.net.VpnProfile com.android.internal.os.AndroidPrintStream +com.android.internal.os.AppFuseMount com.android.internal.os.AtomicFile com.android.internal.os.BackgroundThread com.android.internal.os.BatterySipper @@ -5334,6 +5557,8 @@ com.android.internal.os.BatteryStatsImpl$BatchTimer com.android.internal.os.BatteryStatsImpl$BatteryCallback com.android.internal.os.BatteryStatsImpl$Clocks com.android.internal.os.BatteryStatsImpl$ControllerActivityCounterImpl +com.android.internal.os.BatteryStatsImpl$Counter +com.android.internal.os.BatteryStatsImpl$DurationTimer com.android.internal.os.BatteryStatsImpl$ExternalStatsSync com.android.internal.os.BatteryStatsImpl$LongSamplingCounter com.android.internal.os.BatteryStatsImpl$MyHandler @@ -5351,6 +5576,7 @@ com.android.internal.os.BatteryStatsImpl$Uid$2 com.android.internal.os.BatteryStatsImpl$Uid$3 com.android.internal.os.BatteryStatsImpl$Uid$Pkg com.android.internal.os.BatteryStatsImpl$Uid$Pkg$Serv +com.android.internal.os.BatteryStatsImpl$Uid$Proc com.android.internal.os.BatteryStatsImpl$Uid$Sensor com.android.internal.os.BatteryStatsImpl$Uid$Wakelock com.android.internal.os.BinderInternal @@ -5359,6 +5585,9 @@ com.android.internal.os.BluetoothPowerCalculator com.android.internal.os.CameraPowerCalculator com.android.internal.os.CpuPowerCalculator com.android.internal.os.FlashlightPowerCalculator +com.android.internal.os.FuseAppLoop +com.android.internal.os.FuseAppLoop$1 +com.android.internal.os.FuseAppLoop$UnmountedException com.android.internal.os.HandlerCaller com.android.internal.os.HandlerCaller$Callback com.android.internal.os.HandlerCaller$MyHandler @@ -5369,15 +5598,18 @@ com.android.internal.os.IParcelFileDescriptorFactory com.android.internal.os.IResultReceiver com.android.internal.os.IResultReceiver$Stub com.android.internal.os.IResultReceiver$Stub$Proxy -com.android.internal.os.InstallerConnection -com.android.internal.os.InstallerConnection$InstallerException +com.android.internal.os.IShellCallback +com.android.internal.os.IShellCallback$Stub +com.android.internal.os.IShellCallback$Stub$Proxy com.android.internal.os.KernelCpuSpeedReader +com.android.internal.os.KernelMemoryBandwidthStats com.android.internal.os.KernelUidCpuTimeReader com.android.internal.os.KernelWakelockReader com.android.internal.os.KernelWakelockStats com.android.internal.os.KernelWakelockStats$Entry com.android.internal.os.LoggingPrintStream com.android.internal.os.LoggingPrintStream$1 +com.android.internal.os.MemoryPowerCalculator com.android.internal.os.MobileRadioPowerCalculator com.android.internal.os.PathClassLoaderFactory com.android.internal.os.PowerCalculator @@ -5385,31 +5617,35 @@ com.android.internal.os.PowerProfile com.android.internal.os.PowerProfile$CpuClusterKey com.android.internal.os.ProcessCpuTracker com.android.internal.os.ProcessCpuTracker$1 +com.android.internal.os.ProcessCpuTracker$FilterStats com.android.internal.os.ProcessCpuTracker$Stats +com.android.internal.os.RoSystemProperties com.android.internal.os.RuntimeInit com.android.internal.os.RuntimeInit$1 com.android.internal.os.RuntimeInit$Arguments -com.android.internal.os.RuntimeInit$UncaughtHandler +com.android.internal.os.RuntimeInit$KillApplicationHandler +com.android.internal.os.RuntimeInit$LoggingHandler com.android.internal.os.SamplingProfilerIntegration com.android.internal.os.SensorPowerCalculator com.android.internal.os.SomeArgs +com.android.internal.os.TransferPipe com.android.internal.os.WakelockPowerCalculator -com.android.internal.os.WifiPowerEstimator +com.android.internal.os.WifiPowerCalculator com.android.internal.os.Zygote +com.android.internal.os.Zygote$MethodAndArgsCaller com.android.internal.os.ZygoteConnection com.android.internal.os.ZygoteConnection$Arguments com.android.internal.os.ZygoteInit -com.android.internal.os.ZygoteInit$MethodAndArgsCaller com.android.internal.os.ZygoteSecurityException +com.android.internal.os.ZygoteServer com.android.internal.policy.DecorContext com.android.internal.policy.DecorView com.android.internal.policy.DecorView$1 -com.android.internal.policy.DecorView$4 -com.android.internal.policy.DecorView$ActionModeCallback2Wrapper com.android.internal.policy.DecorView$ColorViewState com.android.internal.policy.DividerSnapAlgorithm com.android.internal.policy.DividerSnapAlgorithm$SnapTarget com.android.internal.policy.DockedDividerUtils +com.android.internal.policy.IKeyguardDismissCallback com.android.internal.policy.IKeyguardDrawnCallback com.android.internal.policy.IKeyguardDrawnCallback$Stub com.android.internal.policy.IKeyguardDrawnCallback$Stub$Proxy @@ -5434,6 +5670,8 @@ com.android.internal.policy.PhoneWindow$PanelFeatureState$SavedState$1 com.android.internal.policy.PhoneWindow$PhoneWindowMenuCallback com.android.internal.policy.PhoneWindow$RotationWatcher com.android.internal.policy.PhoneWindow$RotationWatcher$1 +com.android.internal.policy.PipMotionHelper +com.android.internal.policy.PipSnapAlgorithm com.android.internal.statusbar.IStatusBar com.android.internal.statusbar.IStatusBar$Stub com.android.internal.statusbar.IStatusBar$Stub$Proxy @@ -5464,10 +5702,8 @@ com.android.internal.telecom.IVideoProvider$Stub com.android.internal.telecom.RemoteServiceCallback com.android.internal.telecom.RemoteServiceCallback$Stub com.android.internal.telecom.RemoteServiceCallback$Stub$Proxy -com.android.internal.telephony.ATParseEx -com.android.internal.telephony.AsyncEmergencyContactNotifier +com.android.internal.telephony.AppSmsManager com.android.internal.telephony.BaseCommands -com.android.internal.telephony.BlockChecker com.android.internal.telephony.Call com.android.internal.telephony.Call$SrvccState com.android.internal.telephony.Call$State @@ -5481,28 +5717,30 @@ com.android.internal.telephony.CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler com.android.internal.telephony.CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler$CallerInfoWorkerHandler com.android.internal.telephony.CallerInfoAsyncQuery$CookieWrapper com.android.internal.telephony.CallerInfoAsyncQuery$OnQueryCompleteListener +com.android.internal.telephony.CarrierActionAgent com.android.internal.telephony.CarrierAppUtils com.android.internal.telephony.CarrierServiceBindHelper com.android.internal.telephony.CarrierServiceBindHelper$1 com.android.internal.telephony.CarrierServiceBindHelper$2 com.android.internal.telephony.CarrierServiceBindHelper$AppBinding com.android.internal.telephony.CarrierServiceBindHelper$CarrierServicePackageMonitor +com.android.internal.telephony.CarrierServiceStateTracker +com.android.internal.telephony.CarrierServiceStateTracker$1 +com.android.internal.telephony.CarrierSignalAgent +com.android.internal.telephony.CarrierSignalAgent$1 com.android.internal.telephony.CellBroadcastHandler com.android.internal.telephony.CellNetworkScanResult +com.android.internal.telephony.ClientWakelockAccountant +com.android.internal.telephony.ClientWakelockTracker com.android.internal.telephony.CommandException com.android.internal.telephony.CommandException$Error com.android.internal.telephony.CommandsInterface com.android.internal.telephony.CommandsInterface$RadioState com.android.internal.telephony.Connection -com.android.internal.telephony.Connection$Listener -com.android.internal.telephony.Connection$ListenerBase -com.android.internal.telephony.Connection$PostDialListener -com.android.internal.telephony.Connection$PostDialState com.android.internal.telephony.DctConstants$Activity com.android.internal.telephony.DctConstants$State com.android.internal.telephony.DebugService com.android.internal.telephony.DefaultPhoneNotifier -com.android.internal.telephony.DriverCall com.android.internal.telephony.EncodeException com.android.internal.telephony.GsmAlphabet com.android.internal.telephony.GsmAlphabet$TextEncodingDetails @@ -5514,6 +5752,7 @@ com.android.internal.telephony.GsmCdmaPhone com.android.internal.telephony.GsmCdmaPhone$1 com.android.internal.telephony.GsmCdmaPhone$2 com.android.internal.telephony.HardwareConfig +com.android.internal.telephony.HbpcdUtils com.android.internal.telephony.ICarrierConfigLoader com.android.internal.telephony.ICarrierConfigLoader$Stub com.android.internal.telephony.ICarrierConfigLoader$Stub$Proxy @@ -5521,7 +5760,6 @@ com.android.internal.telephony.IIccPhoneBook com.android.internal.telephony.IIccPhoneBook$Stub com.android.internal.telephony.IMms com.android.internal.telephony.IMms$Stub -com.android.internal.telephony.IMms$Stub$Proxy com.android.internal.telephony.IOnSubscriptionsChangedListener com.android.internal.telephony.IOnSubscriptionsChangedListener$Stub com.android.internal.telephony.IOnSubscriptionsChangedListener$Stub$Proxy @@ -5555,20 +5793,16 @@ com.android.internal.telephony.IccSmsInterfaceManager$CdmaBroadcastRangeManager com.android.internal.telephony.IccSmsInterfaceManager$CellBroadcastRangeManager com.android.internal.telephony.ImsSMSDispatcher com.android.internal.telephony.InboundSmsHandler +com.android.internal.telephony.InboundSmsHandler$1 com.android.internal.telephony.InboundSmsHandler$DefaultState com.android.internal.telephony.InboundSmsHandler$DeliveringState com.android.internal.telephony.InboundSmsHandler$IdleState -com.android.internal.telephony.InboundSmsHandler$SmsBroadcastReceiver +com.android.internal.telephony.InboundSmsHandler$NewMessageNotificationActionReceiver com.android.internal.telephony.InboundSmsHandler$StartupState com.android.internal.telephony.InboundSmsHandler$WaitingState -com.android.internal.telephony.InboundSmsTracker com.android.internal.telephony.IntRangeManager -com.android.internal.telephony.IntRangeManager$ClientRange -com.android.internal.telephony.IntRangeManager$IntRange com.android.internal.telephony.MccTable com.android.internal.telephony.MccTable$MccEntry -com.android.internal.telephony.MmiCode -com.android.internal.telephony.MmiCode$State com.android.internal.telephony.OperatorInfo com.android.internal.telephony.Phone com.android.internal.telephony.Phone$1 @@ -5577,7 +5811,6 @@ com.android.internal.telephony.PhoneConstants$State com.android.internal.telephony.PhoneFactory com.android.internal.telephony.PhoneInternalInterface com.android.internal.telephony.PhoneInternalInterface$DataActivityState -com.android.internal.telephony.PhoneInternalInterface$SuppService com.android.internal.telephony.PhoneNotifier com.android.internal.telephony.PhoneStateIntentReceiver com.android.internal.telephony.PhoneSubInfoController @@ -5593,43 +5826,39 @@ com.android.internal.telephony.RIL$1 com.android.internal.telephony.RIL$2 com.android.internal.telephony.RIL$RILReceiver com.android.internal.telephony.RIL$RILSender +com.android.internal.telephony.RIL$RadioProxyDeathRecipient +com.android.internal.telephony.RIL$RilHandler com.android.internal.telephony.RILConstants com.android.internal.telephony.RILRequest com.android.internal.telephony.RadioCapability +com.android.internal.telephony.RadioIndication +com.android.internal.telephony.RadioResponse +com.android.internal.telephony.RatRatcheter +com.android.internal.telephony.RatRatcheter$1 com.android.internal.telephony.RestrictedState com.android.internal.telephony.RetryManager -com.android.internal.telephony.RetryManager$RetryRec +com.android.internal.telephony.RilWakelockInfo com.android.internal.telephony.SMSDispatcher com.android.internal.telephony.SMSDispatcher$SettingsObserver -com.android.internal.telephony.SMSDispatcher$SmsTracker com.android.internal.telephony.ServiceStateTracker com.android.internal.telephony.ServiceStateTracker$1 com.android.internal.telephony.ServiceStateTracker$2 com.android.internal.telephony.ServiceStateTracker$3 com.android.internal.telephony.ServiceStateTracker$CellInfoResult com.android.internal.telephony.ServiceStateTracker$SstSubscriptionsChangedListener -com.android.internal.telephony.SmsAddress com.android.internal.telephony.SmsApplication com.android.internal.telephony.SmsApplication$SmsApplicationData com.android.internal.telephony.SmsApplication$SmsPackageMonitor com.android.internal.telephony.SmsBroadcastUndelivered com.android.internal.telephony.SmsBroadcastUndelivered$1 com.android.internal.telephony.SmsBroadcastUndelivered$ScanRawTableThread -com.android.internal.telephony.SmsConstants$MessageClass -com.android.internal.telephony.SmsHeader -com.android.internal.telephony.SmsHeader$PortAddrs com.android.internal.telephony.SmsMessageBase -com.android.internal.telephony.SmsMessageBase$SubmitPduBase -com.android.internal.telephony.SmsNumberUtils -com.android.internal.telephony.SmsResponse com.android.internal.telephony.SmsStorageMonitor com.android.internal.telephony.SmsStorageMonitor$1 com.android.internal.telephony.SmsUsageMonitor com.android.internal.telephony.SmsUsageMonitor$SettingsObserver com.android.internal.telephony.SmsUsageMonitor$SettingsObserverHandler -com.android.internal.telephony.SmsUsageMonitor$ShortCodePatternMatcher com.android.internal.telephony.SubscriptionController -com.android.internal.telephony.SubscriptionController$1 com.android.internal.telephony.SubscriptionController$ScLocalLog com.android.internal.telephony.SubscriptionInfoUpdater com.android.internal.telephony.SubscriptionInfoUpdater$1 @@ -5640,10 +5869,8 @@ com.android.internal.telephony.SubscriptionMonitor$2 com.android.internal.telephony.TelephonyCapabilities com.android.internal.telephony.TelephonyComponentFactory com.android.internal.telephony.TelephonyDevController -com.android.internal.telephony.TelephonyEventLog com.android.internal.telephony.TelephonyTester com.android.internal.telephony.TelephonyTester$1 -com.android.internal.telephony.UUSInfo com.android.internal.telephony.UiccPhoneBookController com.android.internal.telephony.UiccSmsController com.android.internal.telephony.WakeLockStateMachine @@ -5652,45 +5879,36 @@ com.android.internal.telephony.WakeLockStateMachine$DefaultState com.android.internal.telephony.WakeLockStateMachine$IdleState com.android.internal.telephony.WakeLockStateMachine$WaitingState com.android.internal.telephony.WapPushOverSms +com.android.internal.telephony.WapPushOverSms$1 +com.android.internal.telephony.WapPushOverSms$BindServiceThread com.android.internal.telephony.cat.AppInterface -com.android.internal.telephony.cat.CatException +com.android.internal.telephony.cat.AppInterface$CommandType +com.android.internal.telephony.cat.CatCmdMessage +com.android.internal.telephony.cat.CatCmdMessage$BrowserSettings +com.android.internal.telephony.cat.CatCmdMessage$CallSettings +com.android.internal.telephony.cat.CatCmdMessage$SetupEventListSettings com.android.internal.telephony.cat.CatLog +com.android.internal.telephony.cat.CatResponseMessage com.android.internal.telephony.cat.CatService -com.android.internal.telephony.cat.CommandParamsFactory -com.android.internal.telephony.cat.IconLoader -com.android.internal.telephony.cat.ResultException -com.android.internal.telephony.cat.RilMessageDecoder -com.android.internal.telephony.cat.RilMessageDecoder$StateCmdParamsReady -com.android.internal.telephony.cat.RilMessageDecoder$StateStart -com.android.internal.telephony.cdma.CdmaCallWaitingNotification +com.android.internal.telephony.cat.Input +com.android.internal.telephony.cat.Item +com.android.internal.telephony.cat.LaunchBrowserMode +com.android.internal.telephony.cat.Menu +com.android.internal.telephony.cat.ResultCode +com.android.internal.telephony.cat.TextMessage +com.android.internal.telephony.cat.ToneSettings com.android.internal.telephony.cdma.CdmaInboundSmsHandler -com.android.internal.telephony.cdma.CdmaInformationRecords$CdmaDisplayInfoRec -com.android.internal.telephony.cdma.CdmaInformationRecords$CdmaSignalInfoRec com.android.internal.telephony.cdma.CdmaSMSDispatcher com.android.internal.telephony.cdma.CdmaServiceCategoryProgramHandler com.android.internal.telephony.cdma.CdmaServiceCategoryProgramHandler$1 -com.android.internal.telephony.cdma.CdmaSmsBroadcastConfigInfo com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager com.android.internal.telephony.cdma.EriInfo com.android.internal.telephony.cdma.EriManager +com.android.internal.telephony.cdma.EriManager$EriDisplayInformation com.android.internal.telephony.cdma.EriManager$EriFile -com.android.internal.telephony.cdma.SignalToneUtil com.android.internal.telephony.dataconnection.ApnContext -com.android.internal.telephony.dataconnection.ApnSetting -com.android.internal.telephony.dataconnection.DataCallResponse -com.android.internal.telephony.dataconnection.DataCallResponse$SetupResult com.android.internal.telephony.dataconnection.DataConnection -com.android.internal.telephony.dataconnection.DataConnection$ConnectionParams -com.android.internal.telephony.dataconnection.DataConnection$DcActivatingState -com.android.internal.telephony.dataconnection.DataConnection$DcActiveState -com.android.internal.telephony.dataconnection.DataConnection$DcDefaultState -com.android.internal.telephony.dataconnection.DataConnection$DcDisconnectingState -com.android.internal.telephony.dataconnection.DataConnection$DcDisconnectionErrorCreatingConnection -com.android.internal.telephony.dataconnection.DataConnection$DcInactiveState -com.android.internal.telephony.dataconnection.DataConnection$DcNetworkAgent -com.android.internal.telephony.dataconnection.DataConnection$DisconnectParams -com.android.internal.telephony.dataconnection.DataConnection$UpdateLinkPropertyResult -com.android.internal.telephony.dataconnection.DcAsyncChannel +com.android.internal.telephony.dataconnection.DataEnabledSettings com.android.internal.telephony.dataconnection.DcController com.android.internal.telephony.dataconnection.DcController$1 com.android.internal.telephony.dataconnection.DcController$DccDefaultState @@ -5717,19 +5935,24 @@ com.android.internal.telephony.dataconnection.TelephonyNetworkFactory$InternalHa com.android.internal.telephony.gsm.GsmCellBroadcastHandler com.android.internal.telephony.gsm.GsmInboundSmsHandler com.android.internal.telephony.gsm.GsmSMSDispatcher -com.android.internal.telephony.gsm.GsmSmsAddress -com.android.internal.telephony.gsm.SimTlv -com.android.internal.telephony.gsm.SmsBroadcastConfigInfo com.android.internal.telephony.gsm.SmsMessage -com.android.internal.telephony.gsm.SmsMessage$PduParser -com.android.internal.telephony.gsm.SmsMessage$SubmitPdu -com.android.internal.telephony.gsm.SuppServiceNotification com.android.internal.telephony.gsm.UsimDataDownloadHandler -com.android.internal.telephony.gsm.UsimPhoneBookManager +com.android.internal.telephony.ims.-$Lambda$2$6hDwuvYxqWrzW_Ex5wc53XnUOpg +com.android.internal.telephony.ims.-$Lambda$3$6hDwuvYxqWrzW_Ex5wc53XnUOpg +com.android.internal.telephony.ims.-$Lambda$4$6hDwuvYxqWrzW_Ex5wc53XnUOpg +com.android.internal.telephony.ims.ImsResolver +com.android.internal.telephony.ims.ImsResolver$1 +com.android.internal.telephony.ims.ImsResolver$2 +com.android.internal.telephony.ims.ImsResolver$3 +com.android.internal.telephony.ims.ImsResolver$ImsServiceControllerFactory +com.android.internal.telephony.ims.ImsResolver$SubscriptionManagerProxy +com.android.internal.telephony.ims.ImsServiceController$ImsServiceControllerCallbacks com.android.internal.telephony.imsphone.ImsExternalCallTracker +com.android.internal.telephony.imsphone.ImsExternalCallTracker$1 +com.android.internal.telephony.imsphone.ImsExternalCallTracker$2 com.android.internal.telephony.imsphone.ImsExternalCallTracker$ExternalCallStateListener com.android.internal.telephony.imsphone.ImsExternalCallTracker$ExternalConnectionListener -com.android.internal.telephony.imsphone.ImsExternalConnection +com.android.internal.telephony.imsphone.ImsExternalCallTracker$ImsCallNotify com.android.internal.telephony.imsphone.ImsExternalConnection$Listener com.android.internal.telephony.imsphone.ImsPhone com.android.internal.telephony.imsphone.ImsPhone$1 @@ -5743,64 +5966,43 @@ com.android.internal.telephony.imsphone.ImsPhoneCallTracker$2 com.android.internal.telephony.imsphone.ImsPhoneCallTracker$3 com.android.internal.telephony.imsphone.ImsPhoneCallTracker$4 com.android.internal.telephony.imsphone.ImsPhoneCallTracker$5 -com.android.internal.telephony.imsphone.ImsPhoneCallTracker$6 +com.android.internal.telephony.imsphone.ImsPhoneCallTracker$PhoneStateListener com.android.internal.telephony.imsphone.ImsPhoneCommandInterface -com.android.internal.telephony.imsphone.ImsPhoneConnection -com.android.internal.telephony.imsphone.ImsPhoneConnection$MyHandler com.android.internal.telephony.imsphone.ImsPhoneFactory -com.android.internal.telephony.imsphone.ImsPhoneMmiCode com.android.internal.telephony.imsphone.ImsPullCall -com.android.internal.telephony.sip.SipPhone -com.android.internal.telephony.sip.SipPhoneBase +com.android.internal.telephony.metrics.CallSessionEventBuilder +com.android.internal.telephony.metrics.InProgressCallSession +com.android.internal.telephony.metrics.InProgressSmsSession +com.android.internal.telephony.metrics.SmsSessionEventBuilder +com.android.internal.telephony.metrics.TelephonyEventBuilder +com.android.internal.telephony.metrics.TelephonyMetrics +com.android.internal.telephony.nano.TelephonyProto$ImsCapabilities +com.android.internal.telephony.nano.TelephonyProto$ImsConnectionState +com.android.internal.telephony.nano.TelephonyProto$ImsReasonInfo +com.android.internal.telephony.nano.TelephonyProto$RilDataCall +com.android.internal.telephony.nano.TelephonyProto$SmsSession$Event +com.android.internal.telephony.nano.TelephonyProto$TelephonyCallSession$Event +com.android.internal.telephony.nano.TelephonyProto$TelephonyCallSession$Event$RilCall +com.android.internal.telephony.nano.TelephonyProto$TelephonyEvent +com.android.internal.telephony.nano.TelephonyProto$TelephonyServiceState +com.android.internal.telephony.nano.TelephonyProto$TelephonyServiceState$TelephonyOperator +com.android.internal.telephony.nano.TelephonyProto$TelephonySettings com.android.internal.telephony.test.SimulatedRadioControl -com.android.internal.telephony.uicc.AdnRecord -com.android.internal.telephony.uicc.AdnRecord$1 -com.android.internal.telephony.uicc.AdnRecordCache -com.android.internal.telephony.uicc.AdnRecordLoader com.android.internal.telephony.uicc.IccCardApplicationStatus -com.android.internal.telephony.uicc.IccCardApplicationStatus$AppState com.android.internal.telephony.uicc.IccCardApplicationStatus$AppType -com.android.internal.telephony.uicc.IccCardApplicationStatus$PersoSubState com.android.internal.telephony.uicc.IccCardProxy com.android.internal.telephony.uicc.IccCardStatus com.android.internal.telephony.uicc.IccCardStatus$CardState com.android.internal.telephony.uicc.IccCardStatus$PinState com.android.internal.telephony.uicc.IccConstants -com.android.internal.telephony.uicc.IccFileHandler -com.android.internal.telephony.uicc.IccFileHandler$LoadLinearFixedContext -com.android.internal.telephony.uicc.IccIoResult com.android.internal.telephony.uicc.IccRecords -com.android.internal.telephony.uicc.IccRecords$IccRecordLoaded -com.android.internal.telephony.uicc.IccServiceTable +com.android.internal.telephony.uicc.IccRefreshResponse com.android.internal.telephony.uicc.IccUtils -com.android.internal.telephony.uicc.IsimFileHandler -com.android.internal.telephony.uicc.IsimRecords -com.android.internal.telephony.uicc.IsimUiccRecords -com.android.internal.telephony.uicc.IsimUiccRecords$EfIsimDomainLoaded -com.android.internal.telephony.uicc.IsimUiccRecords$EfIsimImpiLoaded -com.android.internal.telephony.uicc.IsimUiccRecords$EfIsimImpuLoaded -com.android.internal.telephony.uicc.IsimUiccRecords$EfIsimIstLoaded -com.android.internal.telephony.uicc.IsimUiccRecords$EfIsimPcscfLoaded -com.android.internal.telephony.uicc.SIMRecords -com.android.internal.telephony.uicc.SIMRecords$1 -com.android.internal.telephony.uicc.SIMRecords$EfPlLoaded -com.android.internal.telephony.uicc.SIMRecords$EfUsimLiLoaded -com.android.internal.telephony.uicc.SIMRecords$GetSpnFsmState -com.android.internal.telephony.uicc.SpnOverride com.android.internal.telephony.uicc.UiccCard com.android.internal.telephony.uicc.UiccCard$1 com.android.internal.telephony.uicc.UiccCardApplication -com.android.internal.telephony.uicc.UiccCardApplication$1 -com.android.internal.telephony.uicc.UiccCarrierPrivilegeRules -com.android.internal.telephony.uicc.UiccCarrierPrivilegeRules$1 com.android.internal.telephony.uicc.UiccController -com.android.internal.telephony.uicc.UiccPkcs15 -com.android.internal.telephony.uicc.UiccPkcs15$FileHandler -com.android.internal.telephony.uicc.UiccPkcs15$Pkcs15Selector -com.android.internal.telephony.uicc.UsimFileHandler -com.android.internal.telephony.uicc.UsimServiceTable -com.android.internal.telephony.uicc.UsimServiceTable$UsimService -com.android.internal.telephony.uicc.VoiceMailConstants +com.android.internal.telephony.uicc.UiccStateChangedLauncher com.android.internal.textservice.ISpellCheckerService com.android.internal.textservice.ISpellCheckerService$Stub com.android.internal.textservice.ISpellCheckerService$Stub$Proxy @@ -5828,6 +6030,9 @@ com.android.internal.util.AsyncChannel$AsyncChannelConnection com.android.internal.util.AsyncChannel$DeathMonitor com.android.internal.util.AsyncChannel$SyncMessenger com.android.internal.util.AsyncChannel$SyncMessenger$SyncHandler +com.android.internal.util.ConcurrentUtils +com.android.internal.util.ConcurrentUtils$1 +com.android.internal.util.ConcurrentUtils$1$1 com.android.internal.util.DumpUtils$Dump com.android.internal.util.FastMath com.android.internal.util.FastPrintWriter @@ -5850,7 +6055,6 @@ com.android.internal.util.MemInfoReader com.android.internal.util.MessageUtils com.android.internal.util.NotificationColorUtil com.android.internal.util.NotificationColorUtil$ColorUtilsFromCompat -com.android.internal.util.ParcelableString com.android.internal.util.Preconditions com.android.internal.util.Predicate com.android.internal.util.ProcFileReader @@ -5865,7 +6069,8 @@ com.android.internal.util.StateMachine$SmHandler com.android.internal.util.StateMachine$SmHandler$HaltingState com.android.internal.util.StateMachine$SmHandler$QuittingState com.android.internal.util.StateMachine$SmHandler$StateInfo -com.android.internal.util.UserIcons +com.android.internal.util.ToBooleanFunction +com.android.internal.util.TokenBucket com.android.internal.util.VirtualRefBasePtr com.android.internal.util.WakeupMessage com.android.internal.util.XmlUtils @@ -5874,12 +6079,6 @@ com.android.internal.util.XmlUtils$WriteMapCallback com.android.internal.view.ActionBarPolicy com.android.internal.view.BaseIWindow com.android.internal.view.BaseSurfaceHolder -com.android.internal.view.FloatingActionMode -com.android.internal.view.FloatingActionMode$1 -com.android.internal.view.FloatingActionMode$2 -com.android.internal.view.FloatingActionMode$3 -com.android.internal.view.FloatingActionMode$4 -com.android.internal.view.FloatingActionMode$FloatingToolbarVisibilityHelper com.android.internal.view.IInputConnectionWrapper com.android.internal.view.IInputConnectionWrapper$MyHandler com.android.internal.view.IInputConnectionWrapper$SomeArgs @@ -5908,11 +6107,13 @@ com.android.internal.view.InputBindResult com.android.internal.view.InputBindResult$1 com.android.internal.view.InputConnectionWrapper com.android.internal.view.InputConnectionWrapper$InputContextCallback +com.android.internal.view.OneShotPreDrawListener com.android.internal.view.RootViewSurfaceTaker com.android.internal.view.RotationPolicy -com.android.internal.view.RotationPolicy$1 com.android.internal.view.RotationPolicy$RotationPolicyListener com.android.internal.view.RotationPolicy$RotationPolicyListener$1 +com.android.internal.view.SurfaceCallbackHelper +com.android.internal.view.SurfaceCallbackHelper$1 com.android.internal.view.WindowManagerPolicyThread com.android.internal.view.animation.FallbackLUTInterpolator com.android.internal.view.animation.HasNativeInterpolator @@ -5922,7 +6123,6 @@ com.android.internal.view.menu.ActionMenuItem com.android.internal.view.menu.ActionMenuItemView com.android.internal.view.menu.ActionMenuItemView$PopupCallback com.android.internal.view.menu.BaseMenuPresenter -com.android.internal.view.menu.ContextMenuBuilder com.android.internal.view.menu.ListMenuItemView com.android.internal.view.menu.MenuAdapter com.android.internal.view.menu.MenuBuilder @@ -5942,12 +6142,12 @@ com.android.internal.view.menu.StandardMenuPopup com.android.internal.view.menu.StandardMenuPopup$1 com.android.internal.view.menu.StandardMenuPopup$2 com.android.internal.view.menu.SubMenuBuilder +com.android.internal.widget.-$Lambda$6$LaTFiUorkqfcqmu-zMQbCLeO77c com.android.internal.widget.AbsActionBarView com.android.internal.widget.AbsActionBarView$VisibilityAnimListener com.android.internal.widget.ActionBarContainer com.android.internal.widget.ActionBarContainer$ActionBarBackgroundDrawable com.android.internal.widget.ActionBarContextView -com.android.internal.widget.ActionBarContextView$1 com.android.internal.widget.ActionBarOverlayLayout com.android.internal.widget.ActionBarOverlayLayout$1 com.android.internal.widget.ActionBarOverlayLayout$2 @@ -5959,60 +6159,29 @@ com.android.internal.widget.ActionBarOverlayLayout$LayoutParams com.android.internal.widget.AlertDialogLayout com.android.internal.widget.BackgroundFallback com.android.internal.widget.ButtonBarLayout +com.android.internal.widget.CachingIconView com.android.internal.widget.DecorContentParent com.android.internal.widget.DecorToolbar com.android.internal.widget.DialogTitle com.android.internal.widget.EditableInputConnection -com.android.internal.widget.FloatingToolbar -com.android.internal.widget.FloatingToolbar$1 -com.android.internal.widget.FloatingToolbar$2 -com.android.internal.widget.FloatingToolbar$FloatingToolbarPopup -com.android.internal.widget.FloatingToolbar$FloatingToolbarPopup$1 -com.android.internal.widget.FloatingToolbar$FloatingToolbarPopup$12 -com.android.internal.widget.FloatingToolbar$FloatingToolbarPopup$13 -com.android.internal.widget.FloatingToolbar$FloatingToolbarPopup$14 -com.android.internal.widget.FloatingToolbar$FloatingToolbarPopup$15 -com.android.internal.widget.FloatingToolbar$FloatingToolbarPopup$16 -com.android.internal.widget.FloatingToolbar$FloatingToolbarPopup$2 -com.android.internal.widget.FloatingToolbar$FloatingToolbarPopup$3 -com.android.internal.widget.FloatingToolbar$FloatingToolbarPopup$4 -com.android.internal.widget.FloatingToolbar$FloatingToolbarPopup$5 -com.android.internal.widget.FloatingToolbar$FloatingToolbarPopup$LogAccelerateInterpolator -com.android.internal.widget.FloatingToolbar$FloatingToolbarPopup$OverflowPanel -com.android.internal.widget.FloatingToolbar$FloatingToolbarPopup$OverflowPanelViewHelper +com.android.internal.widget.ICheckCredentialProgressCallback com.android.internal.widget.ILockSettings com.android.internal.widget.ILockSettings$Stub com.android.internal.widget.ILockSettings$Stub$Proxy com.android.internal.widget.ImageFloatingTextView -com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient -com.android.internal.widget.LockPatternChecker -com.android.internal.widget.LockPatternChecker$3 -com.android.internal.widget.LockPatternChecker$5 -com.android.internal.widget.LockPatternChecker$OnCheckCallback -com.android.internal.widget.LockPatternChecker$OnVerifyCallback com.android.internal.widget.LockPatternUtils -com.android.internal.widget.LockPatternUtils$1 com.android.internal.widget.LockPatternUtils$RequestThrottledException com.android.internal.widget.LockPatternUtils$StrongAuthTracker com.android.internal.widget.LockPatternUtils$StrongAuthTracker$1 com.android.internal.widget.LockPatternUtils$StrongAuthTracker$H com.android.internal.widget.MediaNotificationView com.android.internal.widget.NotificationActionListLayout -com.android.internal.widget.NotificationActionListLayout$-void__clinit___LambdaImpl0 +com.android.internal.widget.NotificationExpandButton com.android.internal.widget.PreferenceImageView -com.android.internal.widget.ResolverDrawerLayout -com.android.internal.widget.ResolverDrawerLayout$1 -com.android.internal.widget.ResolverDrawerLayout$LayoutParams -com.android.internal.widget.ResolverDrawerLayout$OnDismissedListener com.android.internal.widget.ScrollBarUtils -com.android.internal.widget.TextViewInputDisabler -com.android.internal.widget.TextViewInputDisabler$1 com.android.internal.widget.ToolbarWidgetWrapper com.android.internal.widget.ToolbarWidgetWrapper$1 -com.android.internal.widget.ToolbarWidgetWrapper$2 -com.android.internal.widget.ToolbarWidgetWrapper$3 com.android.internal.widget.VerifyCredentialResponse -com.android.internal.widget.VerifyCredentialResponse$1 com.android.okhttp.Address com.android.okhttp.AndroidInternal com.android.okhttp.AndroidShimResponseCache @@ -6032,6 +6201,8 @@ com.android.okhttp.ConnectionPool$1 com.android.okhttp.ConnectionSpec com.android.okhttp.ConnectionSpec$Builder com.android.okhttp.Dispatcher +com.android.okhttp.Dns +com.android.okhttp.Dns$1 com.android.okhttp.Handshake com.android.okhttp.Headers com.android.okhttp.Headers$Builder @@ -6060,12 +6231,11 @@ com.android.okhttp.internal.DiskLruCache com.android.okhttp.internal.DiskLruCache$1 com.android.okhttp.internal.DiskLruCache$2 com.android.okhttp.internal.DiskLruCache$3 +com.android.okhttp.internal.DiskLruCache$Editor com.android.okhttp.internal.DiskLruCache$Entry com.android.okhttp.internal.FaultHidingSink com.android.okhttp.internal.Internal com.android.okhttp.internal.InternalCache -com.android.okhttp.internal.Network -com.android.okhttp.internal.Network$1 com.android.okhttp.internal.OptionalMethod com.android.okhttp.internal.Platform com.android.okhttp.internal.RouteDatabase @@ -6076,17 +6246,17 @@ com.android.okhttp.internal.http.AuthenticatorAdapter com.android.okhttp.internal.http.CacheStrategy com.android.okhttp.internal.http.CacheStrategy$Factory com.android.okhttp.internal.http.HeaderParser -com.android.okhttp.internal.http.HttpConnection -com.android.okhttp.internal.http.HttpConnection$AbstractSource -com.android.okhttp.internal.http.HttpConnection$ChunkedSink -com.android.okhttp.internal.http.HttpConnection$ChunkedSource -com.android.okhttp.internal.http.HttpConnection$FixedLengthSink -com.android.okhttp.internal.http.HttpConnection$FixedLengthSource -com.android.okhttp.internal.http.HttpConnection$UnknownLengthSource +com.android.okhttp.internal.http.Http1xStream +com.android.okhttp.internal.http.Http1xStream$AbstractSource +com.android.okhttp.internal.http.Http1xStream$ChunkedSink +com.android.okhttp.internal.http.Http1xStream$ChunkedSource +com.android.okhttp.internal.http.Http1xStream$FixedLengthSink +com.android.okhttp.internal.http.Http1xStream$FixedLengthSource +com.android.okhttp.internal.http.Http1xStream$UnknownLengthSource com.android.okhttp.internal.http.HttpEngine com.android.okhttp.internal.http.HttpEngine$1 com.android.okhttp.internal.http.HttpMethod -com.android.okhttp.internal.http.HttpTransport +com.android.okhttp.internal.http.HttpStream com.android.okhttp.internal.http.OkHeaders com.android.okhttp.internal.http.OkHeaders$1 com.android.okhttp.internal.http.RealResponseBody @@ -6096,12 +6266,13 @@ com.android.okhttp.internal.http.RetryableSink com.android.okhttp.internal.http.RouteException com.android.okhttp.internal.http.RouteSelector com.android.okhttp.internal.http.StatusLine -com.android.okhttp.internal.http.Transport +com.android.okhttp.internal.http.StreamAllocation com.android.okhttp.internal.huc.DelegatingHttpsURLConnection com.android.okhttp.internal.huc.HttpURLConnectionImpl com.android.okhttp.internal.huc.HttpsURLConnectionImpl com.android.okhttp.internal.io.FileSystem com.android.okhttp.internal.io.FileSystem$1 +com.android.okhttp.internal.io.RealConnection com.android.okhttp.internal.tls.OkHostnameVerifier com.android.okhttp.okio.AsyncTimeout com.android.okhttp.okio.AsyncTimeout$1 @@ -6145,20 +6316,34 @@ com.android.org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers com.android.org.bouncycastle.asn1.x509.X509ObjectIdentifiers com.android.org.bouncycastle.asn1.x9.X9ObjectIdentifiers com.android.org.bouncycastle.crypto.AsymmetricBlockCipher +com.android.org.bouncycastle.crypto.BlockCipher +com.android.org.bouncycastle.crypto.BufferedBlockCipher com.android.org.bouncycastle.crypto.CipherKeyGenerator +com.android.org.bouncycastle.crypto.CipherParameters com.android.org.bouncycastle.crypto.CryptoException +com.android.org.bouncycastle.crypto.DataLengthException com.android.org.bouncycastle.crypto.Digest com.android.org.bouncycastle.crypto.ExtendedDigest com.android.org.bouncycastle.crypto.InvalidCipherTextException com.android.org.bouncycastle.crypto.KeyGenerationParameters +com.android.org.bouncycastle.crypto.OutputLengthException +com.android.org.bouncycastle.crypto.RuntimeCryptoException com.android.org.bouncycastle.crypto.digests.AndroidDigestFactory com.android.org.bouncycastle.crypto.digests.AndroidDigestFactoryInterface com.android.org.bouncycastle.crypto.digests.AndroidDigestFactoryOpenSSL com.android.org.bouncycastle.crypto.digests.OpenSSLDigest com.android.org.bouncycastle.crypto.digests.OpenSSLDigest$SHA1 com.android.org.bouncycastle.crypto.encodings.OAEPEncoding +com.android.org.bouncycastle.crypto.engines.AESEngine com.android.org.bouncycastle.crypto.engines.RSABlindedEngine com.android.org.bouncycastle.crypto.engines.RSACoreEngine +com.android.org.bouncycastle.crypto.paddings.BlockCipherPadding +com.android.org.bouncycastle.crypto.paddings.PKCS7Padding +com.android.org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher +com.android.org.bouncycastle.crypto.params.KeyParameter +com.android.org.bouncycastle.crypto.params.ParametersWithRandom +com.android.org.bouncycastle.jcajce.PBKDFKey +com.android.org.bouncycastle.jcajce.PKCS12Key com.android.org.bouncycastle.jcajce.provider.asymmetric.DH$Mappings com.android.org.bouncycastle.jcajce.provider.asymmetric.DSA$Mappings com.android.org.bouncycastle.jcajce.provider.asymmetric.EC$Mappings @@ -6196,6 +6381,8 @@ com.android.org.bouncycastle.jcajce.provider.keystore.PKCS12$Mappings com.android.org.bouncycastle.jcajce.provider.keystore.bc.BcKeyStoreSpi com.android.org.bouncycastle.jcajce.provider.keystore.bc.BcKeyStoreSpi$Std com.android.org.bouncycastle.jcajce.provider.symmetric.AES +com.android.org.bouncycastle.jcajce.provider.symmetric.AES$ECB +com.android.org.bouncycastle.jcajce.provider.symmetric.AES$ECB$1 com.android.org.bouncycastle.jcajce.provider.symmetric.AES$KeyGen com.android.org.bouncycastle.jcajce.provider.symmetric.AES$Mappings com.android.org.bouncycastle.jcajce.provider.symmetric.ARC4 @@ -6206,18 +6393,31 @@ com.android.org.bouncycastle.jcajce.provider.symmetric.DES com.android.org.bouncycastle.jcajce.provider.symmetric.DES$Mappings com.android.org.bouncycastle.jcajce.provider.symmetric.DESede com.android.org.bouncycastle.jcajce.provider.symmetric.DESede$Mappings +com.android.org.bouncycastle.jcajce.provider.symmetric.PBEPBKDF2 +com.android.org.bouncycastle.jcajce.provider.symmetric.PBEPBKDF2$Mappings com.android.org.bouncycastle.jcajce.provider.symmetric.PBEPKCS12 com.android.org.bouncycastle.jcajce.provider.symmetric.PBEPKCS12$Mappings +com.android.org.bouncycastle.jcajce.provider.symmetric.PBES2AlgorithmParameters +com.android.org.bouncycastle.jcajce.provider.symmetric.PBES2AlgorithmParameters$Mappings com.android.org.bouncycastle.jcajce.provider.symmetric.RC2 com.android.org.bouncycastle.jcajce.provider.symmetric.RC2$Mappings com.android.org.bouncycastle.jcajce.provider.symmetric.SymmetricAlgorithmProvider com.android.org.bouncycastle.jcajce.provider.symmetric.Twofish com.android.org.bouncycastle.jcajce.provider.symmetric.Twofish$Mappings +com.android.org.bouncycastle.jcajce.provider.symmetric.util.BCPBEKey +com.android.org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher +com.android.org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher$AEADGenericBlockCipher +com.android.org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher$BufferedGenericBlockCipher +com.android.org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher$GenericBlockCipher com.android.org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator +com.android.org.bouncycastle.jcajce.provider.symmetric.util.BaseWrapCipher +com.android.org.bouncycastle.jcajce.provider.symmetric.util.BlockCipherProvider +com.android.org.bouncycastle.jcajce.provider.symmetric.util.PBE com.android.org.bouncycastle.jcajce.provider.util.AlgorithmProvider com.android.org.bouncycastle.jcajce.provider.util.AsymmetricAlgorithmProvider com.android.org.bouncycastle.jcajce.provider.util.AsymmetricKeyInfoConverter com.android.org.bouncycastle.jcajce.provider.util.DigestFactory +com.android.org.bouncycastle.jcajce.spec.AEADParameterSpec com.android.org.bouncycastle.jcajce.util.BCJcaJceHelper com.android.org.bouncycastle.jcajce.util.JcaJceHelper com.android.org.bouncycastle.jcajce.util.ProviderJcaJceHelper @@ -6227,19 +6427,25 @@ com.android.org.bouncycastle.jce.provider.BouncyCastleProvider$1 com.android.org.bouncycastle.jce.provider.BouncyCastleProviderConfiguration com.android.org.bouncycastle.util.Arrays com.android.org.bouncycastle.util.Encodable +com.android.org.bouncycastle.util.Pack com.android.org.bouncycastle.util.Strings com.android.org.bouncycastle.util.Strings$1 +com.android.org.conscrypt.AbstractOpenSSLSession com.android.org.conscrypt.AbstractSessionContext com.android.org.conscrypt.AbstractSessionContext$1 com.android.org.conscrypt.AddressUtils com.android.org.conscrypt.ByteArray -com.android.org.conscrypt.CertPinManager +com.android.org.conscrypt.CertBlacklist com.android.org.conscrypt.CertificatePriorityComparator com.android.org.conscrypt.ChainStrengthAnalyzer com.android.org.conscrypt.ClientSessionContext com.android.org.conscrypt.ClientSessionContext$HostAndPort com.android.org.conscrypt.CryptoUpcalls +com.android.org.conscrypt.EvpMdRef$MD5 +com.android.org.conscrypt.EvpMdRef$SHA1 +com.android.org.conscrypt.EvpMdRef$SHA256 com.android.org.conscrypt.FileClientSessionCache +com.android.org.conscrypt.FileClientSessionCache$CacheFile com.android.org.conscrypt.FileClientSessionCache$Impl com.android.org.conscrypt.Hex com.android.org.conscrypt.JSSEProvider @@ -6278,7 +6484,6 @@ com.android.org.conscrypt.OpenSSLMessageDigestJDK com.android.org.conscrypt.OpenSSLMessageDigestJDK$MD5 com.android.org.conscrypt.OpenSSLMessageDigestJDK$SHA1 com.android.org.conscrypt.OpenSSLMessageDigestJDK$SHA256 -com.android.org.conscrypt.OpenSSLMessageDigestJDK$SHA512 com.android.org.conscrypt.OpenSSLProvider com.android.org.conscrypt.OpenSSLRSAKeyFactory com.android.org.conscrypt.OpenSSLRSAKeyPairGenerator @@ -6305,10 +6510,8 @@ com.android.org.conscrypt.OpenSSLX509CertificateFactory$1 com.android.org.conscrypt.OpenSSLX509CertificateFactory$2 com.android.org.conscrypt.OpenSSLX509CertificateFactory$Parser com.android.org.conscrypt.OpenSSLX509CertificateFactory$ParsingException -com.android.org.conscrypt.PinEntryException -com.android.org.conscrypt.PinListEntry -com.android.org.conscrypt.PinManagerException com.android.org.conscrypt.Platform +com.android.org.conscrypt.Platform$NoPreloadHolder com.android.org.conscrypt.SSLClientSessionCache com.android.org.conscrypt.SSLParametersImpl com.android.org.conscrypt.SSLParametersImpl$AliasChooser @@ -6326,12 +6529,20 @@ com.android.org.conscrypt.TrustedCertificateStore$2 com.android.org.conscrypt.TrustedCertificateStore$4 com.android.org.conscrypt.TrustedCertificateStore$5 com.android.org.conscrypt.TrustedCertificateStore$CertSelector +com.android.org.conscrypt.ct.CTLogInfo +com.android.org.conscrypt.ct.CTLogStore +com.android.org.conscrypt.ct.CTLogStoreImpl +com.android.org.conscrypt.ct.CTLogStoreImpl$InvalidLogFileException +com.android.org.conscrypt.ct.CTPolicy +com.android.org.conscrypt.ct.CTPolicyImpl +com.android.org.conscrypt.ct.CTVerifier +com.android.org.conscrypt.ct.KnownLogs +com.android.org.conscrypt.ct.SerializationException com.android.org.conscrypt.util.ArrayUtils com.android.org.conscrypt.util.EmptyArray com.android.server.AppWidgetBackupBridge com.android.server.BootReceiver com.android.server.BootReceiver$1 -com.android.server.BootReceiver$2 com.android.server.LocalServices com.android.server.NetworkManagementSocketTagger com.android.server.NetworkManagementSocketTagger$1 @@ -6341,6 +6552,7 @@ com.android.server.SystemConfig$PermissionEntry com.android.server.WidgetBackupProvider com.android.server.backup.AccountSyncSettingsBackupHelper com.android.server.net.BaseNetworkObserver +com.android.server.net.DnsServerEntry com.android.server.net.DnsServerRepository com.android.server.net.NetlinkTracker com.android.server.net.NetlinkTracker$Callback @@ -6350,6 +6562,17 @@ com.android.server.sip.SipService$MyExecutor com.android.server.sip.SipWakeLock com.android.server.sip.SipWakeupTimer com.android.server.sip.SipWakeupTimer$MyEventComparator +com.android.server.wifi.nano.WifiMetricsProto$AlertReasonCount +com.android.server.wifi.nano.WifiMetricsProto$ConnectionEvent +com.android.server.wifi.nano.WifiMetricsProto$RouterFingerPrint +com.android.server.wifi.nano.WifiMetricsProto$RssiPollCount +com.android.server.wifi.nano.WifiMetricsProto$SoftApDurationBucket +com.android.server.wifi.nano.WifiMetricsProto$SoftApReturnCodeCount +com.android.server.wifi.nano.WifiMetricsProto$WifiLog +com.android.server.wifi.nano.WifiMetricsProto$WifiLog$ScanReturnEntry +com.android.server.wifi.nano.WifiMetricsProto$WifiLog$WifiSystemStateEntry +com.android.server.wifi.nano.WifiMetricsProto$WifiScoreCount +com.android.server.wm.nano.WindowManagerProtos$TaskSnapshotProto com.google.android.collect.Lists com.google.android.collect.Maps com.google.android.collect.Sets @@ -6363,15 +6586,21 @@ com.google.android.mms.MmsException com.google.android.mms.pdu.GenericPdu com.google.android.mms.pdu.PduComposer com.google.android.mms.pdu.PduPersister +dalvik.annotation.optimization.CriticalNative +dalvik.annotation.optimization.FastNative dalvik.system.BaseDexClassLoader +dalvik.system.BaseDexClassLoader$Reporter dalvik.system.BlockGuard dalvik.system.BlockGuard$1 dalvik.system.BlockGuard$2 dalvik.system.BlockGuard$BlockGuardPolicyException dalvik.system.BlockGuard$Policy +dalvik.system.ClassExt dalvik.system.CloseGuard dalvik.system.CloseGuard$DefaultReporter +dalvik.system.CloseGuard$DefaultTracker dalvik.system.CloseGuard$Reporter +dalvik.system.CloseGuard$Tracker dalvik.system.DalvikLogHandler dalvik.system.DalvikLogging dalvik.system.DexClassLoader @@ -6379,6 +6608,10 @@ dalvik.system.DexFile dalvik.system.DexFile$DFEnum dalvik.system.DexPathList dalvik.system.DexPathList$Element +dalvik.system.DexPathList$NativeLibraryElement +dalvik.system.EmulatedStackFrame +dalvik.system.EmulatedStackFrame$Range +dalvik.system.InMemoryDexClassLoader$DexData dalvik.system.PathClassLoader dalvik.system.SocketTagger dalvik.system.SocketTagger$1 @@ -6386,11 +6619,6 @@ dalvik.system.VMDebug dalvik.system.VMRuntime dalvik.system.VMStack dalvik.system.ZygoteHooks -java.beans.ChangeListenerMap -java.beans.PropertyChangeEvent -java.beans.PropertyChangeListener -java.beans.PropertyChangeSupport -java.beans.PropertyChangeSupport$PropertyChangeListenerMap java.io.Bits java.io.BufferedInputStream java.io.BufferedOutputStream @@ -6407,6 +6635,7 @@ java.io.DataInput java.io.DataInputStream java.io.DataOutput java.io.DataOutputStream +java.io.DefaultFileSystem java.io.EOFException java.io.ExpiringCache java.io.ExpiringCache$1 @@ -6414,7 +6643,9 @@ java.io.ExpiringCache$Entry java.io.Externalizable java.io.File java.io.File$PathStatus +java.io.File$TempDirectory java.io.FileDescriptor +java.io.FileDescriptor$1 java.io.FileFilter java.io.FileInputStream java.io.FileInputStream$UseManualSkipException @@ -6434,6 +6665,7 @@ java.io.InputStreamReader java.io.InterruptedIOException java.io.InvalidClassException java.io.InvalidObjectException +java.io.NotSerializableException java.io.ObjectInput java.io.ObjectInputStream java.io.ObjectInputStream$BlockDataInputStream @@ -6445,6 +6677,7 @@ java.io.ObjectOutput java.io.ObjectOutputStream java.io.ObjectOutputStream$BlockDataOutputStream java.io.ObjectOutputStream$HandleTable +java.io.ObjectOutputStream$PutField java.io.ObjectOutputStream$ReplaceTable java.io.ObjectStreamClass java.io.ObjectStreamClass$1 @@ -6475,13 +6708,17 @@ java.io.SequenceInputStream java.io.SerialCallbackContext java.io.Serializable java.io.SerializablePermission +java.io.StreamCorruptedException java.io.StringBufferInputStream java.io.StringReader java.io.StringWriter +java.io.SyncFailedException java.io.UTFDataFormatException java.io.UnixFileSystem java.io.UnsupportedEncodingException java.io.Writer +java.lang.-$Lambda$250$S9HjrJh0nDg7IyU6wZdPArnZWRQ +java.lang.-$Lambda$251$S9HjrJh0nDg7IyU6wZdPArnZWRQ java.lang.AbstractMethodError java.lang.AbstractStringBuilder java.lang.AndroidHardcodedSystemProperties @@ -6498,8 +6735,6 @@ java.lang.Byte$ByteCache java.lang.CaseMapper java.lang.CaseMapper$1 java.lang.CharSequence -java.lang.CharSequence$-java_util_stream_IntStream_chars__LambdaImpl0 -java.lang.CharSequence$-java_util_stream_IntStream_codePoints__LambdaImpl0 java.lang.CharSequence$1CharIterator java.lang.CharSequence$1CodePointIterator java.lang.Character @@ -6531,9 +6766,6 @@ java.lang.Error java.lang.Exception java.lang.ExceptionInInitializerError java.lang.Float -java.lang.FloatingDecimal -java.lang.FloatingDecimal$1 -java.lang.FloatingDecimal$2 java.lang.IllegalAccessError java.lang.IllegalAccessException java.lang.IllegalArgumentException @@ -6543,6 +6775,7 @@ java.lang.IllegalThreadStateException java.lang.IncompatibleClassChangeError java.lang.IndexOutOfBoundsException java.lang.InheritableThreadLocal +java.lang.InstantiationError java.lang.InstantiationException java.lang.Integer java.lang.Integer$IntegerCache @@ -6554,7 +6787,8 @@ java.lang.LinkageError java.lang.Long java.lang.Long$LongCache java.lang.Math -java.lang.Math$NoImagePreloadHolder +java.lang.Math$RandomNumberGeneratorHolder +java.lang.NegativeArraySizeException java.lang.NoClassDefFoundError java.lang.NoSuchFieldError java.lang.NoSuchFieldException @@ -6586,7 +6820,6 @@ java.lang.SecurityException java.lang.SecurityManager java.lang.Short java.lang.Short$ShortCache -java.lang.Shutdown java.lang.StackOverflowError java.lang.StackTraceElement java.lang.StrictMath @@ -6594,7 +6827,6 @@ java.lang.String java.lang.String$CaseInsensitiveComparator java.lang.StringBuffer java.lang.StringBuilder -java.lang.StringCoding java.lang.StringFactory java.lang.StringIndexOutOfBoundsException java.lang.System @@ -6636,6 +6868,22 @@ java.lang.annotation.IncompleteAnnotationException java.lang.annotation.Inherited java.lang.annotation.Retention java.lang.annotation.Target +java.lang.invoke.MethodHandle +java.lang.invoke.MethodHandleImpl +java.lang.invoke.MethodHandleImpl$HandleInfo +java.lang.invoke.MethodHandleInfo +java.lang.invoke.MethodHandleStatics +java.lang.invoke.MethodHandles +java.lang.invoke.MethodType +java.lang.invoke.MethodType$ConcurrentWeakInternSet +java.lang.invoke.MethodType$ConcurrentWeakInternSet$WeakEntry +java.lang.invoke.MethodTypeForm +java.lang.invoke.Transformers$BindTo +java.lang.invoke.Transformers$Collector +java.lang.invoke.Transformers$Spreader +java.lang.invoke.Transformers$Transformer +java.lang.invoke.Transformers$VarargsCollector +java.lang.invoke.WrongMethodTypeException java.lang.ref.FinalizerReference java.lang.ref.FinalizerReference$Sentinel java.lang.ref.PhantomReference @@ -6643,27 +6891,40 @@ java.lang.ref.Reference java.lang.ref.ReferenceQueue java.lang.ref.SoftReference java.lang.ref.WeakReference -java.lang.reflect.AbstractMethod -java.lang.reflect.AbstractMethod$GenericInfo java.lang.reflect.AccessibleObject java.lang.reflect.AnnotatedElement java.lang.reflect.Array java.lang.reflect.Constructor +java.lang.reflect.Executable +java.lang.reflect.Executable$GenericInfo java.lang.reflect.Field java.lang.reflect.GenericArrayType java.lang.reflect.GenericDeclaration java.lang.reflect.InvocationHandler java.lang.reflect.InvocationTargetException +java.lang.reflect.MalformedParametersException java.lang.reflect.Member java.lang.reflect.Method java.lang.reflect.Method$1 java.lang.reflect.Modifier +java.lang.reflect.Parameter java.lang.reflect.ParameterizedType java.lang.reflect.Proxy java.lang.reflect.Proxy$1 +java.lang.reflect.Proxy$Key1 +java.lang.reflect.Proxy$Key2 +java.lang.reflect.Proxy$KeyFactory +java.lang.reflect.Proxy$KeyX +java.lang.reflect.Proxy$ProxyClassFactory java.lang.reflect.Type java.lang.reflect.TypeVariable java.lang.reflect.UndeclaredThrowableException +java.lang.reflect.WeakCache +java.lang.reflect.WeakCache$CacheKey +java.lang.reflect.WeakCache$CacheValue +java.lang.reflect.WeakCache$Factory +java.lang.reflect.WeakCache$LookupValue +java.lang.reflect.WeakCache$Value java.lang.reflect.WildcardType java.math.BigDecimal java.math.BigInt @@ -6671,7 +6932,6 @@ java.math.BigInteger java.math.BitLevel java.math.Conversion java.math.Division -java.math.Logical java.math.MathContext java.math.Multiplication java.math.NativeBN @@ -6718,6 +6978,7 @@ java.net.IDN java.net.InMemoryCookieStore java.net.Inet4Address java.net.Inet6Address +java.net.Inet6Address$Inet6AddressHolder java.net.Inet6AddressImpl java.net.InetAddress java.net.InetAddress$1 @@ -6730,7 +6991,6 @@ java.net.JarURLConnection java.net.MalformedURLException java.net.MulticastSocket java.net.NetworkInterface -java.net.NetworkInterface$1 java.net.NetworkInterface$1checkedAddresses java.net.NoRouteToHostException java.net.Parts @@ -6739,14 +6999,12 @@ java.net.PlainDatagramSocketImpl java.net.PlainSocketImpl java.net.PortUnreachableException java.net.ProtocolException -java.net.ProtocolFamily java.net.Proxy java.net.Proxy$Type java.net.ProxySelector java.net.ResponseCache java.net.ServerSocket java.net.Socket -java.net.Socket$1 java.net.Socket$2 java.net.Socket$3 java.net.SocketAddress @@ -6758,8 +7016,6 @@ java.net.SocketOutputStream java.net.SocketTimeoutException java.net.SocksConsts java.net.SocksSocketImpl -java.net.SocksSocketImpl$3 -java.net.StandardProtocolFamily java.net.URI java.net.URI$Parser java.net.URISyntaxException @@ -6805,7 +7061,6 @@ java.nio.channels.ByteChannel java.nio.channels.CancelledKeyException java.nio.channels.Channel java.nio.channels.Channels -java.nio.channels.Channels$1 java.nio.channels.Channels$ReadableByteChannelImpl java.nio.channels.ClosedByInterruptException java.nio.channels.ClosedChannelException @@ -6815,6 +7070,7 @@ java.nio.channels.FileChannel$MapMode java.nio.channels.FileLock java.nio.channels.GatheringByteChannel java.nio.channels.InterruptibleChannel +java.nio.channels.MulticastChannel java.nio.channels.NetworkChannel java.nio.channels.NonWritableChannelException java.nio.channels.OverlappingFileLockException @@ -6822,19 +7078,12 @@ java.nio.channels.ReadableByteChannel java.nio.channels.ScatteringByteChannel java.nio.channels.SeekableByteChannel java.nio.channels.SelectableChannel -java.nio.channels.SelectionKey -java.nio.channels.Selector java.nio.channels.ServerSocketChannel java.nio.channels.SocketChannel java.nio.channels.WritableByteChannel java.nio.channels.spi.AbstractInterruptibleChannel java.nio.channels.spi.AbstractInterruptibleChannel$1 java.nio.channels.spi.AbstractSelectableChannel -java.nio.channels.spi.AbstractSelectionKey -java.nio.channels.spi.AbstractSelector -java.nio.channels.spi.AbstractSelector$1 -java.nio.channels.spi.SelectorProvider -java.nio.channels.spi.SelectorProvider$1 java.nio.charset.CharacterCodingException java.nio.charset.Charset java.nio.charset.CharsetDecoder @@ -6850,6 +7099,21 @@ java.nio.charset.CodingErrorAction java.nio.charset.IllegalCharsetNameException java.nio.charset.StandardCharsets java.nio.charset.UnsupportedCharsetException +java.nio.file.FileAlreadyExistsException +java.nio.file.FileSystem +java.nio.file.FileSystemException +java.nio.file.FileSystems +java.nio.file.FileSystems$DefaultFileSystemHolder +java.nio.file.FileSystems$DefaultFileSystemHolder$1 +java.nio.file.Files +java.nio.file.NoSuchFileException +java.nio.file.OpenOption +java.nio.file.Path +java.nio.file.Watchable +java.nio.file.attribute.BasicFileAttributes +java.nio.file.attribute.FileAttribute +java.nio.file.attribute.PosixFileAttributes +java.nio.file.spi.FileSystemProvider java.security.AccessControlContext java.security.AccessControlException java.security.AccessController @@ -6912,6 +7176,7 @@ java.security.UnrecoverableKeyException java.security.cert.CRL java.security.cert.CRLException java.security.cert.CertPath +java.security.cert.CertPathBuilderException java.security.cert.CertPathChecker java.security.cert.CertPathHelperImpl java.security.cert.CertPathParameters @@ -6950,7 +7215,6 @@ java.security.interfaces.RSAPrivateKey java.security.interfaces.RSAPublicKey java.security.spec.AlgorithmParameterSpec java.security.spec.ECField -java.security.spec.ECFieldF2m java.security.spec.ECFieldFp java.security.spec.ECGenParameterSpec java.security.spec.ECParameterSpec @@ -6964,6 +7228,8 @@ java.security.spec.InvalidParameterSpecException java.security.spec.KeySpec java.security.spec.MGF1ParameterSpec java.security.spec.PKCS8EncodedKeySpec +java.security.spec.RSAPrivateCrtKeySpec +java.security.spec.RSAPrivateKeySpec java.security.spec.RSAPublicKeySpec java.security.spec.X509EncodedKeySpec java.sql.Date @@ -6999,17 +7265,23 @@ java.text.ParsePosition java.text.RuleBasedCollator java.text.SimpleDateFormat java.text.StringCharacterIterator -java.text.spi.DateFormatProvider -java.text.spi.DateFormatSymbolsProvider -java.text.spi.DecimalFormatSymbolsProvider -java.text.spi.NumberFormatProvider +java.time.DateTimeException +java.util.-$Lambda$181$4EqhxufgNKat19m0CB0-toH_lzo +java.util.-$Lambda$182$4EqhxufgNKat19m0CB0-toH_lzo +java.util.-$Lambda$183$4EqhxufgNKat19m0CB0-toH_lzo +java.util.-$Lambda$184$4EqhxufgNKat19m0CB0-toH_lzo +java.util.-$Lambda$267$4EqhxufgNKat19m0CB0-toH_lzo +java.util.-$Lambda$268$4EqhxufgNKat19m0CB0-toH_lzo +java.util.-$Lambda$291$aUGKT4ItCOku5-JSG-x8Aqj2pJw +java.util.-$Lambda$292$aUGKT4ItCOku5-JSG-x8Aqj2pJw +java.util.-$Lambda$293$aUGKT4ItCOku5-JSG-x8Aqj2pJw +java.util.-$Lambda$294$aUGKT4ItCOku5-JSG-x8Aqj2pJw java.util.AbstractCollection java.util.AbstractList java.util.AbstractList$Itr java.util.AbstractList$ListItr java.util.AbstractMap java.util.AbstractMap$1 -java.util.AbstractMap$1$1 java.util.AbstractMap$2 java.util.AbstractMap$2$1 java.util.AbstractMap$SimpleEntry @@ -7019,14 +7291,31 @@ java.util.AbstractSequentialList java.util.AbstractSet java.util.ArrayDeque java.util.ArrayDeque$DeqIterator +java.util.ArrayDeque$DescendingIterator java.util.ArrayList java.util.ArrayList$ArrayListSpliterator java.util.ArrayList$Itr java.util.ArrayList$ListItr java.util.ArrayList$SubList java.util.ArrayList$SubList$1 +java.util.ArrayPrefixHelpers$CumulateTask +java.util.ArrayPrefixHelpers$DoubleCumulateTask +java.util.ArrayPrefixHelpers$IntCumulateTask +java.util.ArrayPrefixHelpers$LongCumulateTask java.util.Arrays java.util.Arrays$ArrayList +java.util.Arrays$NaturalOrder +java.util.ArraysParallelSortHelpers$FJByte$Sorter +java.util.ArraysParallelSortHelpers$FJChar$Sorter +java.util.ArraysParallelSortHelpers$FJDouble$Sorter +java.util.ArraysParallelSortHelpers$FJFloat$Sorter +java.util.ArraysParallelSortHelpers$FJInt$Sorter +java.util.ArraysParallelSortHelpers$FJLong$Sorter +java.util.ArraysParallelSortHelpers$FJObject$Sorter +java.util.ArraysParallelSortHelpers$FJShort$Sorter +java.util.Base64 +java.util.Base64$Decoder +java.util.Base64$Encoder java.util.BitSet java.util.Calendar java.util.Collection @@ -7038,6 +7327,9 @@ java.util.Collections$AsLIFOQueue java.util.Collections$CheckedCollection java.util.Collections$CheckedList java.util.Collections$CheckedMap +java.util.Collections$CheckedNavigableMap +java.util.Collections$CheckedNavigableSet +java.util.Collections$CheckedQueue java.util.Collections$CheckedRandomAccessList java.util.Collections$CheckedSet java.util.Collections$CheckedSortedMap @@ -7058,6 +7350,8 @@ java.util.Collections$SingletonSet java.util.Collections$SynchronizedCollection java.util.Collections$SynchronizedList java.util.Collections$SynchronizedMap +java.util.Collections$SynchronizedNavigableMap +java.util.Collections$SynchronizedNavigableSet java.util.Collections$SynchronizedRandomAccessList java.util.Collections$SynchronizedSet java.util.Collections$SynchronizedSortedMap @@ -7070,18 +7364,16 @@ java.util.Collections$UnmodifiableMap java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$1 java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry +java.util.Collections$UnmodifiableNavigableMap +java.util.Collections$UnmodifiableNavigableMap$EmptyNavigableMap +java.util.Collections$UnmodifiableNavigableSet +java.util.Collections$UnmodifiableNavigableSet$EmptyNavigableSet java.util.Collections$UnmodifiableRandomAccessList java.util.Collections$UnmodifiableSet java.util.Collections$UnmodifiableSortedMap java.util.Collections$UnmodifiableSortedSet java.util.ComparableTimSort java.util.Comparator -java.util.Comparator$-java_util_Comparator_comparingDouble_java_util_function_ToDoubleFunction_keyExtractor_LambdaImpl0 -java.util.Comparator$-java_util_Comparator_comparingInt_java_util_function_ToIntFunction_keyExtractor_LambdaImpl0 -java.util.Comparator$-java_util_Comparator_comparingLong_java_util_function_ToLongFunction_keyExtractor_LambdaImpl0 -java.util.Comparator$-java_util_Comparator_comparing_java_util_function_Function_keyExtractor_LambdaImpl0 -java.util.Comparator$-java_util_Comparator_comparing_java_util_function_Function_keyExtractor_java_util_Comparator_keyComparator_LambdaImpl0 -java.util.Comparator$-java_util_Comparator_thenComparing_java_util_Comparator_other_LambdaImpl0 java.util.Comparators$NaturalOrderComparator java.util.Comparators$NullComparator java.util.ConcurrentModificationException @@ -7105,8 +7397,6 @@ java.util.EnumSet java.util.EnumSet$SerializationProxy java.util.Enumeration java.util.EventListener -java.util.EventObject -java.util.FormatFlagsConversionMismatchException java.util.Formattable java.util.Formatter java.util.Formatter$Conversion @@ -7121,9 +7411,10 @@ java.util.HashMap java.util.HashMap$EntryIterator java.util.HashMap$EntrySet java.util.HashMap$HashIterator -java.util.HashMap$HashMapEntry java.util.HashMap$KeyIterator java.util.HashMap$KeySet +java.util.HashMap$Node +java.util.HashMap$TreeNode java.util.HashMap$ValueIterator java.util.HashMap$Values java.util.HashSet @@ -7148,11 +7439,14 @@ java.util.Iterator java.util.JumboEnumSet java.util.JumboEnumSet$EnumSetIterator java.util.LinkedHashMap -java.util.LinkedHashMap$EntryIterator -java.util.LinkedHashMap$KeyIterator +java.util.LinkedHashMap$LinkedEntryIterator +java.util.LinkedHashMap$LinkedEntrySet java.util.LinkedHashMap$LinkedHashIterator java.util.LinkedHashMap$LinkedHashMapEntry -java.util.LinkedHashMap$ValueIterator +java.util.LinkedHashMap$LinkedKeyIterator +java.util.LinkedHashMap$LinkedKeySet +java.util.LinkedHashMap$LinkedValueIterator +java.util.LinkedHashMap$LinkedValues java.util.LinkedHashSet java.util.LinkedList java.util.LinkedList$DescendingIterator @@ -7160,10 +7454,13 @@ java.util.LinkedList$ListItr java.util.LinkedList$Node java.util.List java.util.ListIterator +java.util.ListResourceBundle java.util.Locale java.util.Locale$Builder java.util.Locale$Cache java.util.Locale$Category +java.util.Locale$FilteringMode +java.util.Locale$LanguageRange java.util.Locale$LocaleKey java.util.Map java.util.Map$Entry @@ -7197,14 +7494,8 @@ java.util.ResourceBundle$Control java.util.ResourceBundle$Control$1 java.util.ResourceBundle$Control$CandidateListCache java.util.ResourceBundle$LoaderReference -java.util.ResourceBundle$RBClassLoader -java.util.ResourceBundle$RBClassLoader$1 java.util.Scanner java.util.Scanner$1 -java.util.ServiceConfigurationError -java.util.ServiceLoader -java.util.ServiceLoader$1 -java.util.ServiceLoader$LazyIterator java.util.Set java.util.SimpleTimeZone java.util.SortedMap @@ -7220,6 +7511,7 @@ java.util.Spliterators$EmptySpliterator$OfDouble java.util.Spliterators$EmptySpliterator$OfInt java.util.Spliterators$EmptySpliterator$OfLong java.util.Spliterators$EmptySpliterator$OfRef +java.util.Spliterators$IteratorSpliterator java.util.Stack java.util.StringJoiner java.util.StringTokenizer @@ -7264,6 +7556,7 @@ java.util.WeakHashMap$KeyIterator java.util.WeakHashMap$KeySet java.util.WeakHashMap$ValueIterator java.util.WeakHashMap$Values +java.util.concurrent.-$Lambda$269$xR9BLpu6SifNikvFgr4lEiECBsk java.util.concurrent.AbstractExecutorService java.util.concurrent.ArrayBlockingQueue java.util.concurrent.BlockingDeque @@ -7279,15 +7572,48 @@ java.util.concurrent.CompletionService java.util.concurrent.CompletionStage java.util.concurrent.ConcurrentHashMap java.util.concurrent.ConcurrentHashMap$BaseIterator +java.util.concurrent.ConcurrentHashMap$BulkTask java.util.concurrent.ConcurrentHashMap$CollectionView java.util.concurrent.ConcurrentHashMap$CounterCell java.util.concurrent.ConcurrentHashMap$EntryIterator java.util.concurrent.ConcurrentHashMap$EntrySetView +java.util.concurrent.ConcurrentHashMap$ForEachEntryTask +java.util.concurrent.ConcurrentHashMap$ForEachKeyTask +java.util.concurrent.ConcurrentHashMap$ForEachMappingTask +java.util.concurrent.ConcurrentHashMap$ForEachTransformedEntryTask +java.util.concurrent.ConcurrentHashMap$ForEachTransformedKeyTask +java.util.concurrent.ConcurrentHashMap$ForEachTransformedMappingTask +java.util.concurrent.ConcurrentHashMap$ForEachTransformedValueTask +java.util.concurrent.ConcurrentHashMap$ForEachValueTask java.util.concurrent.ConcurrentHashMap$ForwardingNode java.util.concurrent.ConcurrentHashMap$KeyIterator java.util.concurrent.ConcurrentHashMap$KeySetView java.util.concurrent.ConcurrentHashMap$MapEntry +java.util.concurrent.ConcurrentHashMap$MapReduceEntriesTask +java.util.concurrent.ConcurrentHashMap$MapReduceEntriesToDoubleTask +java.util.concurrent.ConcurrentHashMap$MapReduceEntriesToIntTask +java.util.concurrent.ConcurrentHashMap$MapReduceEntriesToLongTask +java.util.concurrent.ConcurrentHashMap$MapReduceKeysTask +java.util.concurrent.ConcurrentHashMap$MapReduceKeysToDoubleTask +java.util.concurrent.ConcurrentHashMap$MapReduceKeysToIntTask +java.util.concurrent.ConcurrentHashMap$MapReduceKeysToLongTask +java.util.concurrent.ConcurrentHashMap$MapReduceMappingsTask +java.util.concurrent.ConcurrentHashMap$MapReduceMappingsToDoubleTask +java.util.concurrent.ConcurrentHashMap$MapReduceMappingsToIntTask +java.util.concurrent.ConcurrentHashMap$MapReduceMappingsToLongTask +java.util.concurrent.ConcurrentHashMap$MapReduceValuesTask +java.util.concurrent.ConcurrentHashMap$MapReduceValuesToDoubleTask +java.util.concurrent.ConcurrentHashMap$MapReduceValuesToIntTask +java.util.concurrent.ConcurrentHashMap$MapReduceValuesToLongTask java.util.concurrent.ConcurrentHashMap$Node +java.util.concurrent.ConcurrentHashMap$ReduceEntriesTask +java.util.concurrent.ConcurrentHashMap$ReduceKeysTask +java.util.concurrent.ConcurrentHashMap$ReduceValuesTask +java.util.concurrent.ConcurrentHashMap$ReservationNode +java.util.concurrent.ConcurrentHashMap$SearchEntriesTask +java.util.concurrent.ConcurrentHashMap$SearchKeysTask +java.util.concurrent.ConcurrentHashMap$SearchMappingsTask +java.util.concurrent.ConcurrentHashMap$SearchValuesTask java.util.concurrent.ConcurrentHashMap$Segment java.util.concurrent.ConcurrentHashMap$Traverser java.util.concurrent.ConcurrentHashMap$TreeBin @@ -7306,15 +7632,15 @@ java.util.concurrent.ConcurrentSkipListMap$Iter java.util.concurrent.ConcurrentSkipListMap$KeyIterator java.util.concurrent.ConcurrentSkipListMap$KeySet java.util.concurrent.ConcurrentSkipListMap$Node -java.util.concurrent.ConcurrentSkipListMap$SubMap java.util.concurrent.ConcurrentSkipListMap$ValueIterator java.util.concurrent.ConcurrentSkipListMap$Values java.util.concurrent.ConcurrentSkipListSet java.util.concurrent.CopyOnWriteArrayList -java.util.concurrent.CopyOnWriteArrayList$CowIterator +java.util.concurrent.CopyOnWriteArrayList$COWIterator java.util.concurrent.CopyOnWriteArraySet java.util.concurrent.CountDownLatch java.util.concurrent.CountDownLatch$Sync +java.util.concurrent.CountedCompleter java.util.concurrent.DelayQueue java.util.concurrent.Delayed java.util.concurrent.ExecutionException @@ -7346,6 +7672,8 @@ java.util.concurrent.LinkedBlockingDeque$Node java.util.concurrent.LinkedBlockingQueue java.util.concurrent.LinkedBlockingQueue$Itr java.util.concurrent.LinkedBlockingQueue$Node +java.util.concurrent.Phaser +java.util.concurrent.Phaser$QNode java.util.concurrent.PriorityBlockingQueue java.util.concurrent.RejectedExecutionException java.util.concurrent.RejectedExecutionHandler @@ -7368,6 +7696,7 @@ java.util.concurrent.ThreadLocalRandom java.util.concurrent.ThreadLocalRandom$1 java.util.concurrent.ThreadPoolExecutor java.util.concurrent.ThreadPoolExecutor$AbortPolicy +java.util.concurrent.ThreadPoolExecutor$DiscardOldestPolicy java.util.concurrent.ThreadPoolExecutor$DiscardPolicy java.util.concurrent.ThreadPoolExecutor$Worker java.util.concurrent.TimeUnit @@ -7412,21 +7741,35 @@ java.util.concurrent.locks.ReentrantReadWriteLock$Sync java.util.concurrent.locks.ReentrantReadWriteLock$Sync$HoldCounter java.util.concurrent.locks.ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock +java.util.function.-$Lambda$276$1MZdIZ-DL_fjy9l0o8IMJk57T2g java.util.function.BiConsumer java.util.function.BiFunction +java.util.function.BinaryOperator java.util.function.Consumer +java.util.function.DoubleBinaryOperator java.util.function.Function +java.util.function.IntBinaryOperator +java.util.function.IntConsumer +java.util.function.IntFunction +java.util.function.IntToDoubleFunction +java.util.function.IntToLongFunction +java.util.function.IntUnaryOperator +java.util.function.LongBinaryOperator +java.util.function.LongUnaryOperator java.util.function.Predicate java.util.function.Supplier +java.util.function.ToDoubleBiFunction java.util.function.ToDoubleFunction +java.util.function.ToIntBiFunction java.util.function.ToIntFunction +java.util.function.ToLongBiFunction java.util.function.ToLongFunction java.util.function.UnaryOperator java.util.jar.Attributes java.util.jar.Attributes$Name java.util.jar.JarEntry java.util.jar.JarFile -java.util.jar.JarFile$1 +java.util.jar.JarFile$JarEntryIterator java.util.jar.JarFile$JarFileEntry java.util.jar.JarVerifier java.util.jar.JarVerifier$1 @@ -7434,9 +7777,6 @@ java.util.jar.JarVerifier$VerifierStream java.util.jar.Manifest java.util.jar.Manifest$FastInputStream java.util.logging.ErrorManager -java.util.logging.FileHandler -java.util.logging.FileHandler$InitializationErrorManager -java.util.logging.FileHandler$MeteredStream java.util.logging.Filter java.util.logging.Formatter java.util.logging.Handler @@ -7445,7 +7785,8 @@ java.util.logging.Level$KnownLevel java.util.logging.LogManager java.util.logging.LogManager$1 java.util.logging.LogManager$2 -java.util.logging.LogManager$4 +java.util.logging.LogManager$3 +java.util.logging.LogManager$5 java.util.logging.LogManager$Cleaner java.util.logging.LogManager$LogNode java.util.logging.LogManager$LoggerContext @@ -7456,31 +7797,71 @@ java.util.logging.LogManager$SystemLoggerContext java.util.logging.LogRecord java.util.logging.Logger java.util.logging.Logger$1 +java.util.logging.Logger$LoggerBundle java.util.logging.LoggingPermission java.util.logging.LoggingProxyImpl -java.util.logging.SimpleFormatter -java.util.logging.StreamHandler -java.util.logging.XMLFormatter java.util.prefs.AbstractPreferences java.util.prefs.FileSystemPreferences java.util.prefs.Preferences java.util.regex.MatchResult java.util.regex.Matcher +java.util.regex.Matcher$OffsetBasedMatchResult java.util.regex.Pattern java.util.regex.PatternSyntaxException -java.util.spi.LocaleServiceProvider +java.util.stream.-$Lambda$155$qTstLJg88fs2C3g6LH-R51vCVP0 +java.util.stream.-$Lambda$41$qTstLJg88fs2C3g6LH-R51vCVP0 +java.util.stream.-$Lambda$67$qTstLJg88fs2C3g6LH-R51vCVP0 +java.util.stream.-$Lambda$89$qTstLJg88fs2C3g6LH-R51vCVP0 +java.util.stream.AbstractPipeline java.util.stream.BaseStream +java.util.stream.Collector +java.util.stream.Collector$Characteristics +java.util.stream.Collectors +java.util.stream.Collectors$CollectorImpl +java.util.stream.DoubleStream +java.util.stream.ForEachOps +java.util.stream.ForEachOps$ForEachOp +java.util.stream.ForEachOps$ForEachOp$OfRef java.util.stream.IntStream +java.util.stream.LongStream +java.util.stream.PipelineHelper +java.util.stream.ReduceOps +java.util.stream.ReduceOps$3 +java.util.stream.ReduceOps$3ReducingSink +java.util.stream.ReduceOps$AccumulatingSink +java.util.stream.ReduceOps$Box +java.util.stream.ReduceOps$ReduceOp +java.util.stream.ReferencePipeline +java.util.stream.ReferencePipeline$2 +java.util.stream.ReferencePipeline$2$1 +java.util.stream.ReferencePipeline$Head +java.util.stream.ReferencePipeline$StatefulOp +java.util.stream.ReferencePipeline$StatelessOp +java.util.stream.Sink +java.util.stream.Sink$ChainedReference +java.util.stream.SliceOps +java.util.stream.SliceOps$1 +java.util.stream.SliceOps$1$1 java.util.stream.Stream +java.util.stream.StreamOpFlag +java.util.stream.StreamOpFlag$MaskBuilder +java.util.stream.StreamOpFlag$Type +java.util.stream.StreamShape +java.util.stream.StreamSpliterators$InfiniteSupplyingSpliterator +java.util.stream.StreamSpliterators$InfiniteSupplyingSpliterator$OfRef java.util.stream.StreamSupport +java.util.stream.TerminalOp +java.util.stream.TerminalSink java.util.zip.Adler32 java.util.zip.CRC32 java.util.zip.CheckedInputStream +java.util.zip.CheckedOutputStream java.util.zip.Checksum java.util.zip.DataFormatException java.util.zip.Deflater java.util.zip.DeflaterOutputStream java.util.zip.GZIPInputStream +java.util.zip.GZIPInputStream$1 java.util.zip.GZIPOutputStream java.util.zip.Inflater java.util.zip.InflaterInputStream @@ -7488,13 +7869,15 @@ java.util.zip.ZStreamRef java.util.zip.ZipCoder java.util.zip.ZipConstants java.util.zip.ZipEntry +java.util.zip.ZipError java.util.zip.ZipException java.util.zip.ZipFile -java.util.zip.ZipFile$1 +java.util.zip.ZipFile$ZipEntryIterator java.util.zip.ZipFile$ZipFileInflaterInputStream java.util.zip.ZipFile$ZipFileInputStream java.util.zip.ZipInputStream java.util.zip.ZipOutputStream +java.util.zip.ZipUtils javax.crypto.BadPaddingException javax.crypto.Cipher javax.crypto.Cipher$CipherSpiAndProvider @@ -7506,7 +7889,6 @@ javax.crypto.Cipher$Transform javax.crypto.CipherInputStream javax.crypto.CipherOutputStream javax.crypto.CipherSpi -javax.crypto.EncryptedPrivateKeyInfo javax.crypto.IllegalBlockSizeException javax.crypto.JarVerifier javax.crypto.JceSecurity @@ -7518,11 +7900,11 @@ javax.crypto.MacSpi javax.crypto.NoSuchPaddingException javax.crypto.NullCipher javax.crypto.SecretKey -javax.crypto.SecretKeyFactory javax.crypto.ShortBufferException +javax.crypto.interfaces.PBEKey +javax.crypto.spec.GCMParameterSpec javax.crypto.spec.IvParameterSpec javax.crypto.spec.OAEPParameterSpec -javax.crypto.spec.PBEKeySpec javax.crypto.spec.PBEParameterSpec javax.crypto.spec.PSource javax.crypto.spec.PSource$PSpecified @@ -7546,6 +7928,7 @@ javax.net.ssl.ExtendedSSLSession javax.net.ssl.HandshakeCompletedListener javax.net.ssl.HostnameVerifier javax.net.ssl.HttpsURLConnection +javax.net.ssl.HttpsURLConnection$NoPreloadHolder javax.net.ssl.KeyManager javax.net.ssl.KeyManagerFactory javax.net.ssl.KeyManagerFactory$1 @@ -7574,9 +7957,11 @@ javax.net.ssl.X509ExtendedKeyManager javax.net.ssl.X509ExtendedTrustManager javax.net.ssl.X509KeyManager javax.net.ssl.X509TrustManager +javax.security.auth.Destroyable javax.security.auth.callback.UnsupportedCallbackException javax.security.auth.x500.X500Principal javax.security.cert.Certificate +javax.security.cert.CertificateEncodingException javax.security.cert.CertificateException javax.security.cert.X509Certificate javax.sip.SipException @@ -7607,8 +7992,6 @@ libcore.icu.TimeZoneNames$1 libcore.icu.TimeZoneNames$ZoneStringsCache libcore.internal.StringPool libcore.io.AsynchronousCloseMonitor -libcore.io.Base64 -libcore.io.Base64$InvalidBase64ByteException libcore.io.BlockGuardOs libcore.io.BufferIterator libcore.io.ClassPathURLStreamHandler @@ -7622,6 +8005,8 @@ libcore.io.EventLogger$DefaultReporter libcore.io.EventLogger$Reporter libcore.io.ForwardingOs libcore.io.IoBridge +libcore.io.IoTracker +libcore.io.IoTracker$Mode libcore.io.IoUtils libcore.io.IoUtils$FileReader libcore.io.Libcore @@ -7638,6 +8023,8 @@ libcore.net.NetworkSecurityPolicy$DefaultNetworkSecurityPolicy libcore.net.UriCodec libcore.net.event.NetworkEventDispatcher libcore.net.event.NetworkEventListener +libcore.net.http.HttpDate +libcore.net.http.HttpDate$1 libcore.reflect.AnnotatedElements libcore.reflect.AnnotationFactory libcore.reflect.AnnotationMember @@ -7683,21 +8070,16 @@ org.apache.harmony.xml.ExpatParser$CurrentAttributes org.apache.harmony.xml.ExpatParser$ExpatLocator org.apache.harmony.xml.ExpatReader org.apache.harmony.xml.dom.AttrImpl -org.apache.harmony.xml.dom.CDATASectionImpl org.apache.harmony.xml.dom.CharacterDataImpl -org.apache.harmony.xml.dom.CommentImpl org.apache.harmony.xml.dom.DOMImplementationImpl org.apache.harmony.xml.dom.DocumentImpl -org.apache.harmony.xml.dom.DocumentTypeImpl org.apache.harmony.xml.dom.ElementImpl org.apache.harmony.xml.dom.ElementImpl$ElementAttrNamedNodeMapImpl -org.apache.harmony.xml.dom.EntityReferenceImpl org.apache.harmony.xml.dom.InnerNodeImpl org.apache.harmony.xml.dom.LeafNodeImpl org.apache.harmony.xml.dom.NodeImpl org.apache.harmony.xml.dom.NodeImpl$1 org.apache.harmony.xml.dom.NodeListImpl -org.apache.harmony.xml.dom.ProcessingInstructionImpl org.apache.harmony.xml.dom.TextImpl org.apache.harmony.xml.parsers.DocumentBuilderFactoryImpl org.apache.harmony.xml.parsers.DocumentBuilderImpl @@ -7736,7 +8118,6 @@ org.apache.http.ProtocolVersion org.apache.http.ReasonPhraseCatalog org.apache.http.RequestLine org.apache.http.StatusLine -org.apache.http.TokenIterator org.apache.http.auth.AuthSchemeFactory org.apache.http.auth.AuthSchemeRegistry org.apache.http.auth.AuthState @@ -7774,7 +8155,6 @@ org.apache.http.client.utils.URIUtils org.apache.http.client.utils.URLEncodedUtils org.apache.http.conn.BasicManagedEntity org.apache.http.conn.ClientConnectionManager -org.apache.http.conn.ClientConnectionManagerFactory org.apache.http.conn.ClientConnectionOperator org.apache.http.conn.ClientConnectionRequest org.apache.http.conn.ConnectTimeoutException @@ -7829,7 +8209,6 @@ org.apache.http.entity.AbstractHttpEntity org.apache.http.entity.BasicHttpEntity org.apache.http.entity.ByteArrayEntity org.apache.http.entity.ContentLengthStrategy -org.apache.http.entity.FileEntity org.apache.http.entity.HttpEntityWrapper org.apache.http.entity.InputStreamEntity org.apache.http.entity.StringEntity @@ -7849,7 +8228,6 @@ org.apache.http.impl.client.AbstractAuthenticationHandler org.apache.http.impl.client.AbstractHttpClient org.apache.http.impl.client.BasicCookieStore org.apache.http.impl.client.BasicCredentialsProvider -org.apache.http.impl.client.BasicResponseHandler org.apache.http.impl.client.ClientParamsStack org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy org.apache.http.impl.client.DefaultHttpClient @@ -7860,6 +8238,7 @@ org.apache.http.impl.client.DefaultRequestDirector org.apache.http.impl.client.DefaultTargetAuthenticationHandler org.apache.http.impl.client.DefaultUserTokenHandler org.apache.http.impl.client.EntityEnclosingRequestWrapper +org.apache.http.impl.client.RedirectLocations org.apache.http.impl.client.RequestWrapper org.apache.http.impl.client.RoutedRequest org.apache.http.impl.client.TunnelRefusedException @@ -7872,10 +8251,6 @@ org.apache.http.impl.conn.DefaultResponseParser org.apache.http.impl.conn.IdleConnectionHandler org.apache.http.impl.conn.IdleConnectionHandler$TimeValues org.apache.http.impl.conn.ProxySelectorRoutePlanner -org.apache.http.impl.conn.SingleClientConnManager -org.apache.http.impl.conn.SingleClientConnManager$1 -org.apache.http.impl.conn.SingleClientConnManager$ConnAdapter -org.apache.http.impl.conn.SingleClientConnManager$PoolEntry org.apache.http.impl.conn.tsccm.AbstractConnPool org.apache.http.impl.conn.tsccm.BasicPoolEntry org.apache.http.impl.conn.tsccm.BasicPoolEntryRef @@ -7951,7 +8326,6 @@ org.apache.http.message.BasicHeader org.apache.http.message.BasicHeaderElement org.apache.http.message.BasicHeaderElementIterator org.apache.http.message.BasicHeaderValueParser -org.apache.http.message.BasicHttpEntityEnclosingRequest org.apache.http.message.BasicHttpRequest org.apache.http.message.BasicHttpResponse org.apache.http.message.BasicLineFormatter @@ -7960,7 +8334,6 @@ org.apache.http.message.BasicListHeaderIterator org.apache.http.message.BasicNameValuePair org.apache.http.message.BasicRequestLine org.apache.http.message.BasicStatusLine -org.apache.http.message.BasicTokenIterator org.apache.http.message.BufferedHeader org.apache.http.message.HeaderGroup org.apache.http.message.HeaderValueParser @@ -8002,7 +8375,6 @@ org.apache.http.util.CharArrayBuffer org.apache.http.util.EncodingUtils org.apache.http.util.EntityUtils org.apache.http.util.LangUtils -org.apache.http.util.VersionInfo org.ccil.cowan.tagsoup.AttributesImpl org.ccil.cowan.tagsoup.AutoDetector org.ccil.cowan.tagsoup.Element @@ -8027,16 +8399,12 @@ org.kxml2.io.KXmlParser org.kxml2.io.KXmlParser$ValueContext org.kxml2.io.KXmlSerializer org.w3c.dom.Attr -org.w3c.dom.CDATASection org.w3c.dom.CharacterData -org.w3c.dom.Comment -org.w3c.dom.DOMException org.w3c.dom.DOMImplementation org.w3c.dom.Document org.w3c.dom.DocumentFragment org.w3c.dom.DocumentType org.w3c.dom.Element -org.w3c.dom.EntityReference org.w3c.dom.NamedNodeMap org.w3c.dom.Node org.w3c.dom.NodeList @@ -8055,9 +8423,6 @@ org.xml.sax.SAXNotRecognizedException org.xml.sax.SAXNotSupportedException org.xml.sax.SAXParseException org.xml.sax.XMLReader -org.xml.sax.ext.DeclHandler -org.xml.sax.ext.DefaultHandler2 -org.xml.sax.ext.EntityResolver2 org.xml.sax.ext.LexicalHandler org.xml.sax.helpers.AttributesImpl org.xml.sax.helpers.DefaultHandler @@ -8065,22 +8430,28 @@ org.xmlpull.v1.XmlPullParser org.xmlpull.v1.XmlPullParserException org.xmlpull.v1.XmlPullParserFactory org.xmlpull.v1.XmlSerializer +sun.invoke.util.BytecodeDescriptor +sun.invoke.util.Wrapper sun.misc.ASCIICaseInsensitiveComparator -sun.misc.BASE64Decoder -sun.misc.CEStreamExhausted -sun.misc.CharacterDecoder sun.misc.Cleaner sun.misc.CompoundEnumeration -sun.misc.FDBigInt +sun.misc.FDBigInteger +sun.misc.FloatingDecimal +sun.misc.FloatingDecimal$1 +sun.misc.FloatingDecimal$ASCIIToBinaryBuffer +sun.misc.FloatingDecimal$ASCIIToBinaryConverter +sun.misc.FloatingDecimal$BinaryToASCIIBuffer +sun.misc.FloatingDecimal$BinaryToASCIIConverter +sun.misc.FloatingDecimal$ExceptionalBinaryToASCIIBuffer +sun.misc.FloatingDecimal$PreparedASCIIToBinaryBuffer sun.misc.FormattedFloatingDecimal sun.misc.FormattedFloatingDecimal$1 sun.misc.FormattedFloatingDecimal$Form -sun.misc.FpUtils -sun.misc.Hashing sun.misc.IOUtils -sun.misc.IoTrace +sun.misc.JavaIOFileDescriptorAccess sun.misc.LRUCache sun.misc.REException +sun.misc.SharedSecrets sun.misc.Unsafe sun.misc.VM sun.misc.Version @@ -8097,17 +8468,13 @@ sun.net.util.IPAddressUtil sun.net.www.ParseUtil sun.net.www.protocol.file.Handler sun.net.www.protocol.jar.Handler -sun.nio.ch.AbstractPollArrayWrapper -sun.nio.ch.AbstractPollSelectorImpl -sun.nio.ch.AllocatedNativeObject sun.nio.ch.ChannelInputStream sun.nio.ch.DatagramChannelImpl sun.nio.ch.DatagramDispatcher -sun.nio.ch.DefaultSelectorProvider sun.nio.ch.DirectBuffer +sun.nio.ch.EPollArrayWrapper sun.nio.ch.FileChannelImpl sun.nio.ch.FileChannelImpl$Unmapper -sun.nio.ch.FileDescriptorHolderSocketImpl sun.nio.ch.FileDispatcher sun.nio.ch.FileDispatcherImpl sun.nio.ch.FileKey @@ -8115,33 +8482,18 @@ sun.nio.ch.FileLockImpl sun.nio.ch.FileLockTable sun.nio.ch.IOStatus sun.nio.ch.IOUtil -sun.nio.ch.InheritedChannel sun.nio.ch.Interruptible sun.nio.ch.NativeDispatcher -sun.nio.ch.NativeObject sun.nio.ch.NativeThread sun.nio.ch.NativeThreadSet sun.nio.ch.Net -sun.nio.ch.Net$1 -sun.nio.ch.PollArrayWrapper -sun.nio.ch.PollSelectorImpl -sun.nio.ch.PollSelectorProvider sun.nio.ch.SelChImpl -sun.nio.ch.SelectionKeyImpl -sun.nio.ch.SelectorImpl -sun.nio.ch.SelectorProviderImpl sun.nio.ch.ServerSocketChannelImpl sun.nio.ch.SharedFileLockTable sun.nio.ch.SharedFileLockTable$FileLockReference -sun.nio.ch.SocketAdaptor -sun.nio.ch.SocketAdaptor$1 -sun.nio.ch.SocketAdaptor$2 -sun.nio.ch.SocketAdaptor$SocketInputStream sun.nio.ch.SocketChannelImpl -sun.nio.ch.SocketDispatcher sun.nio.ch.Util sun.nio.ch.Util$1 -sun.nio.ch.Util$2 sun.nio.ch.Util$BufferCache sun.nio.cs.ArrayDecoder sun.nio.cs.ArrayEncoder @@ -8151,15 +8503,30 @@ sun.nio.cs.ThreadLocalCoders sun.nio.cs.ThreadLocalCoders$1 sun.nio.cs.ThreadLocalCoders$2 sun.nio.cs.ThreadLocalCoders$Cache -sun.reflect.annotation.AnnotationType +sun.nio.fs.AbstractFileSystemProvider +sun.nio.fs.AbstractPath +sun.nio.fs.DefaultFileSystemProvider +sun.nio.fs.LinuxFileSystem +sun.nio.fs.LinuxFileSystemProvider +sun.nio.fs.NativeBuffer +sun.nio.fs.NativeBuffer$Deallocator +sun.nio.fs.NativeBuffers +sun.nio.fs.UnixChannelFactory +sun.nio.fs.UnixChannelFactory$Flags +sun.nio.fs.UnixConstants +sun.nio.fs.UnixException +sun.nio.fs.UnixFileAttributes +sun.nio.fs.UnixFileModeAttribute +sun.nio.fs.UnixFileStoreAttributes +sun.nio.fs.UnixFileSystem +sun.nio.fs.UnixFileSystemProvider +sun.nio.fs.UnixMountEntry +sun.nio.fs.UnixNativeDispatcher +sun.nio.fs.UnixPath +sun.nio.fs.Util sun.reflect.misc.ReflectUtil sun.security.action.GetBooleanAction sun.security.action.GetPropertyAction -sun.security.ec.ECKeyFactory -sun.security.ec.ECKeyFactory$1 -sun.security.ec.ECKeyFactory$2 -sun.security.ec.ECParameters -sun.security.ec.NamedCurve sun.security.jca.GetInstance sun.security.jca.GetInstance$Instance sun.security.jca.JCAUtil @@ -8175,8 +8542,9 @@ sun.security.jca.Providers sun.security.jca.ServiceId sun.security.pkcs.ContentInfo sun.security.pkcs.PKCS7 +sun.security.pkcs.PKCS7$VerbatimX509Certificate +sun.security.pkcs.PKCS7$WrappedX509Certificate sun.security.pkcs.PKCS9Attribute -sun.security.pkcs.ParsingException sun.security.pkcs.SignerInfo sun.security.provider.CertPathProvider sun.security.provider.X509Factory @@ -8192,7 +8560,9 @@ sun.security.provider.certpath.PKIXCertPathValidator sun.security.provider.certpath.PKIXMasterCertPathValidator sun.security.provider.certpath.PolicyChecker sun.security.provider.certpath.PolicyNodeImpl -sun.security.provider.certpath.UntrustedChecker +sun.security.util.-$Lambda$179$Kli5xKA4dAwmFO1sy_hpNWmbfH4 +sun.security.util.AbstractAlgorithmConstraints +sun.security.util.AlgorithmDecomposer sun.security.util.BitArray sun.security.util.ByteArrayLexOrder sun.security.util.ByteArrayTagOrder @@ -8206,7 +8576,6 @@ sun.security.util.DerInputStream sun.security.util.DerOutputStream sun.security.util.DerValue sun.security.util.DisabledAlgorithmConstraints -sun.security.util.DisabledAlgorithmConstraints$1 sun.security.util.DisabledAlgorithmConstraints$KeySizeConstraint sun.security.util.DisabledAlgorithmConstraints$KeySizeConstraint$Operator sun.security.util.DisabledAlgorithmConstraints$KeySizeConstraints @@ -8221,9 +8590,7 @@ sun.security.util.MemoryCache sun.security.util.MemoryCache$CacheEntry sun.security.util.MemoryCache$SoftCacheEntry sun.security.util.ObjectIdentifier -sun.security.util.SecurityConstants sun.security.util.SignatureFileVerifier -sun.security.util.UntrustedCertificates sun.security.x509.AVA sun.security.x509.AVAKeyword sun.security.x509.AccessDescription @@ -8280,25 +8647,19 @@ sun.security.x509.X509AttributeName sun.security.x509.X509CertImpl sun.security.x509.X509CertInfo sun.security.x509.X509Key -sun.util.LocaleServiceProviderPool -sun.util.LocaleServiceProviderPool$1 sun.util.calendar.AbstractCalendar sun.util.calendar.BaseCalendar sun.util.calendar.BaseCalendar$Date sun.util.calendar.CalendarDate sun.util.calendar.CalendarSystem sun.util.calendar.CalendarUtils -sun.util.calendar.Era sun.util.calendar.Gregorian sun.util.calendar.Gregorian$Date -sun.util.calendar.ImmutableGregorianDate sun.util.calendar.JulianCalendar -sun.util.calendar.JulianCalendar$Date sun.util.calendar.LocalGregorianCalendar sun.util.locale.BaseLocale sun.util.locale.BaseLocale$Cache sun.util.locale.BaseLocale$Key -sun.util.locale.Extension sun.util.locale.InternalLocaleBuilder sun.util.locale.InternalLocaleBuilder$CaseInsensitiveChar sun.util.locale.LanguageTag @@ -8309,11 +8670,9 @@ sun.util.locale.LocaleSyntaxException sun.util.locale.LocaleUtils sun.util.locale.ParseStatus sun.util.locale.StringTokenIterator -sun.util.locale.UnicodeLocaleExtension sun.util.logging.LoggingProxy sun.util.logging.LoggingSupport sun.util.logging.LoggingSupport$1 -sun.util.logging.LoggingSupport$2 sun.util.logging.PlatformLogger sun.util.logging.PlatformLogger$1 sun.util.logging.PlatformLogger$JavaLoggerProxy diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index 0ac30de584bf..6f9530901d82 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -969,9 +969,7 @@ public class Activity extends ContextThemeWrapper ? mLastNonConfigurationInstances.fragments : null); } mFragments.dispatchCreate(); - if (!isAtLeastO()) { - getApplication().dispatchActivityCreated(this, savedInstanceState); - } + getApplication().dispatchActivityCreated(this, savedInstanceState); if (mVoiceInteractor != null) { mVoiceInteractor.attachActivity(this); } @@ -1199,9 +1197,8 @@ public class Activity extends ContextThemeWrapper mCalled = true; mFragments.doLoaderStart(); - if (!isAtLeastO()) { - getApplication().dispatchActivityStarted(this); - } + + getApplication().dispatchActivityStarted(this); } /** @@ -1262,9 +1259,7 @@ public class Activity extends ContextThemeWrapper @CallSuper protected void onResume() { if (DEBUG_LIFECYCLE) Slog.v(TAG, "onResume " + this); - if (!isAtLeastO()) { - getApplication().dispatchActivityResumed(this); - } + getApplication().dispatchActivityResumed(this); mActivityTransitionState.onResume(this, isTopOfTask()); mCalled = true; } @@ -1431,9 +1426,6 @@ public class Activity extends ContextThemeWrapper saveManagedDialogs(outState); mActivityTransitionState.saveState(outState); storeHasCurrentPermissionRequest(outState); - if (isAtLeastO()) { - getApplication().dispatchActivitySaveInstanceState(this, outState); - } if (DEBUG_LIFECYCLE) Slog.v(TAG, "onSaveInstanceState " + this + ": " + outState); } @@ -1450,9 +1442,6 @@ public class Activity extends ContextThemeWrapper onSaveInstanceState(outState, outPersistentState); saveManagedDialogs(outState); storeHasCurrentPermissionRequest(outState); - if (isAtLeastO()) { - getApplication().dispatchActivitySaveInstanceState(this, outState); - } if (DEBUG_LIFECYCLE) Slog.v(TAG, "onSaveInstanceState " + this + ": " + outState + ", " + outPersistentState); } @@ -1508,9 +1497,7 @@ public class Activity extends ContextThemeWrapper if (p != null) { outState.putParcelable(FRAGMENTS_TAG, p); } - if (!isAtLeastO()) { - getApplication().dispatchActivitySaveInstanceState(this, outState); - } + getApplication().dispatchActivitySaveInstanceState(this, outState); } /** @@ -1608,9 +1595,7 @@ public class Activity extends ContextThemeWrapper @CallSuper protected void onPause() { if (DEBUG_LIFECYCLE) Slog.v(TAG, "onPause " + this); - if (!isAtLeastO()) { - getApplication().dispatchActivityPaused(this); - } + getApplication().dispatchActivityPaused(this); mCalled = true; } @@ -1810,9 +1795,7 @@ public class Activity extends ContextThemeWrapper if (DEBUG_LIFECYCLE) Slog.v(TAG, "onStop " + this); if (mActionBar != null) mActionBar.setShowHideAnimationEnabled(false); mActivityTransitionState.onStop(); - if (!isAtLeastO()) { - getApplication().dispatchActivityStopped(this); - } + getApplication().dispatchActivityStopped(this); mTranslucentCallback = null; mCalled = true; } @@ -1882,9 +1865,8 @@ public class Activity extends ContextThemeWrapper if (mActionBar != null) { mActionBar.onDestroy(); } - if (!isAtLeastO()) { - getApplication().dispatchActivityDestroyed(this); - } + + getApplication().dispatchActivityDestroyed(this); } /** @@ -6768,33 +6750,25 @@ public class Activity extends ContextThemeWrapper return mParent != null ? mParent.getActivityToken() : mToken; } - final void performCreateCommon(Bundle icicle) { - mActivityTransitionState.readState(icicle); + final void performCreateCommon() { mVisibleFromClient = !mWindow.getWindowStyle().getBoolean( com.android.internal.R.styleable.Window_windowNoDisplay, false); mFragments.dispatchActivityCreated(); mActivityTransitionState.setEnterActivityOptions(this, getActivityOptions()); - if (isAtLeastO()) { - getApplication().dispatchActivityCreated(this, icicle); - } } final void performCreate(Bundle icicle) { restoreHasCurrentPermissionRequest(icicle); - if (isAtLeastO()) { - getApplication().dispatchActivityPreCreated(this, icicle); - } onCreate(icicle); - performCreateCommon(icicle); + mActivityTransitionState.readState(icicle); + performCreateCommon(); } final void performCreate(Bundle icicle, PersistableBundle persistentState) { restoreHasCurrentPermissionRequest(icicle); - if (isAtLeastO()) { - getApplication().dispatchActivityPreCreated(this, icicle); - } onCreate(icicle, persistentState); - performCreateCommon(icicle); + mActivityTransitionState.readState(icicle); + performCreateCommon(); } final void performStart() { @@ -6837,9 +6811,6 @@ public class Activity extends ContextThemeWrapper } mActivityTransitionState.enterReady(this); - if (isAtLeastO()) { - getApplication().dispatchActivityStarted(this); - } } final void performRestart() { @@ -6915,9 +6886,7 @@ public class Activity extends ContextThemeWrapper mFragments.dispatchResume(); mFragments.execPendingActions(); - if (isAtLeastO()) { - getApplication().dispatchActivityResumed(this); - } + onPostResume(); if (!mCalled) { throw new SuperNotCalledException( @@ -6932,15 +6901,13 @@ public class Activity extends ContextThemeWrapper mCalled = false; onPause(); mResumed = false; - if (isAtLeastO()) { - getApplication().dispatchActivityPaused(this); - } if (!mCalled && getApplicationInfo().targetSdkVersion >= android.os.Build.VERSION_CODES.GINGERBREAD) { throw new SuperNotCalledException( "Activity " + mComponent.toShortString() + " did not call through to super.onPause()"); } + mResumed = false; } final void performUserLeaving() { @@ -6951,7 +6918,7 @@ public class Activity extends ContextThemeWrapper final void performStop(boolean preserveWindow) { mDoReportFullyDrawn = false; mFragments.doLoaderStop(mChangingConfigurations /*retain*/); - boolean dispatchActivityStopped = !mStopped; + if (!mStopped) { if (mWindow != null) { mWindow.closeAllPanels(); @@ -6988,9 +6955,6 @@ public class Activity extends ContextThemeWrapper mStopped = true; } mResumed = false; - if (dispatchActivityStopped && isAtLeastO()) { - getApplication().dispatchActivityStopped(this); - } } final void performDestroy() { @@ -7002,13 +6966,6 @@ public class Activity extends ContextThemeWrapper if (mVoiceInteractor != null) { mVoiceInteractor.detachActivity(); } - if (isAtLeastO()) { - getApplication().dispatchActivityDestroyed(this); - } - } - - private boolean isAtLeastO() { - return getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.O; } final void dispatchMultiWindowModeChanged(boolean isInMultiWindowMode) { diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index b367d0cb4a1b..5b05d581c4e0 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -505,9 +505,6 @@ public class ActivityManager { /** @hide requestType for assist context: generate full AssistStructure for auto-fill. */ public static final int ASSIST_CONTEXT_AUTO_FILL = 2; - /** @hide requestType for assist context: generate full AssistStructure for auto-fill save. */ - public static final int ASSIST_CONTEXT_AUTO_FILL_SAVE = 3; - /** @hide Flag for registerUidObserver: report changes in process state. */ public static final int UID_OBSERVER_PROCSTATE = 1<<0; diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index cf20b68cf200..d5371f8b7b3c 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -91,7 +91,6 @@ import android.security.NetworkSecurityPolicy; import android.security.net.config.NetworkSecurityConfigProvider; import android.service.autofill.AutoFillService; import android.service.autofill.IAutoFillAppCallback; -import android.service.voice.VoiceInteractionSession; import android.util.AndroidRuntimeException; import android.util.ArrayMap; import android.util.DisplayMetrics; @@ -641,7 +640,6 @@ public final class ActivityThread { IBinder requestToken; int requestType; int sessionId; - int flags; } static final class ActivityConfigChangeData { @@ -1249,13 +1247,12 @@ public final class ActivityThread { @Override public void requestAssistContextExtras(IBinder activityToken, IBinder requestToken, - int requestType, int sessionId, int flags) { + int requestType, int sessionId) { RequestAssistContextExtras cmd = new RequestAssistContextExtras(); cmd.activityToken = activityToken; cmd.requestToken = requestToken; cmd.requestType = requestType; cmd.sessionId = sessionId; - cmd.flags = flags; sendMessage(H.REQUEST_ASSIST_CONTEXT_EXTRAS, cmd); } @@ -2905,9 +2902,7 @@ public final class ActivityThread { // - it does not need an AssistContent // - it does not call onProvideAssistData() // - it needs an IAutoFillCallback - // - it sets the flags so views can provide autofill-specific data (such as passwords) - boolean forAutoFill = cmd.requestType == ActivityManager.ASSIST_CONTEXT_AUTO_FILL - || cmd.requestType == ActivityManager.ASSIST_CONTEXT_AUTO_FILL_SAVE; + boolean forAutoFill = cmd.requestType == ActivityManager.ASSIST_CONTEXT_AUTO_FILL; // TODO(b/33197203): decide if lastSessionId logic applies to auto-fill sessions if (mLastSessionId != cmd.sessionId) { @@ -2934,11 +2929,8 @@ public final class ActivityThread { referrer = r.activity.onProvideReferrer(); } if (cmd.requestType == ActivityManager.ASSIST_CONTEXT_FULL || forAutoFill) { - structure = new AssistStructure(r.activity, cmd.flags); + structure = new AssistStructure(r.activity, forAutoFill); Intent activityIntent = r.activity.getIntent(); - if (forAutoFill) { - data.putInt(VoiceInteractionSession.KEY_FLAGS, cmd.flags); - } boolean addAutoFillCallback = false; // TODO(b/33197203): re-evaluate conditions below for auto-fill. In particular, // FLAG_SECURE might be allowed on AUTO_FILL but not on AUTO_FILL_SAVE) @@ -2979,6 +2971,7 @@ public final class ActivityThread { if (structure == null) { structure = new AssistStructure(); } + // TODO(b/33197203): decide if lastSessionId logic applies to auto-fill sessions mLastAssistStructures.add(new WeakReference<>(structure)); IActivityManager mgr = ActivityManager.getService(); diff --git a/core/java/android/app/Application.java b/core/java/android/app/Application.java index 03efe68cb741..156df36a600c 100644 --- a/core/java/android/app/Application.java +++ b/core/java/android/app/Application.java @@ -55,7 +55,6 @@ public class Application extends ContextWrapper implements ComponentCallbacks2 { public LoadedApk mLoadedApk; public interface ActivityLifecycleCallbacks { - default void onActivityPreCreated(Activity activity, Bundle savedInstanceState) {} void onActivityCreated(Activity activity, Bundle savedInstanceState); void onActivityStarted(Activity activity); void onActivityResumed(Activity activity); @@ -191,16 +190,6 @@ public class Application extends ContextWrapper implements ComponentCallbacks2 { mLoadedApk = ContextImpl.getImpl(context).mPackageInfo; } - /* package */ void dispatchActivityPreCreated(Activity activity, Bundle savedInstanceState) { - Object[] callbacks = collectActivityLifecycleCallbacks(); - if (callbacks != null) { - for (int i = 0; i < callbacks.length; i++) { - ((ActivityLifecycleCallbacks) callbacks[i]).onActivityPreCreated(activity, - savedInstanceState); - } - } - } - /* package */ void dispatchActivityCreated(Activity activity, Bundle savedInstanceState) { Object[] callbacks = collectActivityLifecycleCallbacks(); if (callbacks != null) { diff --git a/core/java/android/app/IActivityManager.aidl b/core/java/android/app/IActivityManager.aidl index 0a2f8049dc66..3cc6282d6ab3 100644 --- a/core/java/android/app/IActivityManager.aidl +++ b/core/java/android/app/IActivityManager.aidl @@ -584,7 +584,7 @@ interface IActivityManager { void unregisterTaskStackListener(ITaskStackListener listener); void moveStackToDisplay(int stackId, int displayId); boolean requestAutoFillData(in IResultReceiver receiver, in Bundle receiverExtras, - int resultCode, in IBinder activityToken, int flags); + int resultCode, in IBinder activityToken); void dismissKeyguard(in IBinder token, in IKeyguardDismissCallback callback); int restartUserInBackground(int userId); diff --git a/core/java/android/app/IApplicationThread.aidl b/core/java/android/app/IApplicationThread.aidl index 41d1255c0a28..4fc6fb9eee2e 100644 --- a/core/java/android/app/IApplicationThread.aidl +++ b/core/java/android/app/IApplicationThread.aidl @@ -134,7 +134,7 @@ oneway interface IApplicationThread { void dumpDbInfo(in ParcelFileDescriptor fd, in String[] args); void unstableProviderDied(IBinder provider); void requestAssistContextExtras(IBinder activityToken, IBinder requestToken, - int requestType, int sessionId, int flags); + int requestType, int sessionId); void scheduleTranslucentConversionComplete(IBinder token, boolean timeout); void setProcessState(int state); void scheduleInstallProvider(in ProviderInfo provider); diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 52d73869e3c6..08832d1baa8b 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -6073,20 +6073,24 @@ public class DevicePolicyManager { /** * Sets which packages may enter lock task mode. * <p> - * Any packages that shares uid with an allowed package will also be allowed to activate lock + * Any packages that share uid with an allowed package will also be allowed to activate lock * task. From {@link android.os.Build.VERSION_CODES#M} removing packages from the lock task - * package list results in locked tasks belonging to those packages to be finished. This - * function can only be called by the device owner. + * package list results in locked tasks belonging to those packages to be finished. + * <p> + * This function can only be called by the device owner or by a profile owner of a user/profile + * that is affiliated with the device owner user. See {@link #setAffiliationIds}. Any packages + * set via this method will be cleared if the user becomes unaffiliated. * * @param packages The list of packages allowed to enter lock task mode * @param admin Which {@link DeviceAdminReceiver} this request is associated with. - * @throws SecurityException if {@code admin} is not a device owner. + * @throws SecurityException if {@code admin} is not the device owner, or the profile owner of + * an affiliated user or profile. * @see Activity#startLockTask() * @see DeviceAdminReceiver#onLockTaskModeEntering(Context, Intent, String) * @see DeviceAdminReceiver#onLockTaskModeExiting(Context, Intent) * @see UserManager#DISALLOW_CREATE_WINDOWS */ - public void setLockTaskPackages(@NonNull ComponentName admin, String[] packages) + public void setLockTaskPackages(@NonNull ComponentName admin, @NonNull String[] packages) throws SecurityException { throwIfParentInstance("setLockTaskPackages"); if (mService != null) { @@ -6099,9 +6103,12 @@ public class DevicePolicyManager { } /** - * This function returns the list of packages allowed to start the lock task mode. + * Returns the list of packages allowed to start the lock task mode. + * + * @throws SecurityException if {@code admin} is not the device owner, or the profile owner of + * an affiliated user or profile. + * @see #setLockTaskPackages * - * @param admin Which {@link DeviceAdminReceiver} this request is associated with. * @hide */ public @NonNull String[] getLockTaskPackages(@NonNull ComponentName admin) { @@ -6113,7 +6120,7 @@ public class DevicePolicyManager { throw e.rethrowFromSystemServer(); } } - return null; + return new String[0]; } /** diff --git a/core/java/android/app/assist/AssistStructure.java b/core/java/android/app/assist/AssistStructure.java index b94264e1ac5d..08aa5f2589bf 100644 --- a/core/java/android/app/assist/AssistStructure.java +++ b/core/java/android/app/assist/AssistStructure.java @@ -22,6 +22,7 @@ import android.view.ViewRootImpl; import android.view.WindowManager; import android.view.WindowManagerGlobal; import android.view.autofill.AutoFillType; +import android.view.autofill.AutoFillValue; import android.view.autofill.AutoFillId; import java.util.ArrayList; @@ -53,6 +54,8 @@ public class AssistStructure implements Parcelable { Rect mTmpRect = new Rect(); + boolean mSanitizeOnWrite = false; + static final int TRANSACTION_XFER = Binder.FIRST_CALL_TRANSACTION+1; static final String DESCRIPTOR = "android.app.AssistStructure"; @@ -113,8 +116,10 @@ public class AssistStructure implements Parcelable { int mNumWrittenWindows; int mNumWrittenViews; final float[] mTmpMatrix = new float[9]; + final boolean mSanitizeOnWrite; ParcelTransferWriter(AssistStructure as, Parcel out) { + mSanitizeOnWrite = as.mSanitizeOnWrite; mWriteStructure = as.waitForReady(); ComponentName.writeToParcel(as.mActivityComponent, out); mNumWindows = as.mWindowNodes.size(); @@ -186,7 +191,7 @@ public class AssistStructure implements Parcelable { + ", views=" + mNumWrittenViews + ", level=" + (mCurViewStackPos+levelAdj)); out.writeInt(VALIDATE_VIEW_TOKEN); - int flags = child.writeSelfToParcel(out, pwriter, mTmpMatrix); + int flags = child.writeSelfToParcel(out, pwriter, mSanitizeOnWrite, mTmpMatrix); mNumWrittenViews++; // If the child has children, push it on the stack to write them next. if ((flags&ViewNode.FLAGS_HAS_CHILDREN) != 0) { @@ -374,8 +379,8 @@ public class AssistStructure implements Parcelable { } } - void writeToParcel(Parcel out, boolean simple) { - TextUtils.writeToParcel(mText, out, 0); + void writeToParcel(Parcel out, boolean simple, boolean writeSensitive) { + TextUtils.writeToParcel(writeSensitive ? mText : "", out, 0); out.writeFloat(mTextSize); out.writeInt(mTextStyle); out.writeInt(mTextColor); @@ -402,7 +407,7 @@ public class AssistStructure implements Parcelable { final int mDisplayId; final ViewNode mRoot; - WindowNode(AssistStructure assist, ViewRootImpl root, int flags) { + WindowNode(AssistStructure assist, ViewRootImpl root, boolean forAutoFill) { View view = root.getView(); Rect rect = new Rect(); view.getBoundsOnScreen(rect); @@ -414,19 +419,14 @@ public class AssistStructure implements Parcelable { mDisplayId = root.getDisplayId(); mRoot = new ViewNode(); - // Must explicitly call the proper method based on flags since we don't know which - // method (if any) was overridden by the View subclass. - boolean forAutoFill = (flags - & (View.AUTO_FILL_FLAG_TYPE_FILL - | View.AUTO_FILL_FLAG_TYPE_SAVE)) != 0; - - ViewNodeBuilder builder = new ViewNodeBuilder(assist, mRoot, false); + ViewNodeBuilder builder = new ViewNodeBuilder(assist, mRoot, false, 0); if ((root.getWindowFlags()& WindowManager.LayoutParams.FLAG_SECURE) != 0) { // This is a secure window, so it doesn't want a screenshot, and that // means we should also not copy out its view hierarchy. if (forAutoFill) { - view.onProvideAutoFillStructure(builder, flags); + // NOTE: flags are currently not supported, hence 0 + view.onProvideAutoFillStructure(builder, 0); } else { view.onProvideStructure(builder); } @@ -434,7 +434,8 @@ public class AssistStructure implements Parcelable { return; } if (forAutoFill) { - view.dispatchProvideAutoFillStructure(builder, flags); + // NOTE: flags are currently not supported, hence 0 + view.dispatchProvideAutoFillStructure(builder, 0); } else { view.dispatchProvideStructure(builder); } @@ -537,6 +538,8 @@ public class AssistStructure implements Parcelable { // fields (viewId and childId) of the field. AutoFillId mAutoFillId; AutoFillType mAutoFillType; + AutoFillValue mAutoFillValue; + boolean mSanitized; int mX; int mY; int mScrollX; @@ -610,8 +613,10 @@ public class AssistStructure implements Parcelable { } } if ((flags&FLAGS_HAS_AUTO_FILL_DATA) != 0) { + mSanitized = in.readInt() == 1; mAutoFillId = in.readParcelable(null); mAutoFillType = in.readParcelable(null); + mAutoFillValue = in.readParcelable(null); } if ((flags&FLAGS_HAS_LARGE_COORDS) != 0) { mX = in.readInt(); @@ -663,7 +668,11 @@ public class AssistStructure implements Parcelable { } } - int writeSelfToParcel(Parcel out, PooledStringWriter pwriter, float[] tmpMatrix) { + int writeSelfToParcel(Parcel out, PooledStringWriter pwriter, boolean sanitizeOnWrite, + float[] tmpMatrix) { + // Guard used to skip non-sanitized data when writing for auto-fill. + boolean writeSensitive = true; + int flags = mFlags & ~FLAGS_ALL_CONTROL; if (mId != View.NO_ID) { flags |= FLAGS_HAS_ID; @@ -716,8 +725,12 @@ public class AssistStructure implements Parcelable { } } if ((flags&FLAGS_HAS_AUTO_FILL_DATA) != 0) { + writeSensitive = mSanitized || !sanitizeOnWrite; + out.writeInt(mSanitized ? 1 : 0); out.writeParcelable(mAutoFillId, 0); out.writeParcelable(mAutoFillType, 0); + final AutoFillValue sanitizedValue = writeSensitive ? mAutoFillValue : null; + out.writeParcelable(sanitizedValue, 0); } if ((flags&FLAGS_HAS_LARGE_COORDS) != 0) { out.writeInt(mX); @@ -746,7 +759,7 @@ public class AssistStructure implements Parcelable { TextUtils.writeToParcel(mContentDescription, out, 0); } if ((flags&FLAGS_HAS_TEXT) != 0) { - mText.writeToParcel(out, (flags&FLAGS_HAS_COMPLEX_TEXT) == 0); + mText.writeToParcel(out, (flags&FLAGS_HAS_COMPLEX_TEXT) == 0, writeSensitive); } if ((flags&FLAGS_HAS_EXTRAS) != 0) { out.writeBundle(mExtras); @@ -794,6 +807,7 @@ public class AssistStructure implements Parcelable { * <p>It's only set when the {@link AssistStructure} is used for auto-filling purposes, not * for assist. */ + // TODO(b/33197203, b/33802548): add CTS/unit test public AutoFillId getAutoFillId() { return mAutoFillId; } @@ -804,11 +818,47 @@ public class AssistStructure implements Parcelable { * <p>It's only set when the {@link AssistStructure} is used for auto-filling purposes, not * for assist. */ + // TODO(b/33197203, b/33802548): add CTS/unit test public AutoFillType getAutoFillType() { return mAutoFillType; } /** + * Gets the the value of this view. + * + * <p>It's only set when the {@link AssistStructure} is used for auto-filling purposes, not + * for assist. + */ + // TODO(b/33197203, b/33802548): add CTS/unit test + public AutoFillValue getAutoFillValue() { + return mAutoFillValue; + } + + /** @hide */ + public boolean isSanitized() { + return mSanitized; + } + + /** + * Updates the {@link AutoFillValue} of this structure. + * + * <p>Should be used just before sending the structure to the + * {@link android.service.autofill.AutoFillService} for saving, since it will override the + * initial value. + * + * @hide + */ + public void updateAutoFillValue(AutoFillValue value) { + mAutoFillValue = value; + // TODO(b/33197203, b/33802548): decide whether to set text as well (so it would work + // with "legacy" views) or just the auto-fill value + final CharSequence text = value.getTextValue(); + if (text != null) { + mText.mText = text; + } + } + + /** * Returns the left edge of this view, in pixels, relative to the left edge of its parent. */ public int getLeft() { @@ -1113,10 +1163,11 @@ public class AssistStructure implements Parcelable { final ViewNode mNode; final boolean mAsync; - ViewNodeBuilder(AssistStructure assist, ViewNode node, boolean async) { + ViewNodeBuilder(AssistStructure assist, ViewNode node, boolean async, int flags) { mAssist = assist; mNode = node; mAsync = async; + mNode.mSanitized = (flags & AUTO_FILL_FLAG_SANITIZED) != 0; } @Override @@ -1350,19 +1401,20 @@ public class AssistStructure implements Parcelable { } } - private ViewStructure newChild(int index, boolean forAutoFill, int virtualId) { + private ViewStructure newChild(int index, boolean forAutoFill, int virtualId, int flags) { ViewNode node = new ViewNode(); setAutoFillId(node, forAutoFill, virtualId); mNode.mChildren[index] = node; - return new ViewNodeBuilder(mAssist, node, false); + return new ViewNodeBuilder(mAssist, node, false, flags); } - private ViewStructure asyncNewChild(int index, boolean forAutoFill, int virtualId) { + private ViewStructure asyncNewChild(int index, boolean forAutoFill, int virtualId, + int flags) { synchronized (mAssist) { ViewNode node = new ViewNode(); setAutoFillId(node, forAutoFill, virtualId); mNode.mChildren[index] = node; - ViewNodeBuilder builder = new ViewNodeBuilder(mAssist, node, true); + ViewNodeBuilder builder = new ViewNodeBuilder(mAssist, node, true, flags); mAssist.mPendingAsyncChildren.add(builder); return builder; } @@ -1370,22 +1422,23 @@ public class AssistStructure implements Parcelable { @Override public ViewStructure newChild(int index) { - return newChild(index, false, 0); + return newChild(index, false, 0, 0); } + // TODO(b/33197203, b/33802548): add CTS/unit test @Override - public ViewStructure newChild(int index, int virtualId) { - return newChild(index, true, virtualId); + public ViewStructure newChild(int index, int virtualId, int flags) { + return newChild(index, true, virtualId, flags); } @Override public ViewStructure asyncNewChild(int index) { - return asyncNewChild(index, false, 0); + return asyncNewChild(index, false, 0, 0); } @Override - public ViewStructure asyncNewChild(int index, int virtualId) { - return asyncNewChild(index, true, virtualId); + public ViewStructure asyncNewChild(int index, int virtualId, int flags) { + return asyncNewChild(index, true, virtualId, flags); } @Override @@ -1422,17 +1475,29 @@ public class AssistStructure implements Parcelable { mNode.mAutoFillType = type; } + @Override + public void setAutoFillValue(AutoFillValue value) { + mNode.mAutoFillValue = value; + } + + /** + * @hide + */ + @Override + public void setSanitized(boolean sanitized) { + mNode.mSanitized = sanitized; + } } /** @hide */ - public AssistStructure(Activity activity, int flags) { + public AssistStructure(Activity activity, boolean forAutoFill) { mHaveData = true; mActivityComponent = activity.getComponentName(); ArrayList<ViewRootImpl> views = WindowManagerGlobal.getInstance().getRootViews( activity.getActivityToken()); for (int i=0; i<views.size(); i++) { ViewRootImpl root = views.get(i); - mWindowNodes.add(new WindowNode(this, root, flags)); + mWindowNodes.add(new WindowNode(this, root, forAutoFill)); } } @@ -1446,9 +1511,24 @@ public class AssistStructure implements Parcelable { mReceiveChannel = in.readStrongBinder(); } + /** + * Helper method used to sanitize the structure before it's written to a parcel. + * + * <p>Used just on auto-fill. + * @hide + */ + public void sanitizeForParceling(boolean sanitize) { + mSanitizeOnWrite = sanitize; + } + /** @hide */ public void dump() { + if (mActivityComponent == null) { + Log.i(TAG, "dump(): calling ensureData() first"); + ensureData(); + } Log.i(TAG, "Activity: " + mActivityComponent.flattenToShortString()); + Log.i(TAG, "Sanitize on write: " + mSanitizeOnWrite); final int N = getWindowNodeCount(); for (int i=0; i<N; i++) { WindowNode node = getWindowNodeAt(i); @@ -1515,6 +1595,16 @@ public class AssistStructure implements Parcelable { if (node.isAssistBlocked()) { Log.i(TAG, prefix + " BLOCKED"); } + AutoFillId autoFillId = node.getAutoFillId(); + if (autoFillId == null) { + Log.i(TAG, prefix + " NO AUTO-FILL ID"); + } else { + Log.i(TAG, prefix + "AutoFill info: id= " + autoFillId + + ", type=" + node.getAutoFillType() + + ", value=" + node.getAutoFillValue() + + ", sanitized=" + node.isSanitized()); + } + final int NCHILDREN = node.getChildCount(); if (NCHILDREN > 0) { Log.i(TAG, prefix + " Children:"); @@ -1589,10 +1679,12 @@ public class AssistStructure implements Parcelable { } } + @Override public int describeContents() { return 0; } + @Override public void writeToParcel(Parcel out, int flags) { if (mHaveData) { // This object holds its data. We want to write a send channel that the @@ -1609,10 +1701,12 @@ public class AssistStructure implements Parcelable { public static final Parcelable.Creator<AssistStructure> CREATOR = new Parcelable.Creator<AssistStructure>() { + @Override public AssistStructure createFromParcel(Parcel in) { return new AssistStructure(in); } + @Override public AssistStructure[] newArray(int size) { return new AssistStructure[size]; } diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index 6a0da33c04a7..11303274e9bf 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -669,7 +669,14 @@ public class Intent implements Parcelable, Cloneable { * preview. {@link #getClipData} contains an optional list of content URIs * if there is more than one item to preview. {@link #EXTRA_INDEX} is an * optional index of the URI in the clip data to show first. + * If {@link #EXTRA_QUICK_VIEW_PLAIN} is true, then the quick viewer should show + * basic UI without any extra features other than quick viewing the passed items. + * Especially, the quick viewer should not let users open the passed files + * in other apps, which includes sharing, opening, editing, printing, etc in the + * plain mode. * <p>Output: nothing. + * @see #EXTRA_QUICK_VIEW_HIDE_DEFAULT_ACTIONS + * @see #EXTRA_INDEX */ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_QUICK_VIEW = "android.intent.action.QUICK_VIEW"; @@ -4401,10 +4408,26 @@ public class Intent implements Parcelable, Cloneable { * Optional index with semantics depending on the intent action. * * <p>The value must be an integer greater or equal to 0. + * @see ACTION_QUICK_VIEW */ public static final String EXTRA_INDEX = "android.intent.extra.INDEX"; /** + * Shows a plain quick viewer UI which doesn't provide any extra features other than + * quick viewing the items. + * + * <p>Especially, the quick viewer should not let users open the quick viewed files + * in other apps, which includes sharing, opening, editing, printing, etc. + * + * <p>This feature is optional, and may not be handled by all quick viewers. + * + * <p>The value is boolean. By default false. + * @see ACTION_QUICK_VIEW + */ + public static final String EXTRA_QUICK_VIEW_PLAIN = + "android.intent.extra.QUICK_VIEW_PLAIN"; + + /** * Optional boolean extra indicating whether quiet mode has been switched on or off. * When a profile goes into quiet mode, all apps in the profile are killed and the * profile user is stopped. Widgets originating from the profile are masked, and app diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index 13907ba16b2a..ff928a0dd81d 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -2747,15 +2747,15 @@ public class PackageParser { String cls = clsSeq.toString(); char c = cls.charAt(0); if (c == '.') { - return (pkg + cls).intern(); + return pkg + cls; } if (cls.indexOf('.') < 0) { StringBuilder b = new StringBuilder(pkg); b.append('.'); b.append(cls); - return b.toString().intern(); + return b.toString(); } - return cls.intern(); + return cls; } private static String buildCompoundName(String pkg, @@ -2775,7 +2775,7 @@ public class PackageParser { + pkg + ": " + nameError; return null; } - return (pkg + proc).intern(); + return pkg + proc; } String nameError = validateName(proc, true, false); if (nameError != null && !"system".equals(proc)) { @@ -2783,7 +2783,7 @@ public class PackageParser { + pkg + ": " + nameError; return null; } - return proc.intern(); + return proc; } private static String buildProcessName(String pkg, String defProc, @@ -5033,9 +5033,7 @@ public class PackageParser { } private boolean isWebBrowsableIntent(IntentInfo intent) { - return intent.hasAction(Intent.ACTION_VIEW) - && intent.hasCategory(Intent.CATEGORY_BROWSABLE) - && (intent.hasDataScheme("http") || intent.hasDataScheme("https")); + return intent.hasCategory(Intent.CATEGORY_BROWSABLE); } private boolean parseAllMetaData(Resources res, XmlResourceParser parser, String tag, @@ -5103,7 +5101,7 @@ public class PackageParser { if (v != null) { if (v.type == TypedValue.TYPE_STRING) { CharSequence cs = v.coerceToString(); - data.putString(name, cs != null ? cs.toString().intern() : null); + data.putString(name, cs != null ? cs.toString() : null); } else if (v.type == TypedValue.TYPE_INT_BOOLEAN) { data.putBoolean(name, v.data != 0); } else if (v.type >= TypedValue.TYPE_FIRST_INT diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java index beed6e91f166..5996fe2b14a3 100644 --- a/core/java/android/inputmethodservice/InputMethodService.java +++ b/core/java/android/inputmethodservice/InputMethodService.java @@ -1084,8 +1084,10 @@ public class InputMethodService extends AbstractInputMethodService { final int currentHeight = mWindow.getWindow().getAttributes().height; final int newHeight = isFullscreen ? MATCH_PARENT : WRAP_CONTENT; if (mIsInputViewShown && currentHeight != newHeight) { - Log.w(TAG, "Window size has been changed. This may cause jankiness of resizing window: " - + currentHeight + " -> " + newHeight); + if (DEBUG) { + Log.w(TAG,"Window size has been changed. This may cause jankiness of resizing " + + "window: " + currentHeight + " -> " + newHeight); + } } mWindow.getWindow().setLayout(MATCH_PARENT, newHeight); } diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index 222953e3ae6c..dc5750d55066 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -46,6 +46,7 @@ import android.telephony.SubscriptionManager; import android.util.ArrayMap; import android.util.Log; import android.util.SparseArray; +import android.util.SparseIntArray; import com.android.internal.telephony.ITelephony; import com.android.internal.telephony.PhoneConstants; @@ -1240,36 +1241,27 @@ public class ConnectivityManager { private NetworkCapabilities networkCapabilitiesForFeature(int networkType, String feature) { if (networkType == TYPE_MOBILE) { - int cap = -1; - if ("enableMMS".equals(feature)) { - cap = NetworkCapabilities.NET_CAPABILITY_MMS; - } else if ("enableSUPL".equals(feature)) { - cap = NetworkCapabilities.NET_CAPABILITY_SUPL; - } else if ("enableDUN".equals(feature) || "enableDUNAlways".equals(feature)) { - cap = NetworkCapabilities.NET_CAPABILITY_DUN; - } else if ("enableHIPRI".equals(feature)) { - cap = NetworkCapabilities.NET_CAPABILITY_INTERNET; - } else if ("enableFOTA".equals(feature)) { - cap = NetworkCapabilities.NET_CAPABILITY_FOTA; - } else if ("enableIMS".equals(feature)) { - cap = NetworkCapabilities.NET_CAPABILITY_IMS; - } else if ("enableCBS".equals(feature)) { - cap = NetworkCapabilities.NET_CAPABILITY_CBS; - } else { - return null; - } - NetworkCapabilities netCap = new NetworkCapabilities(); - netCap.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR).addCapability(cap); - netCap.maybeMarkCapabilitiesRestricted(); - return netCap; - } else if (networkType == TYPE_WIFI) { - if ("p2p".equals(feature)) { - NetworkCapabilities netCap = new NetworkCapabilities(); - netCap.addTransportType(NetworkCapabilities.TRANSPORT_WIFI); - netCap.addCapability(NetworkCapabilities.NET_CAPABILITY_WIFI_P2P); - netCap.maybeMarkCapabilitiesRestricted(); - return netCap; + switch (feature) { + case "enableCBS": + return networkCapabilitiesForType(TYPE_MOBILE_CBS); + case "enableDUN": + case "enableDUNAlways": + return networkCapabilitiesForType(TYPE_MOBILE_DUN); + case "enableFOTA": + return networkCapabilitiesForType(TYPE_MOBILE_FOTA); + case "enableHIPRI": + return networkCapabilitiesForType(TYPE_MOBILE_HIPRI); + case "enableIMS": + return networkCapabilitiesForType(TYPE_MOBILE_IMS); + case "enableMMS": + return networkCapabilitiesForType(TYPE_MOBILE_MMS); + case "enableSUPL": + return networkCapabilitiesForType(TYPE_MOBILE_SUPL); + default: + return null; } + } else if (networkType == TYPE_WIFI && "p2p".equals(feature)) { + return networkCapabilitiesForType(TYPE_WIFI_P2P); } return null; } @@ -1477,6 +1469,59 @@ public class ConnectivityManager { return true; } + private static final SparseIntArray sLegacyTypeToTransport = new SparseIntArray(); + static { + sLegacyTypeToTransport.put(TYPE_MOBILE, NetworkCapabilities.TRANSPORT_CELLULAR); + sLegacyTypeToTransport.put(TYPE_MOBILE_CBS, NetworkCapabilities.TRANSPORT_CELLULAR); + sLegacyTypeToTransport.put(TYPE_MOBILE_DUN, NetworkCapabilities.TRANSPORT_CELLULAR); + sLegacyTypeToTransport.put(TYPE_MOBILE_FOTA, NetworkCapabilities.TRANSPORT_CELLULAR); + sLegacyTypeToTransport.put(TYPE_MOBILE_HIPRI, NetworkCapabilities.TRANSPORT_CELLULAR); + sLegacyTypeToTransport.put(TYPE_MOBILE_IMS, NetworkCapabilities.TRANSPORT_CELLULAR); + sLegacyTypeToTransport.put(TYPE_MOBILE_MMS, NetworkCapabilities.TRANSPORT_CELLULAR); + sLegacyTypeToTransport.put(TYPE_MOBILE_SUPL, NetworkCapabilities.TRANSPORT_CELLULAR); + sLegacyTypeToTransport.put(TYPE_WIFI, NetworkCapabilities.TRANSPORT_WIFI); + sLegacyTypeToTransport.put(TYPE_WIFI_P2P, NetworkCapabilities.TRANSPORT_WIFI); + sLegacyTypeToTransport.put(TYPE_BLUETOOTH, NetworkCapabilities.TRANSPORT_BLUETOOTH); + sLegacyTypeToTransport.put(TYPE_ETHERNET, NetworkCapabilities.TRANSPORT_ETHERNET); + } + + private static final SparseIntArray sLegacyTypeToCapability = new SparseIntArray(); + static { + sLegacyTypeToCapability.put(TYPE_MOBILE_CBS, NetworkCapabilities.NET_CAPABILITY_CBS); + sLegacyTypeToCapability.put(TYPE_MOBILE_DUN, NetworkCapabilities.NET_CAPABILITY_DUN); + sLegacyTypeToCapability.put(TYPE_MOBILE_FOTA, NetworkCapabilities.NET_CAPABILITY_FOTA); + sLegacyTypeToCapability.put(TYPE_MOBILE_IMS, NetworkCapabilities.NET_CAPABILITY_IMS); + sLegacyTypeToCapability.put(TYPE_MOBILE_MMS, NetworkCapabilities.NET_CAPABILITY_MMS); + sLegacyTypeToCapability.put(TYPE_MOBILE_SUPL, NetworkCapabilities.NET_CAPABILITY_SUPL); + sLegacyTypeToCapability.put(TYPE_WIFI_P2P, NetworkCapabilities.NET_CAPABILITY_WIFI_P2P); + } + + /** + * Given a legacy type (TYPE_WIFI, ...) returns a NetworkCapabilities + * instance suitable for registering a request or callback. Throws an + * IllegalArgumentException if no mapping from the legacy type to + * NetworkCapabilities is known. + * + * @hide + */ + public static NetworkCapabilities networkCapabilitiesForType(int type) { + final NetworkCapabilities nc = new NetworkCapabilities(); + + // Map from type to transports. + final int NOT_FOUND = -1; + final int transport = sLegacyTypeToTransport.get(type, NOT_FOUND); + if (transport == NOT_FOUND) { + throw new IllegalArgumentException("unknown legacy type: " + type); + } + nc.addTransportType(transport); + + // Map from type to capabilities. + nc.addCapability(sLegacyTypeToCapability.get( + type, NetworkCapabilities.NET_CAPABILITY_INTERNET)); + nc.maybeMarkCapabilitiesRestricted(); + return nc; + } + /** @hide */ public static class PacketKeepaliveCallback { /** The requested keepalive was successfully started. */ diff --git a/core/java/android/net/NetworkRequest.java b/core/java/android/net/NetworkRequest.java index ae724709c6c6..cb780090c46a 100644 --- a/core/java/android/net/NetworkRequest.java +++ b/core/java/android/net/NetworkRequest.java @@ -178,6 +178,20 @@ public class NetworkRequest implements Parcelable { } /** + * Set the {@code NetworkCapabilities} for this builder instance, + * overriding any capabilities that had been previously set. + * + * @param nc The superseding {@code NetworkCapabilities} instance. + * @return The builder to facilitate chaining. + * @hide + */ + public Builder setCapabilities(NetworkCapabilities nc) { + mNetworkCapabilities.clearAll(); + mNetworkCapabilities.combineCapabilities(nc); + return this; + } + + /** * Completely clears all the {@code NetworkCapabilities} from this builder instance, * removing even the capabilities that are set by default when the object is constructed. * diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index 388054d35ba8..dfcab3df628d 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -516,6 +516,7 @@ public class UserManager { * <li>{@link LayoutParams#TYPE_SYSTEM_ALERT}</li> * <li>{@link LayoutParams#TYPE_SYSTEM_ERROR}</li> * <li>{@link LayoutParams#TYPE_SYSTEM_OVERLAY}</li> + * <li>{@link LayoutParams#TYPE_APPLICATION_OVERLAY}</li> * * <p>This can only be set by device owners and profile owners on the primary user. * The default value is <code>false</code>. diff --git a/core/java/android/service/autofill/AutoFillService.java b/core/java/android/service/autofill/AutoFillService.java index 1e4f90d1ed07..bfaf23cd5fae 100644 --- a/core/java/android/service/autofill/AutoFillService.java +++ b/core/java/android/service/autofill/AutoFillService.java @@ -15,9 +15,7 @@ */ package android.service.autofill; -import static android.view.View.AUTO_FILL_FLAG_TYPE_FILL; -import static android.view.View.AUTO_FILL_FLAG_TYPE_SAVE; - +import android.annotation.CallSuper; import android.annotation.SdkConstant; import android.app.Activity; import android.app.Service; @@ -28,8 +26,8 @@ import android.os.CancellationSignal; import android.os.IBinder; import android.os.Looper; import android.os.Message; +import android.os.RemoteException; import android.util.Log; -import android.view.autofill.AutoFillId; import android.view.autofill.Dataset; import android.view.autofill.FillResponse; @@ -127,14 +125,22 @@ public abstract class AutoFillService extends Service { private static final int MSG_AUTO_FILL_ACTIVITY = 3; private static final int MSG_AUTHENTICATE_FILL_RESPONSE = 4; private static final int MSG_AUTHENTICATE_DATASET = 5; + private static final int MSG_SAVE = 6; private final IAutoFillService mInterface = new IAutoFillService.Stub() { @Override - public void autoFill(AssistStructure structure, IAutoFillServerCallback callback, - int flags) { + public void autoFill(AssistStructure structure, IAutoFillServerCallback callback) { mHandlerCaller - .obtainMessageIOO(MSG_AUTO_FILL_ACTIVITY, flags, structure, callback) + .obtainMessageOO(MSG_AUTO_FILL_ACTIVITY, structure, callback) + .sendToTarget(); + } + + @Override + public void save(AssistStructure structure, IAutoFillServerCallback callback, + Bundle extras) throws RemoteException { + mHandlerCaller + .obtainMessageOOO(MSG_SAVE, structure, callback, extras) .sendToTarget(); } @@ -175,10 +181,26 @@ public abstract class AutoFillService extends Service { break; } case MSG_AUTO_FILL_ACTIVITY: { final SomeArgs args = (SomeArgs) msg.obj; - final int flags = msg.arg1; - final AssistStructure structure = (AssistStructure) args.arg1; - final IAutoFillServerCallback callback = (IAutoFillServerCallback) args.arg2; - requestAutoFill(callback, structure, flags); + try { + final AssistStructure structure = (AssistStructure) args.arg1; + final IAutoFillServerCallback callback = + (IAutoFillServerCallback) args.arg2; + handleAutoFill(structure, callback); + } finally { + args.recycle(); + } + break; + } case MSG_SAVE: { + final SomeArgs args = (SomeArgs) msg.obj; + try { + final AssistStructure structure = (AssistStructure) args.arg1; + final IAutoFillServerCallback callback = + (IAutoFillServerCallback) args.arg2; + final Bundle extras = (Bundle) args.arg3; + handleSave(structure, callback, extras); + } finally { + args.recycle(); + } break; } case MSG_AUTHENTICATE_FILL_RESPONSE: { final int flags = msg.arg1; @@ -258,7 +280,7 @@ public abstract class AutoFillService extends Service { * Called when user requests service to save the fields of an {@link Activity}. * * <p>Service must call one of the {@link SaveCallback} methods (like - * {@link SaveCallback#onSuccess(AutoFillId[])} or {@link SaveCallback#onFailure(CharSequence)}) + * {@link SaveCallback#onSuccess()} or {@link SaveCallback#onFailure(CharSequence)}) * to notify the result of the request. * * @param structure {@link Activity}'s view structure. @@ -313,9 +335,8 @@ public abstract class AutoFillService extends Service { if (DEBUG) Log.d(TAG, "onDatasetAuthenticationRequest(): flags=" + flags); } - // TODO(b/33197203): make it final and create another method classes could extend so it's - // guaranteed to dump the pending callbacks? @Override + @CallSuper protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { if (mPendingCallbacks != null) { pw.print("Number of pending callbacks: "); pw.println(mPendingCallbacks.size()); @@ -331,29 +352,23 @@ public abstract class AutoFillService extends Service { } } - private void requestAutoFill(IAutoFillServerCallback callback, AssistStructure structure, - int flags) { - if (DEBUG) Log.d(TAG, "requestAutoFill(): flags=" + flags); - - if ((flags & AUTO_FILL_FLAG_TYPE_FILL) != 0) { - final FillCallback fillCallback = new FillCallback(callback); - if (DEBUG_PENDING_CALLBACKS) { - addPendingCallback(fillCallback); - } - // TODO(b/33197203): hook up the cancelationSignal - onFillRequest(structure, null, new CancellationSignal(), fillCallback); - return; - } - if ((flags & AUTO_FILL_FLAG_TYPE_SAVE) != 0) { - final SaveCallback saveCallback = new SaveCallback(callback); - if (DEBUG_PENDING_CALLBACKS) { - addPendingCallback(saveCallback); - } - onSaveRequest(structure, null, saveCallback); - return; + private void handleAutoFill(AssistStructure structure, IAutoFillServerCallback callback) { + final FillCallback fillCallback = new FillCallback(callback); + if (DEBUG_PENDING_CALLBACKS) { + addPendingCallback(fillCallback); } + // TODO(b/33197203): hook up the cancelationSignal + onFillRequest(structure, null, new CancellationSignal(), fillCallback); + return; + } - Log.w(TAG, "invalid flags on requestAutoFill(): " + flags); + private void handleSave(AssistStructure structure, IAutoFillServerCallback callback, + Bundle extras) { + final SaveCallback saveCallback = new SaveCallback(callback); + if (DEBUG_PENDING_CALLBACKS) { + addPendingCallback(saveCallback); + } + onSaveRequest(structure, extras, saveCallback); } private void addPendingCallback(CallbackHelper.Dumpable callback) { diff --git a/core/java/android/service/autofill/IAutoFillManagerService.aidl b/core/java/android/service/autofill/IAutoFillManagerService.aidl index ace5411ca0d3..088e6498a0d5 100644 --- a/core/java/android/service/autofill/IAutoFillManagerService.aidl +++ b/core/java/android/service/autofill/IAutoFillManagerService.aidl @@ -19,6 +19,7 @@ package android.service.autofill; import android.graphics.Rect; import android.os.Bundle; import android.view.autofill.AutoFillId; +import android.view.autofill.AutoFillValue; /** * Mediator between apps being auto-filled and auto-fill service implementations. @@ -30,6 +31,12 @@ oneway interface IAutoFillManagerService { // Called by AutoFillManager (app). void requestAutoFill(in AutoFillId id, in Rect bounds, int flags); + // Called by AutoFillManager (app). + void onValueChanged(in AutoFillId id, in AutoFillValue value); + + // Called by ShellCommand only. + void requestAutoFillForUser(int userId); + // Called by ShellCommand only. - void requestAutoFillForUser(int userId, int flags); + void requestSaveForUser(int userId); } diff --git a/core/java/android/service/autofill/IAutoFillServerCallback.aidl b/core/java/android/service/autofill/IAutoFillServerCallback.aidl index f7d5064e9e26..480438ac44ea 100644 --- a/core/java/android/service/autofill/IAutoFillServerCallback.aidl +++ b/core/java/android/service/autofill/IAutoFillServerCallback.aidl @@ -33,7 +33,7 @@ oneway interface IAutoFillServerCallback { // TODO(b/33197203): document methods void showResponse(in FillResponse response); void showError(CharSequence message); - void highlightSavedFields(in AutoFillId[] ids); + void onSaved(); void unlockFillResponse(int flags); void unlockDataset(in Dataset dataset, int flags); } diff --git a/core/java/android/service/autofill/IAutoFillService.aidl b/core/java/android/service/autofill/IAutoFillService.aidl index 3e8087b2a5a2..a4e6ebc996d3 100644 --- a/core/java/android/service/autofill/IAutoFillService.aidl +++ b/core/java/android/service/autofill/IAutoFillService.aidl @@ -27,7 +27,8 @@ import com.android.internal.os.IResultReceiver; // TODO(b/33197203): document class and methods oneway interface IAutoFillService { // TODO(b/33197203): rename method to make them more consistent - void autoFill(in AssistStructure structure, in IAutoFillServerCallback callback, int flags); + void autoFill(in AssistStructure structure, in IAutoFillServerCallback callback); + void save(in AssistStructure structure, in IAutoFillServerCallback callback, in Bundle extras); void authenticateFillResponse(in Bundle extras, int flags); void authenticateDataset(in Bundle extras, int flags); void onConnected(); diff --git a/core/java/android/service/autofill/SaveCallback.java b/core/java/android/service/autofill/SaveCallback.java index e2fb588db212..9dd979599f5d 100644 --- a/core/java/android/service/autofill/SaveCallback.java +++ b/core/java/android/service/autofill/SaveCallback.java @@ -57,23 +57,18 @@ public final class SaveCallback implements Dumpable { /** * Notifies the Android System that an - * {@link AutoFillService#onSaveRequest(android.app.assist.AssistStructure, Bundle, + * {@link AutoFillService#onSaveRequest (android.app.assist.AssistStructure, Bundle, * SaveCallback)} was successfully fulfilled by the service. * - * @param ids ids ({@link ViewNode#getAutoFillId()}) of the fields that were saved. - * * @throws RuntimeException if an error occurred while calling the Android System. */ - public void onSuccess(AutoFillId[] ids) { - if (DEBUG) Log.d(TAG, "onSuccess(): ids=" + ((ids == null) ? "null" : ids.length)); - - Preconditions.checkArgument(ids != null, "ids cannot be null"); - Preconditions.checkArgument(ids.length > 0, "ids cannot be empty"); + public void onSuccess() { + if (DEBUG) Log.d(TAG, "onSuccess()"); synchronized (mCallback) { checkNotRepliedYetLocked(); try { - mCallback.highlightSavedFields(ids); + mCallback.onSaved(); } catch (RemoteException e) { e.rethrowAsRuntimeException(); } finally { @@ -94,8 +89,6 @@ public final class SaveCallback implements Dumpable { public void onFailure(CharSequence message) { if (DEBUG) Log.d(TAG, "onFailure(): message=" + message); - Preconditions.checkArgument(message != null, "message cannot be null"); - synchronized (mCallback) { checkNotRepliedYetLocked(); diff --git a/core/java/android/service/voice/VoiceInteractionSession.java b/core/java/android/service/voice/VoiceInteractionSession.java index 48f3ac3f06f7..e9bbc2de26cc 100644 --- a/core/java/android/service/voice/VoiceInteractionSession.java +++ b/core/java/android/service/voice/VoiceInteractionSession.java @@ -119,8 +119,6 @@ public class VoiceInteractionSession implements KeyEvent.Callback, ComponentCall public static final String KEY_CONTENT = "content"; /** @hide */ public static final String KEY_RECEIVER_EXTRAS = "receiverExtras"; - /** @hide */ - public static final String KEY_FLAGS = "flags"; final Context mContext; final HandlerCaller mHandlerCaller; diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 1292243d1b05..e2eee9516142 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -39,7 +39,6 @@ import android.annotation.Nullable; import android.annotation.Size; import android.annotation.TestApi; import android.annotation.UiThread; -import android.app.Application.OnProvideAssistDataListener; import android.content.ClipData; import android.content.Context; import android.content.ContextWrapper; @@ -4023,39 +4022,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, int mLayerType = LAYER_TYPE_NONE; Paint mLayerPaint; - - /** - * Set when a request was made to decide if views in an {@link android.app.Activity} can be - * auto-filled by an {@link android.service.autofill.AutoFillService}. - * - * <p>Since this request is made without a explicit user consent, the resulting - * {@link android.app.assist.AssistStructure} should not contain any PII - * (Personally Identifiable Information). - * - * <p>Examples: - * <ul> - * <li>{@link android.widget.TextView} texts should only be included when they were set by - * static resources. - * <li>{@link android.webkit.WebView} virtual children should be restricted to a subset of - * input fields and tags (like {@code id}). - * </ul> - */ - // TODO(b/33197203): cannot conflict with flags defined on AutoFillManager until they're removed - // (when save is refactored). - public static final int AUTO_FILL_FLAG_TYPE_FILL = 0x10000000; - - /** - * Set when the user explicitly asked a {@link android.service.autofill.AutoFillService} to save - * the value of the {@link View}s in an {@link android.app.Activity}. - * - * <p>The resulting {@link android.app.assist.AssistStructure} can contain any kind of PII - * (Personally Identifiable Information). For example, the text of password fields should be - * included since that's what's typically saved. - */ - // TODO(b/33197203): cannot conflict with flags defined on AutoFillManager until they're removed - // (when save is refactored). - public static final int AUTO_FILL_FLAG_TYPE_SAVE = 0x20000000; - /** * Set to true when drawing cache is enabled and cannot be created. * @@ -6409,7 +6375,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if ((mViewFlags & VISIBILITY_MASK) != VISIBLE) { return false; } - return allowAutoFocus ? getFocusable() != NOT_FOCUSABLE : getFocusable() == FOCUSABLE; + return (allowAutoFocus + ? getFocusable() != NOT_FOCUSABLE + : getFocusable() == FOCUSABLE) && isFocusable(); } /** @@ -6912,7 +6880,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * fills in all data that can be inferred from the view itself. */ public void onProvideStructure(ViewStructure structure) { - onProvideStructureForAssistOrAutoFill(structure, 0); + onProvideStructureForAssistOrAutoFill(structure, false); } /** @@ -6923,19 +6891,14 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * * @param structure Fill in with structured view data. The default implementation * fills in all data that can be inferred from the view itself. - * @param flags optional flags (see {@link #AUTO_FILL_FLAG_TYPE_FILL} and - * {@link #AUTO_FILL_FLAG_TYPE_SAVE} for more info). + * @param flags optional flags (currently {@code 0}). */ public void onProvideAutoFillStructure(ViewStructure structure, int flags) { - onProvideStructureForAssistOrAutoFill(structure, flags); + onProvideStructureForAssistOrAutoFill(structure, true); } - private void onProvideStructureForAssistOrAutoFill(ViewStructure structure, int flags) { - // NOTE: currently flags are only used for AutoFill; if they're used for Assist as well, - // this method should take a boolean with the type of request. - boolean forAutoFill = (flags - & (View.AUTO_FILL_FLAG_TYPE_FILL - | View.AUTO_FILL_FLAG_TYPE_SAVE)) != 0; + private void onProvideStructureForAssistOrAutoFill(ViewStructure structure, + boolean forAutoFill) { final int id = mID; if (id != NO_ID && !isViewIdGenerated(id)) { String pkg, type, entry; @@ -7009,7 +6972,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * optimal implementation providing this data. */ public void onProvideVirtualStructure(ViewStructure structure) { - onProvideVirtualStructureForAssistOrAutoFill(structure, 0); + onProvideVirtualStructureForAssistOrAutoFill(structure, false); } /** @@ -7024,14 +6987,14 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * {@code flags} parameter - see the documentation on each flag for more details. * * @param structure Fill in with structured view data. - * @param flags optional flags (see {@link #AUTO_FILL_FLAG_TYPE_FILL} and - * {@link #AUTO_FILL_FLAG_TYPE_SAVE} for more info). + * @param flags optional flags (currently {@code 0}). */ public void onProvideAutoFillVirtualStructure(ViewStructure structure, int flags) { - onProvideVirtualStructureForAssistOrAutoFill(structure, flags); + onProvideVirtualStructureForAssistOrAutoFill(structure, true); } - private void onProvideVirtualStructureForAssistOrAutoFill(ViewStructure structure, int flags) { + private void onProvideVirtualStructureForAssistOrAutoFill(ViewStructure structure, + boolean forAutoFill) { // NOTE: currently flags are only used for AutoFill; if they're used for Assist as well, // this method should take a boolean with the type of request. AccessibilityNodeProvider provider = getAccessibilityNodeProvider(); @@ -7039,7 +7002,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, AccessibilityNodeInfo info = createAccessibilityNodeInfo(); structure.setChildCount(1); ViewStructure root = structure.newChild(0); - populateVirtualStructure(root, provider, info, flags); + populateVirtualStructure(root, provider, info, forAutoFill); info.recycle(); } } @@ -7049,9 +7012,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * this view. * * <p>By default returns {@code null} but should be overridden when view provides a virtual - * hierachy on {@link OnProvideAssistDataListener} that takes flags used by the AutoFill - * Framework (such as {@link #AUTO_FILL_FLAG_TYPE_FILL} and - * {@link #AUTO_FILL_FLAG_TYPE_SAVE}). + * hierachy on {@link #onProvideAutoFillVirtualStructure(ViewStructure, int)}. */ @Nullable public VirtualViewDelegate getAutoFillVirtualViewDelegate( @@ -7107,12 +7068,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } private void populateVirtualStructure(ViewStructure structure, - AccessibilityNodeProvider provider, AccessibilityNodeInfo info, int flags) { - // NOTE: currently flags are only used for AutoFill; if they're used for Assist as well, - // this method should take a boolean with the type of request. - - final boolean sanitized = (flags & View.AUTO_FILL_FLAG_TYPE_FILL) != 0; - + AccessibilityNodeProvider provider, AccessibilityNodeInfo info, boolean forAutoFill) { structure.setId(AccessibilityNodeInfo.getVirtualDescendantId(info.getSourceNodeId()), null, null, null); Rect rect = structure.getTempRect(); @@ -7150,7 +7106,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, CharSequence cname = info.getClassName(); structure.setClassName(cname != null ? cname.toString() : null); structure.setContentDescription(info.getContentDescription()); - if (!sanitized && (info.getText() != null || info.getError() != null)) { + if (!forAutoFill && (info.getText() != null || info.getError() != null)) { // TODO(b/33197203) (b/33269702): when sanitized, try to use the Accessibility API to // just set sanitized values (like text coming from resource files), rather than not // setting it at all. @@ -7164,7 +7120,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, AccessibilityNodeInfo cinfo = provider.createAccessibilityNodeInfo( AccessibilityNodeInfo.getVirtualDescendantId(info.getChildId(i))); ViewStructure child = structure.newChild(i); - populateVirtualStructure(child, provider, cinfo, flags); + populateVirtualStructure(child, provider, cinfo, forAutoFill); cinfo.recycle(); } } @@ -7176,7 +7132,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * {@link #onProvideVirtualStructure}. */ public void dispatchProvideStructure(ViewStructure structure) { - dispatchProvideStructureForAssistOrAutoFill(structure, 0); + dispatchProvideStructureForAssistOrAutoFill(structure, false); } /** @@ -7189,25 +7145,20 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * and {@link #onProvideAutoFillVirtualStructure(ViewStructure, int)}. * * @param structure Fill in with structured view data. - * @param flags optional flags (see {@link #AUTO_FILL_FLAG_TYPE_FILL} and - * {@link #AUTO_FILL_FLAG_TYPE_SAVE} for more info). + * @param flags optional flags (currently {@code 0}). */ public void dispatchProvideAutoFillStructure(ViewStructure structure, int flags) { - dispatchProvideStructureForAssistOrAutoFill(structure, flags); + dispatchProvideStructureForAssistOrAutoFill(structure, true); } - private void dispatchProvideStructureForAssistOrAutoFill(ViewStructure structure, int flags) { - // NOTE: currently flags are only used for AutoFill; if they're used for Assist as well, - // this method should take a boolean with the type of request. - boolean forAutoFill = (flags - & (View.AUTO_FILL_FLAG_TYPE_FILL - | View.AUTO_FILL_FLAG_TYPE_SAVE)) != 0; - + private void dispatchProvideStructureForAssistOrAutoFill(ViewStructure structure, + boolean forAutoFill) { boolean blocked = forAutoFill ? isAutoFillBlocked() : isAssistBlocked(); if (!blocked) { if (forAutoFill) { - onProvideAutoFillStructure(structure, flags); - onProvideAutoFillVirtualStructure(structure, flags); + // NOTE: flags are not currently supported, hence 0 + onProvideAutoFillStructure(structure, 0); + onProvideAutoFillVirtualStructure(structure, 0); } else { onProvideStructure(structure); onProvideVirtualStructure(structure); diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index ab10ac17d01b..b11b3d7ef44a 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -1114,7 +1114,8 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } // TODO This should probably be super.hasFocusable, but that would change behavior - if (allowAutoFocus ? getFocusable() != NOT_FOCUSABLE : getFocusable() == FOCUSABLE) { + if ((allowAutoFocus ? getFocusable() != NOT_FOCUSABLE : getFocusable() == FOCUSABLE) + && isFocusable()) { return true; } @@ -3206,7 +3207,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager @Override public void dispatchProvideStructure(ViewStructure structure) { super.dispatchProvideStructure(structure); - dispatchProvideStructureForAssistOrAutoFill(structure, 0); + dispatchProvideStructureForAssistOrAutoFill(structure, false); } /** @@ -3218,16 +3219,11 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager @Override public void dispatchProvideAutoFillStructure(ViewStructure structure, int flags) { super.dispatchProvideAutoFillStructure(structure, flags); - dispatchProvideStructureForAssistOrAutoFill(structure, flags); + dispatchProvideStructureForAssistOrAutoFill(structure, true); } - private void dispatchProvideStructureForAssistOrAutoFill(ViewStructure structure, int flags) { - // NOTE: currently flags are only used for AutoFill; if they're used for Assist as well, - // this method should take a boolean with the type of request. - boolean forAutoFill = (flags - & (View.AUTO_FILL_FLAG_TYPE_FILL - | View.AUTO_FILL_FLAG_TYPE_SAVE)) != 0; - + private void dispatchProvideStructureForAssistOrAutoFill(ViewStructure structure, + boolean forAutoFill) { boolean blocked = forAutoFill ? isAutoFillBlocked() : isAssistBlocked(); if (!blocked) { @@ -3294,7 +3290,8 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager // Must explicitly check which recursive method to call. if (forAutoFill) { - child.dispatchProvideAutoFillStructure(cstructure, flags); + // NOTE: flags are not currently supported, hence 0 + child.dispatchProvideAutoFillStructure(cstructure, 0); } else { child.dispatchProvideStructure(cstructure); } diff --git a/core/java/android/view/ViewStructure.java b/core/java/android/view/ViewStructure.java index 839e11c01303..5bae594b5659 100644 --- a/core/java/android/view/ViewStructure.java +++ b/core/java/android/view/ViewStructure.java @@ -29,6 +29,15 @@ import android.view.autofill.VirtualViewDelegate; * View.onProvideStructure}. */ public abstract class ViewStructure { + + /** + * Flag used when adding virtual views for auto-fill, it indicates the contents of the view + * (such as * {@link android.app.assist.AssistStructure.ViewNode#getText()} and + * {@link android.app.assist.AssistStructure.ViewNode#getAutoFillValue()}) + * can be passed to the {@link android.service.autofill.AutoFillService}. + */ + public static final int AUTO_FILL_FLAG_SANITIZED = 0x1; + /** * Set the identifier for this view. * @@ -264,8 +273,14 @@ public abstract class ViewStructure { /** * Like {@link #newChild(int)}, but providing a {@code virtualId} to the child so it can be * auto-filled by {@link VirtualViewDelegate#autoFill(int, AutoFillValue)}. + * + * @param index child index + * @param virtualId child's id as defined by {@link VirtualViewDelegate#autoFill(int, + * AutoFillValue)}. + * @param flags currently either {@code 0} or {@link #AUTO_FILL_FLAG_SANITIZED}. */ - public abstract ViewStructure newChild(int index, int virtualId); + // TODO(b/33197203, b/33802548): add CTS/unit test + public abstract ViewStructure newChild(int index, int virtualId, int flags); /** * Like {@link #newChild}, but allows the caller to asynchronously populate the returned @@ -280,15 +295,36 @@ public abstract class ViewStructure { /** * Like {@link #asyncNewChild(int)}, but providing a {@code virtualId} to the child so it can be * auto-filled by {@link VirtualViewDelegate#autoFill(int, AutoFillValue)}. + * + * @param index child index + * @param virtualId child's id as defined by {@link VirtualViewDelegate#autoFill(int, + * AutoFillValue)}. + * @param flags currently either {@code 0} or {@link #AUTO_FILL_FLAG_SANITIZED}. */ - public abstract ViewStructure asyncNewChild(int index, int virtualId); + // TODO(b/33197203, b/33802548): add CTS/unit test + public abstract ViewStructure asyncNewChild(int index, int virtualId, int flags); /** * Sets the {@link AutoFillType} that can be used to auto-fill this node. */ + // TODO(b/33197203, b/33802548): add CTS/unit test public abstract void setAutoFillType(AutoFillType info); /** + * Sets the {@link AutoFillValue} representing the current value of this node. + */ + // TODO(b/33197203, b/33802548): add CTS/unit test + public abstract void setAutoFillValue(AutoFillValue value); + + /** + * @hide + * + * TODO(b/33197203, b/33269702): temporary set it as not sanitized until + * AssistStructure automaticaly sets sanitization based on text coming from resources + */ + public abstract void setSanitized(boolean sensitive); + + /** * Call when done populating a {@link ViewStructure} returned by * {@link #asyncNewChild}. */ diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index bf840e547079..5a640faf08d3 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -335,7 +335,9 @@ public interface WindowManager extends ViewManager { @ViewDebug.IntToString(from = TYPE_QS_DIALOG, to = "TYPE_QS_DIALOG"), @ViewDebug.IntToString(from = TYPE_SCREENSHOT, - to = "TYPE_SCREENSHOT") + to = "TYPE_SCREENSHOT"), + @ViewDebug.IntToString(from = TYPE_APPLICATION_OVERLAY, + to = "TYPE_APPLICATION_OVERLAY") }) public int type; @@ -462,14 +464,18 @@ public interface WindowManager extends ViewManager { * These windows are normally placed above all applications, but behind * the status bar. * In multiuser systems shows on all users' windows. + * @deprecated for non-system apps. Use {@link #TYPE_APPLICATION_OVERLAY} instead. */ + @Deprecated public static final int TYPE_PHONE = FIRST_SYSTEM_WINDOW+2; /** * Window type: system window, such as low power alert. These windows * are always on top of application windows. * In multiuser systems shows only on the owning user's window. + * @deprecated for non-system apps. Use {@link #TYPE_APPLICATION_OVERLAY} instead. */ + @Deprecated public static final int TYPE_SYSTEM_ALERT = FIRST_SYSTEM_WINDOW+3; /** @@ -482,7 +488,9 @@ public interface WindowManager extends ViewManager { /** * Window type: transient notifications. * In multiuser systems shows only on the owning user's window. + * @deprecated for non-system apps. Use {@link #TYPE_APPLICATION_OVERLAY} instead. */ + @Deprecated public static final int TYPE_TOAST = FIRST_SYSTEM_WINDOW+5; /** @@ -490,7 +498,9 @@ public interface WindowManager extends ViewManager { * on top of everything else. These windows must not take input * focus, or they will interfere with the keyguard. * In multiuser systems shows only on the owning user's window. + * @deprecated for non-system apps. Use {@link #TYPE_APPLICATION_OVERLAY} instead. */ + @Deprecated public static final int TYPE_SYSTEM_OVERLAY = FIRST_SYSTEM_WINDOW+6; /** @@ -498,7 +508,9 @@ public interface WindowManager extends ViewManager { * the keyguard is active. These windows must not take input * focus, or they will interfere with the keyguard. * In multiuser systems shows on all users' windows. + * @deprecated for non-system apps. Use {@link #TYPE_APPLICATION_OVERLAY} instead. */ + @Deprecated public static final int TYPE_PRIORITY_PHONE = FIRST_SYSTEM_WINDOW+7; /** @@ -517,7 +529,9 @@ public interface WindowManager extends ViewManager { * Window type: internal system error windows, appear on top of * everything they can. * In multiuser systems shows only on the owning user's window. + * @deprecated for non-system apps. Use {@link #TYPE_APPLICATION_OVERLAY} instead. */ + @Deprecated public static final int TYPE_SYSTEM_ERROR = FIRST_SYSTEM_WINDOW+10; /** @@ -703,10 +717,44 @@ public interface WindowManager extends ViewManager { public static final int TYPE_PRESENTATION = FIRST_SYSTEM_WINDOW + 37; /** + * Window type: Application overlay windows are displayed above all activity windows + * (types between {@link #FIRST_APPLICATION_WINDOW} and {@link #LAST_APPLICATION_WINDOW}) + * but below critical system windows like the status bar or IME. + * <p> + * The system may change the position, size, or visibility of these windows at anytime + * to reduce visual clutter to the user and also manage resources. + * <p> + * Requires {@link android.Manifest.permission#SYSTEM_ALERT_WINDOW} permission. + * <p> + * In mult-iuser systems shows only on the owning user's screen. + */ + public static final int TYPE_APPLICATION_OVERLAY = FIRST_SYSTEM_WINDOW + 38; + + /** * End of types of system windows. */ public static final int LAST_SYSTEM_WINDOW = 2999; + /** + * Return true if the window type is an alert window. + * + * @param type The window type. + * @return If the window type is an alert window. + * @hide + */ + public static boolean isSystemAlertWindowType(int type) { + switch (type) { + case TYPE_PHONE: + case TYPE_PRIORITY_PHONE: + case TYPE_SYSTEM_ALERT: + case TYPE_SYSTEM_ERROR: + case TYPE_SYSTEM_OVERLAY: + case TYPE_APPLICATION_OVERLAY: + return true; + } + return false; + } + /** @deprecated this is ignored, this value is set automatically when needed. */ @Deprecated public static final int MEMORY_TYPE_NORMAL = 0; diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java index bc4ae6d0fcf1..8e597dc40894 100644 --- a/core/java/android/view/WindowManagerPolicy.java +++ b/core/java/android/view/WindowManagerPolicy.java @@ -16,6 +16,51 @@ package android.view; +import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW; +import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW; +import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY; +import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ABOVE_SUB_PANEL; +import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG; +import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA; +import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA_OVERLAY; +import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; +import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_PANEL; +import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL; +import static android.view.WindowManager.LayoutParams.TYPE_BOOT_PROGRESS; +import static android.view.WindowManager.LayoutParams.TYPE_DISPLAY_OVERLAY; +import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER; +import static android.view.WindowManager.LayoutParams.TYPE_DRAG; +import static android.view.WindowManager.LayoutParams.TYPE_DREAM; +import static android.view.WindowManager.LayoutParams.TYPE_INPUT_CONSUMER; +import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD; +import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG; +import static android.view.WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG; +import static android.view.WindowManager.LayoutParams.TYPE_MAGNIFICATION_OVERLAY; +import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR; +import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL; +import static android.view.WindowManager.LayoutParams.TYPE_PHONE; +import static android.view.WindowManager.LayoutParams.TYPE_POINTER; +import static android.view.WindowManager.LayoutParams.TYPE_PRESENTATION; +import static android.view.WindowManager.LayoutParams.TYPE_PRIORITY_PHONE; +import static android.view.WindowManager.LayoutParams.TYPE_PRIVATE_PRESENTATION; +import static android.view.WindowManager.LayoutParams.TYPE_QS_DIALOG; +import static android.view.WindowManager.LayoutParams.TYPE_SCREENSHOT; +import static android.view.WindowManager.LayoutParams.TYPE_SEARCH_BAR; +import static android.view.WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY; +import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR; +import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL; +import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_SUB_PANEL; +import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; +import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG; +import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; +import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY; +import static android.view.WindowManager.LayoutParams.TYPE_TOAST; +import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION; +import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION_STARTING; +import static android.view.WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY; +import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER; +import static android.view.WindowManager.LayoutParams.isSystemAlertWindowType; + import android.annotation.IntDef; import android.annotation.Nullable; import android.annotation.SystemApi; @@ -30,6 +75,7 @@ import android.os.Bundle; import android.os.IBinder; import android.os.Looper; import android.os.RemoteException; +import android.util.Slog; import android.view.animation.Animation; import com.android.internal.policy.IKeyguardDismissCallback; @@ -423,6 +469,14 @@ public interface WindowManagerPolicy { public boolean isInputMethodWindow(); public int getDisplayId(); + + /** + * Returns true if the window owner can add internal system windows. + * That is, they have {@link android.Manifest.permission#INTERNAL_SYSTEM_WINDOW}. + */ + default boolean canAddInternalSystemWindow() { + return false; + } } /** @@ -659,27 +713,181 @@ public interface WindowManagerPolicy { int navigationPresence); /** - * Assign a window type to a layer. Allows you to control how different + * Returns the layer assignment for the window state. Allows you to control how different + * kinds of windows are ordered on-screen. + * + * @param win The window state + * @return int An arbitrary integer used to order windows, with lower numbers below higher ones. + */ + default int getWindowLayerLw(WindowState win) { + return getWindowLayerFromTypeLw(win.getBaseType(), win.canAddInternalSystemWindow()); + } + + /** + * Returns the layer assignment for the window type. Allows you to control how different * kinds of windows are ordered on-screen. * * @param type The type of window being assigned. + * @return int An arbitrary integer used to order windows, with lower numbers below higher ones. + */ + default int getWindowLayerFromTypeLw(int type) { + if (isSystemAlertWindowType(type)) { + throw new IllegalArgumentException("Use getWindowLayerFromTypeLw() or" + + " getWindowLayerLw() for alert window types"); + } + return getWindowLayerFromTypeLw(type, false /* canAddInternalSystemWindow */); + } + + /** + * Returns the layer assignment for the window type. Allows you to control how different + * kinds of windows are ordered on-screen. * - * @return int An arbitrary integer used to order windows, with lower - * numbers below higher ones. - */ - public int windowTypeToLayerLw(int type); + * @param type The type of window being assigned. + * @param canAddInternalSystemWindow If the owner window associated with the type we are + * evaluating can add internal system windows. I.e they have + * {@link android.Manifest.permission#INTERNAL_SYSTEM_WINDOW}. If true, alert window + * types {@link android.view.WindowManager.LayoutParams#isSystemAlertWindowType(int)} + * can be assigned layers greater than the layer for + * {@link android.view.WindowManager.LayoutParams#TYPE_APPLICATION_OVERLAY} Else, their + * layers would be lesser. + * @return int An arbitrary integer used to order windows, with lower numbers below higher ones. + */ + default int getWindowLayerFromTypeLw(int type, boolean canAddInternalSystemWindow) { + if (type >= FIRST_APPLICATION_WINDOW && type <= LAST_APPLICATION_WINDOW) { + return APPLICATION_LAYER; + } + + switch (type) { + case TYPE_WALLPAPER: + // wallpaper is at the bottom, though the window manager may move it. + return 1; + case TYPE_PRESENTATION: + case TYPE_PRIVATE_PRESENTATION: + return APPLICATION_LAYER; + case TYPE_DOCK_DIVIDER: + return APPLICATION_LAYER; + case TYPE_QS_DIALOG: + return APPLICATION_LAYER; + case TYPE_PHONE: + return 3; + case TYPE_SEARCH_BAR: + case TYPE_VOICE_INTERACTION_STARTING: + return 4; + case TYPE_VOICE_INTERACTION: + // voice interaction layer is almost immediately above apps. + return 5; + case TYPE_INPUT_CONSUMER: + return 6; + case TYPE_SYSTEM_DIALOG: + return 7; + case TYPE_TOAST: + // toasts and the plugged-in battery thing + return 8; + case TYPE_PRIORITY_PHONE: + // SIM errors and unlock. Not sure if this really should be in a high layer. + return 9; + case TYPE_DREAM: + // used for Dreams (screensavers with TYPE_DREAM windows) + return 10; + case TYPE_SYSTEM_ALERT: + // like the ANR / app crashed dialogs + return canAddInternalSystemWindow ? 11 : 10; + case TYPE_APPLICATION_OVERLAY: + return 13; + case TYPE_INPUT_METHOD: + // on-screen keyboards and other such input method user interfaces go here. + return 14; + case TYPE_INPUT_METHOD_DIALOG: + // on-screen keyboards and other such input method user interfaces go here. + return 15; + case TYPE_STATUS_BAR_SUB_PANEL: + return 17; + case TYPE_STATUS_BAR: + return 18; + case TYPE_STATUS_BAR_PANEL: + return 19; + case TYPE_KEYGUARD_DIALOG: + return 20; + case TYPE_VOLUME_OVERLAY: + // the on-screen volume indicator and controller shown when the user + // changes the device volume + return 21; + case TYPE_SYSTEM_OVERLAY: + // the on-screen volume indicator and controller shown when the user + // changes the device volume + return canAddInternalSystemWindow ? 22 : 11; + case TYPE_NAVIGATION_BAR: + // the navigation bar, if available, shows atop most things + return 23; + case TYPE_NAVIGATION_BAR_PANEL: + // some panels (e.g. search) need to show on top of the navigation bar + return 24; + case TYPE_SCREENSHOT: + // screenshot selection layer shouldn't go above system error, but it should cover + // navigation bars at the very least. + return 25; + case TYPE_SYSTEM_ERROR: + // system-level error dialogs + return canAddInternalSystemWindow ? 26 : 10; + case TYPE_MAGNIFICATION_OVERLAY: + // used to highlight the magnified portion of a display + return 27; + case TYPE_DISPLAY_OVERLAY: + // used to simulate secondary display devices + return 28; + case TYPE_DRAG: + // the drag layer: input for drag-and-drop is associated with this window, + // which sits above all other focusable windows + return 29; + case TYPE_ACCESSIBILITY_OVERLAY: + // overlay put by accessibility services to intercept user interaction + return 30; + case TYPE_SECURE_SYSTEM_OVERLAY: + return 31; + case TYPE_BOOT_PROGRESS: + return 32; + case TYPE_POINTER: + // the (mouse) pointer layer + return 33; + default: + Slog.e("WindowManager", "Unknown window type: " + type); + return APPLICATION_LAYER; + } + } + + int APPLICATION_LAYER = 2; + int APPLICATION_MEDIA_SUBLAYER = -2; + int APPLICATION_MEDIA_OVERLAY_SUBLAYER = -1; + int APPLICATION_PANEL_SUBLAYER = 1; + int APPLICATION_SUB_PANEL_SUBLAYER = 2; + int APPLICATION_ABOVE_SUB_PANEL_SUBLAYER = 3; /** - * Return how to Z-order sub-windows in relation to the window they are - * attached to. Return positive to have them ordered in front, negative for - * behind. + * Return how to Z-order sub-windows in relation to the window they are attached to. + * Return positive to have them ordered in front, negative for behind. * * @param type The sub-window type code. * * @return int Layer in relation to the attached window, where positive is * above and negative is below. */ - public int subWindowTypeToLayerLw(int type); + default int getSubWindowLayerFromTypeLw(int type) { + switch (type) { + case TYPE_APPLICATION_PANEL: + case TYPE_APPLICATION_ATTACHED_DIALOG: + return APPLICATION_PANEL_SUBLAYER; + case TYPE_APPLICATION_MEDIA: + return APPLICATION_MEDIA_SUBLAYER; + case TYPE_APPLICATION_MEDIA_OVERLAY: + return APPLICATION_MEDIA_OVERLAY_SUBLAYER; + case TYPE_APPLICATION_SUB_PANEL: + return APPLICATION_SUB_PANEL_SUBLAYER; + case TYPE_APPLICATION_ABOVE_SUB_PANEL: + return APPLICATION_ABOVE_SUB_PANEL_SUBLAYER; + } + Slog.e("WindowManager", "Unknown sub-window type: " + type); + return 0; + } /** * Get the highest layer (actually one more than) that the wallpaper is diff --git a/core/java/android/view/autofill/AutoFillId.java b/core/java/android/view/autofill/AutoFillId.java index e9c1c3bccd72..3dbf5a8b0415 100644 --- a/core/java/android/view/autofill/AutoFillId.java +++ b/core/java/android/view/autofill/AutoFillId.java @@ -29,6 +29,7 @@ public final class AutoFillId implements Parcelable { private boolean mVirtual; private int mVirtualId; + // TODO(b/33197203): use factory and cache values, since they're immutable /** @hide */ public AutoFillId(int id) { mVirtual = false; diff --git a/core/java/android/view/autofill/AutoFillManager.java b/core/java/android/view/autofill/AutoFillManager.java index cf56e0e95aae..f2f522daa707 100644 --- a/core/java/android/view/autofill/AutoFillManager.java +++ b/core/java/android/view/autofill/AutoFillManager.java @@ -36,15 +36,11 @@ public final class AutoFillManager { /** * Flag used to show the auto-fill UI affordance for a view. */ - // TODO(b/33197203): cannot conflict with flags defined on View until they're removed (when - // save is refactored). public static final int FLAG_UPDATE_UI_SHOW = 0x1; /** * Flag used to hide the auto-fill UI affordance for a view. */ - // TODO(b/33197203): cannot conflict with flags defined on View until they're removed (when - // save is refactored). public static final int FLAG_UPDATE_UI_HIDE = 0x2; private final IAutoFillManagerService mService; @@ -71,7 +67,7 @@ public final class AutoFillManager { final Rect bounds = new Rect(); view.getBoundsOnScreen(bounds); - requestAutoFill(new AutoFillId(view.getAccessibilityViewId()), bounds, flags); + requestAutoFill(getAutoFillId(view), bounds, flags); } /** @@ -92,7 +88,30 @@ public final class AutoFillManager { requestAutoFill(new AutoFillId(parent.getAccessibilityViewId(), childId), bounds, flags); } + /** + * Notifies the framework that the value of a view changed. + * @param view view whose value was updated + * @param value new value. + */ + public void onValueChanged(View view, AutoFillValue value) { + // TODO(b/33197203): optimize it by not calling service when the view does not belong to + // the session. + final AutoFillId id = getAutoFillId(view); + if (DEBUG) Log.v(TAG, "onValueChanged(): id=" + id + ", value=" + value); + try { + mService.onValueChanged(id, value); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + private AutoFillId getAutoFillId(View view) { + return new AutoFillId(view.getAccessibilityViewId()); + } + private void requestAutoFill(AutoFillId id, Rect bounds, int flags) { + // TODO(b/33197203): optimize it by not calling service when the view does not belong to + // the session. if (DEBUG) { Log.v(TAG, "requestAutoFill(): id=" + id + ", bounds=" + bounds + ", flags=" + flags); } diff --git a/core/java/android/view/autofill/AutoFillValue.java b/core/java/android/view/autofill/AutoFillValue.java index c39f26b9b864..57b23ef4976e 100644 --- a/core/java/android/view/autofill/AutoFillValue.java +++ b/core/java/android/view/autofill/AutoFillValue.java @@ -126,6 +126,7 @@ public final class AutoFillValue implements Parcelable { * * <p>See {@link AutoFillType#isText()} for more info. */ + // TODO(b/33197203): use cache public static AutoFillValue forText(CharSequence value) { return new AutoFillValue(value, 0, false); } diff --git a/core/java/android/view/autofill/VirtualViewDelegate.java b/core/java/android/view/autofill/VirtualViewDelegate.java index 278bf4f34c36..e465c679e5f7 100644 --- a/core/java/android/view/autofill/VirtualViewDelegate.java +++ b/core/java/android/view/autofill/VirtualViewDelegate.java @@ -27,9 +27,10 @@ import android.view.ViewStructure; * * <p>The view hierarchy is typically created through the * {@link View#onProvideAutoFillVirtualStructure(android.view.ViewStructure, int)} call and client - * add virtual children by calling {@link ViewStructure#newChild(int, int)} or - * {@link ViewStructure#asyncNewChild(int, int)}, where the client provides the {@code virtualId} - * of the children - the same {@code virtualId} is used in the methods of this class. + * add virtual children by calling {@link ViewStructure#newChild(int, int, int)} or + * {@link ViewStructure#asyncNewChild(int, int, int)}, where the client provides the + * {@code virtualId} of the children - the same {@code virtualId} is used in the methods of this + * class. * * <p>Objects of this class are typically created by overriding * {@link View#getAutoFillVirtualViewDelegate(Callback)} and saving the passed callback, which must diff --git a/core/java/android/view/textclassifier/TextClassificationManager.java b/core/java/android/view/textclassifier/TextClassificationManager.java index 4673c50cddc9..a85dea9e96bc 100644 --- a/core/java/android/view/textclassifier/TextClassificationManager.java +++ b/core/java/android/view/textclassifier/TextClassificationManager.java @@ -55,7 +55,7 @@ public final class TextClassificationManager { /** * Returns the default text classifier. */ - public TextClassifier getDefaultTextClassifier() { + public synchronized TextClassifier getDefaultTextClassifier() { if (mDefault == null) { try { mFd = ParcelFileDescriptor.open( @@ -95,7 +95,7 @@ public final class TextClassificationManager { return Collections.emptyList(); } - private LangId getLanguageDetector() { + private synchronized LangId getLanguageDetector() { if (mLangId == null) { // TODO: Use a file descriptor as soon as we start to depend on a model file // for language detection. diff --git a/core/java/android/webkit/UserPackage.java b/core/java/android/webkit/UserPackage.java index 404bcf453aaf..f53b5d6a7cd7 100644 --- a/core/java/android/webkit/UserPackage.java +++ b/core/java/android/webkit/UserPackage.java @@ -20,6 +20,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.UserInfo; +import android.os.Build; import android.os.UserManager; import java.util.ArrayList; @@ -77,6 +78,15 @@ public class UserPackage { & ApplicationInfo.PRIVATE_FLAG_HIDDEN) == 0)); } + /** + * Returns whether the package represented by {@param packageInfo} targets a sdk version + * supported by the current framework version. + */ + public static boolean hasCorrectTargetSdkVersion(PackageInfo packageInfo) { + // TODO(gsennton) use Build.VERSION_CODES.O when that has been updated. + return packageInfo.applicationInfo.targetSdkVersion > Build.VERSION_CODES.N_MR1; + } + public UserInfo getUserInfo() { return mUserInfo; } diff --git a/core/java/android/webkit/WebViewFactory.java b/core/java/android/webkit/WebViewFactory.java index d7a49e46a236..0906d1a1e034 100644 --- a/core/java/android/webkit/WebViewFactory.java +++ b/core/java/android/webkit/WebViewFactory.java @@ -145,18 +145,10 @@ public final class WebViewFactory { /** * @hide */ - public static Class<WebViewFactoryProvider> getWebViewProviderClass( ClassLoader clazzLoader) - throws ClassNotFoundException{ - try { - return (Class<WebViewFactoryProvider>) Class.forName(CHROMIUM_WEBVIEW_FACTORY, - true, clazzLoader); - } catch (ClassNotFoundException e) { - // TODO: This loads the provider which is not built for O, should be removed - // before the release. - return (Class<WebViewFactoryProvider>) Class.forName( - "com.android.webview.chromium.WebViewChromiumFactoryProvider", - true, clazzLoader); - } + public static Class<WebViewFactoryProvider> getWebViewProviderClass(ClassLoader clazzLoader) + throws ClassNotFoundException { + return (Class<WebViewFactoryProvider>) Class.forName(CHROMIUM_WEBVIEW_FACTORY, + true, clazzLoader); } /** @@ -225,15 +217,10 @@ public final class WebViewFactory { } } - Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "providerClass.newInstance()"); + Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "WebViewFactoryProvider invocation"); try { - if (staticFactory != null) { - sProviderInstance = (WebViewFactoryProvider) - staticFactory.invoke(null, new WebViewDelegate()); - } else { - sProviderInstance = providerClass.getConstructor(WebViewDelegate.class) - .newInstance(new WebViewDelegate()); - } + sProviderInstance = (WebViewFactoryProvider) + staticFactory.invoke(null, new WebViewDelegate()); if (DEBUG) Log.v(LOGTAG, "Loaded provider: " + sProviderInstance); return sProviderInstance; } catch (Exception e) { @@ -384,8 +371,7 @@ public final class WebViewFactory { Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "Class.forName()"); try { return getWebViewProviderClass(clazzLoader); - } - finally { + } finally { Trace.traceEnd(Trace.TRACE_TAG_WEBVIEW); } } catch (ClassNotFoundException e) { diff --git a/core/java/android/widget/CompoundButton.java b/core/java/android/widget/CompoundButton.java index 718070d0d49a..500f381e6bb8 100644 --- a/core/java/android/widget/CompoundButton.java +++ b/core/java/android/widget/CompoundButton.java @@ -32,6 +32,7 @@ import android.view.Gravity; import android.view.SoundEffectConstants; import android.view.ViewDebug; import android.view.ViewHierarchyEncoder; +import android.view.ViewStructure; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; import android.view.autofill.AutoFillType; @@ -564,6 +565,13 @@ public abstract class CompoundButton extends Button implements Checkable { // TODO(b/33197203): add unit/CTS tests for auto-fill methods @Override + public void onProvideAutoFillStructure(ViewStructure structure, int flags) { + super.onProvideAutoFillStructure(structure, flags); + structure.setAutoFillValue(AutoFillValue.forToggle(isChecked())); + // TODO(b/33197203): add unit/CTS tests for auto-fill methods + } + + @Override public void autoFill(AutoFillValue value) { setChecked(value.getToggleValue()); } diff --git a/core/java/android/widget/RadioGroup.java b/core/java/android/widget/RadioGroup.java index 45fd9e6ef5a7..72dc1cc5c63c 100644 --- a/core/java/android/widget/RadioGroup.java +++ b/core/java/android/widget/RadioGroup.java @@ -24,6 +24,7 @@ import android.util.AttributeSet; import android.util.Log; import android.view.View; import android.view.ViewGroup; +import android.view.ViewStructure; import android.view.autofill.AutoFillType; import android.view.autofill.AutoFillValue; @@ -406,6 +407,12 @@ public class RadioGroup extends LinearLayout { // TODO(b/33197203): add unit/CTS tests for auto-fill methods @Override + public void onProvideAutoFillStructure(ViewStructure structure, int flags) { + super.onProvideAutoFillStructure(structure, flags); + structure.setAutoFillValue(AutoFillValue.forList(getCheckedRadioButtonId())); + } + + @Override public void autoFill(AutoFillValue value) { final int index = value.getListValue(); final View child = getChildAt(index); diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index a7a8fb45d365..4a8ec94962d1 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -711,6 +711,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener // Contains the sorted set of desired text sizes in pixels to pick from when auto-sizing text. private int[] mAutoSizeTextSizesInPx; + // Watcher used to notify changes to auto-fill manager. + private AutoFillChangeWatcher mAutoFillChangeWatcher; + /** * Kick-start the font cache for the zygote process (to pay the cost of * initializing freetype for our default font only once). @@ -9699,24 +9702,31 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener @Override public void onProvideStructure(ViewStructure structure) { super.onProvideStructure(structure); - onProvideAutoStructureForAssistOrAutoFill(structure, 0); + onProvideAutoStructureForAssistOrAutoFill(structure, false); } @Override public void onProvideAutoFillStructure(ViewStructure structure, int flags) { super.onProvideAutoFillStructure(structure, flags); - onProvideAutoStructureForAssistOrAutoFill(structure, flags); + onProvideAutoStructureForAssistOrAutoFill(structure, true); } - private void onProvideAutoStructureForAssistOrAutoFill(ViewStructure structure, int flags) { - // NOTE: currently flags are only used for AutoFill; if they're used for Assist as well, - // this method should take a boolean with the type of request. - final boolean forAutoFillSave = - (flags & AUTO_FILL_FLAG_TYPE_SAVE) != 0; - + private void onProvideAutoStructureForAssistOrAutoFill(ViewStructure structure, + boolean forAutoFill) { final boolean isPassword = hasPasswordTransformationMethod() || isPasswordInputType(getInputType()); - if (!isPassword || forAutoFillSave) { + if (forAutoFill) { + // TODO(b/33197203, b/33269702): temporary set it as not sanitized until + // AssistStructure automaticaly sets sanitization based on text coming from resources + structure.setSanitized(!isPassword); + if (mAutoFillChangeWatcher == null && isTextEditable()) { + mAutoFillChangeWatcher = new AutoFillChangeWatcher(); + addTextChangedListener(mAutoFillChangeWatcher); + // TODO(b/33197203): remove mAutoFillValueListener auto-fill session is finished + } + } + + if (!isPassword || forAutoFill) { if (mLayout == null) { assumeLayout(); } @@ -9724,7 +9734,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener final int lineCount = layout.getLineCount(); if (lineCount <= 1) { // Simple case: this is a single line. - structure.setText(getText(), getSelectionStart(), getSelectionEnd()); + final CharSequence text = getText(); + structure.setText(text, getSelectionStart(), getSelectionEnd()); + if (forAutoFill && isTextEditable()) { + structure.setAutoFillValue(AutoFillValue.forText(text)); + } } else { // Complex case: multi-line, could be scrolled or within a scroll container // so some lines are not visible. @@ -9781,6 +9795,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener text = text.subSequence(expandedTopChar, expandedBottomChar); } structure.setText(text, selStart - expandedTopChar, selEnd - expandedTopChar); + if (forAutoFill && isTextEditable()) { + structure.setAutoFillValue(AutoFillValue.forText(text)); + } final int[] lineOffsets = new int[bottomLine - topLine + 1]; final int[] lineBaselines = new int[bottomLine - topLine + 1]; final int baselineOffset = getBaselineOffset(); @@ -9828,7 +9845,17 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener final CharSequence text = value.getTextValue(); if (text != null && isTextEditable()) { - setText(text); + if (mAutoFillChangeWatcher == null || mAutoFillChangeWatcher.mOnAutoFill) { + setText(text, mBufferType, true, 0); + } else { + // Must disable listener first so it's not triggered. + mAutoFillChangeWatcher.mOnAutoFill = true; + try { + setText(text, mBufferType, true, 0); + } finally { + mAutoFillChangeWatcher.mOnAutoFill = false; + } + } } } @@ -11183,6 +11210,38 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } } + // TODO(b/33197203): implements SpanWatcher too? + private final class AutoFillChangeWatcher implements TextWatcher { + + private boolean mOnAutoFill; + private final AutoFillManager mAfm = mContext.getSystemService(AutoFillManager.class); + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + } + + @Override + public void afterTextChanged(Editable s) { + if (mOnAutoFill) { + if (DEBUG_AUTOFILL) { + Log.v(LOG_TAG, "AutoFillChangeWatcher.afterTextChanged() skipped during " + + "autoFill(): s=" + s); + } + return; + } + if (mAfm != null) { + if (DEBUG_AUTOFILL) { + Log.v(LOG_TAG, "AutoFillChangeWatcher.afterTextChanged(): s=" + s); + } + mAfm.onValueChanged(TextView.this, AutoFillValue.forText(s)); + } + } + } + private class ChangeWatcher implements TextWatcher, SpanWatcher { private CharSequence mBeforeText; diff --git a/core/java/com/android/internal/logging/legacy/EventLogCollector.java b/core/java/com/android/internal/logging/legacy/EventLogCollector.java index 46e70ea9bf7e..598f0d51c1b9 100644 --- a/core/java/com/android/internal/logging/legacy/EventLogCollector.java +++ b/core/java/com/android/internal/logging/legacy/EventLogCollector.java @@ -45,8 +45,6 @@ public class EventLogCollector { private EventLogCollector() { mTagParsers = new ArrayMap<>(); - addParser(new LockscreenGestureParser()); - addParser(new StatusBarStateParser()); addParser(new PowerScreenStateParser()); addParser(new SysuiMultiActionParser()); diff --git a/core/java/com/android/internal/logging/legacy/LegacyConversionLogger.java b/core/java/com/android/internal/logging/legacy/LegacyConversionLogger.java index 91e968b5b250..1209e4d8dc8c 100644 --- a/core/java/com/android/internal/logging/legacy/LegacyConversionLogger.java +++ b/core/java/com/android/internal/logging/legacy/LegacyConversionLogger.java @@ -24,14 +24,6 @@ import java.util.Queue; /** @hide */ public class LegacyConversionLogger implements TronLogger { - public static final String VIEW_KEY = "view"; - public static final String TYPE_KEY = "type"; - public static final String EVENT_KEY = "data"; - - public static final int TYPE_COUNTER = 1; - public static final int TYPE_HISTOGRAM = 2; - public static final int TYPE_EVENT = 3; - private final Queue<LogMaker> mQueue; private HashMap<String, Boolean> mConfig; diff --git a/core/java/com/android/internal/logging/legacy/LockscreenGestureParser.java b/core/java/com/android/internal/logging/legacy/LockscreenGestureParser.java deleted file mode 100644 index df08ee067087..000000000000 --- a/core/java/com/android/internal/logging/legacy/LockscreenGestureParser.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (C) 2017 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. - */ -package com.android.internal.logging.legacy; - -import android.util.Log; - -import android.metrics.LogMaker; -import com.android.internal.logging.nano.MetricsProto.MetricsEvent; - -/** - * Parse the Android lockscreen gesture logs. - * @hide - */ -public class LockscreenGestureParser extends TagParser { - private static final String TAG = "LockscreenGestureParser"; - private static final int EVENTLOG_TAG = 36021; - - // source of truth is com.android.systemui.EventLogConstants - public static final int[] GESTURE_TYPE_MAP = { - MetricsEvent.VIEW_UNKNOWN, // there is no type 0 - MetricsEvent.ACTION_LS_UNLOCK, // SYSUI_LOCKSCREEN_GESTURE_SWIPE_UP_UNLOCK = 1 - MetricsEvent.ACTION_LS_SHADE, // SYSUI_LOCKSCREEN_GESTURE_SWIPE_DOWN_FULL_SHADE = 2 - MetricsEvent.ACTION_LS_HINT, // SYSUI_LOCKSCREEN_GESTURE_TAP_UNLOCK_HINT = 3 - MetricsEvent.ACTION_LS_CAMERA, // SYSUI_LOCKSCREEN_GESTURE_SWIPE_CAMERA = 4 - MetricsEvent.ACTION_LS_DIALER, // SYSUI_LOCKSCREEN_GESTURE_SWIPE_DIALER = 5 - MetricsEvent.ACTION_LS_LOCK, // SYSUI_LOCKSCREEN_GESTURE_TAP_LOCK = 6 - MetricsEvent.ACTION_LS_NOTE, // SYSUI_LOCKSCREEN_GESTURE_TAP_NOTIFICATION_ACTIVATE = 7 - MetricsEvent.ACTION_LS_QS, // SYSUI_LOCKSCREEN_GESTURE_SWIPE_DOWN_QS = 8 - MetricsEvent.ACTION_SHADE_QS_PULL, // SYSUI_SHADE_GESTURE_SWIPE_DOWN_QS = 9 - MetricsEvent.ACTION_SHADE_QS_TAP // SYSUI_TAP_TO_OPEN_QS = 10 - }; - - @Override - public int getTag() { - return EVENTLOG_TAG; - } - - @Override - public void parseEvent(TronLogger logger, long eventTimeMs, Object[] operands) { - final boolean debug = Util.debug(); - if (operands.length >= 1) { - try { - int type = ((Integer) operands[0]).intValue(); - // ignore gesture length in operands[1] - // ignore gesture velocity in operands[2] - - int category = MetricsEvent.VIEW_UNKNOWN; - if (type < GESTURE_TYPE_MAP.length) { - category = GESTURE_TYPE_MAP[type]; - } - if (category != MetricsEvent.VIEW_UNKNOWN) { - LogMaker proto = logger.obtain(); - proto.setCategory(category); - proto.setType(MetricsEvent.TYPE_ACTION); - proto.setTimestamp(eventTimeMs); - logger.addEvent(proto); - } - } catch (ClassCastException e) { - if (debug) { - Log.e(TAG, "unexpected operand type: ", e); - } - } - } else if (debug) { - Log.w(TAG, "wrong number of operands: " + operands.length); - } - } -} diff --git a/core/java/com/android/internal/logging/legacy/StatusBarStateParser.java b/core/java/com/android/internal/logging/legacy/StatusBarStateParser.java deleted file mode 100644 index 226253f3322f..000000000000 --- a/core/java/com/android/internal/logging/legacy/StatusBarStateParser.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2017 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. - */ -package com.android.internal.logging.legacy; - -import android.util.Log; - -import android.metrics.LogMaker; -import com.android.internal.logging.nano.MetricsProto.MetricsEvent; - -/** - * Parse the Android lockscreen gesture logs. - * @hide - */ -public class StatusBarStateParser extends TagParser { - private static final String TAG = "StatusBarStateParser"; - private static final int EVENTLOG_TAG = 36004; - - // source of truth is com.android.systemui.statusbar.StatusBarState - public static final int SHADE = 0; - public static final int KEYGUARD = 1; - public static final int SHADE_LOCKED = 2; - - @Override - public int getTag() { - return EVENTLOG_TAG; - } - - @Override - public void parseEvent(TronLogger logger, long eventTimeMs, Object[] operands) { - final boolean debug = Util.debug(); - if (operands.length >= 6) { - try { - // [state, isShowing, isOccluded, isBouncerShowing, isSecure, isCurrentlyInsecure] - int state = ((Integer) operands[0]).intValue(); - boolean isBouncerShowing = (((Integer) operands[3]).intValue()) == 1; - int isSecure = ((Integer) operands[4]).intValue(); - - int view = MetricsEvent.LOCKSCREEN; - int type = MetricsEvent.TYPE_OPEN; - if (state == SHADE) { - type = MetricsEvent.TYPE_CLOSE; - } else if (isBouncerShowing) { - view = MetricsEvent.BOUNCER; - } - - LogMaker proto = logger.obtain(); - proto.setCategory(view); - proto.setType(type); - proto.setTimestamp(eventTimeMs); - proto.setSubtype(isSecure); - logger.addEvent(proto); - } catch (ClassCastException e) { - if (debug) { - Log.e(TAG, "unexpected operand type: ", e); - } - } - } else if (debug) { - Log.w(TAG, "wrong number of operands: " + operands.length); - } - } -} diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index c34c3794da54..f3f34a88f17b 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -9711,7 +9711,7 @@ public class BatteryStatsImpl extends BatteryStats { } doWrite = true; resetAllStatsLocked(); - if (chargeUAh > 0) { + if (chargeUAh > 0 && level > 0) { // Only use the reported coulomb charge value if it is supported and reported. mEstimatedBatteryCapacity = (int) ((chargeUAh / 1000) / (level / 100.0)); } diff --git a/core/res/res/values-af-watch/styles_material.xml b/core/res/res/values-af-watch/styles_material.xml deleted file mode 100644 index 80a5fa631ffe..000000000000 --- a/core/res/res/values-af-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"kandidate"</font></string> -</resources> diff --git a/core/res/res/values-am-watch/styles_material.xml b/core/res/res/values-am-watch/styles_material.xml deleted file mode 100644 index 5ec383a896da..000000000000 --- a/core/res/res/values-am-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"እጩዎች"</font></string> -</resources> diff --git a/core/res/res/values-ar-watch/styles_material.xml b/core/res/res/values-ar-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-ar-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-az-watch/styles_material.xml b/core/res/res/values-az-watch/styles_material.xml deleted file mode 100644 index b6212666e113..000000000000 --- a/core/res/res/values-az-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"namizədlər"</font></string> -</resources> diff --git a/core/res/res/values-b+sr+Latn-watch/styles_material.xml b/core/res/res/values-b+sr+Latn-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-b+sr+Latn-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-be-watch/styles_material.xml b/core/res/res/values-be-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-be-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-bg-watch/styles_material.xml b/core/res/res/values-bg-watch/styles_material.xml deleted file mode 100644 index 89c3366d183f..000000000000 --- a/core/res/res/values-bg-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"кандидати"</font></string> -</resources> diff --git a/core/res/res/values-bn-watch/styles_material.xml b/core/res/res/values-bn-watch/styles_material.xml deleted file mode 100644 index cd5990268bf9..000000000000 --- a/core/res/res/values-bn-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"প্রার্থীরা"</font></string> -</resources> diff --git a/core/res/res/values-bs-watch/styles_material.xml b/core/res/res/values-bs-watch/styles_material.xml deleted file mode 100644 index 88e5751c04ce..000000000000 --- a/core/res/res/values-bs-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"kandidati"</font></string> -</resources> diff --git a/core/res/res/values-ca-watch/styles_material.xml b/core/res/res/values-ca-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-ca-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-cs-watch/styles_material.xml b/core/res/res/values-cs-watch/styles_material.xml deleted file mode 100644 index 5b604e837551..000000000000 --- a/core/res/res/values-cs-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"kandidáti"</font></string> -</resources> diff --git a/core/res/res/values-da-watch/styles_material.xml b/core/res/res/values-da-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-da-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-de-watch/styles_material.xml b/core/res/res/values-de-watch/styles_material.xml deleted file mode 100644 index 891a647b3c33..000000000000 --- a/core/res/res/values-de-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"Kandidaten"</font></string> -</resources> diff --git a/core/res/res/values-el-watch/styles_material.xml b/core/res/res/values-el-watch/styles_material.xml deleted file mode 100644 index a02b85e9b0a4..000000000000 --- a/core/res/res/values-el-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"υποψήφιοι"</font></string> -</resources> diff --git a/core/res/res/values-en-rAU-watch/styles_material.xml b/core/res/res/values-en-rAU-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-en-rAU-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-en-rGB-watch/styles_material.xml b/core/res/res/values-en-rGB-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-en-rGB-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-en-rIN-watch/styles_material.xml b/core/res/res/values-en-rIN-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-en-rIN-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-es-rUS-watch/styles_material.xml b/core/res/res/values-es-rUS-watch/styles_material.xml deleted file mode 100644 index 898d2fdcb7e0..000000000000 --- a/core/res/res/values-es-rUS-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidatos"</font></string> -</resources> diff --git a/core/res/res/values-es-watch/styles_material.xml b/core/res/res/values-es-watch/styles_material.xml deleted file mode 100644 index 898d2fdcb7e0..000000000000 --- a/core/res/res/values-es-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidatos"</font></string> -</resources> diff --git a/core/res/res/values-et-watch/styles_material.xml b/core/res/res/values-et-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-et-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-eu-watch/styles_material.xml b/core/res/res/values-eu-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-eu-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-fa-watch/styles_material.xml b/core/res/res/values-fa-watch/styles_material.xml deleted file mode 100644 index 23b9a7eed18c..000000000000 --- a/core/res/res/values-fa-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"کاندیدها"</font></string> -</resources> diff --git a/core/res/res/values-fi-watch/styles_material.xml b/core/res/res/values-fi-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-fi-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-fr-rCA-watch/styles_material.xml b/core/res/res/values-fr-rCA-watch/styles_material.xml deleted file mode 100644 index f692d5c781e8..000000000000 --- a/core/res/res/values-fr-rCA-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidats"</font></string> -</resources> diff --git a/core/res/res/values-fr-watch/styles_material.xml b/core/res/res/values-fr-watch/styles_material.xml deleted file mode 100644 index f692d5c781e8..000000000000 --- a/core/res/res/values-fr-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidats"</font></string> -</resources> diff --git a/core/res/res/values-gl-watch/styles_material.xml b/core/res/res/values-gl-watch/styles_material.xml deleted file mode 100644 index 898d2fdcb7e0..000000000000 --- a/core/res/res/values-gl-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidatos"</font></string> -</resources> diff --git a/core/res/res/values-gu-watch/styles_material.xml b/core/res/res/values-gu-watch/styles_material.xml deleted file mode 100644 index 21c687108c08..000000000000 --- a/core/res/res/values-gu-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"ઉમેદવારો"</font></string> -</resources> diff --git a/core/res/res/values-hi-watch/styles_material.xml b/core/res/res/values-hi-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-hi-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-hr-watch/styles_material.xml b/core/res/res/values-hr-watch/styles_material.xml deleted file mode 100644 index 88e5751c04ce..000000000000 --- a/core/res/res/values-hr-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"kandidati"</font></string> -</resources> diff --git a/core/res/res/values-hu-watch/styles_material.xml b/core/res/res/values-hu-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-hu-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-hy-watch/styles_material.xml b/core/res/res/values-hy-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-hy-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-in-watch/styles_material.xml b/core/res/res/values-in-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-in-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-is-watch/styles_material.xml b/core/res/res/values-is-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-is-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-it-watch/styles_material.xml b/core/res/res/values-it-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-it-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-iw-watch/styles_material.xml b/core/res/res/values-iw-watch/styles_material.xml deleted file mode 100644 index f44b272d8315..000000000000 --- a/core/res/res/values-iw-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"מועמדים"</font></string> -</resources> diff --git a/core/res/res/values-ja-watch/styles_material.xml b/core/res/res/values-ja-watch/styles_material.xml deleted file mode 100644 index 7712090be233..000000000000 --- a/core/res/res/values-ja-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"候補"</font></string> -</resources> diff --git a/core/res/res/values-ka-watch/styles_material.xml b/core/res/res/values-ka-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-ka-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-kk-watch/styles_material.xml b/core/res/res/values-kk-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-kk-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-km-watch/styles_material.xml b/core/res/res/values-km-watch/styles_material.xml deleted file mode 100644 index e54cb0081fa5..000000000000 --- a/core/res/res/values-km-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"បេក្ខជន"</font></string> -</resources> diff --git a/core/res/res/values-kn-watch/styles_material.xml b/core/res/res/values-kn-watch/styles_material.xml deleted file mode 100644 index 1ec23a4e3861..000000000000 --- a/core/res/res/values-kn-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"ಅಭ್ಯರ್ಥಿಗಳು"</font></string> -</resources> diff --git a/core/res/res/values-ko-watch/styles_material.xml b/core/res/res/values-ko-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-ko-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-ky-watch/styles_material.xml b/core/res/res/values-ky-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-ky-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-lo-watch/styles_material.xml b/core/res/res/values-lo-watch/styles_material.xml deleted file mode 100644 index 1f845b9df48a..000000000000 --- a/core/res/res/values-lo-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"ແຄນດິເດດ"</font></string> -</resources> diff --git a/core/res/res/values-lt-watch/styles_material.xml b/core/res/res/values-lt-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-lt-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-lv-watch/styles_material.xml b/core/res/res/values-lv-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-lv-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-mk-watch/styles_material.xml b/core/res/res/values-mk-watch/styles_material.xml deleted file mode 100644 index 89c3366d183f..000000000000 --- a/core/res/res/values-mk-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"кандидати"</font></string> -</resources> diff --git a/core/res/res/values-ml-watch/styles_material.xml b/core/res/res/values-ml-watch/styles_material.xml deleted file mode 100644 index 9d38c0d772f6..000000000000 --- a/core/res/res/values-ml-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"കാൻഡിഡേറ്റുകൾ"</font></string> -</resources> diff --git a/core/res/res/values-mn-watch/styles_material.xml b/core/res/res/values-mn-watch/styles_material.xml deleted file mode 100644 index f65ea48e2376..000000000000 --- a/core/res/res/values-mn-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"нэр дэвшигч"</font></string> -</resources> diff --git a/core/res/res/values-mr-watch/styles_material.xml b/core/res/res/values-mr-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-mr-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-ms-watch/styles_material.xml b/core/res/res/values-ms-watch/styles_material.xml deleted file mode 100644 index 3f5e68742a5e..000000000000 --- a/core/res/res/values-ms-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"calon"</font></string> -</resources> diff --git a/core/res/res/values-my-watch/styles_material.xml b/core/res/res/values-my-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-my-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-nb-watch/styles_material.xml b/core/res/res/values-nb-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-nb-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-ne-watch/styles_material.xml b/core/res/res/values-ne-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-ne-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-nl-watch/styles_material.xml b/core/res/res/values-nl-watch/styles_material.xml deleted file mode 100644 index b821347b7634..000000000000 --- a/core/res/res/values-nl-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"kandidaten"</font></string> -</resources> diff --git a/core/res/res/values-pa-watch/styles_material.xml b/core/res/res/values-pa-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-pa-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-pl-watch/styles_material.xml b/core/res/res/values-pl-watch/styles_material.xml deleted file mode 100644 index 384d91c50586..000000000000 --- a/core/res/res/values-pl-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"elementy"</font></string> -</resources> diff --git a/core/res/res/values-pt-rBR-watch/styles_material.xml b/core/res/res/values-pt-rBR-watch/styles_material.xml deleted file mode 100644 index 898d2fdcb7e0..000000000000 --- a/core/res/res/values-pt-rBR-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidatos"</font></string> -</resources> diff --git a/core/res/res/values-pt-rPT-watch/styles_material.xml b/core/res/res/values-pt-rPT-watch/styles_material.xml deleted file mode 100644 index 898d2fdcb7e0..000000000000 --- a/core/res/res/values-pt-rPT-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidatos"</font></string> -</resources> diff --git a/core/res/res/values-pt-watch/styles_material.xml b/core/res/res/values-pt-watch/styles_material.xml deleted file mode 100644 index 898d2fdcb7e0..000000000000 --- a/core/res/res/values-pt-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidatos"</font></string> -</resources> diff --git a/core/res/res/values-ro-watch/styles_material.xml b/core/res/res/values-ro-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-ro-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-ru-watch/styles_material.xml b/core/res/res/values-ru-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-ru-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-si-watch/styles_material.xml b/core/res/res/values-si-watch/styles_material.xml deleted file mode 100644 index 37b4afe842f6..000000000000 --- a/core/res/res/values-si-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"අපේක්ෂකයන්"</font></string> -</resources> diff --git a/core/res/res/values-sk-watch/styles_material.xml b/core/res/res/values-sk-watch/styles_material.xml deleted file mode 100644 index 5b604e837551..000000000000 --- a/core/res/res/values-sk-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"kandidáti"</font></string> -</resources> diff --git a/core/res/res/values-sl-watch/styles_material.xml b/core/res/res/values-sl-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-sl-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-sq-watch/styles_material.xml b/core/res/res/values-sq-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-sq-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-sr-watch/styles_material.xml b/core/res/res/values-sr-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-sr-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-sv-watch/styles_material.xml b/core/res/res/values-sv-watch/styles_material.xml deleted file mode 100644 index f2ab18ad6908..000000000000 --- a/core/res/res/values-sv-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"kandidater"</font></string> -</resources> diff --git a/core/res/res/values-sw-watch/styles_material.xml b/core/res/res/values-sw-watch/styles_material.xml deleted file mode 100644 index 01392b243c57..000000000000 --- a/core/res/res/values-sw-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"yanayopendekezwa"</font></string> -</resources> diff --git a/core/res/res/values-ta-watch/styles_material.xml b/core/res/res/values-ta-watch/styles_material.xml deleted file mode 100644 index d4605e6eaea9..000000000000 --- a/core/res/res/values-ta-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"கேன்டிடேட்ஸ்"</font></string> -</resources> diff --git a/core/res/res/values-te-watch/styles_material.xml b/core/res/res/values-te-watch/styles_material.xml deleted file mode 100644 index 877cd58c199d..000000000000 --- a/core/res/res/values-te-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"క్యాండిడేట్లు"</font></string> -</resources> diff --git a/core/res/res/values-th-watch/styles_material.xml b/core/res/res/values-th-watch/styles_material.xml deleted file mode 100644 index 3227ced76338..000000000000 --- a/core/res/res/values-th-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"ผู้สมัคร"</font></string> -</resources> diff --git a/core/res/res/values-tl-watch/styles_material.xml b/core/res/res/values-tl-watch/styles_material.xml deleted file mode 100644 index 70e7a7aaa0f5..000000000000 --- a/core/res/res/values-tl-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"mga kandidato"</font></string> -</resources> diff --git a/core/res/res/values-tr-watch/styles_material.xml b/core/res/res/values-tr-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-tr-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-uk-watch/styles_material.xml b/core/res/res/values-uk-watch/styles_material.xml deleted file mode 100644 index 698d5b010878..000000000000 --- a/core/res/res/values-uk-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"варіанти"</font></string> -</resources> diff --git a/core/res/res/values-ur-watch/styles_material.xml b/core/res/res/values-ur-watch/styles_material.xml deleted file mode 100644 index e569c7c78d10..000000000000 --- a/core/res/res/values-ur-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"امیدواران"</font></string> -</resources> diff --git a/core/res/res/values-uz-watch/styles_material.xml b/core/res/res/values-uz-watch/styles_material.xml deleted file mode 100644 index 3cb38d6a45e0..000000000000 --- a/core/res/res/values-uz-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"nomzodlar"</font></string> -</resources> diff --git a/core/res/res/values-vi-watch/styles_material.xml b/core/res/res/values-vi-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-vi-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-zh-rCN-watch/styles_material.xml b/core/res/res/values-zh-rCN-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-zh-rCN-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-zh-rHK-watch/styles_material.xml b/core/res/res/values-zh-rHK-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-zh-rHK-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-zh-rTW-watch/styles_material.xml b/core/res/res/values-zh-rTW-watch/styles_material.xml deleted file mode 100644 index 36a459dc16a0..000000000000 --- a/core/res/res/values-zh-rTW-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"candidates"</font></string> -</resources> diff --git a/core/res/res/values-zu-watch/styles_material.xml b/core/res/res/values-zu-watch/styles_material.xml deleted file mode 100644 index 8b69fef9cb46..000000000000 --- a/core/res/res/values-zu-watch/styles_material.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 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. - --> - -<!-- -=============================================================== - PLEASE READ -=============================================================== - -The Material themes must not be modified in order to pass CTS. -Many related themes and styles depend on other values defined in this file. -If you would like to provide custom themes and styles for your device, -please see styles_device_defaults.xml. - -=============================================================== - PLEASE READ -=============================================================== - --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="candidates_style" msgid="8052530148128607468"><font color="#80cbc4">"amakhandidethi"</font></string> -</resources> diff --git a/core/tests/coretests/src/com/android/internal/logging/legacy/LockscreenGestureParserTest.java b/core/tests/coretests/src/com/android/internal/logging/legacy/LockscreenGestureParserTest.java deleted file mode 100644 index c023b572493f..000000000000 --- a/core/tests/coretests/src/com/android/internal/logging/legacy/LockscreenGestureParserTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2017 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. - */ -package com.android.internal.logging.legacy; - -import static org.mockito.Matchers.anyObject; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; - -import android.metrics.LogMaker; -import com.android.internal.logging.nano.MetricsProto.MetricsEvent; - -public class LockscreenGestureParserTest extends ParserTest { - - public LockscreenGestureParserTest() { - mParser = new LockscreenGestureParser(); - } - - public void testSwipeUpUnlock() throws Throwable { - validate(MetricsEvent.ACTION_LS_UNLOCK, 1, 359, 6382); - } - - public void testSwipeToShade() throws Throwable { - validate(MetricsEvent.ACTION_LS_SHADE, 2, 324, 0); - } - - public void testTapLockHint() throws Throwable { - validate(MetricsEvent.ACTION_LS_HINT, 3, 0, 0); - } - - public void testCamera() throws Throwable { - validate(MetricsEvent.ACTION_LS_CAMERA, 4, 223, 1756); - } - - public void testDialer() throws Throwable { - validate(MetricsEvent.ACTION_LS_DIALER, 5, 163, 861); - } - - public void testTapToLock() throws Throwable { - validate(MetricsEvent.ACTION_LS_LOCK, 6, 0, 0); - } - - public void testTapOnNotification() throws Throwable { - validate(MetricsEvent.ACTION_LS_NOTE, 7, 0, 0); - } - - public void testLockscreenQuickSettings() throws Throwable { - validate(MetricsEvent.ACTION_LS_QS, 8, 284, 3824); - } - - public void testShadePullQuickSettings() throws Throwable { - validate(MetricsEvent.ACTION_SHADE_QS_PULL, 9, 175, 3444); - } - - public void testShadeTapQuickSettings() throws Throwable { - validate(MetricsEvent.ACTION_SHADE_QS_TAP, 10, 0, 0); - } - - private void validate(int view, int type, int len, int vel) { - int t = 1000; - Object[] objects = new Object[3]; - objects[0] = type; - objects[1] = len; - objects[2] = vel; - - mParser.parseEvent(mLogger, t, objects); - - verify(mLogger, times(1)).addEvent(mProtoCaptor.capture()); - - LogMaker proto = mProtoCaptor.getValue(); - assertEquals(t, proto.getTimestamp()); - assertEquals(view, proto.getCategory()); - assertEquals(MetricsEvent.TYPE_ACTION, proto.getType()); - } - - public void testIgnoreUnexpectedData() throws Throwable { - int t = 1000; - Object[] objects = new Object[4]; - objects[0] = 1; - objects[1] = 0; - objects[2] = 0; - objects[3] = "foo"; - - mParser.parseEvent(mLogger, t, objects); - - verify(mLogger, times(1)).addEvent((LogMaker) anyObject()); - } -} diff --git a/core/tests/coretests/src/com/android/internal/logging/legacy/StatusBarStateParserTest.java b/core/tests/coretests/src/com/android/internal/logging/legacy/StatusBarStateParserTest.java deleted file mode 100644 index def9628e7fbd..000000000000 --- a/core/tests/coretests/src/com/android/internal/logging/legacy/StatusBarStateParserTest.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (C) 2017 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. - */ -package com.android.internal.logging.legacy; - -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; - - -import android.metrics.LogMaker; -import com.android.internal.logging.nano.MetricsProto.MetricsEvent; - -public class StatusBarStateParserTest extends ParserTest { - - public StatusBarStateParserTest() { - mParser = new StatusBarStateParser(); - } - - public void testLockScreen() throws Throwable { - validate(MetricsEvent.LOCKSCREEN, MetricsEvent.TYPE_OPEN, 1, "1,1,0,0,1,0"); - } - - public void testBounce() throws Throwable { - validate(MetricsEvent.BOUNCER, MetricsEvent.TYPE_OPEN, 1, "1,1,0,1,1,0"); - } - - public void testUnlock() throws Throwable { - validate(MetricsEvent.LOCKSCREEN, MetricsEvent.TYPE_CLOSE, 1, "0,0,0,0,1,0"); - } - - public void testSecure() throws Throwable { - validate(MetricsEvent.BOUNCER, MetricsEvent.TYPE_OPEN, 1, "2,1,0,1,1,0"); - } - - public void testInsecure() throws Throwable { - validate(MetricsEvent.LOCKSCREEN, MetricsEvent.TYPE_OPEN, 0, "1,1,0,0,0,0"); - } - - public void testIgnoreUnexpectedData() throws Throwable { - validate(MetricsEvent.LOCKSCREEN, MetricsEvent.TYPE_OPEN, 0, "1,1,0,0,0,0,5"); - } - - private void validate(int view, int type, int subType, String log) { - String[] parts = log.split(","); - int t = 1000; - Object[] objects = new Object[parts.length]; - for (int i = 0; i < parts.length; i++) { - objects[i] = Integer.valueOf(parts[i]); - } - - mParser.parseEvent(mLogger, t, objects); - - verify(mLogger, times(1)).addEvent(mProtoCaptor.capture()); - - LogMaker proto = mProtoCaptor.getValue(); - assertEquals(t, proto.getTimestamp()); - assertEquals(view, proto.getCategory()); - assertEquals(type, proto.getType()); - assertEquals(subType, proto.getSubtype()); - } -} diff --git a/graphics/java/android/graphics/drawable/MaskableIconDrawable.java b/graphics/java/android/graphics/drawable/MaskableIconDrawable.java index 3467b1a789e7..043f0926bdb7 100644 --- a/graphics/java/android/graphics/drawable/MaskableIconDrawable.java +++ b/graphics/java/android/graphics/drawable/MaskableIconDrawable.java @@ -726,6 +726,9 @@ public class MaskableIconDrawable extends Drawable implements Drawable.Callback int width = -1; for (int i = 0; i < mLayerState.N_CHILDREN; i++) { final ChildDrawable r = mLayerState.mChildren[i]; + if (r.mDrawable == null) { + continue; + } final int w = r.mDrawable.getIntrinsicWidth(); if (w > width) { width = w; @@ -743,6 +746,9 @@ public class MaskableIconDrawable extends Drawable implements Drawable.Callback int height = -1; for (int i = 0; i < mLayerState.N_CHILDREN; i++) { final ChildDrawable r = mLayerState.mChildren[i]; + if (r.mDrawable == null) { + continue; + } final int h = r.mDrawable.getIntrinsicHeight(); if (h > height) { height = h; diff --git a/keystore/java/android/security/GateKeeper.java b/keystore/java/android/security/GateKeeper.java index 7a2cbd06eb92..03df5de9b484 100644 --- a/keystore/java/android/security/GateKeeper.java +++ b/keystore/java/android/security/GateKeeper.java @@ -29,6 +29,8 @@ import android.service.gatekeeper.IGateKeeperService; */ public abstract class GateKeeper { + public static final long INVALID_SECURE_USER_ID = 0; + private GateKeeper() {} public static IGateKeeperService getService() { diff --git a/keystore/java/android/security/keystore/AndroidKeyStoreKeyGeneratorSpi.java b/keystore/java/android/security/keystore/AndroidKeyStoreKeyGeneratorSpi.java index b234d0f81a89..9701b0ea9308 100644 --- a/keystore/java/android/security/keystore/AndroidKeyStoreKeyGeneratorSpi.java +++ b/keystore/java/android/security/keystore/AndroidKeyStoreKeyGeneratorSpi.java @@ -17,6 +17,7 @@ package android.security.keystore; import android.security.Credentials; +import android.security.GateKeeper; import android.security.KeyStore; import android.security.keymaster.KeyCharacteristics; import android.security.keymaster.KeymasterArguments; @@ -235,7 +236,8 @@ public abstract class AndroidKeyStoreKeyGeneratorSpi extends KeyGeneratorSpi { spec.isUserAuthenticationRequired(), spec.getUserAuthenticationValidityDurationSeconds(), spec.isUserAuthenticationValidWhileOnBody(), - spec.isInvalidatedByBiometricEnrollment()); + spec.isInvalidatedByBiometricEnrollment(), + GateKeeper.INVALID_SECURE_USER_ID /* boundToSpecificSecureUserId */); } catch (IllegalStateException | IllegalArgumentException e) { throw new InvalidAlgorithmParameterException(e); } @@ -275,7 +277,8 @@ public abstract class AndroidKeyStoreKeyGeneratorSpi extends KeyGeneratorSpi { spec.isUserAuthenticationRequired(), spec.getUserAuthenticationValidityDurationSeconds(), spec.isUserAuthenticationValidWhileOnBody(), - spec.isInvalidatedByBiometricEnrollment()); + spec.isInvalidatedByBiometricEnrollment(), + GateKeeper.INVALID_SECURE_USER_ID /* boundToSpecificSecureUserId */); KeymasterUtils.addMinMacLengthAuthorizationIfNecessary( args, mKeymasterAlgorithm, diff --git a/keystore/java/android/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi.java b/keystore/java/android/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi.java index 1818f52c4fda..dba3949ba98f 100644 --- a/keystore/java/android/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi.java +++ b/keystore/java/android/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi.java @@ -18,6 +18,7 @@ package android.security.keystore; import android.annotation.Nullable; import android.security.Credentials; +import android.security.GateKeeper; import android.security.KeyPairGeneratorSpec; import android.security.KeyStore; import android.security.keymaster.KeyCharacteristics; @@ -346,7 +347,8 @@ public abstract class AndroidKeyStoreKeyPairGeneratorSpi extends KeyPairGenerato mSpec.isUserAuthenticationRequired(), mSpec.getUserAuthenticationValidityDurationSeconds(), mSpec.isUserAuthenticationValidWhileOnBody(), - mSpec.isInvalidatedByBiometricEnrollment()); + mSpec.isInvalidatedByBiometricEnrollment(), + GateKeeper.INVALID_SECURE_USER_ID /* boundToSpecificSecureUserId */); } catch (IllegalArgumentException | IllegalStateException e) { throw new InvalidAlgorithmParameterException(e); } @@ -533,7 +535,8 @@ public abstract class AndroidKeyStoreKeyPairGeneratorSpi extends KeyPairGenerato mSpec.isUserAuthenticationRequired(), mSpec.getUserAuthenticationValidityDurationSeconds(), mSpec.isUserAuthenticationValidWhileOnBody(), - mSpec.isInvalidatedByBiometricEnrollment()); + mSpec.isInvalidatedByBiometricEnrollment(), + GateKeeper.INVALID_SECURE_USER_ID /* boundToSpecificSecureUserId */); args.addDateIfNotNull(KeymasterDefs.KM_TAG_ACTIVE_DATETIME, mSpec.getKeyValidityStart()); args.addDateIfNotNull(KeymasterDefs.KM_TAG_ORIGINATION_EXPIRE_DATETIME, mSpec.getKeyValidityForOriginationEnd()); diff --git a/keystore/java/android/security/keystore/AndroidKeyStoreSpi.java b/keystore/java/android/security/keystore/AndroidKeyStoreSpi.java index fcbb553c7214..64b10ab6eacb 100644 --- a/keystore/java/android/security/keystore/AndroidKeyStoreSpi.java +++ b/keystore/java/android/security/keystore/AndroidKeyStoreSpi.java @@ -500,7 +500,8 @@ public class AndroidKeyStoreSpi extends KeyStoreSpi { spec.isUserAuthenticationRequired(), spec.getUserAuthenticationValidityDurationSeconds(), spec.isUserAuthenticationValidWhileOnBody(), - spec.isInvalidatedByBiometricEnrollment()); + spec.isInvalidatedByBiometricEnrollment(), + spec.getBoundToSpecificSecureUserId()); importArgs.addDateIfNotNull(KeymasterDefs.KM_TAG_ACTIVE_DATETIME, spec.getKeyValidityStart()); importArgs.addDateIfNotNull(KeymasterDefs.KM_TAG_ORIGINATION_EXPIRE_DATETIME, @@ -696,7 +697,8 @@ public class AndroidKeyStoreSpi extends KeyStoreSpi { params.isUserAuthenticationRequired(), params.getUserAuthenticationValidityDurationSeconds(), params.isUserAuthenticationValidWhileOnBody(), - params.isInvalidatedByBiometricEnrollment()); + params.isInvalidatedByBiometricEnrollment(), + params.getBoundToSpecificSecureUserId()); KeymasterUtils.addMinMacLengthAuthorizationIfNecessary( args, keymasterAlgorithm, diff --git a/keystore/java/android/security/keystore/KeyProtection.java b/keystore/java/android/security/keystore/KeyProtection.java index e70d33a3385c..2592a97468d3 100644 --- a/keystore/java/android/security/keystore/KeyProtection.java +++ b/keystore/java/android/security/keystore/KeyProtection.java @@ -21,6 +21,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.app.KeyguardManager; import android.hardware.fingerprint.FingerprintManager; +import android.security.GateKeeper; import java.security.Key; import java.security.Signature; @@ -225,6 +226,7 @@ public final class KeyProtection implements ProtectionParameter { private final int mUserAuthenticationValidityDurationSeconds; private final boolean mUserAuthenticationValidWhileOnBody; private final boolean mInvalidatedByBiometricEnrollment; + private final long mBoundToSecureUserId; private KeyProtection( Date keyValidityStart, @@ -239,7 +241,8 @@ public final class KeyProtection implements ProtectionParameter { boolean userAuthenticationRequired, int userAuthenticationValidityDurationSeconds, boolean userAuthenticationValidWhileOnBody, - boolean invalidatedByBiometricEnrollment) { + boolean invalidatedByBiometricEnrollment, + long boundToSecureUserId) { mKeyValidityStart = Utils.cloneIfNotNull(keyValidityStart); mKeyValidityForOriginationEnd = Utils.cloneIfNotNull(keyValidityForOriginationEnd); mKeyValidityForConsumptionEnd = Utils.cloneIfNotNull(keyValidityForConsumptionEnd); @@ -255,6 +258,7 @@ public final class KeyProtection implements ProtectionParameter { mUserAuthenticationValidityDurationSeconds = userAuthenticationValidityDurationSeconds; mUserAuthenticationValidWhileOnBody = userAuthenticationValidWhileOnBody; mInvalidatedByBiometricEnrollment = invalidatedByBiometricEnrollment; + mBoundToSecureUserId = boundToSecureUserId; } /** @@ -436,6 +440,24 @@ public final class KeyProtection implements ProtectionParameter { } /** + * Return the secure user id that this key should be bound to. + * + * Normally an authentication-bound key is tied to the secure user id of the current user + * (either the root SID from GateKeeper for auth-bound keys with a timeout, or the authenticator + * id of the current fingerprint set for keys requiring explicit fingerprint authorization). + * If this parameter is set (this method returning non-zero value), the key should be tied to + * the specified secure user id, overriding the logic above. + * + * This is only applicable when {@link #isUserAuthenticationRequired} is {@code true} + * + * @see KeymasterUtils#addUserAuthArgs + * @hide + */ + public long getBoundToSpecificSecureUserId() { + return mBoundToSecureUserId; + } + + /** * Builder of {@link KeyProtection} instances. */ public final static class Builder { @@ -454,6 +476,7 @@ public final class KeyProtection implements ProtectionParameter { private boolean mUserAuthenticationValidWhileOnBody; private boolean mInvalidatedByBiometricEnrollment = true; + private long mBoundToSecureUserId = GateKeeper.INVALID_SECURE_USER_ID; /** * Creates a new instance of the {@code Builder}. * @@ -774,6 +797,26 @@ public final class KeyProtection implements ProtectionParameter { } /** + * Set the secure user id that this key should be bound to. + * + * Normally an authentication-bound key is tied to the secure user id of the current user + * (either the root SID from GateKeeper for auth-bound keys with a timeout, or the + * authenticator id of the current fingerprint set for keys requiring explicit fingerprint + * authorization). If this parameter is set (this method returning non-zero value), the key + * should be tied to the specified secure user id, overriding the logic above. + * + * This is only applicable when {@link #setUserAuthenticationRequired} is set to + * {@code true} + * + * @see KeyProtection#getBoundToSpecificSecureUserId() + * @hide + */ + public Builder setBoundToSpecificSecureUserId(long secureUserId) { + mBoundToSecureUserId = secureUserId; + return this; + } + + /** * Builds an instance of {@link KeyProtection}. * * @throws IllegalArgumentException if a required field is missing @@ -793,7 +836,8 @@ public final class KeyProtection implements ProtectionParameter { mUserAuthenticationRequired, mUserAuthenticationValidityDurationSeconds, mUserAuthenticationValidWhileOnBody, - mInvalidatedByBiometricEnrollment); + mInvalidatedByBiometricEnrollment, + mBoundToSecureUserId); } } } diff --git a/keystore/java/android/security/keystore/KeymasterUtils.java b/keystore/java/android/security/keystore/KeymasterUtils.java index f5272aa233e9..34c8d1f75f60 100644 --- a/keystore/java/android/security/keystore/KeymasterUtils.java +++ b/keystore/java/android/security/keystore/KeymasterUtils.java @@ -89,7 +89,10 @@ public abstract class KeymasterUtils { * @param userAuthenticationValidityDurationSeconds duration of time (seconds) for which user * authentication is valid as authorization for using the key or {@code -1} if every * use of the key needs authorization. - * + * @param boundToSpecificSecureUserId if non-zero, specify which SID the key will be bound to, + * overriding the default logic in this method where the key is bound to either the root + * SID of the current user, or the fingerprint SID if explicit fingerprint authorization + * is requested. * @throws IllegalStateException if user authentication is required but the system is in a wrong * state (e.g., secure lock screen not set up) for generating or importing keys that * require user authentication. @@ -98,7 +101,8 @@ public abstract class KeymasterUtils { boolean userAuthenticationRequired, int userAuthenticationValidityDurationSeconds, boolean userAuthenticationValidWhileOnBody, - boolean invalidatedByBiometricEnrollment) { + boolean invalidatedByBiometricEnrollment, + long boundToSpecificSecureUserId) { if (!userAuthenticationRequired) { args.addBoolean(KeymasterDefs.KM_TAG_NO_AUTH_REQUIRED); return; @@ -120,7 +124,9 @@ public abstract class KeymasterUtils { } long sid; - if (invalidatedByBiometricEnrollment) { + if (boundToSpecificSecureUserId != GateKeeper.INVALID_SECURE_USER_ID) { + sid = boundToSpecificSecureUserId; + } else if (invalidatedByBiometricEnrollment) { // The fingerprint-only SID will change on fingerprint enrollment or removal of all, // enrolled fingerprints, invalidating the key. sid = fingerprintOnlySid; @@ -138,11 +144,16 @@ public abstract class KeymasterUtils { + "supported for keys requiring fingerprint authentication"); } } else { - // The key is authorized for use for the specified amount of time after the user has - // authenticated. Whatever unlocks the secure lock screen should authorize this key. - long rootSid = getRootSid(); + long sid; + if (boundToSpecificSecureUserId != GateKeeper.INVALID_SECURE_USER_ID) { + sid = boundToSpecificSecureUserId; + } else { + // The key is authorized for use for the specified amount of time after the user has + // authenticated. Whatever unlocks the secure lock screen should authorize this key. + sid = getRootSid(); + } args.addUnsignedLong(KeymasterDefs.KM_TAG_USER_SECURE_ID, - KeymasterArguments.toUint64(rootSid)); + KeymasterArguments.toUint64(sid)); args.addEnum(KeymasterDefs.KM_TAG_USER_AUTH_TYPE, KeymasterDefs.HW_AUTH_PASSWORD | KeymasterDefs.HW_AUTH_FINGERPRINT); args.addUnsignedInt(KeymasterDefs.KM_TAG_AUTH_TIMEOUT, diff --git a/libs/hwui/hwui/Bitmap.cpp b/libs/hwui/hwui/Bitmap.cpp index a34b61b56334..3e10b36d921d 100644 --- a/libs/hwui/hwui/Bitmap.cpp +++ b/libs/hwui/hwui/Bitmap.cpp @@ -152,6 +152,23 @@ private: EGLDisplay mDisplay = EGL_NO_DISPLAY; }; +class AutoGlTexture { +public: + AutoGlTexture(uirenderer::Caches& caches) + : mCaches(caches) { + glGenTextures(1, &mTexture); + caches.textureState().bindTexture(mTexture); + } + + ~AutoGlTexture() { + mCaches.textureState().deleteTexture(mTexture); + } + +private: + uirenderer::Caches& mCaches; + GLuint mTexture = 0; +}; + static bool uploadBitmapToGraphicBuffer(uirenderer::Caches& caches, SkBitmap& bitmap, GraphicBuffer& buffer, GLint format, GLint type) { SkAutoLockPixels alp(bitmap); @@ -159,10 +176,6 @@ static bool uploadBitmapToGraphicBuffer(uirenderer::Caches& caches, SkBitmap& bi LOG_ALWAYS_FATAL_IF(display == EGL_NO_DISPLAY, "Failed to get EGL_DEFAULT_DISPLAY! err=%s", uirenderer::renderthread::EglManager::eglErrorString()); - // These objects are initialized below but the default "null" - // values are used to cleanup properly at any point in the - // initialization sequenc - GLuint texture = 0; // We use an EGLImage to access the content of the GraphicBuffer // The EGL image is later bound to a 2D texture EGLClientBuffer clientBuffer = (EGLClientBuffer) buffer.getNativeBuffer(); @@ -172,8 +185,7 @@ static bool uploadBitmapToGraphicBuffer(uirenderer::Caches& caches, SkBitmap& bi uirenderer::renderthread::EglManager::eglErrorString()); return false; } - glGenTextures(1, &texture); - caches.textureState().bindTexture(texture); + AutoGlTexture glTexture(caches); glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, autoImage.image); GL_CHECKPOINT(MODERATE); diff --git a/media/java/android/media/MediaMuxer.java b/media/java/android/media/MediaMuxer.java index a1f816b27df7..80832f8a2977 100644 --- a/media/java/android/media/MediaMuxer.java +++ b/media/java/android/media/MediaMuxer.java @@ -83,13 +83,17 @@ final public class MediaMuxer { private OutputFormat() {} /** MPEG4 media file format*/ public static final int MUXER_OUTPUT_MPEG_4 = 0; + /** WEBM media file format*/ public static final int MUXER_OUTPUT_WEBM = 1; + /** 3GPP media file format*/ + public static final int MUXER_OUTPUT_3GPP = 2; }; /** @hide */ @IntDef({ OutputFormat.MUXER_OUTPUT_MPEG_4, OutputFormat.MUXER_OUTPUT_WEBM, + OutputFormat.MUXER_OUTPUT_3GPP, }) @Retention(RetentionPolicy.SOURCE) public @interface Format {} @@ -166,8 +170,8 @@ final public class MediaMuxer { } private void setUpMediaMuxer(@NonNull FileDescriptor fd, @Format int format) throws IOException { - if (format != OutputFormat.MUXER_OUTPUT_MPEG_4 && - format != OutputFormat.MUXER_OUTPUT_WEBM) { + if (format != OutputFormat.MUXER_OUTPUT_MPEG_4 && format != OutputFormat.MUXER_OUTPUT_WEBM + && format != OutputFormat.MUXER_OUTPUT_3GPP) { throw new IllegalArgumentException("format: " + format + " is invalid"); } mNativeObject = nativeSetup(fd, format); diff --git a/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDocumentsProvider.java b/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDocumentsProvider.java index 8b0e610c9af8..b8c10a6a3366 100644 --- a/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDocumentsProvider.java +++ b/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDocumentsProvider.java @@ -509,7 +509,7 @@ public class MtpDocumentsProvider extends DocumentsProvider { final DeviceToolkit toolkit = new DeviceToolkit(mMtpManager, mResolver, mDatabase, device); mDeviceToolkits.put(deviceId, toolkit); - mIntentSender.sendUpdateNotificationIntent(); + mIntentSender.sendUpdateNotificationIntent(device); try { mRootScanner.resume().await(); } catch (InterruptedException error) { @@ -526,7 +526,7 @@ public class MtpDocumentsProvider extends DocumentsProvider { closeDeviceInternal(deviceId); } mRootScanner.resume(); - mIntentSender.sendUpdateNotificationIntent(); + mIntentSender.sendUpdateNotificationIntent(null); } MtpDeviceRecord[] getOpenedDeviceRecordsCache() { diff --git a/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDocumentsService.java b/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDocumentsService.java index c8846ce3fc1e..664d3c99344b 100644 --- a/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDocumentsService.java +++ b/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDocumentsService.java @@ -19,13 +19,12 @@ package com.android.mtp; import android.app.Notification; import android.app.Service; import android.app.NotificationManager; -import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.IBinder; -import android.util.Log; - -import java.io.IOException; +import android.service.notification.StatusBarNotification; +import java.util.HashSet; +import java.util.Set; /** * Service to manage lifetime of DocumentsProvider's process. @@ -33,12 +32,10 @@ import java.io.IOException; * starts to run when the first MTP device is opened, and stops when the last MTP device is closed. */ public class MtpDocumentsService extends Service { - static final String ACTION_OPEN_DEVICE = "com.android.mtp.OPEN_DEVICE"; - static final String ACTION_CLOSE_DEVICE = "com.android.mtp.CLOSE_DEVICE"; static final String ACTION_UPDATE_NOTIFICATION = "com.android.mtp.UPDATE_NOTIFICATION"; static final String EXTRA_DEVICE = "device"; - NotificationManager mNotificationManager; + private NotificationManager mNotificationManager; @Override public IBinder onBind(Intent intent) { @@ -67,39 +64,53 @@ public class MtpDocumentsService extends Service { */ private boolean updateForegroundState() { final MtpDocumentsProvider provider = MtpDocumentsProvider.getInstance(); - int notificationId = 0; - Notification notification = null; - // TODO: Hide notification if the device has already been removed. + final Set<Integer> openedNotification = new HashSet<>(); + boolean hasForegroundNotification = false; + + final StatusBarNotification[] activeNotifications = + mNotificationManager.getActiveNotifications(); + for (final MtpDeviceRecord record : provider.getOpenedDeviceRecordsCache()) { - final String title = getResources().getString( - R.string.accessing_notification_title, - record.name); - notificationId = record.deviceId; - notification = new Notification.Builder(this) - .setLocalOnly(true) - .setContentTitle(title) - .setSmallIcon(com.android.internal.R.drawable.stat_sys_data_usb) - .setCategory(Notification.CATEGORY_SYSTEM) - .setPriority(Notification.PRIORITY_LOW) - .build(); - mNotificationManager.notify(record.deviceId, notification); + openedNotification.add(record.deviceId); + if (!hasForegroundNotification) { + // Mark this service as foreground with the notification so that the process is not + // killed by the system while a MTP device is opened. + startForeground(record.deviceId, createNotification(this, record)); + hasForegroundNotification = true; + } else { + // Only one notification can be shown as a foreground notification. We need to show + // the rest as normal notification. + mNotificationManager.notify(record.deviceId, createNotification(this, record)); + } } - if (notification != null) { - startForeground(notificationId, notification); - return true; - } else { + for (final StatusBarNotification notification : activeNotifications) { + if (!openedNotification.contains(notification.getId())) { + mNotificationManager.cancel(notification.getId()); + } + } + + if (!hasForegroundNotification) { + // There is no opened device. stopForeground(true /* removeNotification */); stopSelf(); return false; } + + return true; } - private static void logErrorMessage(Exception exp) { - if (exp.getMessage() != null) { - Log.e(MtpDocumentsProvider.TAG, exp.getMessage()); - } else { - Log.e(MtpDocumentsProvider.TAG, exp.toString()); - } + public static Notification createNotification(Context context, MtpDeviceRecord device) { + final String title = context.getResources().getString( + R.string.accessing_notification_title, + device.name); + return new Notification.Builder(context) + .setLocalOnly(true) + .setContentTitle(title) + .setSmallIcon(com.android.internal.R.drawable.stat_sys_data_usb) + .setCategory(Notification.CATEGORY_SYSTEM) + .setPriority(Notification.PRIORITY_LOW) + .setFlag(Notification.FLAG_NO_CLEAR, true) + .build(); } } diff --git a/packages/MtpDocumentsProvider/src/com/android/mtp/ServiceIntentSender.java b/packages/MtpDocumentsProvider/src/com/android/mtp/ServiceIntentSender.java index a1bb2c13d386..d8c3d357b563 100644 --- a/packages/MtpDocumentsProvider/src/com/android/mtp/ServiceIntentSender.java +++ b/packages/MtpDocumentsProvider/src/com/android/mtp/ServiceIntentSender.java @@ -16,6 +16,8 @@ package com.android.mtp; +import android.annotation.Nullable; +import android.app.NotificationManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -30,9 +32,22 @@ class ServiceIntentSender { mContext = context; } - void sendUpdateNotificationIntent() { + /** + * Notify the change of opened device set. + * @param record If a new device is opened, pass the device record. If a device is closed, pass + * null. + */ + void sendUpdateNotificationIntent(@Nullable MtpDeviceRecord record) { final Intent intent = new Intent(MtpDocumentsService.ACTION_UPDATE_NOTIFICATION); intent.setComponent(new ComponentName(mContext, MtpDocumentsService.class)); - mContext.startService(intent); + final NotificationManager manager = mContext.getSystemService(NotificationManager.class); + if (record != null) { + manager.startServiceInForeground( + intent, + record.deviceId, + MtpDocumentsService.createNotification(mContext, record)); + } else { + mContext.startService(intent); + } } } diff --git a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/TestServiceIntentSender.java b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/TestServiceIntentSender.java index d4a4a487d8ee..74dd429d8af5 100644 --- a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/TestServiceIntentSender.java +++ b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/TestServiceIntentSender.java @@ -16,11 +16,13 @@ package com.android.mtp; +import android.annotation.Nullable; + class TestServiceIntentSender extends ServiceIntentSender { TestServiceIntentSender() { super(null); } @Override - void sendUpdateNotificationIntent() {} + void sendUpdateNotificationIntent(@Nullable MtpDeviceRecord record) {} } diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/PluginManager.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/PluginManager.java index 471454749c2f..f4adc93efd28 100644 --- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/PluginManager.java +++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/PluginManager.java @@ -70,7 +70,7 @@ public class PluginManager extends BroadcastReceiver { private boolean mListening; private boolean mHasOneShot; - private PluginManager(Context context) { + public PluginManager(Context context) { this(context, new PluginInstanceManagerFactory(), Build.IS_DEBUGGABLE, Thread.getDefaultUncaughtExceptionHandler()); } @@ -252,13 +252,6 @@ public class PluginManager extends BroadcastReceiver { return new PluginContextWrapper(mContext.createApplicationContext(info, 0), classLoader); } - public static PluginManager getInstance(Context context) { - if (sInstance == null) { - sInstance = new PluginManager(context.getApplicationContext()); - } - return sInstance; - } - private class AllPluginClassLoader extends ClassLoader { public AllPluginClassLoader(ClassLoader classLoader) { super(classLoader); diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/phone/NavGesture.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/phone/NavGesture.java index 072848263a9b..918d6e96784d 100644 --- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/phone/NavGesture.java +++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/phone/NavGesture.java @@ -32,6 +32,8 @@ public interface NavGesture extends Plugin { public boolean onInterceptTouchEvent(MotionEvent event); public void setBarState(boolean vertical, boolean isRtl); + + public default void destroy() { } } } diff --git a/packages/SystemUI/res/layout/divider.xml b/packages/SystemUI/res/layout/divider.xml new file mode 100644 index 000000000000..95814371ed56 --- /dev/null +++ b/packages/SystemUI/res/layout/divider.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2017 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. +--> +<View xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="72dp" + android:layout_height="1dp" + android:background="?android:attr/colorForeground" + android:alpha="?android:attr/disabledAlpha" /> diff --git a/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml b/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml index 174776cef205..3e8e72a3d100 100644 --- a/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml +++ b/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml @@ -2,23 +2,22 @@ <!-- ** Copyright 2012, 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 +** 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 +** 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 +** 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. --> <!-- Extends RelativeLayout --> <com.android.systemui.statusbar.phone.QuickStatusBarHeader xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:systemui="http://schemas.android.com/apk/res-auto" android:id="@+id/header" android:layout_width="match_parent" android:layout_height="@dimen/status_bar_header_height" @@ -29,8 +28,7 @@ android:clipToPadding="false" android:paddingTop="0dp" android:paddingEnd="0dp" - android:paddingStart="0dp" - > + android:paddingStart="0dp"> <LinearLayout android:layout_width="wrap_content" @@ -190,8 +188,7 @@ android:layout_alignParentBottom="true" android:alpha="0" android:background="@color/qs_detail_progress_track" - android:src="@drawable/indeterminate_anim" - /> + android:src="@drawable/indeterminate_anim"/> <TextView android:id="@+id/header_debug_info" @@ -203,7 +200,6 @@ android:textColor="#00A040" android:textSize="11dp" android:textStyle="bold" - android:visibility="invisible" - /> + android:visibility="invisible"/> </com.android.systemui.statusbar.phone.QuickStatusBarHeader> diff --git a/packages/SystemUI/res/layout/status_bar_expanded.xml b/packages/SystemUI/res/layout/status_bar_expanded.xml index f09657f9e486..0852020e779c 100644 --- a/packages/SystemUI/res/layout/status_bar_expanded.xml +++ b/packages/SystemUI/res/layout/status_bar_expanded.xml @@ -3,28 +3,27 @@ ** ** Copyright 2006, 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 +** 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 +** 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 +** 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. */ --> -<com.android.systemui.statusbar.phone.NotificationPanelView +<com.android.systemui.statusbar.phone.NotificationPanelView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:systemui="http://schemas.android.com/apk/res-auto" android:id="@+id/notification_panel" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@android:color/transparent" - > + android:background="@android:color/transparent" > <include layout="@layout/keyguard_status_view" @@ -77,8 +76,8 @@ </com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer> <include - layout="@layout/keyguard_bottom_area" - android:visibility="gone" /> + layout="@layout/keyguard_bottom_area" + android:visibility="gone" /> <com.android.systemui.statusbar.AlphaOptimizedView android:id="@+id/qs_navbar_scrim" @@ -88,4 +87,4 @@ android:visibility="invisible" android:background="@drawable/qs_navbar_scrim" /> -</com.android.systemui.statusbar.phone.NotificationPanelView><!-- end of sliding panel --> +</com.android.systemui.statusbar.phone.NotificationPanelView> diff --git a/packages/SystemUI/res/layout/super_status_bar.xml b/packages/SystemUI/res/layout/super_status_bar.xml index 285a8ec34abc..92a9da9d0331 100644 --- a/packages/SystemUI/res/layout/super_status_bar.xml +++ b/packages/SystemUI/res/layout/super_status_bar.xml @@ -48,6 +48,7 @@ android:layout_height="match_parent" android:importantForAccessibility="no" sysui:ignoreRightInset="true" + sysui:scrimColor="@color/scrim_behind_color" /> <com.android.systemui.statusbar.AlphaOptimizedView diff --git a/packages/SystemUI/res/values/attrs.xml b/packages/SystemUI/res/values/attrs.xml index 7fb513cda395..7632f87e7c78 100644 --- a/packages/SystemUI/res/values/attrs.xml +++ b/packages/SystemUI/res/values/attrs.xml @@ -115,5 +115,9 @@ <declare-styleable name="PluginInflateContainer"> <attr name="viewType" format="string" /> </declare-styleable> + <declare-styleable name="ScrimView"> + <!-- The initial color for the scrim. --> + <attr name="scrimColor" format="color" /> + </declare-styleable> </resources> diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml index 1ec611a43b56..ad5b108f62b5 100644 --- a/packages/SystemUI/res/values/colors.xml +++ b/packages/SystemUI/res/values/colors.xml @@ -36,6 +36,7 @@ <color name="qs_detail_button">@*android:color/quaternary_device_default_settings</color> <color name="qs_detail_button_white">#B3FFFFFF</color><!-- 70% white --> <color name="qs_detail_transition">#66FFFFFF</color> + <color name="scrim_behind_color">@android:color/black</color> <color name="status_bar_clock_color">#FFFFFFFF</color> <color name="qs_user_detail_icon_muted">#FFFFFFFF</color> <!-- not so muted after all --> <color name="qs_tile_disabled_color">#9E9E9E</color> <!-- 38% black --> diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index 2f39d1d9cc5a..64cac3c001d1 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -106,7 +106,7 @@ <!-- The default tiles to display in QuickSettings --> <string name="quick_settings_tiles_default" translatable="false"> - wifi,cell,battery,dnd,flashlight,rotation,bt,airplane + wifi,cell,bt,dnd,flashlight,rotation,battery,airplane </string> <!-- Tiles native to System UI. Order should match "quick_settings_tiles_default" --> @@ -302,4 +302,34 @@ <item type="id" name="action_split_task_to_right" /> <item type="id" name="action_split_task_to_top" /> + <!-- Whether or not the gear icon on notifications should be shown. The gear is shown when the + the notification is not swiped enough to dismiss it. --> + <bool name="config_showNotificationGear">true</bool> + + <!-- Whether or not a background should be drawn behind a notification. --> + <bool name="config_drawNotificationBackground">true</bool> + + <!-- Whether or not the edit icon on the quick settings header is shown. --> + <bool name="config_showQuickSettingsEditingIcon">true</bool> + + <!-- Whether or not the multi-user switcher should be visible even if the quick settings are + not expanded. If there are not multiple users on the system, the switcher will still + hide itself. --> + <bool name="config_alwaysShowMultiUserSwitcher">false</bool> + + <!-- Whether or not the expand indicator is visible for manually expanding the quick settings + panel. --> + <bool name="config_showQuickSettingsExpandIndicator">true</bool> + + <!-- Whether or not to display the row of quick settings icons separate from the full quick + settings panel. --> + <bool name="config_showQuickSettingsRow">true</bool> + + <!-- Whether or not the quick settings should be revealed on an overscroll of the + notifications panel. --> + <bool name="config_enableQuickSettingsOverscrollExpansion">true</bool> + + <!-- Whether or the notifications can be shown and dismissed with a drag. --> + <bool name="config_enableNotificationShadeDrag">true</bool> + </resources> diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index ddcc4baf8350..919f292cdb83 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -347,6 +347,8 @@ <dimen name="keyguard_clock_notifications_margin_max">42dp</dimen> <dimen name="heads_up_scrim_height">250dp</dimen> + <item name="scrim_behind_alpha" format="float" type="dimen">0.62</item> + <!-- The minimum amount the user needs to swipe to go to the camera / phone. --> <dimen name="keyguard_min_swipe_amount">110dp</dimen> diff --git a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java index b30b5968cd10..29a8da0d421c 100644 --- a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java +++ b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java @@ -76,7 +76,7 @@ public class BatteryMeterView extends ImageView implements mDrawable.setBatteryController(mBatteryController); mBatteryController.addCallback(this); mDrawable.startListening(); - TunerService.get(getContext()).addTunable(this, StatusBarIconController.ICON_BLACKLIST); + Dependency.get(TunerService.class).addTunable(this, StatusBarIconController.ICON_BLACKLIST); } @Override @@ -84,7 +84,7 @@ public class BatteryMeterView extends ImageView implements super.onDetachedFromWindow(); mBatteryController.removeCallback(this); mDrawable.stopListening(); - TunerService.get(getContext()).removeTunable(this); + Dependency.get(TunerService.class).removeTunable(this); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/Dependency.java b/packages/SystemUI/src/com/android/systemui/Dependency.java index 135b12902a25..e1f3176d808e 100644 --- a/packages/SystemUI/src/com/android/systemui/Dependency.java +++ b/packages/SystemUI/src/com/android/systemui/Dependency.java @@ -14,6 +14,7 @@ package com.android.systemui; +import android.content.Context; import android.content.res.Configuration; import android.os.Handler; import android.os.HandlerThread; @@ -23,6 +24,7 @@ import android.util.ArrayMap; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.assist.AssistManager; +import com.android.systemui.plugins.PluginManager; import com.android.systemui.statusbar.phone.ManagedProfileController; import com.android.systemui.statusbar.phone.ManagedProfileControllerImpl; import com.android.systemui.statusbar.policy.AccessibilityController; @@ -56,9 +58,11 @@ import com.android.systemui.statusbar.policy.UserInfoControllerImpl; import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.statusbar.policy.ZenModeControllerImpl; +import com.android.systemui.tuner.TunerService; import java.io.FileDescriptor; import java.io.PrintWriter; +import java.util.HashMap; /** * Class to handle ugly dependencies throughout sysui until we determine the @@ -167,12 +171,18 @@ public class Dependency extends SystemUI { mProviders.put(DeviceProvisionedController.class.getName(), () -> new DeviceProvisionedControllerImpl(mContext)); + mProviders.put(PluginManager.class.getName(), () -> + new PluginManager(mContext)); + mProviders.put(AssistManager.class.getName(), () -> new AssistManager(getDependency(DeviceProvisionedController.class), mContext)); mProviders.put(SecurityController.class.getName(), () -> new SecurityControllerImpl(mContext)); + mProviders.put(TunerService.class.getName(), () -> + new TunerService(mContext)); + // Put all dependencies above here so the factory can override them if it wants. SystemUIFactory.getInstance().injectDependencies(mProviders, mContext); } @@ -220,6 +230,17 @@ public class Dependency extends SystemUI { T createDependency(); } + /** + * Used in separate processes (like tuner settings) to init the dependencies. + */ + public static void initDependencies(Context context) { + if (sDependency != null) return; + Dependency d = new Dependency(); + d.mContext = context.getApplicationContext(); + d.mComponents = new HashMap<>(); + d.start(); + } + public static <T> T get(Class<T> cls) { return sDependency.getDependency(cls.getName()); } diff --git a/packages/SystemUI/src/com/android/systemui/EventLogConstants.java b/packages/SystemUI/src/com/android/systemui/EventLogConstants.java index 9238928de9e2..def3c4072d2e 100644 --- a/packages/SystemUI/src/com/android/systemui/EventLogConstants.java +++ b/packages/SystemUI/src/com/android/systemui/EventLogConstants.java @@ -16,30 +16,46 @@ package com.android.systemui; +import com.android.internal.logging.nano.MetricsProto.MetricsEvent; + /** * Constants to be passed as sysui_* eventlog parameters. */ public class EventLogConstants { /** The user swiped up on the lockscreen, unlocking the device. */ - public static final int SYSUI_LOCKSCREEN_GESTURE_SWIPE_UP_UNLOCK = 1; + private static final int SYSUI_LOCKSCREEN_GESTURE_SWIPE_UP_UNLOCK = 1; /** The user swiped down on the lockscreen, going to the full shade. */ - public static final int SYSUI_LOCKSCREEN_GESTURE_SWIPE_DOWN_FULL_SHADE = 2; + private static final int SYSUI_LOCKSCREEN_GESTURE_SWIPE_DOWN_FULL_SHADE = 2; /** The user tapped in an empty area, causing the unlock hint to be shown. */ - public static final int SYSUI_LOCKSCREEN_GESTURE_TAP_UNLOCK_HINT = 3; + private static final int SYSUI_LOCKSCREEN_GESTURE_TAP_UNLOCK_HINT = 3; /** The user swiped inward on the camera icon, launching the camera. */ - public static final int SYSUI_LOCKSCREEN_GESTURE_SWIPE_CAMERA = 4; + private static final int SYSUI_LOCKSCREEN_GESTURE_SWIPE_CAMERA = 4; /** The user swiped inward on the dialer icon, launching the dialer. */ - public static final int SYSUI_LOCKSCREEN_GESTURE_SWIPE_DIALER = 5; + private static final int SYSUI_LOCKSCREEN_GESTURE_SWIPE_DIALER = 5; /** The user tapped the lock, locking the device. */ - public static final int SYSUI_LOCKSCREEN_GESTURE_TAP_LOCK = 6; + private static final int SYSUI_LOCKSCREEN_GESTURE_TAP_LOCK = 6; /** The user tapped a notification, needs to tap again to launch. */ - public static final int SYSUI_LOCKSCREEN_GESTURE_TAP_NOTIFICATION_ACTIVATE = 7; + private static final int SYSUI_LOCKSCREEN_GESTURE_TAP_NOTIFICATION_ACTIVATE = 7; /** The user swiped down to open quick settings, from keyguard. */ - public static final int SYSUI_LOCKSCREEN_GESTURE_SWIPE_DOWN_QS = 8; + private static final int SYSUI_LOCKSCREEN_GESTURE_SWIPE_DOWN_QS = 8; /** The user swiped down to open quick settings, from shade. */ - public static final int SYSUI_SHADE_GESTURE_SWIPE_DOWN_QS = 9; + private static final int SYSUI_SHADE_GESTURE_SWIPE_DOWN_QS = 9; /** The user tapped on the status bar to open quick settings, from shade. */ - public static final int SYSUI_TAP_TO_OPEN_QS = 10; + private static final int SYSUI_TAP_TO_OPEN_QS = 10; + + public static final int[] METRICS_GESTURE_TYPE_MAP = { + MetricsEvent.VIEW_UNKNOWN, // there is no type 0 + MetricsEvent.ACTION_LS_UNLOCK, // SYSUI_LOCKSCREEN_GESTURE_SWIPE_UP_UNLOCK + MetricsEvent.ACTION_LS_SHADE, // SYSUI_LOCKSCREEN_GESTURE_SWIPE_DOWN_FULL_SHADE + MetricsEvent.ACTION_LS_HINT, // SYSUI_LOCKSCREEN_GESTURE_TAP_UNLOCK_HINT + MetricsEvent.ACTION_LS_CAMERA, // SYSUI_LOCKSCREEN_GESTURE_SWIPE_CAMERA + MetricsEvent.ACTION_LS_DIALER, // SYSUI_LOCKSCREEN_GESTURE_SWIPE_DIALER + MetricsEvent.ACTION_LS_LOCK, // SYSUI_LOCKSCREEN_GESTURE_TAP_LOCK + MetricsEvent.ACTION_LS_NOTE, // SYSUI_LOCKSCREEN_GESTURE_TAP_NOTIFICATION_ACTIVATE + MetricsEvent.ACTION_LS_QS, // SYSUI_LOCKSCREEN_GESTURE_SWIPE_DOWN_QS + MetricsEvent.ACTION_SHADE_QS_PULL, // SYSUI_SHADE_GESTURE_SWIPE_DOWN_QS + MetricsEvent.ACTION_SHADE_QS_TAP // SYSUI_TAP_TO_OPEN_QS + }; /** Secondary user tries binding to the system sysui service */ public static final int SYSUI_RECENTS_CONNECTION_USER_BIND_SERVICE = 1; diff --git a/packages/SystemUI/src/com/android/systemui/PluginInflateContainer.java b/packages/SystemUI/src/com/android/systemui/PluginInflateContainer.java index efddf206878e..9cc66138cfb4 100644 --- a/packages/SystemUI/src/com/android/systemui/PluginInflateContainer.java +++ b/packages/SystemUI/src/com/android/systemui/PluginInflateContainer.java @@ -76,7 +76,7 @@ public class PluginInflateContainer extends AutoReinflateContainer protected void onAttachedToWindow() { super.onAttachedToWindow(); if (mAction != null) { - PluginManager.getInstance(getContext()).addPluginListener(mAction, this, mVersion); + Dependency.get(PluginManager.class).addPluginListener(mAction, this, mVersion); } } @@ -84,7 +84,7 @@ public class PluginInflateContainer extends AutoReinflateContainer protected void onDetachedFromWindow() { super.onDetachedFromWindow(); if (mAction != null) { - PluginManager.getInstance(getContext()).removePluginListener(this); + Dependency.get(PluginManager.class).removePluginListener(this); } } diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java index 9515585df84e..a9ac2d97903b 100644 --- a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java +++ b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java @@ -65,7 +65,6 @@ public class SystemUIApplication extends Application implements SysUiServiceProv private final Class<?>[] SERVICES = new Class[] { Dependency.class, FragmentService.class, - TunerService.class, NotificationChannels.class, CommandQueue.CommandQueueStart.class, KeyguardViewMediator.class, @@ -205,7 +204,7 @@ public class SystemUIApplication extends Application implements SysUiServiceProv mServices[i].onBootCompleted(); } } - PluginManager.getInstance(this).addPluginListener(OverlayPlugin.ACTION, + Dependency.get(PluginManager.class).addPluginListener(OverlayPlugin.ACTION, new PluginListener<OverlayPlugin>() { @Override public void onPluginConnected(OverlayPlugin plugin, Context pluginContext) { diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeService.java b/packages/SystemUI/src/com/android/systemui/doze/DozeService.java index 828728f0ae9e..94dc9a344a34 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeService.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeService.java @@ -19,6 +19,7 @@ package com.android.systemui.doze; import android.service.dreams.DreamService; import android.util.Log; +import com.android.systemui.Dependency; import com.android.systemui.plugins.Plugin; import com.android.systemui.plugins.PluginManager; import com.android.systemui.plugins.doze.DozeProvider; @@ -47,7 +48,7 @@ public class DozeService extends DreamService implements DozeMachine.Service { return; } - DozeProvider provider = PluginManager.getInstance(this) + DozeProvider provider = Dependency.get(PluginManager.class) .getOneShotPlugin(DozeProvider.ACTION, DozeProvider.VERSION); mDozeMachine = new DozeFactory(provider).assembleMachine(this); } diff --git a/packages/SystemUI/src/com/android/systemui/fragments/PluginFragmentListener.java b/packages/SystemUI/src/com/android/systemui/fragments/PluginFragmentListener.java index 2e6de4ac9e35..1eaca6ffd9db 100644 --- a/packages/SystemUI/src/com/android/systemui/fragments/PluginFragmentListener.java +++ b/packages/SystemUI/src/com/android/systemui/fragments/PluginFragmentListener.java @@ -19,6 +19,7 @@ import android.content.Context; import android.util.Log; import android.view.View; +import com.android.systemui.Dependency; import com.android.systemui.plugins.FragmentBase; import com.android.systemui.plugins.Plugin; import com.android.systemui.plugins.PluginListener; @@ -38,7 +39,7 @@ public class PluginFragmentListener implements PluginListener<Plugin> { Class<? extends FragmentBase> expectedInterface) { mTag = tag; mFragmentHostManager = FragmentHostManager.get(view); - mPluginManager = PluginManager.getInstance(view.getContext()); + mPluginManager = Dependency.get(PluginManager.class); mExpectedInterface = expectedInterface; mDefaultClass = defaultFragment; } diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivityController.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivityController.java index 6ef30c0258c6..f3dc339f12d6 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivityController.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivityController.java @@ -77,7 +77,7 @@ public class PipMenuActivityController { void onPipMinimize(); /** - * Called when the PIP requested to be expanded. + * Called when the PIP requested to be dismissed. */ void onPipDismiss(); } diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java index 57276847193b..c7b15efeec9e 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java @@ -44,9 +44,12 @@ import android.view.InputEventReceiver; import android.view.MotionEvent; import android.view.ViewConfiguration; +import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.os.BackgroundThread; import com.android.internal.policy.PipMotionHelper; import com.android.internal.policy.PipSnapAlgorithm; +import com.android.systemui.Dependency; import com.android.systemui.statusbar.FlingAnimationUtils; import com.android.systemui.tuner.TunerService; @@ -58,6 +61,10 @@ public class PipTouchHandler implements TunerService.Tunable { private static final String TAG = "PipTouchHandler"; private static final boolean DEBUG_ALLOW_OUT_OF_BOUNDS_STACK = false; + // These values are used for metrics and should never change + private static final int METRIC_VALUE_DISMISSED_BY_TAP = 0; + private static final int METRIC_VALUE_DISMISSED_BY_DRAG = 1; + private static final String TUNER_KEY_DRAG_TO_DISMISS = "pip_drag_to_dismiss"; private static final String TUNER_KEY_ALLOW_MINIMIZE = "pip_allow_minimize"; @@ -147,6 +154,8 @@ public class PipTouchHandler implements TunerService.Tunable { } else { unregisterInputConsumer(); } + MetricsLogger.visibility(mContext, MetricsEvent.ACTION_PICTURE_IN_PICTURE_MENU, + visible); } @Override @@ -165,6 +174,8 @@ public class PipTouchHandler implements TunerService.Tunable { @Override public void onPipDismiss() { BackgroundThread.getHandler().post(PipTouchHandler.this::dismissPinnedStack); + MetricsLogger.action(mContext, MetricsEvent.ACTION_PICTURE_IN_PICTURE_DISMISSED, + METRIC_VALUE_DISMISSED_BY_TAP); } } @@ -190,7 +201,7 @@ public class PipTouchHandler implements TunerService.Tunable { setSnapToEdge(true); // Register any tuner settings changes - TunerService.get(context).addTunable(this, TUNER_KEY_DRAG_TO_DISMISS, + Dependency.get(TunerService.class).addTunable(this, TUNER_KEY_DRAG_TO_DISMISS, TUNER_KEY_ALLOW_MINIMIZE); } @@ -230,6 +241,10 @@ public class PipTouchHandler implements TunerService.Tunable { } public void onMinimizedStateChanged(boolean isMinimized) { + if (mIsMinimized != isMinimized) { + MetricsLogger.action(mContext, MetricsEvent.ACTION_PICTURE_IN_PICTURE_MINIMIZED, + isMinimized); + } mIsMinimized = isMinimized; mSnapAlgorithm.setMinimized(isMinimized); } @@ -439,7 +454,7 @@ public class PipTouchHandler implements TunerService.Tunable { /** * Flings the PIP to the closest snap target. */ - private void flingToSnapTarget(float velocity, float velocityX, float velocityY) { + private Rect flingToSnapTarget(float velocity, float velocityX, float velocityY) { Rect toBounds = mSnapAlgorithm.findClosestSnapBounds(mBoundedPinnedStackBounds, mPinnedStackBounds, velocityX, velocityY); if (!mPinnedStackBounds.equals(toBounds)) { @@ -450,12 +465,13 @@ public class PipTouchHandler implements TunerService.Tunable { velocity); mPinnedStackBoundsAnimator.start(); } + return toBounds; } /** * Animates the PIP to the closest snap target. */ - private void animateToClosestSnapTarget() { + private Rect animateToClosestSnapTarget() { Rect toBounds = mSnapAlgorithm.findClosestSnapBounds(mBoundedPinnedStackBounds, mPinnedStackBounds); if (!mPinnedStackBounds.equals(toBounds)) { @@ -463,6 +479,7 @@ public class PipTouchHandler implements TunerService.Tunable { toBounds, SNAP_STACK_DURATION, FAST_OUT_SLOW_IN, mUpdatePinnedStackBoundsListener); mPinnedStackBoundsAnimator.start(); } + return toBounds; } /** @@ -576,6 +593,9 @@ public class PipTouchHandler implements TunerService.Tunable { PointF lastTouch = touchState.getLastTouchPosition(); if (dismissBounds.contains((int) lastTouch.x, (int) lastTouch.y)) { animateDismissPinnedStack(dismissBounds); + MetricsLogger.action(mContext, + MetricsEvent.ACTION_PICTURE_IN_PICTURE_DISMISSED, + METRIC_VALUE_DISMISSED_BY_DRAG); return true; } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java b/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java index 602f9bf23cc1..c85f83ba3588 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java @@ -20,6 +20,7 @@ import android.view.View.OnAttachStateChangeListener; import android.view.View.OnLayoutChangeListener; import android.widget.TextView; +import com.android.systemui.Dependency; import com.android.systemui.plugins.qs.QS; import com.android.systemui.qs.PagedTileLayout.PageListener; import com.android.systemui.qs.QSPanel.QSTileLayout; @@ -105,7 +106,7 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha @Override public void onViewAttachedToWindow(View v) { - TunerService.get(mQs.getContext()).addTunable(this, ALLOW_FANCY_ANIMATION, + Dependency.get(TunerService.class).addTunable(this, ALLOW_FANCY_ANIMATION, MOVE_FULL_ROWS, QuickQSPanel.NUM_QUICK_TILES); } @@ -114,7 +115,7 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha if (mHost != null) { mHost.removeCallback(this); } - TunerService.get(mQs.getContext()).removeTunable(this); + Dependency.get(TunerService.class).removeTunable(this); } @Override @@ -194,7 +195,6 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha translationYBuilder.addFloat(label, "translationY", -yDiff, 0); mTopFiveQs.add(tileView.getIcon()); - mTopFiveQs.add(tileView.getBgCicle()); mAllViews.add(tileView.getIcon()); mAllViews.add(quickTileView); } else if (mFullRows && isIconInAnimatedRow(count)) { diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java index c8f167063add..95e0301f81c7 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java @@ -74,8 +74,14 @@ public class QSFragment extends Fragment implements QS { mContainer = (QSContainerImpl) view; mQSDetail.setQsPanel(mQSPanel, mHeader); - mQSAnimator = new QSAnimator(this, (QuickQSPanel) mHeader.findViewById(R.id.quick_qs_panel), - mQSPanel); + + // If the quick settings row is not shown, then there is no need for the animation from + // the row to the full QS panel. + if (getResources().getBoolean(R.bool.config_showQuickSettingsRow)) { + mQSAnimator = new QSAnimator(this, + (QuickQSPanel) mHeader.findViewById(R.id.quick_qs_panel), mQSPanel); + } + mQSCustomizer = (QSCustomizer) view.findViewById(R.id.qs_customize); mQSCustomizer.setQs(this); } @@ -89,7 +95,10 @@ public class QSFragment extends Fragment implements QS { super.onConfigurationChanged(newConfig); if (newConfig.getLayoutDirection() != mLayoutDirection) { mLayoutDirection = newConfig.getLayoutDirection(); - mQSAnimator.onRtlChanged(); + + if (mQSAnimator != null) { + mQSAnimator.onRtlChanged(); + } } } @@ -108,7 +117,10 @@ public class QSFragment extends Fragment implements QS { mQSPanel.setHost(qsh, mQSCustomizer); mHeader.setQSPanel(mQSPanel); mQSDetail.setHost(qsh); - mQSAnimator.setHost(qsh); + + if (mQSAnimator != null) { + mQSAnimator.setHost(qsh); + } } private void updateQsState() { @@ -155,7 +167,11 @@ public class QSFragment extends Fragment implements QS { public void setKeyguardShowing(boolean keyguardShowing) { if (DEBUG) Log.d(TAG, "setKeyguardShowing " + keyguardShowing); mKeyguardShowing = keyguardShowing; - mQSAnimator.setOnKeyguard(keyguardShowing); + + if (mQSAnimator != null) { + mQSAnimator.setOnKeyguard(keyguardShowing); + } + updateQsState(); } @@ -187,7 +203,10 @@ public class QSFragment extends Fragment implements QS { mHeader.setExpansion(mKeyguardShowing ? 1 : expansion); mQSPanel.setTranslationY(translationScaleY * mQSPanel.getHeight()); mQSDetail.setFullyExpanded(expansion == 1); - mQSAnimator.setPosition(expansion); + + if (mQSAnimator != null) { + mQSAnimator.setPosition(expansion); + } // Set bounds on the QS panel so it doesn't run over the header. mQsBounds.top = (int) (mQSPanel.getHeight() * (1 - expansion)); diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java index e0048284f669..504678c7f1c5 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java @@ -29,6 +29,7 @@ import android.widget.ImageView; import android.widget.LinearLayout; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; +import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.plugins.qs.QS; import com.android.systemui.plugins.qs.QS.DetailAdapter; @@ -126,7 +127,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback { @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); - TunerService.get(mContext).addTunable(this, QS_SHOW_BRIGHTNESS); + Dependency.get(TunerService.class).addTunable(this, QS_SHOW_BRIGHTNESS); if (mHost != null) { setTiles(mHost.getTiles()); } @@ -134,8 +135,10 @@ public class QSPanel extends LinearLayout implements Tunable, Callback { @Override protected void onDetachedFromWindow() { - TunerService.get(mContext).removeTunable(this); - mHost.removeCallback(this); + Dependency.get(TunerService.class).removeTunable(this); + if (mHost != null) { + mHost.removeCallback(this); + } for (TileRecord record : mRecords) { record.tile.removeCallbacks(); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java index e18654e7253a..0829ae5f597c 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java @@ -323,9 +323,10 @@ public abstract class QSTile<TState extends State> { return Utils.getDisabled(context, Utils.getColorAttr(context, android.R.attr.textColorTertiary)); case Tile.STATE_INACTIVE: - return Utils.getColorAttr(context, android.R.attr.textColorSecondary); + return Utils.getDisabled(context, + Utils.getColorAttr(context, android.R.attr.colorForeground)); case Tile.STATE_ACTIVE: - return Utils.getColorAttr(context, android.R.attr.colorPrimary); + return Utils.getColorAttr(context, android.R.attr.colorForeground); default: Log.e("QSTile", "Invalid state " + state); return 0; @@ -548,6 +549,7 @@ public abstract class QSTile<TState extends State> { public CharSequence minimalContentDescription; public boolean autoMirrorDrawable = true; public boolean disabledByPolicy; + public boolean dualTarget = false; public EnforcedAdmin enforcedAdmin; public String minimalAccessibilityClassName; public String expandedAccessibilityClassName; @@ -569,7 +571,8 @@ public abstract class QSTile<TState extends State> { expandedAccessibilityClassName) || !Objects.equals(other.disabledByPolicy, disabledByPolicy) || !Objects.equals(other.state, state) - || !Objects.equals(other.enforcedAdmin, enforcedAdmin); + || !Objects.equals(other.enforcedAdmin, enforcedAdmin) + || !Objects.equals(other.dualTarget, dualTarget); other.icon = icon; other.label = label; other.contentDescription = contentDescription; @@ -580,6 +583,7 @@ public abstract class QSTile<TState extends State> { other.autoMirrorDrawable = autoMirrorDrawable; other.disabledByPolicy = disabledByPolicy; other.state = state; + other.dualTarget = dualTarget; if (enforcedAdmin == null) { other.enforcedAdmin = null; } else if (other.enforcedAdmin == null) { @@ -607,6 +611,7 @@ public abstract class QSTile<TState extends State> { sb.append(",autoMirrorDrawable=").append(autoMirrorDrawable); sb.append(",disabledByPolicy=").append(disabledByPolicy); sb.append(",enforcedAdmin=").append(enforcedAdmin); + sb.append(",dualTarget=").append(dualTarget); sb.append(",state=").append(state); return sb.append(']'); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileBaseView.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileBaseView.java index a177cc323486..0e04d0a0c825 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSTileBaseView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileBaseView.java @@ -47,17 +47,12 @@ public class QSTileBaseView extends LinearLayout { private static final String TAG = "QSTileBaseView"; private final H mHandler = new H(); - private final ImageView mBg; protected QSIconView mIcon; protected RippleDrawable mRipple; private Drawable mTileBackground; private String mAccessibilityClass; private boolean mTileState; private boolean mCollapsedView; - private final int mColorActive; - private final int mColorInactive; - private final int mColorDisabled; - private int mCircleColor; public QSTileBaseView(Context context, QSIconView icon) { this(context, icon, false); @@ -72,19 +67,11 @@ public class QSTileBaseView extends LinearLayout { frame.setForegroundGravity(Gravity.CENTER); int size = context.getResources().getDimensionPixelSize(R.dimen.qs_quick_tile_size); addView(frame, new LayoutParams(size, size)); - mBg = new ImageView(getContext()); - mBg.setScaleType(ScaleType.FIT_CENTER); - mBg.setImageResource(R.drawable.ic_qs_circle); - frame.addView(mBg); mIcon = icon; FrameLayout.LayoutParams params = new FrameLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); params.setMargins(0, padding, 0, padding); frame.addView(mIcon, params); - mColorActive = Utils.getColorAttr(context, android.R.attr.textColorPrimary); - mColorDisabled = Utils.getDisabled(context, - Utils.getColorAttr(context, android.R.attr.textColorTertiary)); - mColorInactive = Utils.getColorAttr(context, android.R.attr.textColorSecondary); mTileBackground = newTileBackground(); if (mTileBackground instanceof RippleDrawable) { @@ -100,10 +87,6 @@ public class QSTileBaseView extends LinearLayout { setFocusable(true); } - public View getBgCicle() { - return mBg; - } - protected Drawable newTileBackground() { final int[] attrs = new int[]{android.R.attr.selectableItemBackgroundBorderless}; final TypedArray ta = getContext().obtainStyledAttributes(attrs); @@ -167,16 +150,6 @@ public class QSTileBaseView extends LinearLayout { } protected void handleStateChanged(QSTile.State state) { - int circleColor = getCircleColor(state.state); - if (circleColor != mCircleColor) { - if (mBg.isShown()) { - QSIconView.animateGrayScale(mCircleColor, circleColor, mBg); - } else { - QSIconView.setTint(mBg, circleColor); - } - mCircleColor = circleColor; - } - mIcon.setIcon(state); if (mCollapsedView && !TextUtils.isEmpty(state.minimalContentDescription)) { setContentDescription(state.minimalContentDescription); @@ -193,19 +166,6 @@ public class QSTileBaseView extends LinearLayout { } } - private int getCircleColor(int state) { - switch (state) { - case Tile.STATE_ACTIVE: - return mColorActive; - case Tile.STATE_INACTIVE: - case Tile.STATE_UNAVAILABLE: - return mColorDisabled; - default: - Log.e(TAG, "Invalid state " + state); - return 0; - } - } - public QSIconView getIcon() { return mIcon; } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java index 7126f3c8057f..232941dc629b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java @@ -39,6 +39,7 @@ import libcore.util.Objects; /** View that represents a standard quick settings tile. **/ public class QSTileView extends QSTileBaseView { + private final View mDivider; protected TextView mLabel; private ImageView mPadLock; private int mState; @@ -57,6 +58,8 @@ public class QSTileView extends QSTileBaseView { setClickable(true); setId(View.generateViewId()); + mDivider = LayoutInflater.from(context).inflate(R.layout.divider, this, false); + addView(mDivider); createLabel(); setOrientation(VERTICAL); setGravity(Gravity.CENTER); @@ -95,6 +98,7 @@ public class QSTileView extends QSTileBaseView { mState = state.state; mLabel.setText(state.label); } + mDivider.setVisibility(state.dualTarget ? View.VISIBLE : View.INVISIBLE); mLabel.setEnabled(!state.disabledByPolicy); mPadLock.setVisibility(state.disabledByPolicy ? View.VISIBLE : View.GONE); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java index 16b351e5b701..d789b446c253 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java @@ -24,6 +24,7 @@ import android.view.View; import android.widget.LinearLayout; import android.widget.Space; +import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.qs.QSTile.SignalState; import com.android.systemui.qs.QSTile.State; @@ -62,13 +63,13 @@ public class QuickQSPanel extends QSPanel { @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); - TunerService.get(mContext).addTunable(mNumTiles, NUM_QUICK_TILES); + Dependency.get(TunerService.class).addTunable(mNumTiles, NUM_QUICK_TILES); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); - TunerService.get(mContext).removeTunable(mNumTiles); + Dependency.get(TunerService.class).removeTunable(mNumTiles); } public void setQSPanelAndHeader(QSPanel fullPanel, View header) { @@ -141,7 +142,7 @@ public class QuickQSPanel extends QSPanel { }; public int getNumQuickTiles(Context context) { - return TunerService.get(context).getValue(NUM_QUICK_TILES, 6); + return Dependency.get(TunerService.class).getValue(NUM_QUICK_TILES, 6); } private static class HeaderTileLayout extends LinearLayout implements QSTileLayout { diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java index 06f4d9d1467d..6f1f9774a9c1 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java @@ -118,6 +118,7 @@ public class BatteryTile extends QSTile<QSTile.State> implements BatteryControll int level = (arg != null) ? (Integer) arg : mLevel; String percentage = NumberFormat.getPercentInstance().format((double) level / 100.0); + state.dualTarget = true; state.state = mCharging ? Tile.STATE_UNAVAILABLE : mPowerSave ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE; state.icon = ResourceIcon.get(R.drawable.ic_qs_battery_saver); diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java index 91e76cabbc01..4b56ecdfade7 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java @@ -115,6 +115,7 @@ public class BluetoothTile extends QSTile<QSTile.BooleanState> { final boolean enabled = mController.isBluetoothEnabled(); final boolean connected = mController.isBluetoothConnected(); final boolean connecting = mController.isBluetoothConnecting(); + state.dualTarget = true; state.value = enabled; state.autoMirrorDrawable = false; state.minimalContentDescription = diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java index 7415765ff2cc..a4cd14d77926 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java @@ -123,6 +123,7 @@ public class CastTile extends QSTile<QSTile.BooleanState> { @Override protected void handleUpdateState(BooleanState state, Object arg) { + state.dualTarget = true; state.label = mContext.getString(R.string.quick_settings_cast_title); state.contentDescription = state.label; state.value = false; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java index bdc95c04dd1e..bae163fc1451 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java @@ -126,6 +126,7 @@ public class CellularTile extends QSTile<QSTile.SignalState> { } else { state.icon = ResourceIcon.get(iconId); } + state.dualTarget = true; state.isOverlayIconWide = cb.isDataTypeIconWide; state.autoMirrorDrawable = !cb.noSim; state.filter = iconId != R.drawable.ic_qs_no_sim; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java index 3c1f50461b63..4072b4442377 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java @@ -159,6 +159,7 @@ public class DndTile extends QSTile<QSTile.BooleanState> { final int zen = arg instanceof Integer ? (Integer) arg : mController.getZen(); final boolean newValue = zen != Global.ZEN_MODE_OFF; final boolean valueChanged = state.value != newValue; + state.dualTarget = true; state.value = newValue; state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE; checkIfRestrictionEnforcedByAdminOnly(state, UserManager.DISALLOW_ADJUST_VOLUME); diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java index 2d618576f5a9..90a9db6b189f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java @@ -150,6 +150,7 @@ public class WifiTile extends QSTile<QSTile.SignalState> { mDetailAdapter.setItemsVisible(cb.enabled); fireToggleStateChanged(cb.enabled); } + state.dualTarget = true; state.value = cb.enabled; state.connected = wifiConnected; state.activityIn = cb.enabled && cb.activityIn; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMenuRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMenuRow.java index fad63dd4f700..355022f9794c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMenuRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMenuRow.java @@ -30,6 +30,7 @@ import android.widget.FrameLayout; import java.util.ArrayList; +import com.android.systemui.Dependency; import com.android.systemui.Interpolators; import com.android.systemui.R; import com.android.systemui.plugins.PluginListener; @@ -82,10 +83,21 @@ public class NotificationMenuRow extends FrameLayout public NotificationMenuRow(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs); - PluginManager.getInstance(getContext()).addPluginListener( + mMenuItems.addAll(getDefaultNotificationMenuItems()); + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + Dependency.get(PluginManager.class).addPluginListener( NotificationMenuRowProvider.ACTION, this, NotificationMenuRowProvider.VERSION, false /* Allow multiple */); - mMenuItems.addAll(getDefaultNotificationMenuItems()); + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + Dependency.get(PluginManager.class).removePluginListener(this); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ScrimView.java b/packages/SystemUI/src/com/android/systemui/statusbar/ScrimView.java index dba7130793ca..f9d0cd61f037 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ScrimView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ScrimView.java @@ -20,6 +20,7 @@ import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; import android.content.Context; +import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; @@ -29,6 +30,7 @@ import android.graphics.Rect; import android.util.AttributeSet; import android.view.View; import android.view.animation.Interpolator; +import com.android.systemui.R; /** * A view which can draw a scrim @@ -73,6 +75,14 @@ public class ScrimView extends View public ScrimView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); + + TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.ScrimView); + + try { + mScrimColor = ta.getColor(R.styleable.ScrimView_scrimColor, Color.BLACK); + } finally { + ta.recycle(); + } } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java index 9a76ad650829..45eb5df43a06 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java @@ -220,7 +220,7 @@ public class SignalClusterView int endPadding = mMobileSignalGroup.getChildCount() > 0 ? mMobileSignalGroupEndPadding : 0; mMobileSignalGroup.setPaddingRelative(0, 0, endPadding, 0); - TunerService.get(mContext).addTunable(this, StatusBarIconController.ICON_BLACKLIST); + Dependency.get(TunerService.class).addTunable(this, StatusBarIconController.ICON_BLACKLIST); apply(); applyIconTint(); @@ -231,7 +231,7 @@ public class SignalClusterView @Override protected void onDetachedFromWindow() { mMobileSignalGroup.removeAllViews(); - TunerService.get(mContext).removeTunable(this); + Dependency.get(TunerService.class).removeTunable(this); mSecurityController.removeCallback(this); mNetworkController.removeCallback(this); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarNavigationBarController.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarNavigationBarController.java index 3bbda4be9fd1..7e08d5605f40 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarNavigationBarController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarNavigationBarController.java @@ -24,24 +24,22 @@ import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.support.v4.util.SimpleArrayMap; +import android.text.TextUtils; import android.util.Log; import android.util.SparseBooleanArray; import android.view.View; import android.widget.LinearLayout; - import com.android.systemui.R; -import com.android.systemui.ActivityStarter; import java.net.URISyntaxException; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; /** * A controller to populate data for CarNavigationBarView and handle user interactions. - * <p/> - * Each button inside the navigation bar is defined by data in arrays_car.xml. OEMs can customize - * the navigation buttons by updating arrays_car.xml appropriately in an overlay. + * + * <p>Each button inside the navigation bar is defined by data in arrays_car.xml. OEMs can + * customize the navigation buttons by updating arrays_car.xml appropriately in an overlay. */ class CarNavigationBarController { private static final String TAG = "CarNavBarController"; @@ -51,48 +49,49 @@ class CarNavigationBarController { private static final String EXTRA_FACET_ID = "filter_id"; private static final String EXTRA_FACET_LAUNCH_PICKER = "launch_picker"; - // Each facet of the navigation bar maps to a set of package names or categories defined in - // arrays_car.xml. Package names for a given facet are delimited by ";" - private static final String FACET_FILTER_DEMILITER = ";"; + /** + * Each facet of the navigation bar maps to a set of package names or categories defined in + * arrays_car.xml. Package names for a given facet are delimited by ";". + */ + private static final String FACET_FILTER_DELIMITER = ";"; + + private final Context mContext; + private final CarNavigationBarView mNavBar; + private final CarStatusBar mStatusBar; - private Context mContext; - private CarNavigationBarView mNavBar; - private CarStatusBar mStatusBar; + /** + * Set of categories each facet will filter on. + */ + private final List<String[]> mFacetCategories = new ArrayList<>(); - // Set of categories each facet will filter on. - private List<String[]> mFacetCategories = new ArrayList<String[]>(); - // Set of package names each facet will filter on. - private List<String[]> mFacetPackages = new ArrayList<String[]>(); + /** + * Set of package names each facet will filter on. + */ + private final List<String[]> mFacetPackages = new ArrayList<>(); - private SimpleArrayMap<String, Integer> mFacetCategoryMap - = new SimpleArrayMap<String, Integer>(); - private SimpleArrayMap<String, Integer> mFacetPackageMap - = new SimpleArrayMap<String, Integer>(); + private final SimpleArrayMap<String, Integer> mFacetCategoryMap = new SimpleArrayMap<>(); + private final SimpleArrayMap<String, Integer> mFacetPackageMap = new SimpleArrayMap<>(); - private List<Intent> mIntents; - private List<Intent> mLongPressIntents; + private final List<CarNavigationButton> mNavButtons = new ArrayList<>(); - private List<CarNavigationButton> mNavButtons = new ArrayList<CarNavigationButton>(); + private final SparseBooleanArray mFacetHasMultipleAppsCache = new SparseBooleanArray(); private int mCurrentFacetIndex; - private SparseBooleanArray mFacetHasMultipleAppsCache = new SparseBooleanArray(); - private Intent mPersistentTaskIntent; - public CarNavigationBarController(Context context, - CarNavigationBarView navBar, - CarStatusBar activityStarter) { + public CarNavigationBarController(Context context, CarNavigationBarView navBar, + CarStatusBar activityStarter) { mContext = context; mNavBar = navBar; mStatusBar = activityStarter; bind(); if (context.getResources().getBoolean(R.bool.config_enablePersistentDockedActivity)) { - setupPersistentDockedTask(context); + setupPersistentDockedTask(); } } - private void setupPersistentDockedTask(Context context) { + private void setupPersistentDockedTask() { try { mPersistentTaskIntent = Intent.parseUri( mContext.getString(R.string.config_persistentDockedActivityIntentUri), @@ -137,64 +136,85 @@ class CarNavigationBarController { } } + /** + * Iterates through the items in arrays_car.xml and sets up the facet bar buttons to + * perform the task in that configuration file when clicked or long-pressed. + */ private void bind() { - // Read up arrays_car.xml and populate the navigation bar here. - Resources r = mContext.getResources(); - TypedArray icons = r.obtainTypedArray(R.array.car_facet_icons); - TypedArray intents = r.obtainTypedArray(R.array.car_facet_intent_uris); - TypedArray longpressIntents = - r.obtainTypedArray(R.array.car_facet_longpress_intent_uris); - TypedArray facetPackageNames = r.obtainTypedArray(R.array.car_facet_package_filters); - - TypedArray facetCategories = r.obtainTypedArray(R.array.car_facet_category_filters); - - if (icons.length() != intents.length() - || icons.length() != longpressIntents.length() - || icons.length() != facetPackageNames.length() - || icons.length() != facetCategories.length()) { - throw new RuntimeException("car_facet array lengths do not match"); - } + Resources res = mContext.getResources(); - mIntents = createEmptyIntentList(icons.length()); - mLongPressIntents = createEmptyIntentList(icons.length()); + TypedArray icons = res.obtainTypedArray(R.array.car_facet_icons); + TypedArray intents = res.obtainTypedArray(R.array.car_facet_intent_uris); + TypedArray longPressIntents = res.obtainTypedArray(R.array.car_facet_longpress_intent_uris); + TypedArray facetPackageNames = res.obtainTypedArray(R.array.car_facet_package_filters); + TypedArray facetCategories = res.obtainTypedArray(R.array.car_facet_category_filters); - for (int i = 0; i < icons.length(); i++) { - Drawable icon = icons.getDrawable(i); - try { - mIntents.set(i, - Intent.parseUri(intents.getString(i), Intent.URI_INTENT_SCHEME)); + try { + if (icons.length() != intents.length() + || icons.length() != longPressIntents.length() + || icons.length() != facetPackageNames.length() + || icons.length() != facetCategories.length()) { + throw new RuntimeException("car_facet array lengths do not match"); + } - String longpressUri = longpressIntents.getString(i); - boolean hasLongpress = !longpressUri.isEmpty(); - if (hasLongpress) { - mLongPressIntents.set(i, - Intent.parseUri(longpressUri, Intent.URI_INTENT_SCHEME)); - } + for (int i = 0, size = icons.length(); i < size; i++) { + Drawable icon = icons.getDrawable(i); + CarNavigationButton button = createNavButton(icon); + initClickListeners(button, i, intents.getString(i), longPressIntents.getString(i)); - CarNavigationButton button = createNavButton(icon, i, hasLongpress); mNavButtons.add(button); - mNavBar.addButton(button, - createNavButton(icon, i, hasLongpress) /* lightsOutButton */); - - initFacetFilterMaps(i, - facetPackageNames.getString(i).split(FACET_FILTER_DEMILITER), - facetCategories.getString(i).split(FACET_FILTER_DEMILITER)); - mFacetHasMultipleAppsCache.put(i, facetHasMultiplePackages(i)); - } catch (URISyntaxException e) { - throw new RuntimeException("Malformed intent uri", e); + mNavBar.addButton(button, createNavButton(icon) /* lightsOutButton */); + + initFacetFilterMaps(i, facetPackageNames.getString(i).split(FACET_FILTER_DELIMITER), + facetCategories.getString(i).split(FACET_FILTER_DELIMITER)); + mFacetHasMultipleAppsCache.put(i, facetHasMultiplePackages(i)); + } + } finally { + // Clean up all the TypedArrays. + icons.recycle(); + intents.recycle(); + longPressIntents.recycle(); + facetPackageNames.recycle(); + facetCategories.recycle(); + } + } + + /** + * Recreates each of the buttons on a density or font scale change. This manual process is + * necessary since this class is not part of an activity that automatically gets recreated. + */ + public void onDensityOrFontScaleChanged() { + TypedArray icons = mContext.getResources().obtainTypedArray(R.array.car_facet_icons); + + try { + int length = icons.length(); + if (length != mNavButtons.size()) { + // This should not happen since the mNavButtons list is created from the length + // of the icons array in bind(). + throw new RuntimeException("car_facet array lengths do not match number of " + + "created buttons."); + } + + for (int i = 0; i < length; i++) { + Drawable icon = icons.getDrawable(i); + + // Setting a new icon will trigger a requestLayout() call if necessary. + mNavButtons.get(i).setResources(icon); } + } finally { + icons.recycle(); } } private void initFacetFilterMaps(int id, String[] packageNames, String[] categories) { mFacetCategories.add(categories); - for (int i = 0; i < categories.length; i++) { - mFacetCategoryMap.put(categories[i], id); + for (String category : categories) { + mFacetCategoryMap.put(category, id); } mFacetPackages.add(packageNames); - for (int i = 0; i < packageNames.length; i++) { - mFacetPackageMap.put(packageNames[i], id); + for (String packageName : packageNames) { + mFacetPackageMap.put(packageName, id); } } @@ -223,8 +243,10 @@ class CarNavigationBarController { } /** - * Helper method to check if a given facet has multiple packages associated with it. - * This can be resource defined package names or package names filtered by facet category. + * Helper method to check if a given facet has multiple packages associated with it. This can + * be resource defined package names or package names filtered by facet category. + * + * @return {@code true} if the facet at the given index has more than one package. */ private boolean facetHasMultiplePackages(int index) { PackageManager pm = mContext.getPackageManager(); @@ -259,6 +281,10 @@ class CarNavigationBarController { return false; } + /** + * Sets the facet at the given index to be the facet that is currently active. The button will + * be highlighted appropriately. + */ private void setCurrentFacet(int index) { if (index == mCurrentFacetIndex) { return; @@ -273,11 +299,16 @@ class CarNavigationBarController { mNavButtons.get(index).setSelected(true /* selected */, mFacetHasMultipleAppsCache.get(index) /* showMoreIcon */); } + mCurrentFacetIndex = index; } - private CarNavigationButton createNavButton(Drawable icon, final int id, - boolean longClickEnabled) { + /** + * Creates the View that is used for the buttons along the navigation bar. + * + * @param icon The icon to be used for the button. + */ + private CarNavigationButton createNavButton(Drawable icon) { CarNavigationButton button = (CarNavigationButton) View.inflate(mContext, R.layout.car_navigation_button, null); button.setResources(icon); @@ -285,37 +316,49 @@ class CarNavigationBarController { new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1); button.setLayoutParams(lp); - button.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - onFacetClicked(id); - } - }); - - if (longClickEnabled) { - button.setLongClickable(true); - button.setOnLongClickListener(new View.OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - onFacetLongClicked(id); - return true; - } - }); - } else { - button.setLongClickable(false); - } - return button; } - private void startActivity(Intent intent, ActivityStarter.Callback callback) { - if (mStatusBar != null && intent != null) { - mStatusBar.startActivity(intent, false, callback); + /** + * Initializes the click and long click listeners that correspond to the given command string. + * The click listeners are attached to the given button. + */ + private void initClickListeners(View button, int index, String clickString, + String longPressString) { + // Each button at least have an action when pressed. + if (TextUtils.isEmpty(clickString)) { + throw new RuntimeException("Facet at index " + index + " does not have click action."); + } + + try { + Intent intent = Intent.parseUri(clickString, Intent.URI_INTENT_SCHEME); + button.setOnClickListener(v -> onFacetClicked(intent, index)); + } catch (URISyntaxException e) { + throw new RuntimeException("Malformed intent uri", e); + } + + if (TextUtils.isEmpty(longPressString)) { + button.setLongClickable(false); + return; + } + + try { + Intent intent = Intent.parseUri(longPressString, Intent.URI_INTENT_SCHEME); + button.setOnLongClickListener(v -> { + onFacetLongClicked(intent, index); + return true; + }); + } catch (URISyntaxException e) { + throw new RuntimeException("Malformed long-press intent uri", e); } } - private void onFacetClicked(int index) { - Intent intent = mIntents.get(index); + /** + * Handles a click on a facet. A click will trigger the given Intent. + * + * @param index The index of the facet that was clicked. + */ + private void onFacetClicked(Intent intent, int index) { String packageName = intent.getPackage(); if (packageName == null) { @@ -341,13 +384,13 @@ class CarNavigationBarController { mStatusBar.startActivityOnStack(intent, stackId); } - private void onFacetLongClicked(int index) { + /** + * Handles a long-press on a facet. The long-press will trigger the given Intent. + * + * @param index The index of the facet that was clicked. + */ + private void onFacetLongClicked(Intent intent, int index) { setCurrentFacet(index); - mStatusBar.startActivityOnStack(mLongPressIntents.get(index), - StackId.FULLSCREEN_WORKSPACE_STACK_ID); - } - - private List<Intent> createEmptyIntentList(int size) { - return Arrays.asList(new Intent[size]); + mStatusBar.startActivityOnStack(intent, StackId.FULLSCREEN_WORKSPACE_STACK_ID); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java index f6a56875d6b2..41613894252a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java @@ -35,10 +35,12 @@ import android.widget.LinearLayout; import com.android.systemui.BatteryMeterView; import com.android.systemui.Dependency; import com.android.systemui.R; +import com.android.systemui.SwipeHelper; import com.android.systemui.recents.Recents; import com.android.systemui.recents.misc.SystemServicesProxy; import com.android.systemui.recents.misc.SystemServicesProxy.TaskStackListener; import com.android.systemui.statusbar.StatusBarState; +import com.android.systemui.statusbar.phone.NavigationBarView; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.PhoneStatusBarView; import com.android.systemui.statusbar.policy.BatteryController; @@ -51,10 +53,8 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.BatteryViewHandler { private static final String TAG = "CarStatusBar"; - private SystemServicesProxy mSystemServicesProxy; private TaskStackListenerImpl mTaskStackListener; - private CarNavigationBarView mCarNavigationBar; private CarNavigationBarController mController; private FullscreenUserSwitcher mFullscreenUserSwitcher; @@ -62,7 +62,6 @@ public class CarStatusBar extends StatusBar implements private BatteryMeterView mBatteryMeterView; private ConnectedDeviceSignalController mConnectedDeviceSignalController; - private View mSignalsView; private CarNavigationBarView mNavigationBarView; @Override @@ -72,6 +71,8 @@ public class CarStatusBar extends StatusBar implements SystemServicesProxy.getInstance(mContext).registerTaskStackListener(mTaskStackListener); registerPackageChangeReceivers(); + mStackScroller.setScrollingEnabled(true); + createBatteryController(); mCarBatteryController.startListening(); mConnectedDeviceSignalController.startListening(); @@ -96,16 +97,16 @@ public class CarStatusBar extends StatusBar implements mBatteryMeterView.setVisibility(View.GONE); ViewStub stub = (ViewStub) statusBarView.findViewById(R.id.connected_device_signals_stub); - mSignalsView = stub.inflate(); + View signalsView = stub.inflate(); // When a ViewStub if inflated, it does not respect the margins on the inflated view. // As a result, manually add the ending margin. - ((LinearLayout.LayoutParams) mSignalsView.getLayoutParams()).setMarginEnd( + ((LinearLayout.LayoutParams) signalsView.getLayoutParams()).setMarginEnd( mContext.getResources().getDimensionPixelOffset( R.dimen.status_bar_connected_device_signal_margin_end)); mConnectedDeviceSignalController = new ConnectedDeviceSignalController(mContext, - mSignalsView); + signalsView); if (Log.isLoggable(TAG, Log.DEBUG)) { Log.d(TAG, "makeStatusBarView(). mBatteryMeterView: " + mBatteryMeterView); @@ -126,12 +127,11 @@ public class CarStatusBar extends StatusBar implements return; } - mCarNavigationBar = - (CarNavigationBarView) View.inflate(mContext, R.layout.car_navigation_bar, null); - mController = new CarNavigationBarController(mContext, mCarNavigationBar, + mNavigationBarView = (CarNavigationBarView) View.inflate(mContext, + R.layout.car_navigation_bar, null); + mController = new CarNavigationBarController(mContext, mNavigationBarView, this /* ActivityStarter*/); - mNavigationBarView = mCarNavigationBar; - mCarNavigationBar.getBarTransitions().setAlwaysOpaque(true); + mNavigationBarView.getBarTransitions().setAlwaysOpaque(true); WindowManager.LayoutParams lp = new WindowManager.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.TYPE_NAVIGATION_BAR, @@ -148,6 +148,31 @@ public class CarStatusBar extends StatusBar implements } @Override + public NavigationBarView getNavigationBarView() { + return mNavigationBarView; + } + + @Override + protected View.OnTouchListener getStatusBarWindowTouchListener() { + // Usually, a touch on the background window will dismiss the notification shade. However, + // for the car use-case, the shade should remain unless the user switches to a different + // facet (e.g. phone). + return null; + } + + /** + * Returns the {@link com.android.systemui.SwipeHelper.LongPressListener} that will be + * triggered when a notification card is long-pressed. + */ + @Override + protected SwipeHelper.LongPressListener getNotificationLongClicker() { + // For the automative use case, we do not want to the user to be able to interact with + // a notification other than a regular click. As a result, just return null for the + // long click listener. + return null; + } + + @Override public void showBatteryView() { if (Log.isLoggable(TAG, Log.DEBUG)) { Log.d(TAG, "showBatteryView(). mBatteryMeterView: " + mBatteryMeterView); @@ -272,4 +297,14 @@ public class CarStatusBar extends StatusBar implements options.setLaunchStackId(stackId); return startActivityWithOptions(intent, options.toBundle()); } + + /** + * Ensures that relevant child views are appropriately recreated when the device's density + * changes. + */ + @Override + protected void onDensityOrFontScaleChanged() { + super.onDensityOrFontScaleChanged(); + mController.onDensityOrFontScaleChanged(); + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java index bfc0a80b3150..14f991997e35 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java @@ -35,6 +35,7 @@ import android.content.ServiceConnection; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; +import android.content.res.AssetFileDescriptor.AutoCloseOutputStream; import android.content.res.Configuration; import android.graphics.drawable.Drawable; import android.os.AsyncTask; @@ -58,6 +59,7 @@ import android.view.accessibility.AccessibilityNodeInfo; import android.widget.FrameLayout; import android.widget.TextView; +import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; @@ -164,6 +166,7 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL private IntentButton mLeftDefault = mLeftButton; private IntentButton mLeftPlugin; private String mLeftButtonStr; + private LockscreenGestureLogger mLockscreenGestureLogger = new LockscreenGestureLogger(); public KeyguardBottomAreaView(Context context) { this(context, null); @@ -257,11 +260,11 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL protected void onAttachedToWindow() { super.onAttachedToWindow(); mAccessibilityController.addStateChangedCallback(this); - PluginManager.getInstance(getContext()).addPluginListener(RIGHT_BUTTON_PLUGIN, + Dependency.get(PluginManager.class).addPluginListener(RIGHT_BUTTON_PLUGIN, mRightListener, IntentButtonProvider.VERSION, false /* Only allow one */); - PluginManager.getInstance(getContext()).addPluginListener(LEFT_BUTTON_PLUGIN, + Dependency.get(PluginManager.class).addPluginListener(LEFT_BUTTON_PLUGIN, mLeftListener, IntentButtonProvider.VERSION, false /* Only allow one */); - TunerService.get(getContext()).addTunable(this, LockscreenFragment.LOCKSCREEN_LEFT_BUTTON, + Dependency.get(TunerService.class).addTunable(this, LockscreenFragment.LOCKSCREEN_LEFT_BUTTON, LockscreenFragment.LOCKSCREEN_RIGHT_BUTTON); } @@ -269,9 +272,9 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL protected void onDetachedFromWindow() { super.onDetachedFromWindow(); mAccessibilityController.removeStateChangedCallback(this); - PluginManager.getInstance(getContext()).removePluginListener(mRightListener); - PluginManager.getInstance(getContext()).removePluginListener(mLeftListener); - TunerService.get(getContext()).removeTunable(this); + Dependency.get(PluginManager.class).removePluginListener(mRightListener); + Dependency.get(PluginManager.class).removePluginListener(mLeftListener); + Dependency.get(TunerService.class).removeTunable(this); } private void initAccessibility() { @@ -445,8 +448,7 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL } private void handleTrustCircleClick() { - EventLogTags.writeSysuiLockscreenGesture( - EventLogConstants.SYSUI_LOCKSCREEN_GESTURE_TAP_LOCK, 0 /* lengthDp - N/A */, + mLockscreenGestureLogger.write(MetricsEvent.ACTION_LS_LOCK, 0 /* lengthDp - N/A */, 0 /* velocityDp - N/A */); mIndicationController.showTransientIndication( R.string.keyguard_indication_trust_disabled); @@ -573,7 +575,7 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL AsyncTask.execute(runnable); } else { boolean dismissShade = !TextUtils.isEmpty(mRightButtonStr) - && TunerService.get(getContext()).getValue(LOCKSCREEN_RIGHT_UNLOCK, 1) != 0; + && Dependency.get(TunerService.class).getValue(LOCKSCREEN_RIGHT_UNLOCK, 1) != 0; mStatusBar.executeRunnableDismissingKeyguard(runnable, null /* cancelAction */, dismissShade, false /* afterKeyguardGone */, true /* deferred */); } @@ -594,7 +596,7 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL }); } else { boolean dismissShade = !TextUtils.isEmpty(mLeftButtonStr) - && TunerService.get(getContext()).getValue(LOCKSCREEN_LEFT_UNLOCK, 1) != 0; + && Dependency.get(TunerService.class).getValue(LOCKSCREEN_LEFT_UNLOCK, 1) != 0; mActivityStarter.startActivity(mLeftButton.getIntent(), dismissShade); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenGestureLogger.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenGestureLogger.java new file mode 100644 index 000000000000..83b96bfc4faf --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenGestureLogger.java @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2017 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 + */ + +package com.android.systemui.statusbar.phone; + +import android.metrics.LogMaker; +import android.util.ArrayMap; + +import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.nano.MetricsProto.MetricsEvent; +import com.android.systemui.EventLogConstants; +import com.android.systemui.EventLogTags; + +/** + * Wrapper that emits both new- and old-style gesture logs. + * TODO: delete this once the old logs are no longer needed. + */ +public class LockscreenGestureLogger { + private ArrayMap<Integer, Integer> mLegacyMap; + private LogMaker mLogMaker = new LogMaker(MetricsEvent.VIEW_UNKNOWN) + .setType(MetricsEvent.TYPE_ACTION); + + public LockscreenGestureLogger() { + mLegacyMap = new ArrayMap<>(EventLogConstants.METRICS_GESTURE_TYPE_MAP.length); + for (int i = 0; i < EventLogConstants.METRICS_GESTURE_TYPE_MAP.length ; i++) { + mLegacyMap.put(EventLogConstants.METRICS_GESTURE_TYPE_MAP[i], i); + } + } + + public void write(int gesture, int length, int velocity) { + MetricsLogger.action(mLogMaker.setCategory(gesture) + .setType(MetricsEvent.TYPE_ACTION) + .addTaggedData(MetricsEvent.FIELD_GESTURE_LENGTH, length) + .addTaggedData(MetricsEvent.FIELD_GESTURE_VELOCITY, velocity)); + // also write old-style logs for backward-0compatibility + EventLogTags.writeSysuiLockscreenGesture(safeLookup(gesture), length, velocity); + } + + private int safeLookup(int gesture) { + Integer value = mLegacyMap.get(gesture); + if (value == null) { + return MetricsEvent.VIEW_UNKNOWN; + } + return value; + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java index 228e8ea843b5..ee9a791585c4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java @@ -29,6 +29,7 @@ import android.view.ViewConfiguration; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.policy.DividerSnapAlgorithm.SnapTarget; +import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.RecentsComponent; import com.android.systemui.plugins.statusbar.phone.NavGesture.GestureHelper; @@ -87,7 +88,11 @@ public class NavigationBarGestureHelper extends GestureDetector.SimpleOnGestureL mScrollTouchSlop = r.getDimensionPixelSize(R.dimen.navigation_bar_min_swipe_distance); mMinFlingVelocity = configuration.getScaledMinimumFlingVelocity(); mTaskSwitcherDetector = new GestureDetector(context, this); - TunerService.get(context).addTunable(this, KEY_DOCK_WINDOW_GESTURE); + Dependency.get(TunerService.class).addTunable(this, KEY_DOCK_WINDOW_GESTURE); + } + + public void destroy() { + Dependency.get(TunerService.class).removeTunable(this); } public void setComponents(RecentsComponent recentsComponent, Divider divider, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java index 9b4867ec7c9e..5fb99dabfeab 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java @@ -30,6 +30,7 @@ import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.Space; +import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.plugins.PluginListener; import com.android.systemui.plugins.PluginManager; @@ -135,15 +136,16 @@ public class NavigationBarInflaterView extends FrameLayout @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); - TunerService.get(getContext()).addTunable(this, NAV_BAR_VIEWS, NAV_BAR_LEFT, + Dependency.get(TunerService.class).addTunable(this, NAV_BAR_VIEWS, NAV_BAR_LEFT, NAV_BAR_RIGHT); - PluginManager.getInstance(getContext()).addPluginListener(NavBarButtonProvider.ACTION, this, + Dependency.get(PluginManager.class).addPluginListener(NavBarButtonProvider.ACTION, this, NavBarButtonProvider.VERSION, true /* Allow multiple */); } @Override protected void onDetachedFromWindow() { - TunerService.get(getContext()).removeTunable(this); + Dependency.get(TunerService.class).removeTunable(this); + Dependency.get(PluginManager.class).removePluginListener(this); super.onDetachedFromWindow(); } @@ -278,10 +280,10 @@ public class NavigationBarInflaterView extends FrameLayout View v = null; String button = extractButton(buttonSpec); if (LEFT.equals(button)) { - buttonSpec = TunerService.get(mContext).getValue(NAV_BAR_LEFT, NAVSPACE); + buttonSpec = Dependency.get(TunerService.class).getValue(NAV_BAR_LEFT, NAVSPACE); button = extractButton(buttonSpec); } else if (RIGHT.equals(button)) { - buttonSpec = TunerService.get(mContext).getValue(NAV_BAR_RIGHT, MENU_IME); + buttonSpec = Dependency.get(TunerService.class).getValue(NAV_BAR_RIGHT, MENU_IME); button = extractButton(buttonSpec); } // Let plugins go first so they can override a standard view if they want. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java index 5e988fcaae74..dced747968aa 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java @@ -46,6 +46,7 @@ import android.view.WindowManagerGlobal; import android.view.inputmethod.InputMethodManager; import android.widget.FrameLayout; +import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.RecentsComponent; import com.android.systemui.plugins.PluginListener; @@ -200,7 +201,6 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav mVertical = false; mShowMenu = false; - mGestureHelper = new NavigationBarGestureHelper(context); mConfiguration = new Configuration(); mConfiguration.updateFrom(context.getResources().getConfiguration()); @@ -633,6 +633,7 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav } private void updateTaskSwitchHelper() { + if (mGestureHelper == null) return; boolean isRtl = (getLayoutDirection() == View.LAYOUT_DIRECTION_RTL); mGestureHelper.setBarState(mVertical, isRtl); } @@ -752,14 +753,18 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); - PluginManager.getInstance(getContext()).addPluginListener(NavGesture.ACTION, this, + onPluginDisconnected(null); // Create default gesture helper + Dependency.get(PluginManager.class).addPluginListener(NavGesture.ACTION, this, NavGesture.VERSION, false /* Only one */); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); - PluginManager.getInstance(getContext()).removePluginListener(this); + Dependency.get(PluginManager.class).removePluginListener(this); + if (mGestureHelper != null) { + mGestureHelper.destroy(); + } } @Override @@ -772,6 +777,9 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav public void onPluginDisconnected(NavGesture plugin) { NavigationBarGestureHelper defaultHelper = new NavigationBarGestureHelper(getContext()); defaultHelper.setComponents(mRecentsComponent, mDivider, this); + if (mGestureHelper != null) { + mGestureHelper.destroy(); + } mGestureHelper = defaultHelper; updateTaskSwitchHelper(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java index fe7e915f42f6..5da3a101b4bb 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java @@ -26,6 +26,7 @@ import android.app.StatusBarManager; import android.content.Context; import android.content.pm.ResolveInfo; import android.content.res.Configuration; +import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; @@ -43,6 +44,7 @@ import android.widget.FrameLayout; import android.widget.TextView; import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.keyguard.KeyguardStatusView; import com.android.systemui.DejankUtils; import com.android.systemui.EventLogConstants; @@ -137,6 +139,7 @@ public class NotificationPanelView extends PanelView implements protected int mQsMinExpansionHeight; protected int mQsMaxExpansionHeight; private int mQsPeekHeight; + private boolean mQsOverscrollExpansionEnabled; private boolean mStackScrollerOverscrolling; private boolean mQsExpansionFromOverscroll; private float mLastOverscroll; @@ -212,11 +215,14 @@ public class NotificationPanelView extends PanelView implements private int mIndicationBottomPadding; private boolean mIsFullWidth; private boolean mDark; + private LockscreenGestureLogger mLockscreenGestureLogger = new LockscreenGestureLogger(); public NotificationPanelView(Context context, AttributeSet attrs) { super(context, attrs); setWillNotDraw(!DEBUG); mFalsingManager = FalsingManager.getInstance(context); + mQsOverscrollExpansionEnabled = + getResources().getBoolean(R.bool.config_enableQuickSettingsOverscrollExpansion); } public void setStatusBar(StatusBar bar) { @@ -596,7 +602,8 @@ public class NotificationPanelView extends PanelView implements MetricsLogger.count(mContext, COUNTER_PANEL_OPEN_PEEK, 1); return true; } - if (!isFullyCollapsed() && onQsIntercept(event)) { + + if (mQsOverscrollExpansionEnabled && !isFullyCollapsed() && onQsIntercept(event)) { return true; } return super.onInterceptTouchEvent(event); @@ -710,10 +717,9 @@ public class NotificationPanelView extends PanelView implements private void logQsSwipeDown(float y) { float vel = getCurrentQSVelocity(); final int gesture = mStatusBarState == StatusBarState.KEYGUARD - ? EventLogConstants.SYSUI_LOCKSCREEN_GESTURE_SWIPE_DOWN_QS - : EventLogConstants.SYSUI_SHADE_GESTURE_SWIPE_DOWN_QS; - EventLogTags.writeSysuiLockscreenGesture( - gesture, + ? MetricsEvent.ACTION_LS_QS + : MetricsEvent.ACTION_SHADE_QS_PULL; + mLockscreenGestureLogger.write(gesture, (int) ((y - mInitialTouchY) / mStatusBar.getDisplayDensity()), (int) (vel / mStatusBar.getDisplayDensity())); } @@ -770,7 +776,9 @@ public class NotificationPanelView extends PanelView implements return true; } mHeadsUpTouchHelper.onTouchEvent(event); - if (!mHeadsUpTouchHelper.isTrackingHeadsUp() && handleQsTouch(event)) { + + if (mQsOverscrollExpansionEnabled && !mHeadsUpTouchHelper.isTrackingHeadsUp() + && handleQsTouch(event)) { return true; } if (event.getActionMasked() == MotionEvent.ACTION_DOWN && isFullyCollapsed()) { @@ -953,6 +961,10 @@ public class NotificationPanelView extends PanelView implements @Override public void onOverscrollTopChanged(float amount, boolean isRubberbanded) { + if (!mQsOverscrollExpansionEnabled) { + return; + } + cancelQsAnimation(); if (!mQsExpansionEnabled) { amount = 0f; @@ -967,6 +979,10 @@ public class NotificationPanelView extends PanelView implements @Override public void flingTopOverscroll(float velocity, boolean open) { + if (!mQsOverscrollExpansionEnabled) { + return; + } + mLastOverscroll = 0f; mQsExpansionFromOverscroll = false; setQsExpansion(mQsExpansionHeight); @@ -1819,9 +1835,7 @@ public class NotificationPanelView extends PanelView implements if (mQsExpanded) { flingSettings(0 /* vel */, false /* expand */, null, true /* isClick */); } else if (mQsExpansionEnabled) { - EventLogTags.writeSysuiLockscreenGesture( - EventLogConstants.SYSUI_TAP_TO_OPEN_QS, - 0, 0); + mLockscreenGestureLogger.write(MetricsEvent.ACTION_SHADE_QS_TAP, 0, 0); flingSettings(0 /* vel */, true /* expand */, null, true /* isClick */); } } @@ -1836,8 +1850,7 @@ public class NotificationPanelView extends PanelView implements int lengthDp = Math.abs((int) (translation / displayDensity)); int velocityDp = Math.abs((int) (vel / displayDensity)); if (start) { - EventLogTags.writeSysuiLockscreenGesture( - EventLogConstants.SYSUI_LOCKSCREEN_GESTURE_SWIPE_DIALER, lengthDp, velocityDp); + mLockscreenGestureLogger.write(MetricsEvent.ACTION_LS_DIALER, lengthDp, velocityDp); mFalsingManager.onLeftAffordanceOn(); if (mFalsingManager.shouldEnforceBouncer()) { @@ -1855,9 +1868,7 @@ public class NotificationPanelView extends PanelView implements } else { if (KeyguardBottomAreaView.CAMERA_LAUNCH_SOURCE_AFFORDANCE.equals( mLastCameraLaunchSource)) { - EventLogTags.writeSysuiLockscreenGesture( - EventLogConstants.SYSUI_LOCKSCREEN_GESTURE_SWIPE_CAMERA, - lengthDp, velocityDp); + mLockscreenGestureLogger.write(MetricsEvent.ACTION_LS_CAMERA, lengthDp, velocityDp); } mFalsingManager.onCameraOn(); if (mFalsingManager.shouldEnforceBouncer()) { @@ -2152,8 +2163,8 @@ public class NotificationPanelView extends PanelView implements switch (mStatusBar.getBarState()) { case StatusBarState.KEYGUARD: if (!mDozingOnDown) { - EventLogTags.writeSysuiLockscreenGesture( - EventLogConstants.SYSUI_LOCKSCREEN_GESTURE_TAP_UNLOCK_HINT, + mLockscreenGestureLogger.write( + MetricsEvent.ACTION_LS_HINT, 0 /* lengthDp - N/A */, 0 /* velocityDp - N/A */); startUnlockHintAnimation(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java index 5f674685f885..48a8329d085e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java @@ -33,6 +33,7 @@ import android.view.ViewTreeObserver; import android.view.animation.Interpolator; import android.widget.FrameLayout; +import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.systemui.DejankUtils; import com.android.systemui.EventLogConstants; import com.android.systemui.EventLogTags; @@ -55,6 +56,7 @@ public abstract class PanelView extends FrameLayout { private static final int PEEK_ANIMATION_DURATION = 360; private long mDownTime; private float mMinExpandHeight; + private LockscreenGestureLogger mLockscreenGestureLogger = new LockscreenGestureLogger(); private final void logf(String fmt, Object... args) { Log.v(TAG, (mViewName != null ? (mViewName + ": ") : "") + String.format(fmt, args)); @@ -110,6 +112,11 @@ public abstract class PanelView extends FrameLayout { private float mInitialTouchX; private boolean mTouchDisabled; + /** + * Whether or not the PanelView can be expanded or collapsed with a drag. + */ + private boolean mNotificationsDragEnabled; + private Interpolator mBounceInterpolator; protected KeyguardBottomAreaView mKeyguardBottomArea; @@ -190,6 +197,8 @@ public abstract class PanelView extends FrameLayout { 0.84f /* y2 */); mBounceInterpolator = new BounceInterpolator(); mFalsingManager = FalsingManager.getInstance(context); + mNotificationsDragEnabled = + getResources().getBoolean(R.bool.config_enableNotificationShadeDrag); } protected void loadDimens() { @@ -232,6 +241,15 @@ public abstract class PanelView extends FrameLayout { return false; } + // If dragging should not expand the notifications shade, then return false. + if (!mNotificationsDragEnabled) { + if (mTracking) { + // Turn off tracking if it's on or the shade can get stuck in the down position. + onTrackingStopped(true /* expand */); + } + return false; + } + // On expanding, single mouse click expands the panel instead of dragging. if (isFullyCollapsed() && event.isFromSource(InputDevice.SOURCE_MOUSE)) { if (event.getAction() == MotionEvent.ACTION_UP) { @@ -423,8 +441,8 @@ public abstract class PanelView extends FrameLayout { float displayDensity = mStatusBar.getDisplayDensity(); int heightDp = (int) Math.abs((y - mInitialTouchY) / displayDensity); int velocityDp = (int) Math.abs(vel / displayDensity); - EventLogTags.writeSysuiLockscreenGesture( - EventLogConstants.SYSUI_LOCKSCREEN_GESTURE_SWIPE_UP_UNLOCK, + mLockscreenGestureLogger.write( + MetricsEvent.ACTION_LS_UNLOCK, heightDp, velocityDp); } fling(vel, expand, isFalseTouch(x, y)); @@ -487,7 +505,7 @@ public abstract class PanelView extends FrameLayout { @Override public boolean onInterceptTouchEvent(MotionEvent event) { - if (mInstantExpanding + if (mInstantExpanding || !mNotificationsDragEnabled || (mMotionAborted && event.getActionMasked() != MotionEvent.ACTION_DOWN)) { return false; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java index dd567e8c802b..a1022c4757a5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java @@ -89,7 +89,7 @@ public class QSTileHost implements QSTile.Host, Tunable { mServices = new TileServices(this, Dependency.get(Dependency.BG_LOOPER)); - TunerService.get(mContext).addTunable(this, TILES_SETTING); + Dependency.get(TunerService.class).addTunable(this, TILES_SETTING); // AutoTileManager can modify mTiles so make sure mTiles has already been initialized. mAutoTiles = new AutoTileManager(context, this); } @@ -101,7 +101,7 @@ public class QSTileHost implements QSTile.Host, Tunable { public void destroy() { mTiles.values().forEach(tile -> tile.destroy()); mAutoTiles.destroy(); - TunerService.get(mContext).removeTunable(this); + Dependency.get(TunerService.class).removeTunable(this); mServices.destroy(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java index c0e96533aaf9..4307a2e1ac6b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java @@ -21,12 +21,14 @@ import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; +import android.content.res.Resources; import android.graphics.Color; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.graphics.drawable.RippleDrawable; import android.icu.text.NumberFormat; import android.os.UserManager; +import android.support.annotation.Nullable; import android.support.annotation.VisibleForTesting; import android.util.AttributeSet; import android.util.SparseBooleanArray; @@ -67,9 +69,6 @@ import com.android.systemui.tuner.TunerService; public class QuickStatusBarHeader extends BaseStatusBarHeader implements NextAlarmChangeCallback, OnClickListener, OnUserInfoChangedListener, EmergencyListener, BatteryStateChangeCallback, SignalCallback { - - private static final String TAG = "QuickStatusBarHeader"; - private static final float EXPAND_INDICATOR_THRESHOLD = .93f; private ActivityStarter mActivityStarter; @@ -99,13 +98,16 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements private boolean mShowEmergencyCallsOnly; protected MultiUserSwitch mMultiUserSwitch; private ImageView mMultiUserAvatar; - + private boolean mAlwaysShowMultiUserSwitch; private TouchAnimator mAnimator; protected TouchAnimator mSettingsAlpha; private float mExpansionAmount; protected QSTileHost mHost; + protected View mEdit; + private boolean mShowEditIcon; + private boolean mShowFullAlarm; private float mDateTimeTranslation; private TextView mBatteryLevel; @@ -119,25 +121,37 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements @Override protected void onFinishInflate() { super.onFinishInflate(); + Resources res = getResources(); mEmergencyOnly = (TextView) findViewById(R.id.header_emergency_calls_only); + mShowEditIcon = res.getBoolean(R.bool.config_showQuickSettingsEditingIcon); + mEdit = findViewById(android.R.id.edit); - findViewById(android.R.id.edit).setOnClickListener(view -> - Dependency.get(ActivityStarter.class).postQSRunnableDismissingKeyguard(() -> - mQsPanel.showEdit(view))); + mEdit.setVisibility(mShowEditIcon ? VISIBLE : GONE); + + if (mShowEditIcon) { + findViewById(android.R.id.edit).setOnClickListener(view -> + Dependency.get(ActivityStarter.class).postQSRunnableDismissingKeyguard(() -> + mQsPanel.showEdit(view))); + } mDateTimeAlarmGroup = (ViewGroup) findViewById(R.id.date_time_alarm_group); mDateTimeAlarmGroup.findViewById(R.id.empty_time_view).setVisibility(View.GONE); mDateTimeGroup = (ViewGroup) findViewById(R.id.date_time_group); mDateTimeGroup.setPivotX(0); mDateTimeGroup.setPivotY(0); - mDateTimeTranslation = getResources().getDimension(R.dimen.qs_date_time_translation); - mShowFullAlarm = getResources().getBoolean(R.bool.quick_settings_show_full_alarm); + mDateTimeTranslation = res.getDimension(R.dimen.qs_date_time_translation); + mShowFullAlarm = res.getBoolean(R.bool.quick_settings_show_full_alarm); mExpandIndicator = (ExpandableIndicator) findViewById(R.id.expand_indicator); + mExpandIndicator.setVisibility( + res.getBoolean(R.bool.config_showQuickSettingsExpandIndicator) + ? VISIBLE : GONE); mHeaderQsPanel = (QuickQSPanel) findViewById(R.id.quick_qs_panel); + mHeaderQsPanel.setVisibility(res.getBoolean(R.bool.config_showQuickSettingsRow) + ? VISIBLE : GONE); mSettingsButton = (SettingsButton) findViewById(R.id.settings_button); mSettingsContainer = findViewById(R.id.settings_button_container); @@ -151,6 +165,7 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements mMultiUserSwitch = (MultiUserSwitch) findViewById(R.id.multi_user_switch); mMultiUserAvatar = (ImageView) mMultiUserSwitch.findViewById(R.id.multi_user_avatar); + mAlwaysShowMultiUserSwitch = res.getBoolean(R.bool.config_alwaysShowMultiUserSwitcher); // RenderThread is doing more harm than good when touching the header (to expand quick // settings), so disable it for this view @@ -200,11 +215,8 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements updateSettingsAnimator(); } - protected void updateSettingsAnimator() { - mSettingsAlpha = new TouchAnimator.Builder() - .addFloat(mEdit, "alpha", 0, 1) - .addFloat(mMultiUserSwitch, "alpha", 0, 1) - .build(); + private void updateSettingsAnimator() { + mSettingsAlpha = createSettingsAlphaAnimator(); final boolean isRtl = isLayoutRtl(); if (isRtl && mDateTimeGroup.getWidth() == 0) { @@ -221,6 +233,27 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements } } + @Nullable + private TouchAnimator createSettingsAlphaAnimator() { + // If the settings icon is not shown and the user switcher is always shown, then there + // is nothing to animate. + if (!mShowEditIcon && mAlwaysShowMultiUserSwitch) { + return null; + } + + TouchAnimator.Builder animatorBuilder = new TouchAnimator.Builder(); + + if (mShowEditIcon) { + animatorBuilder.addFloat(mEdit, "alpha", 0, 1); + } + + if (!mAlwaysShowMultiUserSwitch) { + animatorBuilder.addFloat(mMultiUserSwitch, "alpha", 0, 1); + } + + return animatorBuilder.build(); + } + @Override public int getCollapsedHeight() { return getHeight(); @@ -261,7 +294,10 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements mExpansionAmount = headerExpansionFraction; updateDateTimePosition(); mAnimator.setPosition(headerExpansionFraction); - mSettingsAlpha.setPosition(headerExpansionFraction); + + if (mSettingsAlpha != null) { + mSettingsAlpha.setPosition(headerExpansionFraction); + } updateAlarmVisibilities(); @@ -302,7 +338,7 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements }); } - protected void updateVisibilities() { + private void updateVisibilities() { updateAlarmVisibilities(); updateDateTimePosition(); mEmergencyOnly.setVisibility(mExpanded && (mShowEmergencyCallsOnly || mIsRoaming) @@ -310,9 +346,14 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements mSettingsContainer.findViewById(R.id.tuner_icon).setVisibility( TunerService.isTunerEnabled(mContext) ? View.VISIBLE : View.INVISIBLE); final boolean isDemo = UserManager.isDeviceInDemoMode(mContext); - mMultiUserSwitch.setVisibility(mExpanded && mMultiUserSwitch.hasMultipleUsers() && !isDemo + + mMultiUserSwitch.setVisibility((mExpanded || mAlwaysShowMultiUserSwitch) + && mMultiUserSwitch.hasMultipleUsers() && !isDemo ? View.VISIBLE : View.INVISIBLE); - mEdit.setVisibility(isDemo || !mExpanded ? View.INVISIBLE : View.VISIBLE); + + if (mShowEditIcon) { + mEdit.setVisibility(isDemo || !mExpanded ? View.INVISIBLE : View.VISIBLE); + } } private void updateDateTimePosition() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java index 8fcbf38db2df..b30d3abc2375 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -23,13 +23,13 @@ import android.animation.ValueAnimator; import android.content.Context; import android.graphics.Rect; import android.support.v4.graphics.ColorUtils; +import android.util.TypedValue; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.animation.DecelerateInterpolator; import android.view.animation.Interpolator; import android.view.animation.PathInterpolator; - import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.R; import com.android.systemui.statusbar.ExpandableNotificationRow; @@ -49,7 +49,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, = new PathInterpolator(0f, 0, 0.7f, 1f); public static final Interpolator KEYGUARD_FADE_OUT_INTERPOLATOR_LOCKED = new PathInterpolator(0.3f, 0f, 0.8f, 1f); - private static final float SCRIM_BEHIND_ALPHA = 0.62f; protected static final float SCRIM_BEHIND_ALPHA_KEYGUARD = 0.45f; protected static final float SCRIM_BEHIND_ALPHA_UNLOCKING = 0.2f; private static final float SCRIM_IN_FRONT_ALPHA = 0.75f; @@ -66,7 +65,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, private final View mHeadsUpScrim; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; - protected float mScrimBehindAlpha = SCRIM_BEHIND_ALPHA; + protected float mScrimBehindAlpha; protected float mScrimBehindAlphaKeyguard = SCRIM_BEHIND_ALPHA_KEYGUARD; protected float mScrimBehindAlphaUnlocking = SCRIM_BEHIND_ALPHA_UNLOCKING; @@ -109,6 +108,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, mUnlockMethodCache = UnlockMethodCache.getInstance(context); mKeyguardUpdateMonitor = KeyguardUpdateMonitor.getInstance(context); mLightBarController = lightBarController; + mScrimBehindAlpha = context.getResources().getFloat(R.dimen.scrim_behind_alpha); + updateHeadsUpScrim(false); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index 270476e35307..78d2c87d6863 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -69,6 +69,7 @@ import android.media.session.MediaController; import android.media.session.MediaSession; import android.media.session.MediaSessionManager; import android.media.session.PlaybackState; +import android.metrics.LogMaker; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; @@ -406,7 +407,7 @@ public class StatusBar extends SystemUI implements DemoMode, protected PhoneStatusBarView mStatusBarView; private int mStatusBarWindowState = WINDOW_STATE_SHOWING; protected StatusBarWindowManager mStatusBarWindowManager; - private UnlockMethodCache mUnlockMethodCache; + protected UnlockMethodCache mUnlockMethodCache; private DozeServiceHost mDozeServiceHost; private boolean mWakeUpComingFromTouch; private PointF mWakeUpTouchLocation; @@ -706,6 +707,8 @@ public class StatusBar extends SystemUI implements DemoMode, private NetworkController mNetworkController; private KeyguardMonitorImpl mKeyguardMonitor; private BatteryController mBatteryController; + private LogMaker mStatusBarStateLog; + private LockscreenGestureLogger mLockscreenGestureLogger = new LockscreenGestureLogger(); private void recycleAllVisibilityObjects(ArraySet<NotificationVisibility> array) { final int N = array.size(); @@ -948,19 +951,7 @@ public class StatusBar extends SystemUI implements DemoMode, inflateStatusBarWindow(context); mStatusBarWindow.setService(this); - mStatusBarWindow.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - checkUserAutohide(v, event); - checkRemoteInputOutside(event); - if (event.getAction() == MotionEvent.ACTION_DOWN) { - if (mExpandedVisible) { - animateCollapsePanels(); - } - } - return mStatusBarWindow.onTouchEvent(event); - } - }); + mStatusBarWindow.setOnTouchListener(getStatusBarWindowTouchListener()); mNotificationPanel = (NotificationPanelView) mStatusBarWindow.findViewById( R.id.notification_panel); @@ -1223,6 +1214,23 @@ public class StatusBar extends SystemUI implements DemoMode, } } + /** + * Returns the {@link android.view.View.OnTouchListener} that will be invoked when the + * background window of the status bar is clicked. + */ + protected View.OnTouchListener getStatusBarWindowTouchListener() { + return (v, event) -> { + checkUserAutohide(v, event); + checkRemoteInputOutside(event); + if (event.getAction() == MotionEvent.ACTION_DOWN) { + if (mExpandedVisible) { + animateCollapsePanels(); + } + } + return mStatusBarWindow.onTouchEvent(event); + }; + } + private void inflateShelf() { mNotificationShelf = (NotificationShelf) LayoutInflater.from(mContext).inflate( @@ -3828,6 +3836,13 @@ public class StatusBar extends SystemUI implements DemoMode, isSecure, canSkipBouncer); if (stateFingerprint != mLastLoggedStateFingerprint) { + if (mStatusBarStateLog == null) { + mStatusBarStateLog = new LogMaker(MetricsEvent.VIEW_UNKNOWN); + } + MetricsLogger.action(mStatusBarStateLog + .setCategory(isBouncerShowing ? MetricsEvent.BOUNCER : MetricsEvent.LOCKSCREEN) + .setType(isShowing ? MetricsEvent.TYPE_OPEN : MetricsEvent.TYPE_CLOSE) + .setSubtype(isSecure ? 1 : 0)); EventLogTags.writeSysuiStatusBarState(mState, isShowing ? 1 : 0, isOccluded ? 1 : 0, @@ -4508,8 +4523,8 @@ public class StatusBar extends SystemUI implements DemoMode, @Override public void onActivated(ActivatableNotificationView view) { - EventLogTags.writeSysuiLockscreenGesture( - EventLogConstants.SYSUI_LOCKSCREEN_GESTURE_TAP_NOTIFICATION_ACTIVATE, + mLockscreenGestureLogger.write( + MetricsEvent.ACTION_LS_NOTE, 0 /* lengthDp - N/A */, 0 /* velocityDp - N/A */); mKeyguardIndicationController.showTransientIndication(R.string.notification_tap_again); ActivatableNotificationView previousView = mStackScroller.getActivatedChild(); @@ -4626,8 +4641,8 @@ public class StatusBar extends SystemUI implements DemoMode, @Override public boolean onDraggedDown(View startingChild, int dragLengthY) { if (hasActiveNotifications() && (!isDozing() || isPulsing())) { - EventLogTags.writeSysuiLockscreenGesture( - EventLogConstants.SYSUI_LOCKSCREEN_GESTURE_SWIPE_DOWN_FULL_SHADE, + mLockscreenGestureLogger.write( + MetricsEvent.ACTION_LS_SHADE, (int) (dragLengthY / mDisplayMetrics.density), 0 /* velocityDp - N/A */); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java index 46ca3c642460..41f8a91566a9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java @@ -36,6 +36,7 @@ import android.widget.LinearLayout; import android.widget.TextView; import com.android.internal.statusbar.StatusBarIcon; import com.android.systemui.BatteryMeterView; +import com.android.systemui.Dependency; import com.android.systemui.FontSizeUtils; import com.android.systemui.Interpolators; import com.android.systemui.R; @@ -127,7 +128,7 @@ public class StatusBarIconController extends StatusBarIconList implements Tunabl mLightModeIconColorSingleTone = context.getColor(R.color.light_mode_icon_color_single_tone); loadDimens(); - TunerService.get(mContext).addTunable(this, ICON_BLACKLIST); + Dependency.get(TunerService.class).addTunable(this, ICON_BLACKLIST); mTransitionsController = new LightBarTransitionsController(this::setIconTintInternal); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java index 9cc97492e22c..ffc0d9764966 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java @@ -108,7 +108,7 @@ public class Clock extends TextView implements DemoMode, Tunable { getContext().registerReceiverAsUser(mIntentReceiver, UserHandle.ALL, filter, null, Dependency.get(Dependency.TIME_TICK_HANDLER)); - TunerService.get(getContext()).addTunable(this, CLOCK_SECONDS, + Dependency.get(TunerService.class).addTunable(this, CLOCK_SECONDS, StatusBarIconController.ICON_BLACKLIST); } @@ -129,7 +129,7 @@ public class Clock extends TextView implements DemoMode, Tunable { if (mAttached) { getContext().unregisterReceiver(mIntentReceiver); mAttached = false; - TunerService.get(getContext()).removeTunable(this); + Dependency.get(TunerService.class).removeTunable(this); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java index 85b1c32d7eaf..6006d5af3cd5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java @@ -27,6 +27,7 @@ import android.annotation.FloatRange; import android.annotation.Nullable; import android.content.Context; import android.content.res.Configuration; +import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; @@ -55,7 +56,6 @@ import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; import android.widget.OverScroller; import android.widget.ScrollView; - import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.systemui.ExpandHelper; @@ -114,6 +114,7 @@ public class NotificationStackScrollLayout extends ViewGroup private boolean mSwipingInProgress; private int mCurrentStackHeight = Integer.MAX_VALUE; private final Paint mBackgroundPaint = new Paint(); + private boolean mShouldDrawNotificationBackground; private float mExpandedHeight; private int mOwnScrollY; @@ -229,6 +230,7 @@ public class NotificationStackScrollLayout extends ViewGroup private NotificationMenuRow mCurrIconRow; private View mTranslatingParentView; private View mGearExposedView; + private boolean mShouldShowGear; /** * Should in this touch motion only be scrolling allowed? It's true when the scroller was @@ -378,10 +380,12 @@ public class NotificationStackScrollLayout extends ViewGroup public NotificationStackScrollLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); + Resources res = getResources(); + mAmbientState = new AmbientState(context); mBgColor = context.getColor(R.color.notification_shade_background_color); - int minHeight = getResources().getDimensionPixelSize(R.dimen.notification_min_height); - int maxHeight = getResources().getDimensionPixelSize(R.dimen.notification_max_height); + int minHeight = res.getDimensionPixelSize(R.dimen.notification_min_height); + int maxHeight = res.getDimensionPixelSize(R.dimen.notification_max_height); mExpandHelper = new ExpandHelper(getContext(), this, minHeight, maxHeight); mExpandHelper.setEventSource(this); @@ -390,14 +394,18 @@ public class NotificationStackScrollLayout extends ViewGroup mSwipeHelper.setLongPressListener(mLongPressListener); mStackScrollAlgorithm = createStackScrollAlgorithm(context); initView(context); - setWillNotDraw(false); + mFalsingManager = FalsingManager.getInstance(context); + mShouldShowGear = res.getBoolean(R.bool.config_showNotificationGear); + mShouldDrawNotificationBackground = + res.getBoolean(R.bool.config_drawNotificationBackground); + + updateWillNotDraw(); if (DEBUG) { mDebugPaint = new Paint(); mDebugPaint.setColor(0xffff0000); mDebugPaint.setStrokeWidth(2); mDebugPaint.setStyle(Paint.Style.STROKE); } - mFalsingManager = FalsingManager.getInstance(context); } @Override @@ -424,10 +432,11 @@ public class NotificationStackScrollLayout extends ViewGroup @Override protected void onDraw(Canvas canvas) { - if (mCurrentBounds.top < mCurrentBounds.bottom) { + if (mShouldDrawNotificationBackground && mCurrentBounds.top < mCurrentBounds.bottom) { canvas.drawRect(0, mCurrentBounds.top, getWidth(), mCurrentBounds.bottom, mBackgroundPaint); } + if (DEBUG) { int y = mTopPadding; canvas.drawLine(0, y, getWidth(), y, mDebugPaint); @@ -439,6 +448,11 @@ public class NotificationStackScrollLayout extends ViewGroup } private void updateBackgroundDimming() { + // No need to update the background color if it's not being drawn. + if (!mShouldDrawNotificationBackground) { + return; + } + float alpha = BACKGROUND_ALPHA_DIMMED + (1 - BACKGROUND_ALPHA_DIMMED) * (1.0f - mDimAmount); alpha *= mBackgroundFadeAmount; // We need to manually blend in the background color @@ -487,6 +501,10 @@ public class NotificationStackScrollLayout extends ViewGroup } private void updateSrcDrawing() { + if (!mShouldDrawNotificationBackground) { + return; + } + mBackgroundPaint.setXfermode(mDrawBackgroundAsSrc && !mFadingOut && !mParentNotFullyVisible ? mSrcMode : null); invalidate(); @@ -1967,9 +1985,11 @@ public class NotificationStackScrollLayout extends ViewGroup } private void updateBackground() { - if (mAmbientState.isDark()) { + // No need to update the background color if it's not being drawn. + if (!mShouldDrawNotificationBackground || mAmbientState.isDark()) { return; } + updateBackgroundBounds(); if (!mCurrentBounds.equals(mBackgroundBounds)) { boolean animate = mAnimateNextBackgroundTop || mAnimateNextBackgroundBottom @@ -2119,6 +2139,12 @@ public class NotificationStackScrollLayout extends ViewGroup } private void applyCurrentBackgroundBounds() { + // If the background of the notification is not being drawn, then there is no need to + // exclude an area in the scrim. Rather, the scrim's color should serve as the background. + if (!mShouldDrawNotificationBackground) { + return; + } + mScrimController.setExcludedBackgroundArea( mFadingOut || mParentNotFullyVisible || mAmbientState.isDark() || mIsClipped ? null : mCurrentBounds); @@ -3545,16 +3571,29 @@ public class NotificationStackScrollLayout extends ViewGroup } requestChildrenUpdate(); if (dark) { - setWillNotDraw(!DEBUG); mScrimController.setExcludedBackgroundArea(null); } else { updateBackground(); - setWillNotDraw(false); } + + updateWillNotDraw(); updateContentHeight(); notifyHeightChangeListener(mShelf); } + /** + * Updates whether or not this Layout will perform its own custom drawing (i.e. whether or + * not {@link #onDraw(Canvas)} is called). This method should be called whenever the + * {@link #mAmbientState}'s dark mode is toggled. + */ + private void updateWillNotDraw() { + if (mAmbientState.isDark()) { + setWillNotDraw(!DEBUG); + } else { + setWillNotDraw(!mShouldDrawNotificationBackground && !DEBUG); + } + } + private void setBackgroundFadeAmount(float fadeAmount) { mBackgroundFadeAmount = fadeAmount; updateBackgroundDimming(); @@ -4106,14 +4145,14 @@ public class NotificationStackScrollLayout extends ViewGroup * A listener that is notified when some child locations might have changed. */ public interface OnChildLocationsChangedListener { - public void onChildLocationsChanged(NotificationStackScrollLayout stackScrollLayout); + void onChildLocationsChanged(NotificationStackScrollLayout stackScrollLayout); } /** * A listener that is notified when the empty space below the notifications is clicked on */ public interface OnEmptySpaceClickListener { - public void onEmptySpaceClicked(float x, float y); + void onEmptySpaceClicked(float x, float y); } /** @@ -4129,7 +4168,7 @@ public class NotificationStackScrollLayout extends ViewGroup * unrubberbanded motion to directly expand overscroll view (e.g expand * QS) */ - public void onOverscrollTopChanged(float amount, boolean isRubberbanded); + void onOverscrollTopChanged(float amount, boolean isRubberbanded); /** * Notify a listener that the scroller wants to escape from the scrolling motion and @@ -4138,7 +4177,7 @@ public class NotificationStackScrollLayout extends ViewGroup * @param velocity The velocity that the Scroller had when over flinging * @param open Should the fling open or close the overscroll view. */ - public void flingTopOverscroll(float velocity, boolean open); + void flingTopOverscroll(float velocity, boolean open); } private class NotificationSwipeHelper extends SwipeHelper { @@ -4216,7 +4255,7 @@ public class NotificationStackScrollLayout extends ViewGroup final boolean gutsExposed = (view instanceof ExpandableNotificationRow) && ((ExpandableNotificationRow) view).areGutsExposed(); - if (!isPinnedHeadsUp(view) && !gutsExposed) { + if (mShouldShowGear && !isPinnedHeadsUp(view) && !gutsExposed) { // Only show the gear if we're not a heads up view and guts aren't exposed. checkForDrag(); } @@ -4259,11 +4298,19 @@ public class NotificationStackScrollLayout extends ViewGroup return false; // Let SwipeHelper handle it. } + // If the gear icon should not be shown, then there is no need to check if the a swipe + // should result in a snapping to the gear icon. As a result, just check if the swipe + // was enough to dismiss the notification. + if (!mShouldShowGear) { + dismissOrSnapBack(animView, velocity, ev); + return true; + } + boolean gestureTowardsGear = isTowardsGear(velocity, mCurrIconRow.isMenuOnLeft()); boolean gestureFastEnough = Math.abs(velocity) > getEscapeVelocity(); final double timeForGesture = ev.getEventTime() - ev.getDownTime(); final boolean showGearForSlowOnGoing = !canChildBeDismissed(animView) - && timeForGesture >= SWIPE_GEAR_TIMING; + && timeForGesture >= SWIPE_GEAR_TIMING; if (mGearSnappedTo && mCurrIconRow.isVisible()) { if (mGearSnappedOnLeft == mCurrIconRow.isMenuOnLeft()) { diff --git a/packages/SystemUI/src/com/android/systemui/tuner/BatteryPreference.java b/packages/SystemUI/src/com/android/systemui/tuner/BatteryPreference.java index 9998283e1a05..3058c0a1e739 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/BatteryPreference.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/BatteryPreference.java @@ -22,6 +22,7 @@ import android.util.ArraySet; import android.util.AttributeSet; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; +import com.android.systemui.Dependency; import com.android.systemui.statusbar.phone.StatusBarIconController; import static com.android.systemui.BatteryMeterDrawable.SHOW_PERCENT_SETTING; @@ -49,12 +50,12 @@ public class BatteryPreference extends DropDownPreference implements TunerServic super.onAttached(); mHasPercentage = Settings.System.getInt(getContext().getContentResolver(), SHOW_PERCENT_SETTING, 0) != 0; - TunerService.get(getContext()).addTunable(this, StatusBarIconController.ICON_BLACKLIST); + Dependency.get(TunerService.class).addTunable(this, StatusBarIconController.ICON_BLACKLIST); } @Override public void onDetached() { - TunerService.get(getContext()).removeTunable(this); + Dependency.get(TunerService.class).removeTunable(this); super.onDetached(); } @@ -89,7 +90,7 @@ public class BatteryPreference extends DropDownPreference implements TunerServic } else { mBlacklist.remove(mBattery); } - TunerService.get(getContext()).setValue(StatusBarIconController.ICON_BLACKLIST, + Dependency.get(TunerService.class).setValue(StatusBarIconController.ICON_BLACKLIST, TextUtils.join(",", mBlacklist)); return true; } diff --git a/packages/SystemUI/src/com/android/systemui/tuner/ClockPreference.java b/packages/SystemUI/src/com/android/systemui/tuner/ClockPreference.java index caa0527625d9..014ec9279395 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/ClockPreference.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/ClockPreference.java @@ -18,6 +18,8 @@ import android.support.v7.preference.DropDownPreference; import android.text.TextUtils; import android.util.ArraySet; import android.util.AttributeSet; + +import com.android.systemui.Dependency; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.policy.Clock; @@ -44,13 +46,13 @@ public class ClockPreference extends DropDownPreference implements TunerService. @Override public void onAttached() { super.onAttached(); - TunerService.get(getContext()).addTunable(this, StatusBarIconController.ICON_BLACKLIST, + Dependency.get(TunerService.class).addTunable(this, StatusBarIconController.ICON_BLACKLIST, Clock.CLOCK_SECONDS); } @Override public void onDetached() { - TunerService.get(getContext()).removeTunable(this); + Dependency.get(TunerService.class).removeTunable(this); super.onDetached(); } @@ -81,13 +83,14 @@ public class ClockPreference extends DropDownPreference implements TunerService. @Override protected boolean persistString(String value) { - TunerService.get(getContext()).setValue(Clock.CLOCK_SECONDS, SECONDS.equals(value) ? 1 : 0); + Dependency.get(TunerService.class).setValue(Clock.CLOCK_SECONDS, SECONDS.equals(value) ? 1 + : 0); if (DISABLED.equals(value)) { mBlacklist.add(mClock); } else { mBlacklist.remove(mClock); } - TunerService.get(getContext()).setValue(StatusBarIconController.ICON_BLACKLIST, + Dependency.get(TunerService.class).setValue(StatusBarIconController.ICON_BLACKLIST, TextUtils.join(",", mBlacklist)); return true; } diff --git a/packages/SystemUI/src/com/android/systemui/tuner/LockscreenFragment.java b/packages/SystemUI/src/com/android/systemui/tuner/LockscreenFragment.java index 41786b5e53e5..9d579f561ea8 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/LockscreenFragment.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/LockscreenFragment.java @@ -43,6 +43,7 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.plugins.IntentButtonProvider.IntentButton; import com.android.systemui.statusbar.phone.ExpandableIndicator; @@ -71,7 +72,7 @@ public class LockscreenFragment extends PreferenceFragment { @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - mTunerService = TunerService.get(getContext()); + mTunerService = Dependency.get(TunerService.class); mHandler = new Handler(); addPreferencesFromResource(R.xml.lockscreen_settings); setupGroup((PreferenceGroup) findPreference(KEY_LEFT), LOCKSCREEN_LEFT_BUTTON, diff --git a/packages/SystemUI/src/com/android/systemui/tuner/NavBarTuner.java b/packages/SystemUI/src/com/android/systemui/tuner/NavBarTuner.java index 9593c45abd03..28a00570a019 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/NavBarTuner.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/NavBarTuner.java @@ -51,6 +51,7 @@ import android.util.TypedValue; import android.view.KeyEvent; import android.widget.EditText; +import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.statusbar.phone.NavigationBarInflaterView; import com.android.systemui.tuner.TunerService.Tunable; @@ -104,12 +105,12 @@ public class NavBarTuner extends PreferenceFragment { @Override public void onDestroy() { super.onDestroy(); - mTunables.forEach(t -> TunerService.get(getContext()).removeTunable(t)); + mTunables.forEach(t -> Dependency.get(TunerService.class).removeTunable(t)); } private void addTunable(Tunable tunable, String... keys) { mTunables.add(tunable); - TunerService.get(getContext()).addTunable(tunable, keys); + Dependency.get(TunerService.class).addTunable(tunable, keys); } private void bindLayout(ListPreference preference) { @@ -123,7 +124,7 @@ public class NavBarTuner extends PreferenceFragment { preference.setOnPreferenceChangeListener((preference1, newValue) -> { String val = (String) newValue; if ("default".equals(val)) val = null; - TunerService.get(getContext()).setValue(NAV_BAR_VIEWS, val); + Dependency.get(TunerService.class).setValue(NAV_BAR_VIEWS, val); return true; }); } @@ -215,7 +216,7 @@ public class NavBarTuner extends PreferenceFragment { } button = button + KEY_CODE_START + code + KEY_IMAGE_DELIM + uri + KEY_CODE_END; } - TunerService.get(getContext()).setValue(setting, button); + Dependency.get(TunerService.class).setValue(setting, button); } private void setupIcons(ListPreference icon) { diff --git a/packages/SystemUI/src/com/android/systemui/tuner/PreviewNavInflater.java b/packages/SystemUI/src/com/android/systemui/tuner/PreviewNavInflater.java index e6e8f4e0a100..e7a695fc3efd 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/PreviewNavInflater.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/PreviewNavInflater.java @@ -18,6 +18,7 @@ import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; +import com.android.systemui.Dependency; import com.android.systemui.statusbar.phone.NavigationBarInflaterView; public class PreviewNavInflater extends NavigationBarInflaterView { @@ -31,7 +32,7 @@ public class PreviewNavInflater extends NavigationBarInflaterView { super.onAttachedToWindow(); // Immediately remove tuner listening, since this is a preview, all values will be injected // manually. - TunerService.get(getContext()).removeTunable(this); + Dependency.get(TunerService.class).removeTunable(this); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/tuner/StatusBarSwitch.java b/packages/SystemUI/src/com/android/systemui/tuner/StatusBarSwitch.java index dea2f5060c3a..8a2407ac1d08 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/StatusBarSwitch.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/StatusBarSwitch.java @@ -25,6 +25,7 @@ import android.util.AttributeSet; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; +import com.android.systemui.Dependency; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.tuner.TunerService.Tunable; @@ -41,12 +42,12 @@ public class StatusBarSwitch extends SwitchPreference implements Tunable { @Override public void onAttached() { super.onAttached(); - TunerService.get(getContext()).addTunable(this, StatusBarIconController.ICON_BLACKLIST); + Dependency.get(TunerService.class).addTunable(this, StatusBarIconController.ICON_BLACKLIST); } @Override public void onDetached() { - TunerService.get(getContext()).removeTunable(this); + Dependency.get(TunerService.class).removeTunable(this); super.onDetached(); } diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerActivity.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerActivity.java index 3b14e6069360..74280a315e67 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/TunerActivity.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerActivity.java @@ -24,6 +24,7 @@ import android.support.v7.preference.PreferenceScreen; import android.util.Log; import com.android.settingslib.drawer.SettingsDrawerActivity; +import com.android.systemui.Dependency; import com.android.systemui.R; public class TunerActivity extends SettingsDrawerActivity implements @@ -36,6 +37,7 @@ public class TunerActivity extends SettingsDrawerActivity implements protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + Dependency.initDependencies(this); if (getFragmentManager().findFragmentByTag(TAG_TUNER) == null) { final String action = getIntent().getAction(); diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerService.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerService.java index fb94061f4093..ca582b360a48 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/TunerService.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerService.java @@ -40,6 +40,7 @@ import android.util.ArraySet; import com.android.systemui.BatteryMeterDrawable; import com.android.systemui.DemoMode; +import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.SystemUI; import com.android.systemui.SystemUIApplication; @@ -51,7 +52,7 @@ import java.util.HashMap; import java.util.Set; -public class TunerService extends SystemUI { +public class TunerService { public static final String ACTION_CLEAR = "com.android.systemui.action.CLEAR_TUNER"; @@ -64,13 +65,14 @@ public class TunerService extends SystemUI { private final ArrayMap<Uri, String> mListeningUris = new ArrayMap<>(); // Map of settings keys to the listener. private final HashMap<String, Set<Tunable>> mTunableLookup = new HashMap<>(); + private final Context mContext; private ContentResolver mContentResolver; private int mCurrentUser; private CurrentUserTracker mUserTracker; - @Override - public void start() { + public TunerService(Context context) { + mContext = context; mContentResolver = mContext.getContentResolver(); for (UserInfo user : UserManager.get(mContext).getUsers()) { @@ -79,7 +81,6 @@ public class TunerService extends SystemUI { upgradeTuner(getValue(TUNER_VERSION, 0), CURRENT_TUNER_VERSION); } } - putComponent(TunerService.class, this); mCurrentUser = ActivityManager.getCurrentUser(); mUserTracker = new CurrentUserTracker(mContext) { @@ -209,32 +210,6 @@ public class TunerService extends SystemUI { } } - // Only used in other processes, such as the tuner. - private static TunerService sInstance; - - public static TunerService get(Context context) { - TunerService service = null; - if (context.getApplicationContext() instanceof SystemUIApplication) { - SystemUIApplication sysUi = (SystemUIApplication) context.getApplicationContext(); - service = sysUi.getComponent(TunerService.class); - } - if (service == null) { - // Can't get it as a component, must in the tuner, lets just create one for now. - return getStaticService(context); - } - return service; - } - - private static TunerService getStaticService(Context context) { - if (sInstance == null) { - sInstance = new TunerService(); - sInstance.mContext = context.getApplicationContext(); - sInstance.mComponents = new HashMap<>(); - sInstance.start(); - } - return sInstance; - } - public static final void showResetRequest(final Context context, final Runnable onDisabled) { SystemUIDialog dialog = new SystemUIDialog(context); dialog.setShowForAllUsers(true); @@ -310,7 +285,7 @@ public class TunerService extends SystemUI { @Override public void onReceive(Context context, Intent intent) { if (ACTION_CLEAR.equals(intent.getAction())) { - get(context).clearAll(); + Dependency.get(TunerService.class).clearAll(); } } } diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerSwitch.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerSwitch.java index 5b9ebd7722c6..d5b6ccdeb320 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/TunerSwitch.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerSwitch.java @@ -7,6 +7,7 @@ import android.support.v14.preference.SwitchPreference; import android.util.AttributeSet; import com.android.internal.logging.MetricsLogger; +import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.tuner.TunerService.Tunable; @@ -26,12 +27,12 @@ public class TunerSwitch extends SwitchPreference implements Tunable { @Override public void onAttached() { super.onAttached(); - TunerService.get(getContext()).addTunable(this, getKey().split(",")); + Dependency.get(TunerService.class).addTunable(this, getKey().split(",")); } @Override public void onDetached() { - TunerService.get(getContext()).removeTunable(this); + Dependency.get(TunerService.class).removeTunable(this); super.onDetached(); } diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java index d057d863e9ef..b9cb5750e333 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java @@ -69,6 +69,7 @@ import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; import com.android.settingslib.Utils; +import com.android.systemui.Dependency; import com.android.systemui.Interpolators; import com.android.systemui.R; import com.android.systemui.statusbar.policy.ZenModeController; @@ -165,7 +166,7 @@ public class VolumeDialog implements TunerService.Tunable { controller.addCallback(mControllerCallbackH, mHandler); controller.getState(); - TunerService.get(mContext).addTunable(this, SHOW_FULL_ZEN); + Dependency.get(TunerService.class).addTunable(this, SHOW_FULL_ZEN); final Configuration currentConfig = mContext.getResources().getConfiguration(); mDensity = currentConfig.densityDpi; diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java index 78145fe73dfc..0a1d34ff701e 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java @@ -72,7 +72,7 @@ public class VolumeDialogComponent implements VolumeComponent, TunerService.Tuna mDialog = new VolumeDialog(context, WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY, mController, mZenModeController, mVolumeDialogCallback); applyConfiguration(); - TunerService.get(mContext).addTunable(this, VOLUME_DOWN_SILENT, VOLUME_UP_SILENT, + Dependency.get(TunerService.class).addTunable(this, VOLUME_DOWN_SILENT, VOLUME_UP_SILENT, VOLUME_SILENT_DO_NOT_DISTURB); } diff --git a/packages/SystemUI/tests/Android.mk b/packages/SystemUI/tests/Android.mk index c627e224dee8..cefade086795 100644 --- a/packages/SystemUI/tests/Android.mk +++ b/packages/SystemUI/tests/Android.mk @@ -43,6 +43,7 @@ LOCAL_STATIC_ANDROID_LIBRARIES := \ android-support-v17-leanback LOCAL_STATIC_JAVA_LIBRARIES := \ + metrics-helper-lib \ android-support-test \ mockito-updated-target-minus-junit4 \ SystemUI-proto \ diff --git a/packages/SystemUI/tests/AndroidManifest.xml b/packages/SystemUI/tests/AndroidManifest.xml index 408e8f3298af..6d6243520b5b 100644 --- a/packages/SystemUI/tests/AndroidManifest.xml +++ b/packages/SystemUI/tests/AndroidManifest.xml @@ -17,6 +17,7 @@ <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.systemui.tests"> + <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.ACCESS_VOICE_INTERACTION_SERVICE" /> <uses-permission android:name="android.permission.INJECT_EVENTS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> diff --git a/packages/SystemUI/tests/src/com/android/systemui/FragmentTestCase.java b/packages/SystemUI/tests/src/com/android/systemui/FragmentTestCase.java index 447edace3028..f8f67bb15c29 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/FragmentTestCase.java +++ b/packages/SystemUI/tests/src/com/android/systemui/FragmentTestCase.java @@ -19,13 +19,17 @@ import android.app.Fragment; import android.app.FragmentController; import android.app.FragmentHostCallback; import android.app.FragmentManagerNonConfig; +import android.graphics.PixelFormat; import android.os.Handler; -import android.os.HandlerThread; +import android.os.Looper; import android.os.Parcelable; import android.view.LayoutInflater; import android.view.View; +import android.view.WindowManager; +import android.view.WindowManager.LayoutParams; import android.widget.FrameLayout; +import com.android.systemui.utils.ViewUtils; import com.android.systemui.utils.leaks.LeakCheckedTest; import org.junit.After; @@ -45,7 +49,6 @@ public abstract class FragmentTestCase extends LeakCheckedTest { private static final int VIEW_ID = 42; private final Class<? extends Fragment> mCls; - private HandlerThread mHandlerThread; private Handler mHandler; private FrameLayout mView; protected FragmentController mFragments; @@ -59,9 +62,7 @@ public abstract class FragmentTestCase extends LeakCheckedTest { public void setupFragment() throws IllegalAccessException, InstantiationException { mView = new FrameLayout(mContext); mView.setId(VIEW_ID); - mHandlerThread = new HandlerThread("FragmentTestThread"); - mHandlerThread.start(); - mHandler = new Handler(mHandlerThread.getLooper()); + mHandler = new Handler(Looper.getMainLooper()); mFragment = mCls.newInstance(); postAndWait(() -> { mFragments = FragmentController.createController(new HostCallbacks()); @@ -78,7 +79,6 @@ public abstract class FragmentTestCase extends LeakCheckedTest { // Set mFragments to null to let it know not to destroy. postAndWait(() -> mFragments.dispatchDestroy()); } - mHandlerThread.quit(); } @Test @@ -100,6 +100,26 @@ public abstract class FragmentTestCase extends LeakCheckedTest { } @Test + public void testAttachDetach() { + WindowManager.LayoutParams lp = new WindowManager.LayoutParams( + LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, + LayoutParams.TYPE_SYSTEM_ALERT, + 0, PixelFormat.TRANSLUCENT); + postAndWait(() -> mFragments.dispatchResume()); + attachFragmentToWindow(); + detachFragmentToWindow(); + postAndWait(() -> mFragments.dispatchPause()); + } + + protected void attachFragmentToWindow() { + ViewUtils.attachView(mView); + } + + protected void detachFragmentToWindow() { + ViewUtils.detachView(mView); + } + + @Test public void testRecreate() { postAndWait(() -> mFragments.dispatchResume()); postAndWait(() -> { diff --git a/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java b/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java index f258e5d17be4..81a50d9fca58 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java +++ b/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java @@ -65,7 +65,7 @@ public abstract class SysuiTestCase { waitForIdleSync(mHandler); } - protected void waitForIdleSync(Handler h) { + public static void waitForIdleSync(Handler h) { validateThread(h.getLooper()); Idler idler = new Idler(null); h.getLooper().getQueue().addIdleHandler(idler); diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java index 53450317ccf8..29d5a36be0b3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java @@ -42,6 +42,7 @@ import com.android.systemui.statusbar.policy.UserInfoController; import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.tuner.TunerService; +import com.android.systemui.utils.leaks.LeakCheckedTest; import org.junit.Before; import org.junit.Test; @@ -60,11 +61,7 @@ public class QSFragmentTest extends FragmentTestCase { public void addLeakCheckDependencies() { injectTestDependency(Dependency.BG_LOOPER, Looper.getMainLooper()); injectMockDependency(UserSwitcherController.class); - injectLeakCheckedDependencies(BluetoothController.class, LocationController.class, - RotationLockController.class, NetworkController.class, ZenModeController.class, - HotspotController.class, CastController.class, FlashlightController.class, - UserInfoController.class, KeyguardMonitor.class, SecurityController.class, - BatteryController.class, NextAlarmController.class); + injectLeakCheckedDependencies(ALL_SUPPORTED_CLASSES); } @Test @@ -88,6 +85,6 @@ public class QSFragmentTest extends FragmentTestCase { host.destroy(); // Ensure the tuner cleans up its persistent listeners. - TunerService.get(mContext).destroy(); + Dependency.get(TunerService.class).destroy(); } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationMenuRowTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationMenuRowTest.java new file mode 100644 index 000000000000..71411706c4a9 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationMenuRowTest.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2017 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. + */ + +package com.android.systemui.statusbar; + +import com.android.systemui.utils.ViewUtils; +import com.android.systemui.utils.leaks.LeakCheckedTest; + +import org.junit.Before; +import org.junit.Test; + +public class NotificationMenuRowTest extends LeakCheckedTest { + + @Before + public void setup() { + injectLeakCheckedDependencies(ALL_SUPPORTED_CLASSES); + } + + @Test + public void testAttachDetach() { + NotificationMenuRow row = new NotificationMenuRow(mContext); + ViewUtils.attachView(row); + ViewUtils.detachView(row); + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarFragmentTest.java index e28d0773b2f9..a9d6df768fa9 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarFragmentTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarFragmentTest.java @@ -40,6 +40,7 @@ public class NavigationBarFragmentTest extends FragmentTestCase { mContext.putComponent(Recents.class, mock(Recents.class)); mContext.putComponent(Divider.class, mock(Divider.class)); mContext.addMockSystemService(Context.WINDOW_SERVICE, mock(WindowManager.class)); + injectLeakCheckedDependencies(ALL_SUPPORTED_CLASSES); } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java index 309559b6b3ff..21c7fce44579 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java @@ -22,11 +22,20 @@ import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import android.metrics.LogMaker; +import android.metrics.MetricsReader; import android.support.test.filters.SmallTest; +import android.support.test.metricshelper.MetricsAsserts; import android.support.test.runner.AndroidJUnit4; +import android.util.DisplayMetrics; +import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.keyguard.KeyguardHostView.OnDismissAction; import com.android.systemui.SysuiTestCase; +import com.android.systemui.statusbar.ActivatableNotificationView; +import com.android.systemui.statusbar.KeyguardIndicationController; +import com.android.systemui.statusbar.NotificationData; +import com.android.systemui.statusbar.stack.NotificationStackScrollLayout; import org.junit.Before; import org.junit.Test; @@ -37,12 +46,22 @@ import org.junit.runner.RunWith; public class StatusBarTest extends SysuiTestCase { StatusBarKeyguardViewManager mStatusBarKeyguardViewManager; + UnlockMethodCache mUnlockMethodCache; + KeyguardIndicationController mKeyguardIndicationController; + NotificationStackScrollLayout mStackScroller; StatusBar mStatusBar; + private MetricsReader mMetricsReader; + private DisplayMetrics mDisplayMetrics = new DisplayMetrics(); + @Before public void setup() { mStatusBarKeyguardViewManager = mock(StatusBarKeyguardViewManager.class); - mStatusBar = new TestableStatusBar(mStatusBarKeyguardViewManager); + mUnlockMethodCache = mock(UnlockMethodCache.class); + mKeyguardIndicationController = mock(KeyguardIndicationController.class); + mStackScroller = mock(NotificationStackScrollLayout.class); + mStatusBar = new TestableStatusBar(mStatusBarKeyguardViewManager, mUnlockMethodCache, + mKeyguardIndicationController, mStackScroller); doAnswer(invocation -> { OnDismissAction onDismissAction = (OnDismissAction) invocation.getArguments()[0]; @@ -55,6 +74,11 @@ public class StatusBarTest extends SysuiTestCase { runnable.run(); return null; }).when(mStatusBarKeyguardViewManager).addAfterKeyguardGoneRunnable(any()); + + when(mStackScroller.getActivatedChild()).thenReturn(null); + + mMetricsReader = new MetricsReader(); + mMetricsReader.checkpoint(); // clear out old logs } @Test @@ -81,9 +105,114 @@ public class StatusBarTest extends SysuiTestCase { mStatusBar.executeRunnableDismissingKeyguard(null, null, false, false, false); } + @Test + public void lockscreenStateMetrics_notShowing() { + // uninteresting state, except that fingerprint must be non-zero + when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false); + when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true); + // interesting state + when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(false); + when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false); + when(mUnlockMethodCache.isMethodSecure()).thenReturn(false); + + mStatusBar.onKeyguardViewManagerStatesUpdated(); + + MetricsAsserts.assertHasLog("missing hidden insecure lockscreen log", mMetricsReader, + new LogMaker(MetricsEvent.LOCKSCREEN) + .setType(MetricsEvent.TYPE_CLOSE) + .setSubtype(0)); + } + + @Test + public void lockscreenStateMetrics_notShowing_secure() { + // uninteresting state, except that fingerprint must be non-zero + when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false); + when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true); + // interesting state + when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(false); + when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false); + when(mUnlockMethodCache.isMethodSecure()).thenReturn(true); + + mStatusBar.onKeyguardViewManagerStatesUpdated(); + + MetricsAsserts.assertHasLog("missing hidden secure lockscreen log", mMetricsReader, + new LogMaker(MetricsEvent.LOCKSCREEN) + .setType(MetricsEvent.TYPE_CLOSE) + .setSubtype(1)); + } + + @Test + public void lockscreenStateMetrics_isShowing() { + // uninteresting state, except that fingerprint must be non-zero + when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false); + when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true); + // interesting state + when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true); + when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false); + when(mUnlockMethodCache.isMethodSecure()).thenReturn(false); + + mStatusBar.onKeyguardViewManagerStatesUpdated(); + + MetricsAsserts.assertHasLog("missing insecure lockscreen showing", mMetricsReader, + new LogMaker(MetricsEvent.LOCKSCREEN) + .setType(MetricsEvent.TYPE_OPEN) + .setSubtype(0)); + } + + @Test + public void lockscreenStateMetrics_isShowing_secure() { + // uninteresting state, except that fingerprint must be non-zero + when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false); + when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true); + // interesting state + when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true); + when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false); + when(mUnlockMethodCache.isMethodSecure()).thenReturn(true); + + mStatusBar.onKeyguardViewManagerStatesUpdated(); + + MetricsAsserts.assertHasLog("missing secure lockscreen showing log", mMetricsReader, + new LogMaker(MetricsEvent.LOCKSCREEN) + .setType(MetricsEvent.TYPE_OPEN) + .setSubtype(1)); + } + + @Test + public void lockscreenStateMetrics_isShowingBouncer() { + // uninteresting state, except that fingerprint must be non-zero + when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false); + when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true); + // interesting state + when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true); + when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(true); + when(mUnlockMethodCache.isMethodSecure()).thenReturn(true); + + mStatusBar.onKeyguardViewManagerStatesUpdated(); + + MetricsAsserts.assertHasLog("missing bouncer log", mMetricsReader, + new LogMaker(MetricsEvent.BOUNCER) + .setType(MetricsEvent.TYPE_OPEN) + .setSubtype(1)); + } + + @Test + public void onActivatedMetrics() { + ActivatableNotificationView view = mock(ActivatableNotificationView.class); + mStatusBar.onActivated(view); + + MetricsAsserts.assertHasLog("missing lockscreen note tap log", mMetricsReader, + new LogMaker(MetricsEvent.ACTION_LS_NOTE) + .setType(MetricsEvent.TYPE_ACTION)); + } + static class TestableStatusBar extends StatusBar { - public TestableStatusBar(StatusBarKeyguardViewManager man) { + public TestableStatusBar(StatusBarKeyguardViewManager man, + UnlockMethodCache unlock, KeyguardIndicationController key, + NotificationStackScrollLayout stack) { mStatusBarKeyguardViewManager = man; + mUnlockMethodCache = unlock; + mKeyguardIndicationController = key; + mStackScroller = stack; } @Override diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/ViewUtils.java b/packages/SystemUI/tests/src/com/android/systemui/utils/ViewUtils.java new file mode 100644 index 000000000000..01996ca85835 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/utils/ViewUtils.java @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2017 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. + */ + +package com.android.systemui.utils; + +import android.graphics.PixelFormat; +import android.os.Handler; +import android.os.Looper; +import android.view.View; +import android.view.WindowManager; +import android.view.WindowManager.LayoutParams; +import android.support.test.InstrumentationRegistry; + +import com.android.systemui.SysuiTestCase; + +public class ViewUtils { + + public static void attachView(View view) { + WindowManager.LayoutParams lp = new WindowManager.LayoutParams( + LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, + LayoutParams.TYPE_SYSTEM_ALERT, + 0, PixelFormat.TRANSLUCENT); + Handler handler = new Handler(Looper.getMainLooper()); + handler.post(() -> InstrumentationRegistry.getContext() + .getSystemService(WindowManager.class).addView(view, lp)); + SysuiTestCase.waitForIdleSync(handler); + } + + public static void detachView(View view) { + Handler handler = new Handler(Looper.getMainLooper()); + handler.post(() -> InstrumentationRegistry.getContext() + .getSystemService(WindowManager.class).removeView(view)); + SysuiTestCase.waitForIdleSync(handler); + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakePluginManager.java b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakePluginManager.java new file mode 100644 index 000000000000..d1abccaa6e76 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakePluginManager.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2017 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. + */ + +package com.android.systemui.utils.leaks; + +import android.content.Context; + +import com.android.systemui.plugins.Plugin; +import com.android.systemui.plugins.PluginListener; +import com.android.systemui.plugins.PluginManager; + +public class FakePluginManager extends PluginManager { + + private final BaseLeakChecker<PluginListener> mLeakChecker; + + public FakePluginManager(Context context, LeakCheckedTest test) { + super(context); + mLeakChecker = new BaseLeakChecker<>(test, "Plugin"); + } + + @Override + public <T extends Plugin> void addPluginListener(String action, PluginListener<T> listener, + int version) { + mLeakChecker.addCallback(listener); + } + + @Override + public <T extends Plugin> void addPluginListener(String action, PluginListener<T> listener, + int version, boolean allowMultiple) { + mLeakChecker.addCallback(listener); + } + + @Override + public void removePluginListener(PluginListener<?> listener) { + mLeakChecker.removeCallback(listener); + } + + @Override + public <T extends Plugin> T getOneShotPlugin(String action, int version) { + return null; + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeTunerService.java b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeTunerService.java new file mode 100644 index 000000000000..f553277e6e33 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeTunerService.java @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2017 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. + */ + +package com.android.systemui.utils.leaks; + +import android.content.Context; + +import com.android.systemui.tuner.TunerService; + +public class FakeTunerService extends TunerService { + + private final BaseLeakChecker<Tunable> mBaseLeakChecker; + + public FakeTunerService(Context context, LeakCheckedTest test) { + super(context); + mBaseLeakChecker = new BaseLeakChecker<>(test, "tunable"); + } + + @Override + public void addTunable(Tunable tunable, String... keys) { + for (String key : keys) { + tunable.onTuningChanged(key, null); + } + mBaseLeakChecker.addCallback(tunable); + } + + @Override + public void removeTunable(Tunable tunable) { + mBaseLeakChecker.removeCallback(tunable); + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/LeakCheckedTest.java b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/LeakCheckedTest.java index c182493cf570..c2048c7884de 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/LeakCheckedTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/LeakCheckedTest.java @@ -20,6 +20,7 @@ import static org.mockito.Mockito.doAnswer; import android.util.ArrayMap; import com.android.systemui.SysuiTestCase; +import com.android.systemui.plugins.PluginManager; import com.android.systemui.statusbar.phone.ManagedProfileController; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.BluetoothController; @@ -35,6 +36,7 @@ import com.android.systemui.statusbar.policy.RotationLockController; import com.android.systemui.statusbar.policy.SecurityController; import com.android.systemui.statusbar.policy.UserInfoController; import com.android.systemui.statusbar.policy.ZenModeController; +import com.android.systemui.tuner.TunerService; import org.junit.Assert; import org.junit.Rule; @@ -56,6 +58,25 @@ public abstract class LeakCheckedTest extends SysuiTestCase { private final Map<String, Tracker> mTrackers = new HashMap<>(); private final Map<Class, Object> mLeakCheckers = new ArrayMap<>(); + public static final Class<?>[] ALL_SUPPORTED_CLASSES = new Class[] { + BluetoothController.class, + LocationController.class, + RotationLockController.class, + ZenModeController.class, + CastController.class, + HotspotController.class, + FlashlightController.class, + UserInfoController.class, + KeyguardMonitor.class, + BatteryController.class, + SecurityController.class, + ManagedProfileController.class, + NextAlarmController.class, + NetworkController.class, + PluginManager.class, + TunerService.class, + }; + @Rule public TestWatcher successWatcher = new TestWatcher() { @Override @@ -96,6 +117,10 @@ public abstract class LeakCheckedTest extends SysuiTestCase { obj = new FakeNextAlarmController(this); } else if (cls == NetworkController.class) { obj = new FakeNetworkController(this); + } else if (cls == PluginManager.class) { + obj = new FakePluginManager(mContext, this); + } else if (cls == TunerService.class) { + obj = new FakeTunerService(mContext, this); } else { Assert.fail(cls.getName() + " is not supported by LeakCheckedTest yet"); } diff --git a/preloaded-classes b/preloaded-classes index 2fad5dd04a82..7dc5a256bb87 100644 --- a/preloaded-classes +++ b/preloaded-classes @@ -1,3 +1,28 @@ +# +# Copyright (C) 2017 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. +# +# +# +# Preloaded-classes filter file for phones. +# +# Classes in this file will be allocated into the boot image, and forcibly initialized in +# the zygote during initialization. This is a trade-off, using virtual address space to share +# common heap between apps. +# +# This file has been derived for mainline phone (and tablet) usage. +# [B [C [D @@ -9,7 +34,6 @@ [Landroid.animation.Keyframe$FloatKeyframe; [Landroid.animation.Keyframe$IntKeyframe; [Landroid.animation.Keyframe$ObjectKeyframe; -[Landroid.animation.Keyframe; [Landroid.animation.PropertyValuesHolder; [Landroid.app.LoaderManagerImpl; [Landroid.content.ContentProviderResult; @@ -57,45 +81,45 @@ [Landroid.hardware.soundtrigger.SoundTrigger$Keyphrase; [Landroid.hardware.soundtrigger.SoundTrigger$KeyphraseRecognitionExtra; [Landroid.icu.impl.CacheValue$Strength; +[Landroid.icu.impl.CacheValue; +[Landroid.icu.impl.CurrencyData$CurrencySpacingInfo$SpacingPattern; +[Landroid.icu.impl.CurrencyData$CurrencySpacingInfo$SpacingType; [Landroid.icu.impl.ICUResourceBundle$OpenType; [Landroid.icu.impl.StandardPlural; [Landroid.icu.impl.Trie2$ValueWidth; [Landroid.icu.impl.UCharacterProperty$BinaryProperty; [Landroid.icu.impl.UCharacterProperty$IntProperty; -[Landroid.icu.lang.UScript$ScriptUsage; -[Landroid.icu.text.DateFormat$BooleanAttribute; -[Landroid.icu.text.DateFormat$Field; +[Landroid.icu.text.DateFormatSymbols$CalendarDataSink$AliasType; [Landroid.icu.text.DateFormatSymbols$CapitalizationContextUsage; -[Landroid.icu.text.DateTimePatternGenerator$DTPGflags; [Landroid.icu.text.DisplayContext$Type; [Landroid.icu.text.DisplayContext; -[Landroid.icu.text.MessagePattern$ApostropheMode; -[Landroid.icu.text.MessagePattern$ArgType; -[Landroid.icu.text.MessagePattern$Part$Type; [Landroid.icu.text.PluralRules$Operand; [Landroid.icu.text.PluralRules$PluralType; [Landroid.icu.text.PluralRules$SampleType; +[Landroid.icu.text.TimeZoneNames$NameType; [Landroid.icu.text.UnicodeSet; [Landroid.icu.util.BytesTrie$Result; -[Landroid.icu.util.Calendar$CalType; [Landroid.icu.util.Currency$CurrencyUsage; [Landroid.icu.util.ULocale$Category; [Landroid.icu.util.ULocale; +[Landroid.icu.util.UResourceBundle$RootType; [Landroid.media.AudioGain; +[Landroid.media.MediaCodecInfo$CodecProfileLevel; [Landroid.net.Network; [Landroid.net.NetworkInfo$DetailedState; [Landroid.net.NetworkInfo$State; +[Landroid.net.NetworkRequest$Type; [Landroid.net.Uri; [Landroid.net.wifi.SupplicantState; [Landroid.os.AsyncTask$Status; -[Landroid.os.Bundle; +[Landroid.os.IBinder; [Landroid.os.MessageQueue$IdleHandler; [Landroid.os.Parcel; -[Landroid.os.ParcelFileDescriptor; [Landroid.os.Parcelable; [Landroid.os.PatternMatcher; [Landroid.os.storage.StorageVolume; [Landroid.system.StructPollfd; +[Landroid.telephony.TelephonyManager$MultiSimVariants; [Landroid.text.DynamicLayout$ChangeWatcher; [Landroid.text.InputFilter; [Landroid.text.Layout$Alignment; @@ -124,9 +148,7 @@ [Landroid.util.Range; [Landroid.util.Rational; [Landroid.view.Choreographer$CallbackQueue; -[Landroid.view.Display$ColorTransform; [Landroid.view.Display$Mode; -[Landroid.view.Display; [Landroid.view.HandlerActionQueue$HandlerAction; [Landroid.view.MenuItem; [Landroid.view.View; @@ -146,18 +168,22 @@ [Lcom.android.org.bouncycastle.asn1.ASN1ObjectIdentifier; [Lcom.android.org.conscrypt.OpenSSLX509CertPath$Encoding; [Lcom.android.org.conscrypt.OpenSSLX509Certificate; +[Lcom.android.org.conscrypt.ct.CTLogInfo; [Ldalvik.system.DexPathList$Element; -[Ljava.beans.PropertyChangeListener; +[Ldalvik.system.DexPathList$NativeLibraryElement; [Ljava.io.File$PathStatus; [Ljava.io.File; [Ljava.io.FileDescriptor; [Ljava.io.IOException; +[Ljava.io.ObjectInputStream$HandleTable$HandleList; [Ljava.io.ObjectStreamField; +[Ljava.lang.Boolean; [Ljava.lang.Byte; [Ljava.lang.CharSequence; [Ljava.lang.Character$UnicodeBlock; [Ljava.lang.Character; [Ljava.lang.Class; +[Ljava.lang.Comparable; [Ljava.lang.Enum; [Ljava.lang.Integer; [Ljava.lang.Long; @@ -174,21 +200,20 @@ [Ljava.lang.Throwable; [Ljava.lang.Void; [Ljava.lang.annotation.Annotation; -[Ljava.lang.ref.SoftReference; +[Ljava.lang.invoke.MethodType; [Ljava.lang.ref.WeakReference; [Ljava.lang.reflect.AccessibleObject; [Ljava.lang.reflect.Constructor; [Ljava.lang.reflect.Field; [Ljava.lang.reflect.Method; +[Ljava.lang.reflect.Parameter; [Ljava.lang.reflect.Type; [Ljava.lang.reflect.TypeVariable; -[Ljava.math.BigDecimal; [Ljava.math.BigInteger; [Ljava.math.RoundingMode; [Ljava.net.InetAddress; -[Ljava.net.InterfaceAddress; -[Ljava.net.NetworkInterface; [Ljava.net.Proxy$Type; +[Ljava.nio.file.attribute.FileAttribute; [Ljava.security.CryptoPrimitive; [Ljava.security.Provider; [Ljava.security.cert.Certificate; @@ -200,30 +225,31 @@ [Ljava.util.Enumeration; [Ljava.util.Formatter$Flags; [Ljava.util.Formatter$FormatString; -[Ljava.util.HashMap$HashMapEntry; +[Ljava.util.HashMap$Node; [Ljava.util.Hashtable$HashtableEntry; -[Ljava.util.List; [Ljava.util.Locale$Category; [Ljava.util.Locale; [Ljava.util.Map$Entry; [Ljava.util.WeakHashMap$Entry; +[Ljava.util.concurrent.ConcurrentHashMap$CounterCell; [Ljava.util.concurrent.ConcurrentHashMap$Node; [Ljava.util.concurrent.ConcurrentHashMap$Segment; +[Ljava.util.concurrent.ForkJoinTask$ExceptionNode; [Ljava.util.concurrent.RunnableScheduledFuture; [Ljava.util.concurrent.TimeUnit; [Ljava.util.logging.Handler; [Ljava.util.regex.Pattern; -[Ljavax.crypto.Cipher$InitType; -[Ljavax.crypto.Cipher$NeedToSet; [Ljavax.net.ssl.KeyManager; [Ljavax.net.ssl.TrustManager; [Ljavax.security.cert.X509Certificate; [Llibcore.io.ClassPathURLStreamHandler; +[Llibcore.io.IoTracker$Mode; [Llibcore.reflect.AnnotationMember$DefaultValues; [Llibcore.reflect.AnnotationMember; [Lorg.apache.http.Header; [Lorg.json.JSONStringer$Scope; [Lorg.kxml2.io.KXmlParser$ValueContext; +[Lsun.misc.FDBigInteger; [Lsun.misc.FormattedFloatingDecimal$Form; [Lsun.security.jca.ProviderConfig; [Lsun.security.jca.ServiceId; @@ -244,31 +270,22 @@ [[Ljava.lang.Object; [[Ljava.lang.String; [[Ljava.lang.annotation.Annotation; -[[S [[[I android.R$styleable android.accounts.Account android.accounts.Account$1 android.accounts.AccountManager android.accounts.AccountManager$1 -android.accounts.AccountManager$11 -android.accounts.AccountManager$AmsTask -android.accounts.AccountManager$AmsTask$1 -android.accounts.AccountManager$AmsTask$Response -android.accounts.AccountManagerCallback android.accounts.AccountManagerFuture android.accounts.AccountsException android.accounts.AuthenticatorException android.accounts.IAccountManager android.accounts.IAccountManager$Stub android.accounts.IAccountManager$Stub$Proxy -android.accounts.IAccountManagerResponse -android.accounts.IAccountManagerResponse$Stub android.accounts.OnAccountsUpdateListener android.accounts.OperationCanceledException android.animation.AnimationHandler android.animation.AnimationHandler$1 -android.animation.AnimationHandler$2 android.animation.AnimationHandler$AnimationFrameCallback android.animation.AnimationHandler$AnimationFrameCallbackProvider android.animation.AnimationHandler$MyFrameCallbackProvider @@ -277,12 +294,15 @@ android.animation.Animator$AnimatorConstantState android.animation.Animator$AnimatorListener android.animation.Animator$AnimatorPauseListener android.animation.AnimatorInflater -android.animation.AnimatorInflater$PathDataEvaluator android.animation.AnimatorListenerAdapter android.animation.AnimatorSet -android.animation.AnimatorSet$AnimatorSetListener +android.animation.AnimatorSet$1 +android.animation.AnimatorSet$2 +android.animation.AnimatorSet$3 +android.animation.AnimatorSet$AnimationEvent android.animation.AnimatorSet$Builder android.animation.AnimatorSet$Node +android.animation.AnimatorSet$SeekState android.animation.ArgbEvaluator android.animation.FloatEvaluator android.animation.FloatKeyframeSet @@ -299,14 +319,13 @@ android.animation.Keyframes$IntKeyframes android.animation.LayoutTransition android.animation.LayoutTransition$TransitionListener android.animation.ObjectAnimator -android.animation.PathKeyframes -android.animation.PathKeyframes$1 -android.animation.PathKeyframes$2 android.animation.PathKeyframes$FloatKeyframesBase +android.animation.PathKeyframes$IntKeyframesBase android.animation.PathKeyframes$SimpleKeyframes android.animation.PropertyValuesHolder android.animation.PropertyValuesHolder$FloatPropertyValuesHolder android.animation.PropertyValuesHolder$IntPropertyValuesHolder +android.animation.PropertyValuesHolder$PropertyValues android.animation.RectEvaluator android.animation.StateListAnimator android.animation.StateListAnimator$1 @@ -316,12 +335,15 @@ android.animation.TimeInterpolator android.animation.TypeEvaluator android.animation.ValueAnimator android.animation.ValueAnimator$AnimatorUpdateListener +android.app.-$Lambda$36$c44uHH2WE4sJvw5tZZB6gRzEaHI +android.app.-$Lambda$39$c44uHH2WE4sJvw5tZZB6gRzEaHI +android.app.-$Lambda$7$u_rp3dnwvfyMTggc6hVftcuYJ3E android.app.ActionBar android.app.ActionBar$LayoutParams android.app.Activity android.app.Activity$HostCallbacks android.app.ActivityManager -android.app.ActivityManager$MemoryInfo +android.app.ActivityManager$1 android.app.ActivityManager$RunningAppProcessInfo android.app.ActivityManager$RunningAppProcessInfo$1 android.app.ActivityManager$StackId @@ -357,20 +379,17 @@ android.app.AppGlobals android.app.AppOpsManager android.app.Application android.app.Application$ActivityLifecycleCallbacks -android.app.ApplicationErrorReport android.app.ApplicationErrorReport$CrashInfo android.app.ApplicationLoaders android.app.ApplicationPackageManager android.app.ApplicationPackageManager$ResourceName android.app.BackStackRecord android.app.BackStackRecord$Op -android.app.BackStackRecord$TransitionState android.app.ContentProviderHolder android.app.ContentProviderHolder$1 android.app.ContextImpl android.app.ContextImpl$ApplicationContentResolver android.app.Dialog -android.app.Dialog$-void__init__android_content_Context_context_int_themeResId_boolean_createContextThemeWrapper_LambdaImpl0 android.app.Dialog$ListenersHandler android.app.DialogFragment android.app.DownloadManager @@ -383,7 +402,10 @@ android.app.FragmentManager android.app.FragmentManager$BackStackEntry android.app.FragmentManagerImpl android.app.FragmentManagerImpl$1 +android.app.FragmentManagerImpl$OpGenerator android.app.FragmentTransaction +android.app.FragmentTransition +android.app.FragmentTransition$FragmentContainerTransition android.app.IActivityManager android.app.IActivityManager$Stub android.app.IActivityManager$Stub$Proxy @@ -392,7 +414,6 @@ android.app.IAlarmManager$Stub android.app.IAlarmManager$Stub$Proxy android.app.IApplicationThread android.app.IApplicationThread$Stub -android.app.IApplicationThread$Stub$Proxy android.app.IInstrumentationWatcher android.app.IInstrumentationWatcher$Stub android.app.INotificationManager @@ -409,10 +430,10 @@ android.app.Instrumentation android.app.IntentReceiverLeaked android.app.IntentService android.app.IntentService$ServiceHandler -android.app.JobSchedulerImpl android.app.KeyguardManager android.app.ListActivity android.app.LoadedApk +android.app.LoadedApk$DexLoadReporter android.app.LoadedApk$ReceiverDispatcher android.app.LoadedApk$ReceiverDispatcher$Args android.app.LoadedApk$ReceiverDispatcher$InnerReceiver @@ -426,19 +447,17 @@ android.app.LoaderManager android.app.LoaderManagerImpl android.app.NativeActivity android.app.Notification -android.app.Notification$1 android.app.Notification$Action android.app.Notification$BigTextStyle android.app.Notification$Builder -android.app.Notification$BuilderRemoteViews android.app.Notification$Style android.app.NotificationManager -android.app.OnActivityPausedListener android.app.PendingIntent android.app.PendingIntent$1 android.app.PendingIntent$CanceledException -android.app.ProgressDialog +android.app.PendingIntent$OnMarshaledListener android.app.QueuedWork +android.app.QueuedWork$QueuedWorkHandler android.app.ReceiverRestrictedContext android.app.ResourcesManager android.app.ResourcesManager$1 @@ -530,6 +549,11 @@ android.app.SystemServiceRegistry$71 android.app.SystemServiceRegistry$72 android.app.SystemServiceRegistry$73 android.app.SystemServiceRegistry$74 +android.app.SystemServiceRegistry$75 +android.app.SystemServiceRegistry$76 +android.app.SystemServiceRegistry$77 +android.app.SystemServiceRegistry$78 +android.app.SystemServiceRegistry$79 android.app.SystemServiceRegistry$8 android.app.SystemServiceRegistry$9 android.app.SystemServiceRegistry$CachedServiceFetcher @@ -550,13 +574,11 @@ android.app.backup.BackupDataInput$EntityHeader android.app.backup.BackupDataOutput android.app.backup.BackupHelperDispatcher android.app.backup.BackupHelperDispatcher$Header +android.app.backup.BackupManager android.app.backup.FileBackupHelperBase android.app.backup.FullBackup android.app.backup.FullBackupDataOutput -android.app.job.IJobScheduler -android.app.job.IJobScheduler$Stub android.app.job.JobInfo -android.app.job.JobInfo$Builder android.app.job.JobScheduler android.app.job.JobService android.app.trust.ITrustManager @@ -564,14 +586,15 @@ android.app.trust.ITrustManager$Stub android.app.trust.ITrustManager$Stub$Proxy android.app.trust.TrustManager android.app.usage.NetworkStatsManager +android.app.usage.StorageStatsManager android.app.usage.UsageStatsManager android.appwidget.AppWidgetManager -android.appwidget.AppWidgetProvider android.bluetooth.BluetoothAdapter android.bluetooth.BluetoothAdapter$1 android.bluetooth.BluetoothManager android.bluetooth.IBluetooth android.bluetooth.IBluetooth$Stub +android.bluetooth.IBluetooth$Stub$Proxy android.bluetooth.IBluetoothManager android.bluetooth.IBluetoothManager$Stub android.bluetooth.IBluetoothManager$Stub$Proxy @@ -582,8 +605,6 @@ android.content.BroadcastReceiver android.content.BroadcastReceiver$PendingResult android.content.BroadcastReceiver$PendingResult$1 android.content.ClipData -android.content.ClipData$Item -android.content.ClipDescription android.content.ClipboardManager android.content.ComponentCallbacks android.content.ComponentCallbacks2 @@ -594,7 +615,6 @@ android.content.ContentProvider$Transport android.content.ContentProviderClient android.content.ContentProviderNative android.content.ContentProviderOperation -android.content.ContentProviderOperation$Builder android.content.ContentProviderProxy android.content.ContentProviderResult android.content.ContentResolver @@ -618,10 +638,6 @@ android.content.IIntentReceiver$Stub android.content.IIntentSender android.content.IIntentSender$Stub android.content.IIntentSender$Stub$Proxy -android.content.ISyncAdapter -android.content.ISyncAdapter$Stub -android.content.ISyncContext -android.content.ISyncContext$Stub android.content.Intent android.content.Intent$1 android.content.IntentFilter @@ -635,13 +651,7 @@ android.content.ServiceConnection android.content.SharedPreferences android.content.SharedPreferences$Editor android.content.SharedPreferences$OnSharedPreferenceChangeListener -android.content.SyncResult -android.content.SyncResult$1 -android.content.SyncStats -android.content.SyncStats$1 android.content.UndoManager -android.content.UndoManager$UndoState -android.content.UndoOperation android.content.UndoOwner android.content.UriMatcher android.content.pm.ActivityInfo @@ -714,7 +724,6 @@ android.content.res.ResourcesImpl android.content.res.ResourcesImpl$ThemeImpl android.content.res.ResourcesKey android.content.res.StringBlock -android.content.res.StringBlock$StyleIDs android.content.res.ThemedResourceCache android.content.res.TypedArray android.content.res.XmlBlock @@ -752,7 +761,6 @@ android.database.IContentObserver android.database.IContentObserver$Stub android.database.IContentObserver$Stub$Proxy android.database.MatrixCursor -android.database.MatrixCursor$RowBuilder android.database.Observable android.database.SQLException android.database.sqlite.DatabaseObjectNotClosedException @@ -796,6 +804,7 @@ android.ddm.DdmHandleProfiling android.ddm.DdmHandleThread android.ddm.DdmHandleViewDebug android.ddm.DdmRegister +android.graphics.BaseCanvas android.graphics.Bitmap android.graphics.Bitmap$1 android.graphics.Bitmap$CompressFormat @@ -812,7 +821,6 @@ android.graphics.Canvas$NoImagePreloadHolder android.graphics.CanvasProperty android.graphics.Color android.graphics.ColorFilter -android.graphics.ColorMatrix android.graphics.ColorMatrixColorFilter android.graphics.ComposePathEffect android.graphics.ComposeShader @@ -823,15 +831,17 @@ android.graphics.DrawFilter android.graphics.EmbossMaskFilter android.graphics.FontFamily android.graphics.FontListParser +android.graphics.GraphicBuffer +android.graphics.GraphicBuffer$1 android.graphics.Insets android.graphics.Interpolator android.graphics.Interpolator$Result -android.graphics.LayerRasterizer android.graphics.LightingColorFilter android.graphics.LinearGradient android.graphics.MaskFilter android.graphics.Matrix android.graphics.Matrix$1 +android.graphics.Matrix$NoImagePreloadHolder android.graphics.Matrix$ScaleToFit android.graphics.Movie android.graphics.NinePatch @@ -863,7 +873,6 @@ android.graphics.PorterDuff$Mode android.graphics.PorterDuffColorFilter android.graphics.PorterDuffXfermode android.graphics.RadialGradient -android.graphics.Rasterizer android.graphics.Rect android.graphics.Rect$1 android.graphics.RectF @@ -876,7 +885,6 @@ android.graphics.Shader android.graphics.Shader$TileMode android.graphics.SumPathEffect android.graphics.SurfaceTexture -android.graphics.SurfaceTexture$OnFrameAvailableListener android.graphics.SweepGradient android.graphics.TableMaskFilter android.graphics.TemporaryBuffer @@ -893,7 +901,6 @@ android.graphics.drawable.AnimatedVectorDrawable$AnimatedVectorDrawableState android.graphics.drawable.AnimatedVectorDrawable$AnimatedVectorDrawableState$PendingAnimator android.graphics.drawable.AnimatedVectorDrawable$VectorDrawableAnimator android.graphics.drawable.AnimatedVectorDrawable$VectorDrawableAnimatorRT -android.graphics.drawable.AnimatedVectorDrawable$VectorDrawableAnimatorUI android.graphics.drawable.AnimationDrawable android.graphics.drawable.AnimationDrawable$AnimationState android.graphics.drawable.BitmapDrawable @@ -904,6 +911,7 @@ android.graphics.drawable.Drawable android.graphics.drawable.Drawable$Callback android.graphics.drawable.Drawable$ConstantState android.graphics.drawable.DrawableContainer +android.graphics.drawable.DrawableContainer$BlockInvalidateCallback android.graphics.drawable.DrawableContainer$DrawableContainerState android.graphics.drawable.DrawableInflater android.graphics.drawable.DrawableWrapper @@ -943,11 +951,30 @@ android.graphics.drawable.TransitionDrawable android.graphics.drawable.VectorDrawable android.graphics.drawable.VectorDrawable$VFullPath android.graphics.drawable.VectorDrawable$VFullPath$1 +android.graphics.drawable.VectorDrawable$VFullPath$10 +android.graphics.drawable.VectorDrawable$VFullPath$2 +android.graphics.drawable.VectorDrawable$VFullPath$3 +android.graphics.drawable.VectorDrawable$VFullPath$4 +android.graphics.drawable.VectorDrawable$VFullPath$5 +android.graphics.drawable.VectorDrawable$VFullPath$6 +android.graphics.drawable.VectorDrawable$VFullPath$7 +android.graphics.drawable.VectorDrawable$VFullPath$8 +android.graphics.drawable.VectorDrawable$VFullPath$9 android.graphics.drawable.VectorDrawable$VGroup android.graphics.drawable.VectorDrawable$VGroup$1 +android.graphics.drawable.VectorDrawable$VGroup$2 +android.graphics.drawable.VectorDrawable$VGroup$3 +android.graphics.drawable.VectorDrawable$VGroup$4 +android.graphics.drawable.VectorDrawable$VGroup$5 +android.graphics.drawable.VectorDrawable$VGroup$6 +android.graphics.drawable.VectorDrawable$VGroup$7 +android.graphics.drawable.VectorDrawable$VGroup$8 +android.graphics.drawable.VectorDrawable$VGroup$9 android.graphics.drawable.VectorDrawable$VObject android.graphics.drawable.VectorDrawable$VPath +android.graphics.drawable.VectorDrawable$VPath$1 android.graphics.drawable.VectorDrawable$VectorDrawableState +android.graphics.drawable.VectorDrawable$VectorDrawableState$1 android.graphics.drawable.shapes.OvalShape android.graphics.drawable.shapes.RectShape android.graphics.drawable.shapes.Shape @@ -958,6 +985,8 @@ android.hardware.Camera android.hardware.Camera$CameraInfo android.hardware.Camera$Face android.hardware.ConsumerIrManager +android.hardware.HardwareBuffer +android.hardware.HardwareBuffer$1 android.hardware.Sensor android.hardware.SensorEvent android.hardware.SensorEventListener @@ -966,7 +995,6 @@ android.hardware.SerialManager android.hardware.SerialPort android.hardware.SystemSensorManager android.hardware.SystemSensorManager$BaseEventQueue -android.hardware.SystemSensorManager$SensorEventQueue android.hardware.camera2.CameraCharacteristics$Key android.hardware.camera2.CameraManager android.hardware.camera2.CaptureRequest$Key @@ -996,9 +1024,10 @@ android.hardware.input.InputDeviceIdentifier android.hardware.input.InputDeviceIdentifier$1 android.hardware.input.InputManager android.hardware.input.InputManager$InputDevicesChangedListener +android.hardware.location.ActivityRecognitionHardware android.hardware.location.ContextHubManager -android.hardware.location.IContextHubService -android.hardware.location.IContextHubService$Stub +android.hardware.location.IActivityRecognitionHardware +android.hardware.location.IActivityRecognitionHardware$Stub android.hardware.radio.RadioManager android.hardware.radio.RadioManager$AmBandConfig android.hardware.radio.RadioManager$AmBandConfig$1 @@ -1044,8 +1073,6 @@ android.hardware.soundtrigger.SoundTrigger$SoundModel android.hardware.soundtrigger.SoundTrigger$SoundModelEvent android.hardware.soundtrigger.SoundTrigger$SoundModelEvent$1 android.hardware.soundtrigger.SoundTriggerModule -android.hardware.usb.IUsbManager -android.hardware.usb.IUsbManager$Stub android.hardware.usb.UsbDevice android.hardware.usb.UsbDeviceConnection android.hardware.usb.UsbManager @@ -1056,16 +1083,16 @@ android.icu.impl.CacheValue android.icu.impl.CacheValue$NullValue android.icu.impl.CacheValue$SoftValue android.icu.impl.CacheValue$Strength -android.icu.impl.CalendarData android.icu.impl.CalendarUtil +android.icu.impl.CalendarUtil$CalendarPreferences android.icu.impl.CharTrie android.icu.impl.ClassLoaderUtil android.icu.impl.CurrencyData android.icu.impl.CurrencyData$CurrencyDisplayInfo android.icu.impl.CurrencyData$CurrencyDisplayInfoProvider android.icu.impl.CurrencyData$CurrencySpacingInfo -android.icu.impl.DateNumberFormat -android.icu.impl.Grego +android.icu.impl.CurrencyData$CurrencySpacingInfo$SpacingPattern +android.icu.impl.CurrencyData$CurrencySpacingInfo$SpacingType android.icu.impl.ICUBinary android.icu.impl.ICUBinary$Authenticate android.icu.impl.ICUBinary$DatPackageReader @@ -1076,6 +1103,7 @@ android.icu.impl.ICUCache android.icu.impl.ICUConfig android.icu.impl.ICUCurrencyDisplayInfoProvider android.icu.impl.ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo +android.icu.impl.ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$SpacingInfoSink android.icu.impl.ICUCurrencyMetaInfo android.icu.impl.ICUCurrencyMetaInfo$Collector android.icu.impl.ICUCurrencyMetaInfo$CurrencyCollector @@ -1091,13 +1119,15 @@ android.icu.impl.ICURWLock android.icu.impl.ICUResourceBundle android.icu.impl.ICUResourceBundle$1 android.icu.impl.ICUResourceBundle$2 -android.icu.impl.ICUResourceBundle$2$1 +android.icu.impl.ICUResourceBundle$3 +android.icu.impl.ICUResourceBundle$3$1 +android.icu.impl.ICUResourceBundle$4 android.icu.impl.ICUResourceBundle$AvailEntry +android.icu.impl.ICUResourceBundle$Loader android.icu.impl.ICUResourceBundle$OpenType android.icu.impl.ICUResourceBundle$WholeBundle android.icu.impl.ICUResourceBundleImpl android.icu.impl.ICUResourceBundleImpl$ResourceArray -android.icu.impl.ICUResourceBundleImpl$ResourceBinary android.icu.impl.ICUResourceBundleImpl$ResourceContainer android.icu.impl.ICUResourceBundleImpl$ResourceInt android.icu.impl.ICUResourceBundleImpl$ResourceIntVector @@ -1111,6 +1141,7 @@ android.icu.impl.ICUResourceBundleReader$Container android.icu.impl.ICUResourceBundleReader$IsAcceptable android.icu.impl.ICUResourceBundleReader$ReaderCache android.icu.impl.ICUResourceBundleReader$ReaderCacheKey +android.icu.impl.ICUResourceBundleReader$ReaderValue android.icu.impl.ICUResourceBundleReader$ResourceCache android.icu.impl.ICUResourceBundleReader$ResourceCache$Level android.icu.impl.ICUResourceBundleReader$Table @@ -1121,7 +1152,6 @@ android.icu.impl.ICUService$CacheEntry android.icu.impl.ICUService$Factory android.icu.impl.ICUService$Key android.icu.impl.IDNA2003 -android.icu.impl.JavaTimeZone android.icu.impl.LocaleIDParser android.icu.impl.LocaleIDs android.icu.impl.Norm2AllModes @@ -1129,7 +1159,6 @@ android.icu.impl.Norm2AllModes$1 android.icu.impl.Norm2AllModes$ComposeNormalizer2 android.icu.impl.Norm2AllModes$DecomposeNormalizer2 android.icu.impl.Norm2AllModes$FCDNormalizer2 -android.icu.impl.Norm2AllModes$NFCSingleton android.icu.impl.Norm2AllModes$NFKCSingleton android.icu.impl.Norm2AllModes$NoopNormalizer2 android.icu.impl.Norm2AllModes$Norm2AllModesSingleton @@ -1137,14 +1166,13 @@ android.icu.impl.Norm2AllModes$Normalizer2WithImpl android.icu.impl.Normalizer2Impl android.icu.impl.Normalizer2Impl$1 android.icu.impl.Normalizer2Impl$IsAcceptable -android.icu.impl.OlsonTimeZone android.icu.impl.Pair android.icu.impl.PatternProps -android.icu.impl.PatternTokenizer android.icu.impl.PluralRulesLoader android.icu.impl.ReplaceableUCharacterIterator android.icu.impl.RuleCharacterIterator android.icu.impl.SimpleCache +android.icu.impl.SimpleFormatterImpl android.icu.impl.SoftCache android.icu.impl.StandardPlural android.icu.impl.StringPrepDataReader @@ -1159,7 +1187,6 @@ android.icu.impl.Trie2$UTrie2Header android.icu.impl.Trie2$ValueMapper android.icu.impl.Trie2$ValueWidth android.icu.impl.Trie2_16 -android.icu.impl.Trie2_32 android.icu.impl.UBiDiProps android.icu.impl.UBiDiProps$IsAcceptable android.icu.impl.UCharacterProperty @@ -1194,24 +1221,13 @@ android.icu.impl.UCharacterProperty$IntProperty android.icu.impl.UCharacterProperty$IsAcceptable android.icu.impl.UCharacterProperty$NormInertBinaryProperty android.icu.impl.UCharacterProperty$NormQuickCheckIntProperty -android.icu.impl.UPropertyAliases -android.icu.impl.UPropertyAliases$IsAcceptable android.icu.impl.URLHandler$URLVisitor -android.icu.impl.USerializedSet +android.icu.impl.UResource$Array +android.icu.impl.UResource$Key +android.icu.impl.UResource$Sink +android.icu.impl.UResource$Table +android.icu.impl.UResource$Value android.icu.impl.Utility -android.icu.impl.ZoneMeta -android.icu.impl.ZoneMeta$CustomTimeZoneCache -android.icu.impl.ZoneMeta$SystemTimeZoneCache -android.icu.impl.coll.CollationData -android.icu.impl.coll.CollationDataReader -android.icu.impl.coll.CollationDataReader$IsAcceptable -android.icu.impl.coll.CollationFastLatin -android.icu.impl.coll.CollationLoader -android.icu.impl.coll.CollationRoot -android.icu.impl.coll.CollationSettings -android.icu.impl.coll.CollationTailoring -android.icu.impl.coll.SharedObject -android.icu.impl.coll.SharedObject$Reference android.icu.impl.locale.AsciiUtil android.icu.impl.locale.BaseLocale android.icu.impl.locale.BaseLocale$Cache @@ -1222,8 +1238,6 @@ android.icu.impl.locale.LocaleSyntaxException android.icu.lang.UCharacter android.icu.lang.UCharacterEnums$ECharacterCategory android.icu.lang.UCharacterEnums$ECharacterDirection -android.icu.lang.UScript -android.icu.lang.UScript$ScriptUsage android.icu.math.BigDecimal android.icu.math.MathContext android.icu.text.BreakIterator @@ -1232,51 +1246,26 @@ android.icu.text.BreakIterator$BreakIteratorServiceShim android.icu.text.BreakIteratorFactory android.icu.text.BreakIteratorFactory$BFService android.icu.text.BreakIteratorFactory$BFService$1RBBreakIteratorFactory -android.icu.text.Collator -android.icu.text.Collator$ServiceShim -android.icu.text.CollatorServiceShim -android.icu.text.CollatorServiceShim$CService -android.icu.text.CollatorServiceShim$CService$1CollatorFactory android.icu.text.CurrencyDisplayNames android.icu.text.CurrencyMetaInfo android.icu.text.CurrencyMetaInfo$CurrencyDigits android.icu.text.CurrencyMetaInfo$CurrencyFilter -android.icu.text.DateFormat -android.icu.text.DateFormat$BooleanAttribute -android.icu.text.DateFormat$Field android.icu.text.DateFormatSymbols +android.icu.text.DateFormatSymbols$1 +android.icu.text.DateFormatSymbols$CalendarDataSink +android.icu.text.DateFormatSymbols$CalendarDataSink$AliasType android.icu.text.DateFormatSymbols$CapitalizationContextUsage -android.icu.text.DateIntervalFormat -android.icu.text.DateIntervalFormat$BestMatchInfo -android.icu.text.DateIntervalInfo -android.icu.text.DateIntervalInfo$PatternInfo -android.icu.text.DateTimePatternGenerator -android.icu.text.DateTimePatternGenerator$DTPGflags -android.icu.text.DateTimePatternGenerator$DateTimeMatcher -android.icu.text.DateTimePatternGenerator$DistanceInfo -android.icu.text.DateTimePatternGenerator$FormatParser -android.icu.text.DateTimePatternGenerator$PatternInfo -android.icu.text.DateTimePatternGenerator$PatternWithMatcher -android.icu.text.DateTimePatternGenerator$PatternWithSkeletonFlag -android.icu.text.DateTimePatternGenerator$VariableField android.icu.text.DecimalFormat android.icu.text.DecimalFormat$Unit android.icu.text.DecimalFormatSymbols android.icu.text.DecimalFormatSymbols$1 android.icu.text.DecimalFormatSymbols$CacheData +android.icu.text.DecimalFormatSymbols$DecFmtDataSink android.icu.text.DigitList android.icu.text.DisplayContext android.icu.text.DisplayContext$Type android.icu.text.IDNA android.icu.text.LanguageBreakEngine -android.icu.text.MessageFormat -android.icu.text.MessageFormat$AppendableWrapper -android.icu.text.MessageFormat$Field -android.icu.text.MessagePattern -android.icu.text.MessagePattern$ApostropheMode -android.icu.text.MessagePattern$ArgType -android.icu.text.MessagePattern$Part -android.icu.text.MessagePattern$Part$Type android.icu.text.Normalizer android.icu.text.Normalizer$FCDMode android.icu.text.Normalizer$Mode @@ -1292,6 +1281,9 @@ android.icu.text.Normalizer2 android.icu.text.NumberFormat android.icu.text.NumberFormat$Field android.icu.text.NumberingSystem +android.icu.text.NumberingSystem$1 +android.icu.text.NumberingSystem$2 +android.icu.text.NumberingSystem$LocaleLookupData android.icu.text.PluralRanges android.icu.text.PluralRanges$Matrix android.icu.text.PluralRules @@ -1317,11 +1309,10 @@ android.icu.text.RBBIDataWrapper$TrieFoldingFunc android.icu.text.Replaceable android.icu.text.ReplaceableString android.icu.text.RuleBasedBreakIterator -android.icu.text.RuleBasedCollator -android.icu.text.SimpleDateFormat -android.icu.text.SimpleDateFormat$PatternItem +android.icu.text.RuleBasedBreakIterator$LookAheadResults android.icu.text.StringPrep android.icu.text.StringPrepParseException +android.icu.text.TimeZoneNames$NameType android.icu.text.UCharacterIterator android.icu.text.UFieldPosition android.icu.text.UFormat @@ -1331,48 +1322,36 @@ android.icu.text.UnhandledBreakEngine android.icu.text.UnicodeFilter android.icu.text.UnicodeMatcher android.icu.text.UnicodeSet -android.icu.text.UnicodeSet$Filter -android.icu.text.UnicodeSet$GeneralCategoryMaskFilter -android.icu.text.UnicodeSet$IntPropertyFilter -android.icu.util.BasicTimeZone -android.icu.util.BytesTrie android.icu.util.BytesTrie$Result -android.icu.util.Calendar -android.icu.util.Calendar$CalType -android.icu.util.Calendar$FormatConfiguration -android.icu.util.Calendar$PatternData -android.icu.util.Calendar$WeekData -android.icu.util.Calendar$WeekDataCache android.icu.util.Currency +android.icu.util.Currency$1 android.icu.util.Currency$CurrencyUsage android.icu.util.Currency$EquivalenceRelation android.icu.util.Freezable -android.icu.util.GregorianCalendar android.icu.util.MeasureUnit android.icu.util.MeasureUnit$1 android.icu.util.MeasureUnit$2 android.icu.util.MeasureUnit$3 android.icu.util.MeasureUnit$Factory -android.icu.util.Output -android.icu.util.SimpleTimeZone android.icu.util.TimeUnit android.icu.util.TimeZone android.icu.util.TimeZone$ConstantZone android.icu.util.ULocale +android.icu.util.ULocale$1 +android.icu.util.ULocale$2 android.icu.util.ULocale$Category android.icu.util.ULocale$JDKLocaleHelper android.icu.util.ULocale$Type android.icu.util.UResourceBundle -android.icu.util.UResourceBundle$ResourceCacheKey +android.icu.util.UResourceBundle$RootType android.icu.util.UResourceBundleIterator android.icu.util.UResourceTypeMismatchException android.icu.util.VersionInfo android.location.CountryDetector -android.location.ILocationManager -android.location.ILocationManager$Stub android.location.Location +android.location.Location$1 +android.location.Location$2 android.location.LocationManager -android.media.AmrInputStream android.media.AudioAttributes android.media.AudioAttributes$1 android.media.AudioAttributes$Builder @@ -1386,7 +1365,7 @@ android.media.AudioHandle android.media.AudioManager android.media.AudioManager$1 android.media.AudioManager$2 -android.media.AudioManager$OnAudioFocusChangeListener +android.media.AudioManager$3 android.media.AudioManager$ServiceEventHandlerDelegate android.media.AudioManager$ServiceEventHandlerDelegate$1 android.media.AudioMixPort @@ -1404,7 +1383,6 @@ android.media.CamcorderProfile android.media.CameraProfile android.media.DecoderCapabilities android.media.EncoderCapabilities -android.media.ExifInterface android.media.IAudioFocusDispatcher android.media.IAudioFocusDispatcher$Stub android.media.IAudioService @@ -1412,6 +1390,10 @@ android.media.IAudioService$Stub android.media.IAudioService$Stub$Proxy android.media.IMediaHTTPConnection android.media.IMediaHTTPConnection$Stub +android.media.IPlaybackConfigDispatcher +android.media.IPlaybackConfigDispatcher$Stub +android.media.IPlayer +android.media.IPlayer$Stub android.media.IRecordingConfigDispatcher android.media.IRecordingConfigDispatcher$Stub android.media.Image @@ -1422,6 +1404,8 @@ android.media.ImageWriter$WriterSurfaceImage android.media.JetPlayer android.media.MediaCodec android.media.MediaCodecInfo +android.media.MediaCodecInfo$CodecCapabilities +android.media.MediaCodecInfo$CodecProfileLevel android.media.MediaCodecList android.media.MediaCrypto android.media.MediaDrm @@ -1432,21 +1416,17 @@ android.media.MediaMetadataRetriever android.media.MediaMuxer android.media.MediaPlayer android.media.MediaPlayer$OnCompletionListener -android.media.MediaPlayer$OnErrorListener -android.media.MediaPlayer$OnPreparedListener -android.media.MediaPlayer$OnSeekCompleteListener -android.media.MediaPlayer$OnVideoSizeChangedListener android.media.MediaRecorder android.media.MediaRouter -android.media.MediaRouter$Callback -android.media.MediaRouter$RouteCategory -android.media.MediaRouter$RouteInfo android.media.MediaScanner android.media.MediaSync android.media.PlaybackParams android.media.PlaybackParams$1 android.media.PlayerBase android.media.PlayerBase$1 +android.media.PlayerBase$2 +android.media.PlayerBase$PlayerIdCard +android.media.PlayerBase$PlayerIdCard$1 android.media.RemoteDisplay android.media.ResampleInputStream android.media.SubtitleController$Listener @@ -1456,12 +1436,10 @@ android.media.audiopolicy.AudioMixingRule android.media.audiopolicy.AudioMixingRule$AudioMixMatchCriterion android.media.midi.MidiManager android.media.projection.MediaProjectionManager -android.media.session.MediaController -android.media.session.MediaController$TransportControls -android.media.session.MediaSession$Token android.media.session.MediaSessionManager android.media.soundtrigger.SoundTriggerManager android.media.tv.TvInputManager +android.metrics.LogMaker android.mtp.MtpDatabase android.mtp.MtpDevice android.mtp.MtpDeviceInfo @@ -1476,6 +1454,8 @@ android.net.ConnectivityManager android.net.ConnectivityManager$CallbackHandler android.net.ConnectivityManager$NetworkCallback android.net.ConnectivityThread +# Must not be initialized, creates a thread. +# android.net.ConnectivityThread$Singleton android.net.Credentials android.net.EthernetManager android.net.IConnectivityManager @@ -1504,6 +1484,7 @@ android.net.NetworkPolicyManager android.net.NetworkRequest android.net.NetworkRequest$1 android.net.NetworkRequest$Builder +android.net.NetworkRequest$Type android.net.NetworkScoreManager android.net.NetworkStats android.net.NetworkStats$1 @@ -1512,9 +1493,6 @@ android.net.Proxy android.net.ProxyInfo android.net.RouteInfo android.net.RouteInfo$1 -android.net.SSLCertificateSocketFactory -android.net.SSLCertificateSocketFactory$1 -android.net.SSLSessionCache android.net.TrafficStats android.net.Uri android.net.Uri$1 @@ -1539,29 +1517,13 @@ android.net.wifi.SupplicantState$1 android.net.wifi.WifiInfo android.net.wifi.WifiInfo$1 android.net.wifi.WifiManager -android.net.wifi.WifiManager$WifiLock android.net.wifi.WifiScanner android.net.wifi.WifiSsid android.net.wifi.WifiSsid$1 -android.net.wifi.nan.WifiNanManager +android.net.wifi.aware.WifiAwareManager android.net.wifi.p2p.WifiP2pManager -android.nfc.IAppCallback -android.nfc.IAppCallback$Stub android.nfc.INfcAdapter android.nfc.INfcAdapter$Stub -android.nfc.INfcAdapter$Stub$Proxy -android.nfc.INfcCardEmulation -android.nfc.INfcCardEmulation$Stub -android.nfc.INfcCardEmulation$Stub$Proxy -android.nfc.INfcFCardEmulation -android.nfc.INfcFCardEmulation$Stub -android.nfc.INfcFCardEmulation$Stub$Proxy -android.nfc.INfcTag -android.nfc.INfcTag$Stub -android.nfc.INfcTag$Stub$Proxy -android.nfc.NfcActivityManager -android.nfc.NfcAdapter -android.nfc.NfcAdapter$1 android.nfc.NfcManager android.opengl.EGL14 android.opengl.EGLConfig @@ -1583,6 +1545,7 @@ android.opengl.GLES32 android.opengl.GLUtils android.opengl.Matrix android.opengl.Visibility +android.os.-$Lambda$5$6x30vPJhBKUfNY8tswxuZo3DCe0 android.os.AsyncTask$1 android.os.AsyncTask$2 android.os.AsyncTask$3 @@ -1614,17 +1577,24 @@ android.os.Debug$MemoryInfo$1 android.os.DropBoxManager android.os.Environment android.os.Environment$UserEnvironment +android.os.FactoryTest android.os.FileObserver$ObserverThread android.os.FileUtils +android.os.GraphicsEnvironment android.os.Handler android.os.Handler$Callback android.os.Handler$MessengerImpl android.os.HandlerThread android.os.HardwarePropertiesManager +android.os.HwBinder +android.os.HwBlob +android.os.HwParcel +android.os.HwRemoteBinder android.os.IBinder android.os.IBinder$DeathRecipient android.os.ICancellationSignal android.os.ICancellationSignal$Stub +android.os.IHwBinder android.os.IInterface android.os.IMessenger android.os.IMessenger$Stub @@ -1641,7 +1611,7 @@ android.os.IUserManager$Stub android.os.IUserManager$Stub$Proxy android.os.IVibratorService android.os.IVibratorService$Stub -android.os.IVibratorService$Stub$Proxy +android.os.IncidentManager android.os.LocaleList android.os.LocaleList$1 android.os.Looper @@ -1658,7 +1628,6 @@ android.os.Parcel$1 android.os.ParcelFileDescriptor android.os.ParcelFileDescriptor$1 android.os.ParcelFileDescriptor$AutoCloseInputStream -android.os.ParcelFileDescriptor$AutoCloseOutputStream android.os.Parcelable android.os.Parcelable$ClassLoaderCreator android.os.Parcelable$Creator @@ -1677,8 +1646,11 @@ android.os.RemoteException android.os.ResultReceiver android.os.SELinux android.os.ServiceManager +android.os.ServiceManager$ServiceNotFoundException android.os.ServiceManagerNative android.os.ServiceManagerProxy +android.os.ServiceSpecificException +android.os.ShellCallback android.os.StatFs android.os.StrictMode android.os.StrictMode$1 @@ -1704,6 +1676,7 @@ android.os.StrictMode$ThreadPolicy android.os.StrictMode$ThreadPolicy$Builder android.os.StrictMode$ThreadSpanState android.os.StrictMode$ViolationInfo +android.os.StrictMode$ViolationInfo$1 android.os.StrictMode$VmPolicy android.os.StrictMode$VmPolicy$Builder android.os.SystemClock @@ -1716,6 +1689,7 @@ android.os.UserHandle android.os.UserHandle$1 android.os.UserManager android.os.Vibrator +android.os.ZygoteProcess android.os.ZygoteStartFailedEx android.os.health.SystemHealthManager android.os.storage.IStorageManager @@ -1724,17 +1698,16 @@ android.os.storage.IStorageManager$Stub$Proxy android.os.storage.StorageManager android.os.storage.StorageVolume android.os.storage.StorageVolume$1 -android.preference.Preference$OnPreferenceChangeListener android.preference.PreferenceActivity android.preference.PreferenceFragment$OnPreferenceStartFragmentCallback android.preference.PreferenceManager android.preference.PreferenceManager$OnPreferenceTreeClickListener android.print.PrintManager +android.provider.-$Lambda$46$87WmhkvObehVg0OMBzwa_MTVV8g android.provider.BaseColumns android.provider.ContactsContract android.provider.ContactsContract$CommonDataKinds$BaseTypes android.provider.ContactsContract$CommonDataKinds$CommonColumns -android.provider.ContactsContract$CommonDataKinds$Email android.provider.ContactsContract$CommonDataKinds$Phone android.provider.ContactsContract$ContactCounts android.provider.ContactsContract$ContactNameColumns @@ -1748,13 +1721,12 @@ android.provider.ContactsContract$DataColumnsWithJoins android.provider.ContactsContract$DataUsageStatColumns android.provider.ContactsContract$RawContactsColumns android.provider.ContactsContract$StatusColumns -android.provider.MediaStore$Images$ImageColumns -android.provider.MediaStore$Images$Media android.provider.MediaStore$MediaColumns +android.provider.Settings +android.provider.Settings$ContentProviderHolder android.provider.Settings$GenerationTracker android.provider.Settings$Global android.provider.Settings$NameValueCache -android.provider.Settings$NameValueCache$-java_lang_String_getStringForUser_android_content_ContentResolver_cr_java_lang_String_name_int_userHandle_LambdaImpl0 android.provider.Settings$NameValueTable android.provider.Settings$Secure android.provider.Settings$SettingNotFoundException @@ -1773,8 +1745,6 @@ android.provider.Settings$System$InclusiveFloatRangeValidator android.provider.Settings$System$InclusiveIntegerRangeValidator android.provider.Settings$System$Validator android.renderscript.RenderScriptCacheDir -android.security.FrameworkNetworkSecurityPolicy -android.security.NetworkSecurityPolicy android.security.keystore.AndroidKeyStoreBCWorkaroundProvider android.security.keystore.AndroidKeyStoreProvider android.security.net.config.ApplicationConfig @@ -1797,9 +1767,7 @@ android.security.net.config.PinSet android.security.net.config.RootTrustManager android.security.net.config.RootTrustManagerFactorySpi android.security.net.config.SystemCertificateSource -android.security.net.config.TrustAnchor android.security.net.config.TrustedCertificateStoreAdapter -android.security.net.config.UserCertificateSource android.service.persistentdata.PersistentDataBlockManager android.system.ErrnoException android.system.GaiException @@ -1811,6 +1779,7 @@ android.system.StructAddrinfo android.system.StructFlock android.system.StructGroupReq android.system.StructGroupSourceReq +android.system.StructIfaddrs android.system.StructLinger android.system.StructPasswd android.system.StructPollfd @@ -1824,11 +1793,11 @@ android.telecom.TelecomManager android.telephony.CarrierConfigManager android.telephony.PhoneNumberUtils android.telephony.PhoneStateListener -android.telephony.PhoneStateListener$1 -android.telephony.PhoneStateListener$IPhoneStateListenerStub android.telephony.Rlog +android.telephony.ServiceState android.telephony.SubscriptionManager android.telephony.TelephonyManager +android.telephony.TelephonyManager$MultiSimVariants android.text.AndroidBidi android.text.AndroidCharacter android.text.BoringLayout @@ -1839,15 +1808,19 @@ android.text.DynamicLayout$ChangeWatcher android.text.Editable android.text.Editable$Factory android.text.FontConfig +android.text.FontConfig$1 android.text.FontConfig$Alias +android.text.FontConfig$Alias$1 android.text.FontConfig$Axis +android.text.FontConfig$Axis$1 android.text.FontConfig$Family +android.text.FontConfig$Family$1 android.text.FontConfig$Font +android.text.FontConfig$Font$1 +android.text.FontManager android.text.GetChars android.text.GraphicsOperations android.text.Html -android.text.Html$HtmlParser -android.text.HtmlToSpannedConverter android.text.Hyphenator android.text.InputFilter android.text.InputType @@ -1889,15 +1862,11 @@ android.text.TextPaint android.text.TextUtils android.text.TextUtils$1 android.text.TextUtils$EllipsizeCallback -android.text.TextUtils$SimpleStringSplitter -android.text.TextUtils$StringSplitter android.text.TextUtils$TruncateAt android.text.TextWatcher android.text.format.DateFormat android.text.format.DateUtils -android.text.format.Formatter android.text.format.Time -android.text.format.Time$TimeCalculator android.text.method.AllCapsTransformationMethod android.text.method.ArrowKeyMovementMethod android.text.method.BaseKeyListener @@ -1919,10 +1888,8 @@ android.text.method.TransformationMethod2 android.text.style.AlignmentSpan android.text.style.CharacterStyle android.text.style.ClickableSpan -android.text.style.DynamicDrawableSpan android.text.style.EasyEditSpan android.text.style.ForegroundColorSpan -android.text.style.ImageSpan android.text.style.LeadingMarginSpan android.text.style.LineBackgroundSpan android.text.style.LineHeightSpan @@ -1933,9 +1900,7 @@ android.text.style.SpellCheckSpan android.text.style.StyleSpan android.text.style.SuggestionSpan android.text.style.TabStopSpan -android.text.style.TextAppearanceSpan android.text.style.URLSpan -android.text.style.UnderlineSpan android.text.style.UpdateAppearance android.text.style.UpdateLayout android.text.style.WrapTogetherSpan @@ -1956,7 +1921,6 @@ android.transition.ChangeTransform$1 android.transition.ChangeTransform$2 android.transition.Fade android.transition.PathMotion -android.transition.Scene android.transition.Transition android.transition.Transition$1 android.transition.Transition$EpicenterCallback @@ -1976,18 +1940,20 @@ android.util.Base64 android.util.Base64$Coder android.util.Base64$Decoder android.util.Base64$Encoder +android.util.BootTimingsTraceLog android.util.ContainerHelpers android.util.DisplayMetrics android.util.EventLog android.util.EventLog$Event android.util.FloatProperty +android.util.IntArray android.util.IntProperty -android.util.JsonReader android.util.Log android.util.Log$1 android.util.Log$ImmediateLogWriter android.util.Log$TerribleFailureHandler android.util.LogPrinter +android.util.LongArray android.util.LongSparseArray android.util.LongSparseLongArray android.util.LruCache @@ -2002,6 +1968,7 @@ android.util.MutableLong android.util.Pair android.util.PathParser android.util.PathParser$PathData +android.util.Patterns android.util.Pools$Pool android.util.Pools$SimplePool android.util.Pools$SynchronizedPool @@ -2011,24 +1978,24 @@ android.util.Range android.util.Rational android.util.Singleton android.util.Size +android.util.SizeF android.util.Slog android.util.SparseArray android.util.SparseBooleanArray android.util.SparseIntArray -android.util.SparseLongArray android.util.StateSet android.util.SuperNotCalledException -android.util.TimeFormatException android.util.TypedValue android.util.Xml android.util.jar.StrictJarFile +android.view.-$Lambda$48$iU_USrtPm1XIm5H9QYQvXfBGDE4 +android.view.-$Lambda$49$iU_USrtPm1XIm5H9QYQvXfBGDE4 android.view.AbsSavedState android.view.AbsSavedState$1 android.view.AbsSavedState$2 android.view.ActionMode android.view.ActionMode$Callback android.view.ActionProvider -android.view.ActionProvider$SubUiVisibilityListener android.view.Choreographer android.view.Choreographer$1 android.view.Choreographer$2 @@ -2041,8 +2008,6 @@ android.view.ContextMenu android.view.ContextMenu$ContextMenuInfo android.view.ContextThemeWrapper android.view.Display -android.view.Display$ColorTransform -android.view.Display$ColorTransform$1 android.view.Display$HdrCapabilities android.view.Display$HdrCapabilities$1 android.view.Display$Mode @@ -2052,6 +2017,7 @@ android.view.DisplayEventReceiver android.view.DisplayInfo android.view.DisplayInfo$1 android.view.DisplayListCanvas +android.view.DragEvent android.view.FallbackEventHandler android.view.FocusFinder android.view.FocusFinder$1 @@ -2066,8 +2032,6 @@ android.view.GestureDetector$OnContextClickListener android.view.GestureDetector$OnDoubleTapListener android.view.GestureDetector$OnGestureListener android.view.GestureDetector$SimpleOnGestureListener -android.view.GraphicBuffer -android.view.GraphicBuffer$1 android.view.Gravity android.view.HandlerActionQueue android.view.HandlerActionQueue$HandlerAction @@ -2092,7 +2056,6 @@ android.view.InputChannel android.view.InputChannel$1 android.view.InputDevice android.view.InputDevice$1 -android.view.InputDevice$MotionRange android.view.InputEvent android.view.InputEvent$1 android.view.InputEventConsistencyVerifier @@ -2125,9 +2088,12 @@ android.view.MotionEvent$PointerCoords android.view.MotionEvent$PointerProperties android.view.PointerIcon android.view.PointerIcon$1 +android.view.RecordingCanvas android.view.RenderNode +android.view.RenderNode$NoImagePreloadHolder android.view.RenderNodeAnimator android.view.RenderNodeAnimator$1 +android.view.RenderNodeAnimatorSetHelper android.view.SearchEvent android.view.SoundEffectConstants android.view.SubMenu @@ -2143,9 +2109,8 @@ android.view.SurfaceHolder$Callback2 android.view.SurfaceSession android.view.SurfaceView android.view.TextureView -android.view.TextureView$SurfaceTextureListener android.view.ThreadedRenderer -android.view.ThreadedRenderer$HardwareDrawCallbacks +android.view.ThreadedRenderer$DrawCallbacks android.view.ThreadedRenderer$ProcessInitializer android.view.VelocityTracker android.view.VelocityTracker$Estimator @@ -2182,6 +2147,7 @@ android.view.View$OnLongClickListener android.view.View$OnTouchListener android.view.View$PerformClick android.view.View$ScrollabilityCache +android.view.View$TooltipInfo android.view.View$TransformationInfo android.view.View$UnsetPressedState android.view.ViewConfiguration @@ -2193,11 +2159,13 @@ android.view.ViewGroup$LayoutParams android.view.ViewGroup$MarginLayoutParams android.view.ViewGroup$OnHierarchyChangeListener android.view.ViewGroup$TouchTarget +android.view.ViewGroupOverlay android.view.ViewManager android.view.ViewOutlineProvider android.view.ViewOutlineProvider$1 android.view.ViewOutlineProvider$2 android.view.ViewOutlineProvider$3 +android.view.ViewOverlay android.view.ViewParent android.view.ViewPropertyAnimator android.view.ViewPropertyAnimator$1 @@ -2245,6 +2213,7 @@ android.view.ViewTreeObserver$OnTouchModeChangeListener android.view.Window android.view.Window$Callback android.view.Window$OnWindowDismissedCallback +android.view.Window$OnWindowSwipeDismissedCallback android.view.Window$WindowControllerCallback android.view.WindowAnimationFrameStats android.view.WindowAnimationFrameStats$1 @@ -2254,7 +2223,6 @@ android.view.WindowContentFrameStats$1 android.view.WindowInsets android.view.WindowLeaked android.view.WindowManager -android.view.WindowManager$BadTokenException android.view.WindowManager$LayoutParams android.view.WindowManager$LayoutParams$1 android.view.WindowManagerGlobal @@ -2272,9 +2240,6 @@ android.view.accessibility.AccessibilityNodeInfo android.view.accessibility.AccessibilityNodeProvider android.view.accessibility.AccessibilityRecord android.view.accessibility.CaptioningManager -android.view.accessibility.CaptioningManager$1 -android.view.accessibility.CaptioningManager$CaptioningChangeListener -android.view.accessibility.CaptioningManager$MyContentObserver android.view.accessibility.IAccessibilityManager android.view.accessibility.IAccessibilityManager$Stub android.view.accessibility.IAccessibilityManager$Stub$Proxy @@ -2291,24 +2256,23 @@ android.view.animation.Animation$AnimationListener android.view.animation.Animation$NoImagePreloadHolder android.view.animation.AnimationSet android.view.animation.AnimationUtils +android.view.animation.AnimationUtils$1 +android.view.animation.AnimationUtils$AnimationState android.view.animation.BaseInterpolator android.view.animation.DecelerateInterpolator android.view.animation.Interpolator android.view.animation.LinearInterpolator -android.view.animation.OvershootInterpolator android.view.animation.PathInterpolator android.view.animation.ScaleAnimation android.view.animation.Transformation android.view.animation.TranslateAnimation +android.view.autofill.AutoFillManager android.view.inputmethod.BaseInputConnection android.view.inputmethod.ComposingText android.view.inputmethod.CursorAnchorInfo$Builder android.view.inputmethod.EditorInfo android.view.inputmethod.EditorInfo$1 -android.view.inputmethod.ExtractedText -android.view.inputmethod.ExtractedText$1 android.view.inputmethod.InputConnection -android.view.inputmethod.InputConnectionInspector android.view.inputmethod.InputMethodManager android.view.inputmethod.InputMethodManager$1 android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper @@ -2316,6 +2280,7 @@ android.view.inputmethod.InputMethodManager$FinishedInputEventCallback android.view.inputmethod.InputMethodManager$H android.view.inputmethod.InputMethodManager$ImeInputEventSender android.view.inputmethod.InputMethodManager$PendingEvent +android.view.textclassifier.TextClassificationManager android.view.textservice.SpellCheckerSubtype android.view.textservice.SpellCheckerSubtype$1 android.view.textservice.TextServicesManager @@ -2323,7 +2288,6 @@ android.webkit.IWebViewUpdateService android.webkit.IWebViewUpdateService$Stub android.webkit.IWebViewUpdateService$Stub$Proxy android.webkit.MimeTypeMap -android.webkit.WebSettings android.webkit.WebView android.webkit.WebViewFactory android.webkit.WebViewFactory$MissingWebViewPackageException @@ -2339,14 +2303,6 @@ android.widget.AbsListView$SavedState$1 android.widget.AbsSeekBar android.widget.AbsSpinner android.widget.AbsoluteLayout -android.widget.ActionMenuPresenter -android.widget.ActionMenuPresenter$1 -android.widget.ActionMenuPresenter$2 -android.widget.ActionMenuPresenter$OverflowMenuButton -android.widget.ActionMenuPresenter$OverflowMenuButton$1 -android.widget.ActionMenuPresenter$PopupPresenterCallback -android.widget.ActionMenuView -android.widget.ActionMenuView$ActionMenuChildView android.widget.ActionMenuView$OnMenuItemClickListener android.widget.Adapter android.widget.AdapterView @@ -2367,24 +2323,16 @@ android.widget.EditText android.widget.Editor android.widget.Editor$1 android.widget.Editor$2 -android.widget.Editor$Blink android.widget.Editor$CursorAnchorInfoNotifier -android.widget.Editor$CursorController -android.widget.Editor$EditOperation -android.widget.Editor$EditOperation$1 android.widget.Editor$InputContentType -android.widget.Editor$InputMethodState -android.widget.Editor$InsertionPointCursorController android.widget.Editor$PositionListener android.widget.Editor$ProcessTextIntentActionsHandler -android.widget.Editor$SelectionModifierCursorController android.widget.Editor$SpanController android.widget.Editor$SuggestionHelper android.widget.Editor$SuggestionHelper$SuggestionSpanComparator android.widget.Editor$TextRenderNode android.widget.Editor$TextViewPositionListener android.widget.Editor$UndoInputFilter -android.widget.Filter android.widget.Filter$FilterListener android.widget.Filterable android.widget.ForwardingListener @@ -2392,8 +2340,6 @@ android.widget.FrameLayout android.widget.FrameLayout$LayoutParams android.widget.HeaderViewListAdapter android.widget.HorizontalScrollView -android.widget.HorizontalScrollView$SavedState -android.widget.HorizontalScrollView$SavedState$1 android.widget.ImageButton android.widget.ImageView android.widget.ImageView$ScaleType @@ -2402,12 +2348,12 @@ android.widget.LinearLayout$LayoutParams android.widget.ListAdapter android.widget.ListPopupWindow android.widget.ListPopupWindow$ListSelectorHider +android.widget.ListPopupWindow$PopupDataSetObserver android.widget.ListPopupWindow$PopupScrollListener android.widget.ListPopupWindow$PopupTouchInterceptor android.widget.ListPopupWindow$ResizePopupRunnable android.widget.ListView android.widget.ListView$ArrowScrollFocusResult -android.widget.ListView$FixedViewInfo android.widget.MultiAutoCompleteTextView android.widget.OverScroller android.widget.OverScroller$SplineOverScroller @@ -2415,8 +2361,6 @@ android.widget.PopupWindow android.widget.PopupWindow$1 android.widget.PopupWindow$2 android.widget.PopupWindow$OnDismissListener -android.widget.PopupWindow$PopupDecorView -android.widget.PopupWindow$PopupDecorView$1 android.widget.ProgressBar android.widget.ProgressBar$1 android.widget.ProgressBar$SavedState @@ -2428,30 +2372,17 @@ android.widget.RelativeLayout$DependencyGraph android.widget.RelativeLayout$DependencyGraph$Node android.widget.RelativeLayout$LayoutParams android.widget.RemoteViews -android.widget.RemoteViews$1 -android.widget.RemoteViews$2 -android.widget.RemoteViews$3 -android.widget.RemoteViews$Action -android.widget.RemoteViews$ActionException -android.widget.RemoteViews$BitmapCache -android.widget.RemoteViews$MemoryUsageCounter -android.widget.RemoteViews$MutablePair -android.widget.RemoteViews$OnClickHandler -android.widget.RemoteViews$ReflectionAction -android.widget.RemoteViews$RuntimeAction -android.widget.RemoteViews$SetOnClickPendingIntent +android.widget.RemoteViews$RemoteView android.widget.RemoteViewsAdapter$RemoteAdapterConnectionCallback android.widget.RtlSpacingHelper android.widget.ScrollBarDrawable android.widget.ScrollView android.widget.Scroller android.widget.Scroller$ViscousFluidInterpolator -android.widget.SectionIndexer android.widget.SeekBar android.widget.Space android.widget.Spinner android.widget.SpinnerAdapter -android.widget.Switch android.widget.TextView android.widget.TextView$BufferType android.widget.TextView$ChangeWatcher @@ -2465,7 +2396,6 @@ android.widget.Toast android.widget.Toolbar android.widget.Toolbar$1 android.widget.Toolbar$2 -android.widget.Toolbar$ExpandedActionViewMenuPresenter android.widget.Toolbar$LayoutParams android.widget.WrapperListAdapter com.android.dex.ClassData @@ -2497,9 +2427,6 @@ com.android.dex.util.FileUtils com.android.i18n.phonenumbers.NumberParseException com.android.i18n.phonenumbers.PhoneNumberUtil com.android.internal.R$styleable -com.android.internal.app.AlertController -com.android.internal.app.AlertController$1 -com.android.internal.app.AlertController$ButtonHandler com.android.internal.app.IAppOpsCallback com.android.internal.app.IAppOpsCallback$Stub com.android.internal.app.IAppOpsService @@ -2507,42 +2434,47 @@ com.android.internal.app.IAppOpsService$Stub com.android.internal.app.IAppOpsService$Stub$Proxy com.android.internal.app.IBatteryStats com.android.internal.app.IBatteryStats$Stub +com.android.internal.app.IBatteryStats$Stub$Proxy com.android.internal.app.IVoiceInteractor com.android.internal.app.IVoiceInteractor$Stub -com.android.internal.appwidget.IAppWidgetService -com.android.internal.appwidget.IAppWidgetService$Stub -com.android.internal.appwidget.IAppWidgetService$Stub$Proxy com.android.internal.content.NativeLibraryHelper com.android.internal.content.ReferrerIntent com.android.internal.content.ReferrerIntent$1 +com.android.internal.graphics.drawable.AnimationScaleListDrawable +com.android.internal.graphics.drawable.AnimationScaleListDrawable$AnimationScaleListState com.android.internal.inputmethod.InputMethodUtils com.android.internal.inputmethod.InputMethodUtils$1 com.android.internal.inputmethod.LocaleUtils$LocaleExtractor com.android.internal.logging.AndroidConfig com.android.internal.logging.AndroidHandler com.android.internal.logging.AndroidHandler$1 +com.android.internal.logging.EventLogTags +com.android.internal.logging.MetricsLogger com.android.internal.net.NetworkStatsFactory com.android.internal.os.AndroidPrintStream com.android.internal.os.BinderInternal com.android.internal.os.BinderInternal$GcWatcher -com.android.internal.os.InstallerConnection$InstallerException +com.android.internal.os.FuseAppLoop +com.android.internal.os.FuseAppLoop$1 +com.android.internal.os.FuseAppLoop$UnmountedException com.android.internal.os.LoggingPrintStream com.android.internal.os.LoggingPrintStream$1 com.android.internal.os.PathClassLoaderFactory +com.android.internal.os.RoSystemProperties com.android.internal.os.RuntimeInit com.android.internal.os.RuntimeInit$1 com.android.internal.os.RuntimeInit$Arguments com.android.internal.os.RuntimeInit$KillApplicationHandler com.android.internal.os.RuntimeInit$LoggingHandler -com.android.internal.os.RoSystemProperties com.android.internal.os.SamplingProfilerIntegration com.android.internal.os.SomeArgs com.android.internal.os.Zygote +com.android.internal.os.Zygote$MethodAndArgsCaller com.android.internal.os.ZygoteConnection com.android.internal.os.ZygoteConnection$Arguments com.android.internal.os.ZygoteInit -com.android.internal.os.ZygoteInit$MethodAndArgsCaller com.android.internal.os.ZygoteSecurityException +com.android.internal.os.ZygoteServer com.android.internal.policy.DecorContext com.android.internal.policy.DecorView com.android.internal.policy.DecorView$ColorViewState @@ -2554,8 +2486,6 @@ com.android.internal.policy.PhoneWindow$PanelFeatureState com.android.internal.policy.PhoneWindow$PhoneWindowMenuCallback com.android.internal.policy.PhoneWindow$RotationWatcher com.android.internal.policy.PhoneWindow$RotationWatcher$1 -com.android.internal.telephony.IPhoneStateListener -com.android.internal.telephony.IPhoneStateListener$Stub com.android.internal.telephony.ISub com.android.internal.telephony.ISub$Stub com.android.internal.telephony.ISub$Stub$Proxy @@ -2569,6 +2499,8 @@ com.android.internal.telephony.PhoneConstants$State com.android.internal.textservice.ITextServicesManager com.android.internal.textservice.ITextServicesManager$Stub com.android.internal.textservice.ITextServicesManager$Stub$Proxy +com.android.internal.transition.EpicenterTranslateClipReveal +com.android.internal.transition.TransitionConstants com.android.internal.util.ArrayUtils com.android.internal.util.FastPrintWriter com.android.internal.util.FastPrintWriter$DummyWriter @@ -2579,15 +2511,10 @@ com.android.internal.util.Preconditions com.android.internal.util.VirtualRefBasePtr com.android.internal.util.XmlUtils com.android.internal.util.XmlUtils$WriteMapCallback -com.android.internal.view.ActionBarPolicy com.android.internal.view.IInputConnectionWrapper com.android.internal.view.IInputConnectionWrapper$MyHandler -com.android.internal.view.IInputConnectionWrapper$SomeArgs com.android.internal.view.IInputContext com.android.internal.view.IInputContext$Stub -com.android.internal.view.IInputContextCallback -com.android.internal.view.IInputContextCallback$Stub -com.android.internal.view.IInputContextCallback$Stub$Proxy com.android.internal.view.IInputMethodClient com.android.internal.view.IInputMethodClient$Stub com.android.internal.view.IInputMethodManager @@ -2603,23 +2530,13 @@ com.android.internal.view.animation.FallbackLUTInterpolator com.android.internal.view.animation.HasNativeInterpolator com.android.internal.view.animation.NativeInterpolatorFactory com.android.internal.view.animation.NativeInterpolatorFactoryHelper -com.android.internal.view.menu.ActionMenuItem -com.android.internal.view.menu.BaseMenuPresenter com.android.internal.view.menu.MenuBuilder com.android.internal.view.menu.MenuBuilder$Callback -com.android.internal.view.menu.MenuBuilder$ItemInvoker com.android.internal.view.menu.MenuItemImpl -com.android.internal.view.menu.MenuPresenter com.android.internal.view.menu.MenuPresenter$Callback -com.android.internal.view.menu.MenuView com.android.internal.view.menu.ShowableListMenu com.android.internal.widget.BackgroundFallback com.android.internal.widget.DecorContentParent -com.android.internal.widget.DecorToolbar -com.android.internal.widget.EditableInputConnection -com.android.internal.widget.ScrollBarUtils -com.android.internal.widget.ToolbarWidgetWrapper -com.android.internal.widget.ToolbarWidgetWrapper$1 com.android.okhttp.Address com.android.okhttp.Authenticator com.android.okhttp.CacheControl @@ -2635,6 +2552,8 @@ com.android.okhttp.ConnectionPool$1 com.android.okhttp.ConnectionSpec com.android.okhttp.ConnectionSpec$Builder com.android.okhttp.Dispatcher +com.android.okhttp.Dns +com.android.okhttp.Dns$1 com.android.okhttp.Handshake com.android.okhttp.Headers com.android.okhttp.Headers$Builder @@ -2659,8 +2578,6 @@ com.android.okhttp.Route com.android.okhttp.TlsVersion com.android.okhttp.internal.ConnectionSpecSelector com.android.okhttp.internal.Internal -com.android.okhttp.internal.Network -com.android.okhttp.internal.Network$1 com.android.okhttp.internal.OptionalMethod com.android.okhttp.internal.Platform com.android.okhttp.internal.RouteDatabase @@ -2670,14 +2587,14 @@ com.android.okhttp.internal.Util$1 com.android.okhttp.internal.http.AuthenticatorAdapter com.android.okhttp.internal.http.CacheStrategy com.android.okhttp.internal.http.CacheStrategy$Factory -com.android.okhttp.internal.http.HttpConnection -com.android.okhttp.internal.http.HttpConnection$AbstractSource -com.android.okhttp.internal.http.HttpConnection$ChunkedSource -com.android.okhttp.internal.http.HttpConnection$FixedLengthSource +com.android.okhttp.internal.http.Http1xStream +com.android.okhttp.internal.http.Http1xStream$AbstractSource +com.android.okhttp.internal.http.Http1xStream$ChunkedSource +com.android.okhttp.internal.http.Http1xStream$FixedLengthSource com.android.okhttp.internal.http.HttpEngine com.android.okhttp.internal.http.HttpEngine$1 com.android.okhttp.internal.http.HttpMethod -com.android.okhttp.internal.http.HttpTransport +com.android.okhttp.internal.http.HttpStream com.android.okhttp.internal.http.OkHeaders com.android.okhttp.internal.http.OkHeaders$1 com.android.okhttp.internal.http.RealResponseBody @@ -2687,10 +2604,11 @@ com.android.okhttp.internal.http.RetryableSink com.android.okhttp.internal.http.RouteException com.android.okhttp.internal.http.RouteSelector com.android.okhttp.internal.http.StatusLine -com.android.okhttp.internal.http.Transport +com.android.okhttp.internal.http.StreamAllocation com.android.okhttp.internal.huc.DelegatingHttpsURLConnection com.android.okhttp.internal.huc.HttpURLConnectionImpl com.android.okhttp.internal.huc.HttpsURLConnectionImpl +com.android.okhttp.internal.io.RealConnection com.android.okhttp.internal.tls.OkHostnameVerifier com.android.okhttp.okio.AsyncTimeout com.android.okhttp.okio.AsyncTimeout$1 @@ -2771,8 +2689,12 @@ com.android.org.bouncycastle.jcajce.provider.symmetric.DES com.android.org.bouncycastle.jcajce.provider.symmetric.DES$Mappings com.android.org.bouncycastle.jcajce.provider.symmetric.DESede com.android.org.bouncycastle.jcajce.provider.symmetric.DESede$Mappings +com.android.org.bouncycastle.jcajce.provider.symmetric.PBEPBKDF2 +com.android.org.bouncycastle.jcajce.provider.symmetric.PBEPBKDF2$Mappings com.android.org.bouncycastle.jcajce.provider.symmetric.PBEPKCS12 com.android.org.bouncycastle.jcajce.provider.symmetric.PBEPKCS12$Mappings +com.android.org.bouncycastle.jcajce.provider.symmetric.PBES2AlgorithmParameters +com.android.org.bouncycastle.jcajce.provider.symmetric.PBES2AlgorithmParameters$Mappings com.android.org.bouncycastle.jcajce.provider.symmetric.RC2 com.android.org.bouncycastle.jcajce.provider.symmetric.RC2$Mappings com.android.org.bouncycastle.jcajce.provider.symmetric.SymmetricAlgorithmProvider @@ -2792,18 +2714,20 @@ com.android.org.bouncycastle.util.Arrays com.android.org.bouncycastle.util.Encodable com.android.org.bouncycastle.util.Strings com.android.org.bouncycastle.util.Strings$1 +com.android.org.conscrypt.AbstractOpenSSLSession com.android.org.conscrypt.AbstractSessionContext com.android.org.conscrypt.AbstractSessionContext$1 com.android.org.conscrypt.AddressUtils com.android.org.conscrypt.ByteArray -com.android.org.conscrypt.CertPinManager +com.android.org.conscrypt.CertBlacklist com.android.org.conscrypt.CertificatePriorityComparator com.android.org.conscrypt.ChainStrengthAnalyzer com.android.org.conscrypt.ClientSessionContext com.android.org.conscrypt.ClientSessionContext$HostAndPort com.android.org.conscrypt.CryptoUpcalls -com.android.org.conscrypt.FileClientSessionCache -com.android.org.conscrypt.FileClientSessionCache$Impl +com.android.org.conscrypt.EvpMdRef$MD5 +com.android.org.conscrypt.EvpMdRef$SHA1 +com.android.org.conscrypt.EvpMdRef$SHA256 com.android.org.conscrypt.Hex com.android.org.conscrypt.JSSEProvider com.android.org.conscrypt.KeyManagerFactoryImpl @@ -2817,10 +2741,7 @@ com.android.org.conscrypt.NativeRef$EC_POINT com.android.org.conscrypt.NativeRef$EVP_MD_CTX com.android.org.conscrypt.NativeRef$EVP_PKEY com.android.org.conscrypt.OpenSSLBIOInputStream -com.android.org.conscrypt.OpenSSLContextImpl -com.android.org.conscrypt.OpenSSLContextImpl$TLSv12 com.android.org.conscrypt.OpenSSLECGroupContext -com.android.org.conscrypt.OpenSSLECKeyFactory com.android.org.conscrypt.OpenSSLECPointContext com.android.org.conscrypt.OpenSSLECPublicKey com.android.org.conscrypt.OpenSSLExtendedSessionImpl @@ -2829,6 +2750,7 @@ com.android.org.conscrypt.OpenSSLKeyHolder com.android.org.conscrypt.OpenSSLMessageDigestJDK com.android.org.conscrypt.OpenSSLMessageDigestJDK$MD5 com.android.org.conscrypt.OpenSSLMessageDigestJDK$SHA1 +com.android.org.conscrypt.OpenSSLMessageDigestJDK$SHA256 com.android.org.conscrypt.OpenSSLProvider com.android.org.conscrypt.OpenSSLRSAKeyFactory com.android.org.conscrypt.OpenSSLRSAPublicKey @@ -2847,11 +2769,7 @@ com.android.org.conscrypt.OpenSSLX509CertificateFactory$1 com.android.org.conscrypt.OpenSSLX509CertificateFactory$2 com.android.org.conscrypt.OpenSSLX509CertificateFactory$Parser com.android.org.conscrypt.OpenSSLX509CertificateFactory$ParsingException -com.android.org.conscrypt.PinEntryException -com.android.org.conscrypt.PinListEntry -com.android.org.conscrypt.PinManagerException com.android.org.conscrypt.Platform -com.android.org.conscrypt.SSLClientSessionCache com.android.org.conscrypt.SSLParametersImpl com.android.org.conscrypt.SSLParametersImpl$AliasChooser com.android.org.conscrypt.SSLParametersImpl$PSKCallbacks @@ -2863,6 +2781,17 @@ com.android.org.conscrypt.TrustManagerImpl$TrustAnchorComparator com.android.org.conscrypt.TrustedCertificateIndex com.android.org.conscrypt.TrustedCertificateKeyStoreSpi com.android.org.conscrypt.TrustedCertificateStore +com.android.org.conscrypt.TrustedCertificateStore$1 +com.android.org.conscrypt.TrustedCertificateStore$CertSelector +com.android.org.conscrypt.ct.CTLogInfo +com.android.org.conscrypt.ct.CTLogStore +com.android.org.conscrypt.ct.CTLogStoreImpl +com.android.org.conscrypt.ct.CTLogStoreImpl$InvalidLogFileException +com.android.org.conscrypt.ct.CTPolicy +com.android.org.conscrypt.ct.CTPolicyImpl +com.android.org.conscrypt.ct.CTVerifier +com.android.org.conscrypt.ct.KnownLogs +com.android.org.conscrypt.ct.SerializationException com.android.org.conscrypt.util.ArrayUtils com.android.server.NetworkManagementSocketTagger com.android.server.NetworkManagementSocketTagger$1 @@ -2871,20 +2800,31 @@ com.google.android.collect.Lists com.google.android.collect.Maps com.google.android.gles_jni.EGLImpl com.google.android.gles_jni.GLImpl +dalvik.annotation.optimization.CriticalNative +dalvik.annotation.optimization.FastNative dalvik.system.BaseDexClassLoader +dalvik.system.BaseDexClassLoader$Reporter dalvik.system.BlockGuard dalvik.system.BlockGuard$1 dalvik.system.BlockGuard$2 dalvik.system.BlockGuard$BlockGuardPolicyException dalvik.system.BlockGuard$Policy +dalvik.system.ClassExt dalvik.system.CloseGuard dalvik.system.CloseGuard$DefaultReporter +dalvik.system.CloseGuard$DefaultTracker dalvik.system.CloseGuard$Reporter +dalvik.system.CloseGuard$Tracker dalvik.system.DalvikLogHandler +dalvik.system.DexClassLoader dalvik.system.DexFile dalvik.system.DexFile$DFEnum dalvik.system.DexPathList dalvik.system.DexPathList$Element +dalvik.system.DexPathList$NativeLibraryElement +dalvik.system.EmulatedStackFrame +dalvik.system.EmulatedStackFrame$Range +dalvik.system.InMemoryDexClassLoader$DexData dalvik.system.PathClassLoader dalvik.system.SocketTagger dalvik.system.SocketTagger$1 @@ -2892,11 +2832,6 @@ dalvik.system.VMDebug dalvik.system.VMRuntime dalvik.system.VMStack dalvik.system.ZygoteHooks -java.beans.ChangeListenerMap -java.beans.PropertyChangeEvent -java.beans.PropertyChangeListener -java.beans.PropertyChangeSupport -java.beans.PropertyChangeSupport$PropertyChangeListenerMap java.io.Bits java.io.BufferedInputStream java.io.BufferedOutputStream @@ -2911,6 +2846,7 @@ java.io.DataInput java.io.DataInputStream java.io.DataOutput java.io.DataOutputStream +java.io.DefaultFileSystem java.io.EOFException java.io.ExpiringCache java.io.ExpiringCache$1 @@ -2919,6 +2855,7 @@ java.io.Externalizable java.io.File java.io.File$PathStatus java.io.FileDescriptor +java.io.FileDescriptor$1 java.io.FileFilter java.io.FileInputStream java.io.FileInputStream$UseManualSkipException @@ -2930,18 +2867,33 @@ java.io.FileWriter java.io.FilenameFilter java.io.FilterInputStream java.io.FilterOutputStream -java.io.FilterReader java.io.Flushable java.io.IOException java.io.InputStream java.io.InputStreamReader java.io.InterruptedIOException +java.io.InvalidClassException java.io.InvalidObjectException java.io.ObjectInput java.io.ObjectInputStream +java.io.ObjectInputStream$BlockDataInputStream +java.io.ObjectInputStream$HandleTable +java.io.ObjectInputStream$HandleTable$HandleList +java.io.ObjectInputStream$PeekInputStream +java.io.ObjectInputStream$ValidationList java.io.ObjectOutput java.io.ObjectOutputStream +java.io.ObjectOutputStream$BlockDataOutputStream +java.io.ObjectOutputStream$HandleTable +java.io.ObjectOutputStream$PutField +java.io.ObjectOutputStream$ReplaceTable java.io.ObjectStreamClass +java.io.ObjectStreamClass$2 +java.io.ObjectStreamClass$Caches +java.io.ObjectStreamClass$EntryFuture +java.io.ObjectStreamClass$FieldReflector +java.io.ObjectStreamClass$FieldReflectorKey +java.io.ObjectStreamClass$WeakClassKey java.io.ObjectStreamConstants java.io.ObjectStreamException java.io.ObjectStreamField @@ -2950,7 +2902,6 @@ java.io.OutputStreamWriter java.io.PrintStream java.io.PrintWriter java.io.PushbackInputStream -java.io.PushbackReader java.io.RandomAccessFile java.io.Reader java.io.SequenceInputStream @@ -2962,10 +2913,13 @@ java.io.UTFDataFormatException java.io.UnixFileSystem java.io.UnsupportedEncodingException java.io.Writer +java.lang.-$Lambda$250$S9HjrJh0nDg7IyU6wZdPArnZWRQ +java.lang.-$Lambda$251$S9HjrJh0nDg7IyU6wZdPArnZWRQ java.lang.AbstractMethodError java.lang.AbstractStringBuilder java.lang.AndroidHardcodedSystemProperties java.lang.Appendable +java.lang.ArithmeticException java.lang.ArrayIndexOutOfBoundsException java.lang.ArrayStoreException java.lang.AssertionError @@ -2977,8 +2931,6 @@ java.lang.Byte$ByteCache java.lang.CaseMapper java.lang.CaseMapper$1 java.lang.CharSequence -java.lang.CharSequence$-java_util_stream_IntStream_chars__LambdaImpl0 -java.lang.CharSequence$-java_util_stream_IntStream_codePoints__LambdaImpl0 java.lang.CharSequence$1CharIterator java.lang.CharSequence$1CodePointIterator java.lang.Character @@ -3008,9 +2960,7 @@ java.lang.EnumConstantNotPresentException java.lang.Error java.lang.Exception java.lang.Float -java.lang.FloatingDecimal -java.lang.FloatingDecimal$1 -java.lang.FloatingDecimal$2 +java.lang.IllegalAccessError java.lang.IllegalAccessException java.lang.IllegalArgumentException java.lang.IllegalStateException @@ -3029,7 +2979,7 @@ java.lang.LinkageError java.lang.Long java.lang.Long$LongCache java.lang.Math -java.lang.Math$NoImagePreloadHolder +java.lang.Math$RandomNumberGeneratorHolder java.lang.NoClassDefFoundError java.lang.NoSuchFieldError java.lang.NoSuchFieldException @@ -3042,6 +2992,7 @@ java.lang.Object java.lang.OutOfMemoryError java.lang.Package java.lang.Process +java.lang.ProcessBuilder java.lang.ProcessEnvironment java.lang.Readable java.lang.ReflectiveOperationException @@ -3053,7 +3004,6 @@ java.lang.SecurityException java.lang.SecurityManager java.lang.Short java.lang.Short$ShortCache -java.lang.Shutdown java.lang.StackOverflowError java.lang.StackTraceElement java.lang.StrictMath @@ -3061,7 +3011,6 @@ java.lang.String java.lang.String$CaseInsensitiveComparator java.lang.StringBuffer java.lang.StringBuilder -java.lang.StringCoding java.lang.StringFactory java.lang.StringIndexOutOfBoundsException java.lang.System @@ -3095,6 +3044,22 @@ java.lang.annotation.IncompleteAnnotationException java.lang.annotation.Inherited java.lang.annotation.Retention java.lang.annotation.Target +java.lang.invoke.MethodHandle +java.lang.invoke.MethodHandleImpl +java.lang.invoke.MethodHandleImpl$HandleInfo +java.lang.invoke.MethodHandleInfo +java.lang.invoke.MethodHandleStatics +java.lang.invoke.MethodHandles +java.lang.invoke.MethodType +java.lang.invoke.MethodType$ConcurrentWeakInternSet +java.lang.invoke.MethodType$ConcurrentWeakInternSet$WeakEntry +java.lang.invoke.MethodTypeForm +java.lang.invoke.Transformers$BindTo +java.lang.invoke.Transformers$Collector +java.lang.invoke.Transformers$Spreader +java.lang.invoke.Transformers$Transformer +java.lang.invoke.Transformers$VarargsCollector +java.lang.invoke.WrongMethodTypeException java.lang.ref.FinalizerReference java.lang.ref.FinalizerReference$Sentinel java.lang.ref.PhantomReference @@ -3102,47 +3067,54 @@ java.lang.ref.Reference java.lang.ref.ReferenceQueue java.lang.ref.SoftReference java.lang.ref.WeakReference -java.lang.reflect.AbstractMethod -java.lang.reflect.AbstractMethod$GenericInfo java.lang.reflect.AccessibleObject java.lang.reflect.AnnotatedElement java.lang.reflect.Array java.lang.reflect.Constructor +java.lang.reflect.Executable +java.lang.reflect.Executable$GenericInfo java.lang.reflect.Field -java.lang.reflect.GenericArrayType java.lang.reflect.GenericDeclaration java.lang.reflect.InvocationHandler java.lang.reflect.InvocationTargetException +java.lang.reflect.MalformedParametersException java.lang.reflect.Member java.lang.reflect.Method java.lang.reflect.Method$1 java.lang.reflect.Modifier +java.lang.reflect.Parameter java.lang.reflect.ParameterizedType java.lang.reflect.Proxy java.lang.reflect.Proxy$1 +java.lang.reflect.Proxy$Key1 +java.lang.reflect.Proxy$Key2 +java.lang.reflect.Proxy$KeyFactory +java.lang.reflect.Proxy$KeyX +java.lang.reflect.Proxy$ProxyClassFactory java.lang.reflect.Type java.lang.reflect.TypeVariable -java.lang.reflect.WildcardType +java.lang.reflect.WeakCache +java.lang.reflect.WeakCache$CacheKey +java.lang.reflect.WeakCache$CacheValue +java.lang.reflect.WeakCache$Factory +java.lang.reflect.WeakCache$LookupValue +java.lang.reflect.WeakCache$Value java.math.BigDecimal java.math.BigInt java.math.BigInteger -java.math.BitLevel java.math.NativeBN java.math.RoundingMode -java.net.AbstractPlainDatagramSocketImpl java.net.AbstractPlainSocketImpl java.net.AddressCache java.net.AddressCache$AddressCacheEntry java.net.AddressCache$AddressCacheKey java.net.ConnectException java.net.CookieHandler -java.net.DatagramPacket -java.net.DatagramSocketImpl -java.net.DefaultInterface java.net.HttpURLConnection java.net.IDN java.net.Inet4Address java.net.Inet6Address +java.net.Inet6Address$Inet6AddressHolder java.net.Inet6AddressImpl java.net.InetAddress java.net.InetAddress$1 @@ -3150,12 +3122,10 @@ java.net.InetAddress$InetAddressHolder java.net.InetAddressImpl java.net.InetSocketAddress java.net.InetSocketAddress$InetSocketAddressHolder -java.net.InterfaceAddress java.net.JarURLConnection java.net.MalformedURLException java.net.NetworkInterface java.net.Parts -java.net.PlainDatagramSocketImpl java.net.PlainSocketImpl java.net.ProtocolException java.net.Proxy @@ -3164,6 +3134,8 @@ java.net.ProxySelector java.net.ResponseCache java.net.ServerSocket java.net.Socket +java.net.Socket$2 +java.net.Socket$3 java.net.SocketAddress java.net.SocketException java.net.SocketImpl @@ -3173,7 +3145,6 @@ java.net.SocketOutputStream java.net.SocketTimeoutException java.net.SocksConsts java.net.SocksSocketImpl -java.net.SocksSocketImpl$3 java.net.URI java.net.URI$Parser java.net.URISyntaxException @@ -3222,6 +3193,7 @@ java.nio.channels.FileChannel$MapMode java.nio.channels.FileLock java.nio.channels.GatheringByteChannel java.nio.channels.InterruptibleChannel +java.nio.channels.MulticastChannel java.nio.channels.NetworkChannel java.nio.channels.ReadableByteChannel java.nio.channels.ScatteringByteChannel @@ -3248,6 +3220,7 @@ java.nio.charset.CodingErrorAction java.nio.charset.IllegalCharsetNameException java.nio.charset.StandardCharsets java.nio.charset.UnsupportedCharsetException +java.nio.file.attribute.FileAttribute java.security.AccessControlContext java.security.AccessControlException java.security.AccessController @@ -3338,7 +3311,6 @@ java.security.interfaces.RSAPrivateKey java.security.interfaces.RSAPublicKey java.security.spec.AlgorithmParameterSpec java.security.spec.ECField -java.security.spec.ECFieldF2m java.security.spec.ECFieldFp java.security.spec.ECParameterSpec java.security.spec.ECPoint @@ -3346,15 +3318,12 @@ java.security.spec.ECPublicKeySpec java.security.spec.EllipticCurve java.security.spec.EncodedKeySpec java.security.spec.InvalidKeySpecException -java.security.spec.InvalidParameterSpecException java.security.spec.KeySpec java.security.spec.RSAPublicKeySpec java.security.spec.X509EncodedKeySpec -java.sql.Timestamp java.text.AttributedCharacterIterator$Attribute java.text.CalendarBuilder java.text.CharacterIterator -java.text.Collator java.text.DateFormat java.text.DateFormat$Field java.text.DateFormatSymbols @@ -3371,13 +3340,19 @@ java.text.Normalizer$Form java.text.NumberFormat java.text.ParseException java.text.ParsePosition -java.text.RuleBasedCollator java.text.SimpleDateFormat java.text.StringCharacterIterator -java.text.spi.DateFormatProvider -java.text.spi.DateFormatSymbolsProvider -java.text.spi.DecimalFormatSymbolsProvider -java.text.spi.NumberFormatProvider +java.time.DateTimeException +java.util.-$Lambda$181$4EqhxufgNKat19m0CB0-toH_lzo +java.util.-$Lambda$182$4EqhxufgNKat19m0CB0-toH_lzo +java.util.-$Lambda$183$4EqhxufgNKat19m0CB0-toH_lzo +java.util.-$Lambda$184$4EqhxufgNKat19m0CB0-toH_lzo +java.util.-$Lambda$267$4EqhxufgNKat19m0CB0-toH_lzo +java.util.-$Lambda$268$4EqhxufgNKat19m0CB0-toH_lzo +java.util.-$Lambda$291$aUGKT4ItCOku5-JSG-x8Aqj2pJw +java.util.-$Lambda$292$aUGKT4ItCOku5-JSG-x8Aqj2pJw +java.util.-$Lambda$293$aUGKT4ItCOku5-JSG-x8Aqj2pJw +java.util.-$Lambda$294$aUGKT4ItCOku5-JSG-x8Aqj2pJw java.util.AbstractCollection java.util.AbstractList java.util.AbstractList$Itr @@ -3397,8 +3372,21 @@ java.util.ArrayList$Itr java.util.ArrayList$ListItr java.util.ArrayList$SubList java.util.ArrayList$SubList$1 +java.util.ArrayPrefixHelpers$CumulateTask +java.util.ArrayPrefixHelpers$DoubleCumulateTask +java.util.ArrayPrefixHelpers$IntCumulateTask +java.util.ArrayPrefixHelpers$LongCumulateTask java.util.Arrays java.util.Arrays$ArrayList +java.util.Arrays$NaturalOrder +java.util.ArraysParallelSortHelpers$FJByte$Sorter +java.util.ArraysParallelSortHelpers$FJChar$Sorter +java.util.ArraysParallelSortHelpers$FJDouble$Sorter +java.util.ArraysParallelSortHelpers$FJFloat$Sorter +java.util.ArraysParallelSortHelpers$FJInt$Sorter +java.util.ArraysParallelSortHelpers$FJLong$Sorter +java.util.ArraysParallelSortHelpers$FJObject$Sorter +java.util.ArraysParallelSortHelpers$FJShort$Sorter java.util.BitSet java.util.Calendar java.util.Collection @@ -3410,6 +3398,9 @@ java.util.Collections$AsLIFOQueue java.util.Collections$CheckedCollection java.util.Collections$CheckedList java.util.Collections$CheckedMap +java.util.Collections$CheckedNavigableMap +java.util.Collections$CheckedNavigableSet +java.util.Collections$CheckedQueue java.util.Collections$CheckedRandomAccessList java.util.Collections$CheckedSet java.util.Collections$CheckedSortedMap @@ -3430,6 +3421,8 @@ java.util.Collections$SingletonSet java.util.Collections$SynchronizedCollection java.util.Collections$SynchronizedList java.util.Collections$SynchronizedMap +java.util.Collections$SynchronizedNavigableMap +java.util.Collections$SynchronizedNavigableSet java.util.Collections$SynchronizedRandomAccessList java.util.Collections$SynchronizedSet java.util.Collections$SynchronizedSortedMap @@ -3442,18 +3435,16 @@ java.util.Collections$UnmodifiableMap java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$1 java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry +java.util.Collections$UnmodifiableNavigableMap +java.util.Collections$UnmodifiableNavigableMap$EmptyNavigableMap +java.util.Collections$UnmodifiableNavigableSet +java.util.Collections$UnmodifiableNavigableSet$EmptyNavigableSet java.util.Collections$UnmodifiableRandomAccessList java.util.Collections$UnmodifiableSet java.util.Collections$UnmodifiableSortedMap java.util.Collections$UnmodifiableSortedSet java.util.ComparableTimSort java.util.Comparator -java.util.Comparator$-java_util_Comparator_comparingDouble_java_util_function_ToDoubleFunction_keyExtractor_LambdaImpl0 -java.util.Comparator$-java_util_Comparator_comparingInt_java_util_function_ToIntFunction_keyExtractor_LambdaImpl0 -java.util.Comparator$-java_util_Comparator_comparingLong_java_util_function_ToLongFunction_keyExtractor_LambdaImpl0 -java.util.Comparator$-java_util_Comparator_comparing_java_util_function_Function_keyExtractor_LambdaImpl0 -java.util.Comparator$-java_util_Comparator_comparing_java_util_function_Function_keyExtractor_java_util_Comparator_keyComparator_LambdaImpl0 -java.util.Comparator$-java_util_Comparator_thenComparing_java_util_Comparator_other_LambdaImpl0 java.util.Comparators$NaturalOrderComparator java.util.Comparators$NullComparator java.util.ConcurrentModificationException @@ -3467,7 +3458,6 @@ java.util.EnumMap$1 java.util.EnumSet java.util.Enumeration java.util.EventListener -java.util.EventObject java.util.Formattable java.util.Formatter java.util.Formatter$Conversion @@ -3481,14 +3471,14 @@ java.util.HashMap java.util.HashMap$EntryIterator java.util.HashMap$EntrySet java.util.HashMap$HashIterator -java.util.HashMap$HashMapEntry java.util.HashMap$KeyIterator java.util.HashMap$KeySet +java.util.HashMap$Node +java.util.HashMap$TreeNode java.util.HashMap$ValueIterator java.util.HashMap$Values java.util.HashSet java.util.Hashtable -java.util.Hashtable$EntrySet java.util.Hashtable$Enumerator java.util.Hashtable$HashtableEntry java.util.IdentityHashMap @@ -3498,11 +3488,14 @@ java.util.IllegalFormatException java.util.IllformedLocaleException java.util.Iterator java.util.LinkedHashMap -java.util.LinkedHashMap$EntryIterator -java.util.LinkedHashMap$KeyIterator +java.util.LinkedHashMap$LinkedEntryIterator +java.util.LinkedHashMap$LinkedEntrySet java.util.LinkedHashMap$LinkedHashIterator java.util.LinkedHashMap$LinkedHashMapEntry -java.util.LinkedHashMap$ValueIterator +java.util.LinkedHashMap$LinkedKeyIterator +java.util.LinkedHashMap$LinkedKeySet +java.util.LinkedHashMap$LinkedValueIterator +java.util.LinkedHashMap$LinkedValues java.util.LinkedHashSet java.util.LinkedList java.util.LinkedList$ListItr @@ -3513,6 +3506,8 @@ java.util.Locale java.util.Locale$Builder java.util.Locale$Cache java.util.Locale$Category +java.util.Locale$FilteringMode +java.util.Locale$LanguageRange java.util.Locale$LocaleKey java.util.Map java.util.Map$Entry @@ -3524,30 +3519,16 @@ java.util.Objects java.util.PrimitiveIterator java.util.PrimitiveIterator$OfInt java.util.PriorityQueue -java.util.PriorityQueue$Itr java.util.Properties java.util.Properties$LineReader -java.util.PropertyResourceBundle java.util.Queue java.util.Random java.util.RandomAccess java.util.RandomAccessSubList java.util.RegularEnumSet -java.util.RegularEnumSet$EnumSetIterator java.util.ResourceBundle java.util.ResourceBundle$1 -java.util.ResourceBundle$BundleReference -java.util.ResourceBundle$CacheKey -java.util.ResourceBundle$CacheKeyReference -java.util.ResourceBundle$Control -java.util.ResourceBundle$Control$1 -java.util.ResourceBundle$Control$CandidateListCache -java.util.ResourceBundle$LoaderReference -java.util.ResourceBundle$RBClassLoader -java.util.ResourceBundle$RBClassLoader$1 -java.util.ServiceLoader -java.util.ServiceLoader$1 -java.util.ServiceLoader$LazyIterator +java.util.Scanner java.util.Set java.util.SimpleTimeZone java.util.SortedMap @@ -3564,12 +3545,11 @@ java.util.Spliterators$EmptySpliterator$OfInt java.util.Spliterators$EmptySpliterator$OfLong java.util.Spliterators$EmptySpliterator$OfRef java.util.Stack +java.util.StringJoiner java.util.StringTokenizer java.util.SubList java.util.TimSort java.util.TimeZone -java.util.Timer -java.util.TimerTask java.util.TreeMap java.util.TreeMap$EntryIterator java.util.TreeMap$EntrySet @@ -3591,31 +3571,69 @@ java.util.WeakHashMap$HashIterator java.util.WeakHashMap$KeyIterator java.util.WeakHashMap$KeySet java.util.WeakHashMap$Values +java.util.concurrent.-$Lambda$269$xR9BLpu6SifNikvFgr4lEiECBsk java.util.concurrent.AbstractExecutorService java.util.concurrent.BlockingQueue java.util.concurrent.Callable java.util.concurrent.CancellationException java.util.concurrent.ConcurrentHashMap java.util.concurrent.ConcurrentHashMap$BaseIterator +java.util.concurrent.ConcurrentHashMap$BulkTask java.util.concurrent.ConcurrentHashMap$CollectionView +java.util.concurrent.ConcurrentHashMap$CounterCell java.util.concurrent.ConcurrentHashMap$EntryIterator java.util.concurrent.ConcurrentHashMap$EntrySetView +java.util.concurrent.ConcurrentHashMap$ForEachEntryTask +java.util.concurrent.ConcurrentHashMap$ForEachKeyTask +java.util.concurrent.ConcurrentHashMap$ForEachMappingTask +java.util.concurrent.ConcurrentHashMap$ForEachTransformedEntryTask +java.util.concurrent.ConcurrentHashMap$ForEachTransformedKeyTask +java.util.concurrent.ConcurrentHashMap$ForEachTransformedMappingTask +java.util.concurrent.ConcurrentHashMap$ForEachTransformedValueTask +java.util.concurrent.ConcurrentHashMap$ForEachValueTask java.util.concurrent.ConcurrentHashMap$ForwardingNode java.util.concurrent.ConcurrentHashMap$KeyIterator java.util.concurrent.ConcurrentHashMap$KeySetView +java.util.concurrent.ConcurrentHashMap$MapReduceEntriesTask +java.util.concurrent.ConcurrentHashMap$MapReduceEntriesToDoubleTask +java.util.concurrent.ConcurrentHashMap$MapReduceEntriesToIntTask +java.util.concurrent.ConcurrentHashMap$MapReduceEntriesToLongTask +java.util.concurrent.ConcurrentHashMap$MapReduceKeysTask +java.util.concurrent.ConcurrentHashMap$MapReduceKeysToDoubleTask +java.util.concurrent.ConcurrentHashMap$MapReduceKeysToIntTask +java.util.concurrent.ConcurrentHashMap$MapReduceKeysToLongTask +java.util.concurrent.ConcurrentHashMap$MapReduceMappingsTask +java.util.concurrent.ConcurrentHashMap$MapReduceMappingsToDoubleTask +java.util.concurrent.ConcurrentHashMap$MapReduceMappingsToIntTask +java.util.concurrent.ConcurrentHashMap$MapReduceMappingsToLongTask +java.util.concurrent.ConcurrentHashMap$MapReduceValuesTask +java.util.concurrent.ConcurrentHashMap$MapReduceValuesToDoubleTask +java.util.concurrent.ConcurrentHashMap$MapReduceValuesToIntTask +java.util.concurrent.ConcurrentHashMap$MapReduceValuesToLongTask java.util.concurrent.ConcurrentHashMap$Node +java.util.concurrent.ConcurrentHashMap$ReduceEntriesTask +java.util.concurrent.ConcurrentHashMap$ReduceKeysTask +java.util.concurrent.ConcurrentHashMap$ReduceValuesTask +java.util.concurrent.ConcurrentHashMap$ReservationNode +java.util.concurrent.ConcurrentHashMap$SearchEntriesTask +java.util.concurrent.ConcurrentHashMap$SearchKeysTask +java.util.concurrent.ConcurrentHashMap$SearchMappingsTask +java.util.concurrent.ConcurrentHashMap$SearchValuesTask java.util.concurrent.ConcurrentHashMap$Segment java.util.concurrent.ConcurrentHashMap$Traverser java.util.concurrent.ConcurrentHashMap$TreeBin java.util.concurrent.ConcurrentHashMap$TreeNode +java.util.concurrent.ConcurrentHashMap$ValueIterator +java.util.concurrent.ConcurrentHashMap$ValuesView java.util.concurrent.ConcurrentLinkedQueue java.util.concurrent.ConcurrentLinkedQueue$Node java.util.concurrent.ConcurrentMap java.util.concurrent.CopyOnWriteArrayList -java.util.concurrent.CopyOnWriteArrayList$CowIterator +java.util.concurrent.CopyOnWriteArrayList$COWIterator java.util.concurrent.CopyOnWriteArraySet java.util.concurrent.CountDownLatch java.util.concurrent.CountDownLatch$Sync +java.util.concurrent.CountedCompleter java.util.concurrent.Delayed java.util.concurrent.ExecutionException java.util.concurrent.Executor @@ -3626,6 +3644,9 @@ java.util.concurrent.Executors$DelegatedExecutorService java.util.concurrent.Executors$DelegatedScheduledExecutorService java.util.concurrent.Executors$FinalizableDelegatedExecutorService java.util.concurrent.Executors$RunnableAdapter +java.util.concurrent.ForkJoinPool +java.util.concurrent.ForkJoinTask +java.util.concurrent.ForkJoinTask$ExceptionNode java.util.concurrent.Future java.util.concurrent.FutureTask java.util.concurrent.FutureTask$WaitNode @@ -3649,6 +3670,7 @@ java.util.concurrent.SynchronousQueue$TransferStack java.util.concurrent.SynchronousQueue$TransferStack$SNode java.util.concurrent.SynchronousQueue$Transferer java.util.concurrent.ThreadFactory +java.util.concurrent.ThreadLocalRandom java.util.concurrent.ThreadPoolExecutor java.util.concurrent.ThreadPoolExecutor$AbortPolicy java.util.concurrent.ThreadPoolExecutor$Worker @@ -3684,19 +3706,33 @@ java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock java.util.concurrent.locks.ReentrantReadWriteLock$Sync java.util.concurrent.locks.ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock +java.util.function.-$Lambda$276$1MZdIZ-DL_fjy9l0o8IMJk57T2g java.util.function.BiConsumer java.util.function.BiFunction +java.util.function.BinaryOperator java.util.function.Consumer +java.util.function.DoubleBinaryOperator java.util.function.Function +java.util.function.IntBinaryOperator +java.util.function.IntConsumer +java.util.function.IntFunction +java.util.function.IntToDoubleFunction +java.util.function.IntToLongFunction +java.util.function.IntUnaryOperator +java.util.function.LongBinaryOperator +java.util.function.LongUnaryOperator java.util.function.Predicate java.util.function.Supplier +java.util.function.ToDoubleBiFunction java.util.function.ToDoubleFunction +java.util.function.ToIntBiFunction java.util.function.ToIntFunction +java.util.function.ToLongBiFunction java.util.function.ToLongFunction java.util.function.UnaryOperator java.util.jar.JarEntry java.util.jar.JarFile -java.util.jar.JarFile$1 +java.util.jar.JarFile$JarEntryIterator java.util.jar.JarFile$JarFileEntry java.util.logging.ErrorManager java.util.logging.Formatter @@ -3706,7 +3742,8 @@ java.util.logging.Level$KnownLevel java.util.logging.LogManager java.util.logging.LogManager$1 java.util.logging.LogManager$2 -java.util.logging.LogManager$4 +java.util.logging.LogManager$3 +java.util.logging.LogManager$5 java.util.logging.LogManager$Cleaner java.util.logging.LogManager$LogNode java.util.logging.LogManager$LoggerContext @@ -3714,8 +3751,8 @@ java.util.logging.LogManager$LoggerContext$1 java.util.logging.LogManager$LoggerWeakRef java.util.logging.LogManager$RootLogger java.util.logging.LogManager$SystemLoggerContext -java.util.logging.LogRecord java.util.logging.Logger +java.util.logging.Logger$LoggerBundle java.util.logging.LoggingPermission java.util.logging.LoggingProxyImpl java.util.prefs.AbstractPreferences @@ -3725,9 +3762,10 @@ java.util.regex.MatchResult java.util.regex.Matcher java.util.regex.Pattern java.util.regex.PatternSyntaxException -java.util.spi.LocaleServiceProvider java.util.stream.BaseStream +java.util.stream.DoubleStream java.util.stream.IntStream +java.util.stream.LongStream java.util.stream.Stream java.util.stream.StreamSupport java.util.zip.Adler32 @@ -3746,24 +3784,15 @@ java.util.zip.ZipCoder java.util.zip.ZipConstants java.util.zip.ZipEntry java.util.zip.ZipFile -java.util.zip.ZipFile$1 +java.util.zip.ZipFile$ZipEntryIterator java.util.zip.ZipFile$ZipFileInflaterInputStream java.util.zip.ZipFile$ZipFileInputStream +java.util.zip.ZipUtils javax.crypto.BadPaddingException javax.crypto.Cipher -javax.crypto.Cipher$CipherSpiAndProvider -javax.crypto.Cipher$InitParams -javax.crypto.Cipher$InitType -javax.crypto.Cipher$NeedToSet -javax.crypto.Cipher$SpiAndProviderUpdater -javax.crypto.Cipher$Transform -javax.crypto.CipherSpi javax.crypto.IllegalBlockSizeException -javax.crypto.JceSecurity javax.crypto.NoSuchPaddingException -javax.crypto.NullCipher javax.crypto.SecretKey -javax.crypto.ShortBufferException javax.crypto.spec.IvParameterSpec javax.crypto.spec.SecretKeySpec javax.microedition.khronos.egl.EGL @@ -3799,7 +3828,6 @@ javax.net.ssl.SSLSession javax.net.ssl.SSLSessionContext javax.net.ssl.SSLSocket javax.net.ssl.SSLSocketFactory -javax.net.ssl.SSLSocketFactory$1 javax.net.ssl.TrustManager javax.net.ssl.TrustManagerFactory javax.net.ssl.TrustManagerFactory$1 @@ -3808,13 +3836,12 @@ javax.net.ssl.X509ExtendedKeyManager javax.net.ssl.X509ExtendedTrustManager javax.net.ssl.X509KeyManager javax.net.ssl.X509TrustManager +javax.security.auth.Destroyable javax.security.auth.callback.UnsupportedCallbackException javax.security.auth.x500.X500Principal javax.security.cert.Certificate javax.security.cert.CertificateException javax.security.cert.X509Certificate -libcore.icu.DateIntervalFormat -libcore.icu.DateUtilsBridge libcore.icu.ICU libcore.icu.LocaleData libcore.icu.NativeConverter @@ -3834,8 +3861,9 @@ libcore.io.EventLogger$DefaultReporter libcore.io.EventLogger$Reporter libcore.io.ForwardingOs libcore.io.IoBridge +libcore.io.IoTracker +libcore.io.IoTracker$Mode libcore.io.IoUtils -libcore.io.IoUtils$FileReader libcore.io.Libcore libcore.io.Memory libcore.io.MemoryMappedFile @@ -3854,8 +3882,6 @@ libcore.reflect.AnnotationMember$DefaultValues libcore.reflect.GenericSignatureParser libcore.reflect.InternalNames libcore.reflect.ListOfTypes -libcore.reflect.ListOfVariables -libcore.reflect.ParameterizedTypeImpl libcore.reflect.Types libcore.util.BasicLruCache libcore.util.CharsetUtils @@ -3865,8 +3891,6 @@ libcore.util.NativeAllocationRegistry libcore.util.NativeAllocationRegistry$CleanerRunner libcore.util.NativeAllocationRegistry$CleanerThunk libcore.util.ZoneInfo -libcore.util.ZoneInfo$CheckedArithmeticException -libcore.util.ZoneInfo$WallTime libcore.util.ZoneInfoDB libcore.util.ZoneInfoDB$TzData libcore.util.ZoneInfoDB$TzData$1 @@ -3879,54 +3903,22 @@ org.apache.harmony.luni.internal.util.TimezoneGetter org.apache.harmony.xml.ExpatAttributes org.apache.harmony.xml.ExpatParser org.apache.http.Header -org.apache.http.HeaderIterator org.apache.http.HttpEntity org.apache.http.HttpEntityEnclosingRequest -org.apache.http.HttpHost org.apache.http.HttpMessage org.apache.http.HttpRequest org.apache.http.HttpResponse -org.apache.http.HttpVersion -org.apache.http.NameValuePair org.apache.http.ProtocolVersion org.apache.http.StatusLine org.apache.http.client.HttpClient -org.apache.http.client.ResponseHandler -org.apache.http.client.methods.AbortableHttpRequest -org.apache.http.client.methods.HttpEntityEnclosingRequestBase -org.apache.http.client.methods.HttpPost -org.apache.http.client.methods.HttpRequestBase org.apache.http.client.methods.HttpUriRequest -org.apache.http.client.utils.URLEncodedUtils -org.apache.http.conn.ClientConnectionManager org.apache.http.conn.ConnectTimeoutException org.apache.http.entity.AbstractHttpEntity -org.apache.http.entity.BasicHttpEntity -org.apache.http.impl.cookie.DateParseException -org.apache.http.impl.cookie.DateUtils org.apache.http.message.AbstractHttpMessage org.apache.http.message.BasicHeader org.apache.http.message.BasicHttpResponse org.apache.http.message.BasicStatusLine org.apache.http.message.HeaderGroup -org.apache.http.params.AbstractHttpParams -org.apache.http.params.BasicHttpParams -org.apache.http.params.CoreConnectionPNames -org.apache.http.params.HttpConnectionParams -org.apache.http.params.HttpParams -org.apache.http.protocol.HttpContext -org.ccil.cowan.tagsoup.AttributesImpl -org.ccil.cowan.tagsoup.AutoDetector -org.ccil.cowan.tagsoup.Element -org.ccil.cowan.tagsoup.ElementType -org.ccil.cowan.tagsoup.HTMLModels -org.ccil.cowan.tagsoup.HTMLScanner -org.ccil.cowan.tagsoup.HTMLSchema -org.ccil.cowan.tagsoup.Parser -org.ccil.cowan.tagsoup.Parser$1 -org.ccil.cowan.tagsoup.ScanHandler -org.ccil.cowan.tagsoup.Scanner -org.ccil.cowan.tagsoup.Schema org.json.JSON org.json.JSONArray org.json.JSONException @@ -3938,31 +3930,30 @@ org.json.JSONTokener org.kxml2.io.KXmlParser org.kxml2.io.KXmlParser$ValueContext org.xml.sax.Attributes -org.xml.sax.ContentHandler -org.xml.sax.DTDHandler -org.xml.sax.EntityResolver -org.xml.sax.ErrorHandler -org.xml.sax.InputSource -org.xml.sax.Locator org.xml.sax.SAXException -org.xml.sax.SAXNotRecognizedException -org.xml.sax.SAXNotSupportedException -org.xml.sax.XMLReader -org.xml.sax.ext.LexicalHandler -org.xml.sax.helpers.DefaultHandler org.xmlpull.v1.XmlPullParser org.xmlpull.v1.XmlPullParserException org.xmlpull.v1.XmlSerializer +sun.invoke.util.BytecodeDescriptor +sun.invoke.util.Wrapper sun.misc.Cleaner sun.misc.CompoundEnumeration +sun.misc.FDBigInteger +sun.misc.FloatingDecimal +sun.misc.FloatingDecimal$1 +sun.misc.FloatingDecimal$ASCIIToBinaryBuffer +sun.misc.FloatingDecimal$ASCIIToBinaryConverter +sun.misc.FloatingDecimal$BinaryToASCIIBuffer +sun.misc.FloatingDecimal$BinaryToASCIIConverter +sun.misc.FloatingDecimal$ExceptionalBinaryToASCIIBuffer +sun.misc.FloatingDecimal$PreparedASCIIToBinaryBuffer sun.misc.FormattedFloatingDecimal sun.misc.FormattedFloatingDecimal$1 sun.misc.FormattedFloatingDecimal$Form -sun.misc.FpUtils -sun.misc.Hashing sun.misc.IOUtils -sun.misc.IoTrace +sun.misc.JavaIOFileDescriptorAccess sun.misc.REException +sun.misc.SharedSecrets sun.misc.Unsafe sun.misc.VM sun.misc.Version @@ -3978,10 +3969,10 @@ sun.net.util.IPAddressUtil sun.net.www.ParseUtil sun.net.www.protocol.file.Handler sun.net.www.protocol.jar.Handler -sun.nio.ch.AbstractPollArrayWrapper sun.nio.ch.DatagramChannelImpl sun.nio.ch.DatagramDispatcher sun.nio.ch.DirectBuffer +sun.nio.ch.EPollArrayWrapper sun.nio.ch.FileChannelImpl sun.nio.ch.FileChannelImpl$Unmapper sun.nio.ch.FileDispatcher @@ -3991,13 +3982,11 @@ sun.nio.ch.FileLockImpl sun.nio.ch.FileLockTable sun.nio.ch.IOStatus sun.nio.ch.IOUtil -sun.nio.ch.InheritedChannel sun.nio.ch.Interruptible sun.nio.ch.NativeDispatcher sun.nio.ch.NativeThread sun.nio.ch.NativeThreadSet sun.nio.ch.Net -sun.nio.ch.PollArrayWrapper sun.nio.ch.SelChImpl sun.nio.ch.ServerSocketChannelImpl sun.nio.ch.SharedFileLockTable @@ -4006,14 +3995,8 @@ sun.nio.ch.SocketChannelImpl sun.nio.cs.ArrayEncoder sun.nio.cs.StreamDecoder sun.nio.cs.StreamEncoder -sun.reflect.annotation.AnnotationType sun.security.action.GetBooleanAction sun.security.action.GetPropertyAction -sun.security.ec.ECKeyFactory -sun.security.ec.ECKeyFactory$1 -sun.security.ec.ECKeyFactory$2 -sun.security.ec.ECParameters -sun.security.ec.NamedCurve sun.security.jca.GetInstance sun.security.jca.GetInstance$Instance sun.security.jca.ProviderConfig @@ -4027,7 +4010,6 @@ sun.security.jca.ProviderList$ServiceList$1 sun.security.jca.Providers sun.security.jca.ServiceId sun.security.pkcs.PKCS9Attribute -sun.security.pkcs.ParsingException sun.security.pkcs.SignerInfo sun.security.provider.CertPathProvider sun.security.provider.X509Factory @@ -4043,7 +4025,9 @@ sun.security.provider.certpath.PKIXCertPathValidator sun.security.provider.certpath.PKIXMasterCertPathValidator sun.security.provider.certpath.PolicyChecker sun.security.provider.certpath.PolicyNodeImpl -sun.security.provider.certpath.UntrustedChecker +sun.security.util.-$Lambda$179$Kli5xKA4dAwmFO1sy_hpNWmbfH4 +sun.security.util.AbstractAlgorithmConstraints +sun.security.util.AlgorithmDecomposer sun.security.util.BitArray sun.security.util.ByteArrayLexOrder sun.security.util.ByteArrayTagOrder @@ -4057,7 +4041,6 @@ sun.security.util.DerInputStream sun.security.util.DerOutputStream sun.security.util.DerValue sun.security.util.DisabledAlgorithmConstraints -sun.security.util.DisabledAlgorithmConstraints$1 sun.security.util.DisabledAlgorithmConstraints$KeySizeConstraint sun.security.util.DisabledAlgorithmConstraints$KeySizeConstraint$Operator sun.security.util.DisabledAlgorithmConstraints$KeySizeConstraints @@ -4067,7 +4050,6 @@ sun.security.util.MemoryCache sun.security.util.MemoryCache$CacheEntry sun.security.util.MemoryCache$SoftCacheEntry sun.security.util.ObjectIdentifier -sun.security.util.UntrustedCertificates sun.security.x509.AVA sun.security.x509.AVAKeyword sun.security.x509.AccessDescription @@ -4124,8 +4106,6 @@ sun.security.x509.X509AttributeName sun.security.x509.X509CertImpl sun.security.x509.X509CertInfo sun.security.x509.X509Key -sun.util.LocaleServiceProviderPool -sun.util.LocaleServiceProviderPool$1 sun.util.calendar.AbstractCalendar sun.util.calendar.BaseCalendar sun.util.calendar.BaseCalendar$Date @@ -4139,18 +4119,15 @@ sun.util.calendar.LocalGregorianCalendar sun.util.locale.BaseLocale sun.util.locale.BaseLocale$Cache sun.util.locale.BaseLocale$Key -sun.util.locale.Extension sun.util.locale.InternalLocaleBuilder sun.util.locale.InternalLocaleBuilder$CaseInsensitiveChar sun.util.locale.LanguageTag -sun.util.locale.LocaleExtensions sun.util.locale.LocaleObjectCache sun.util.locale.LocaleObjectCache$CacheEntry sun.util.locale.LocaleSyntaxException sun.util.locale.LocaleUtils sun.util.locale.ParseStatus sun.util.locale.StringTokenIterator -sun.util.locale.UnicodeLocaleExtension sun.util.logging.LoggingProxy sun.util.logging.LoggingSupport sun.util.logging.LoggingSupport$1 diff --git a/proto/src/metrics_constants.proto b/proto/src/metrics_constants.proto index f906ee2ae82b..a590805cf745 100644 --- a/proto/src/metrics_constants.proto +++ b/proto/src/metrics_constants.proto @@ -3275,7 +3275,6 @@ message MetricsEvent { // OPEN: Settings > Apps > Default Apps > Warning dialog to confirm selection DEFAULT_APP_PICKER_CONFIRMATION_DIALOG = 791; - // OPEN: Settings > Apps > Default Apps > Default autofill app DEFAULT_AUTOFILL_PICKER = 792; @@ -3351,6 +3350,44 @@ message MetricsEvent { // OS: O BACKUP_SETTINGS = 818; + // ACTION: Picture-in-picture was explicitly entered for an activity + // VALUE: true if it was entered while hiding as a result of moving to + // another task, false otherwise + ACTION_PICTURE_IN_PICTURE_ENTERED = 819; + + // ACTION: The activity currently in picture-in-picture was expanded back to fullscreen + // PACKAGE: The package name of the activity that was expanded back to fullscreen + ACTION_PICTURE_IN_PICTURE_EXPANDED_TO_FULLSCREEN = 820; + + // ACTION: The activity currently in picture-in-picture was minimized + // VALUE: True if the PiP was minimized, false otherwise + ACTION_PICTURE_IN_PICTURE_MINIMIZED = 821; + + // ACTION: Picture-in-picture was dismissed via the dismiss button + // VALUE: 0 if dismissed by tap, 1 if dismissed by drag + ACTION_PICTURE_IN_PICTURE_DISMISSED = 822; + + // ACTION: The visibility of the picture-in-picture meny + // VALUE: Whether or not the menu is visible + ACTION_PICTURE_IN_PICTURE_MENU = 823; + + // Enclosing category for group of PICTURE_IN_PICTURE_ASPECT_RATIO_FOO events, + // logged when the aspect ratio changes + ACTION_PICTURE_IN_PICTURE_ASPECT_RATIO_CHANGED = 824; + + // The current aspect ratio of the PiP, logged when it changes. + PICTURE_IN_PICTURE_ASPECT_RATIO = 825; + + // FIELD - length in dp of ACTION_LS_* gestures, or zero if not applicable + // CATEGORY: GLOBAL_SYSTEM_UI + // OS: O + FIELD_GESTURE_LENGTH = 826; + + // FIELD - velocity in dp (per second?) of ACTION_LS_* gestures, or zero if not applicable + // CATEGORY: GLOBAL_SYSTEM_UI + // OS: O + FIELD_GESTURE_VELOCITY = 827; + // ---- End O Constants, all O constants go above this line ---- // Add new aosp constants above this line. diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 3ba8915d8c99..a861522c0576 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -3899,6 +3899,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { case WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG: case WindowManager.LayoutParams.TYPE_SYSTEM_ERROR: case WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY: + case WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY: case WindowManager.LayoutParams.TYPE_SCREENSHOT: { return AccessibilityWindowInfo.TYPE_SYSTEM; } diff --git a/services/autofill/java/com/android/server/autofill/AnchoredWindow.java b/services/autofill/java/com/android/server/autofill/AnchoredWindow.java index ecfd9b3dd6f7..c68ac60bb26b 100644 --- a/services/autofill/java/com/android/server/autofill/AnchoredWindow.java +++ b/services/autofill/java/com/android/server/autofill/AnchoredWindow.java @@ -64,7 +64,7 @@ final class AnchoredWindow { * @param bounds the rectangular region this window should be anchored to */ void show(Rect bounds) { - LayoutParams params = createBaseLayoutParams(); + final LayoutParams params = createBaseLayoutParams(); params.x = bounds.left; params.y = bounds.bottom; @@ -83,6 +83,7 @@ final class AnchoredWindow { */ void hide() { if (DEBUG) Slog.d(TAG, "removing view " + mView); + if (mIsShowing) { mWm.removeView(mRootView); } @@ -93,13 +94,13 @@ final class AnchoredWindow { * Wraps a view with a SelfRemovingView and sets its requested width and height. */ private View wrapView(View view, int width, int height) { - ViewGroup viewGroup = new SelfRemovingView(view.getContext()); + final ViewGroup viewGroup = new SelfRemovingView(view.getContext()); viewGroup.addView(view, new ViewGroup.LayoutParams(width, height)); return viewGroup; } private static LayoutParams createBaseLayoutParams() { - LayoutParams params = new LayoutParams(); + final LayoutParams params = new LayoutParams(); // TODO(b/33197203): LayoutParams.TYPE_AUTOFILL params.type = LayoutParams.TYPE_SYSTEM_ALERT; params.flags = @@ -115,6 +116,13 @@ final class AnchoredWindow { return params; } + @Override + public String toString() { + if (!DEBUG) return super.toString(); + + return "AnchoredWindow: [width=" + mWidth + ", height=" + mHeight + ", view=" + mView + "]"; + } + void dump(PrintWriter pw) { pw.println("Anchored Window"); final String prefix = " "; diff --git a/services/autofill/java/com/android/server/autofill/AutoFillManagerService.java b/services/autofill/java/com/android/server/autofill/AutoFillManagerService.java index 58edadcda257..78436f796bf6 100644 --- a/services/autofill/java/com/android/server/autofill/AutoFillManagerService.java +++ b/services/autofill/java/com/android/server/autofill/AutoFillManagerService.java @@ -18,7 +18,6 @@ package com.android.server.autofill; import static android.Manifest.permission.MANAGE_AUTO_FILL; import static android.content.Context.AUTO_FILL_MANAGER_SERVICE; -import static android.view.View.AUTO_FILL_FLAG_TYPE_FILL; import android.Manifest; import android.app.ActivityManagerInternal; @@ -50,12 +49,12 @@ import android.util.Log; import android.util.Slog; import android.util.SparseArray; import android.view.autofill.AutoFillId; +import android.view.autofill.AutoFillValue; import com.android.internal.annotations.GuardedBy; import com.android.internal.os.BackgroundThread; import com.android.internal.os.HandlerCaller; import com.android.internal.os.SomeArgs; -import com.android.server.FgThread; import com.android.server.LocalServices; import com.android.server.SystemService; @@ -77,9 +76,11 @@ public final class AutoFillManagerService extends SystemService { private static final long SERVICE_BINDING_LIFETIME_MS = 5 * DateUtils.MINUTE_IN_MILLIS; - protected static final int MSG_UNBIND = 1; - protected static final int MSG_REQUEST_AUTO_FILL_FOR_USER = 2; - protected static final int MSG_REQUEST_AUTO_FILL = 3; + private static final int MSG_UNBIND = 1; + private static final int MSG_REQUEST_AUTO_FILL_FOR_USER = 2; + private static final int MSG_REQUEST_AUTO_FILL = 3; + private static final int MSG_ON_VALUE_CHANGED = 4; + private static final int MSG_REQUEST_SAVE_FOR_USER = 5; private final AutoFillManagerServiceStub mServiceStub; private final Context mContext; @@ -98,18 +99,35 @@ public final class AutoFillManagerService extends SystemService { } return; } case MSG_REQUEST_AUTO_FILL_FOR_USER: { - final int userId = msg.arg1; - final int flags = msg.arg2; - handleAutoFillForUser(userId, flags); + handleAutoFillForUser(msg.arg1); + return; + } case MSG_REQUEST_SAVE_FOR_USER: { + handleSaveForUser(msg.arg1); return; } case MSG_REQUEST_AUTO_FILL: { final SomeArgs args = (SomeArgs) msg.obj; - final int userId = msg.arg1; - final int flags = msg.arg2; - final IBinder activityToken = (IBinder) args.arg1; - final AutoFillId autoFillId = (AutoFillId) args.arg2; - final Rect bounds = (Rect) args.arg3; - handleAutoFill(activityToken, userId, autoFillId, bounds, flags); + try { + final int userId = msg.arg1; + final int flags = msg.arg2; + final IBinder activityToken = (IBinder) args.arg1; + final AutoFillId autoFillId = (AutoFillId) args.arg2; + final Rect bounds = (Rect) args.arg3; + handleAutoFill(activityToken, userId, autoFillId, bounds, flags); + } finally { + args.recycle(); + } + return; + } case MSG_ON_VALUE_CHANGED: { + final SomeArgs args = (SomeArgs) msg.obj; + try { + final int userId = msg.arg1; + final IBinder activityToken = (IBinder) args.arg1; + final AutoFillId autoFillId = (AutoFillId) args.arg2; + final AutoFillValue newValue = (AutoFillValue) args.arg3; + handleValueChanged(activityToken, userId, autoFillId, newValue); + } finally { + args.recycle(); + } return; } default: { Slog.w(TAG, "Invalid message: " + msg); @@ -172,36 +190,39 @@ public final class AutoFillManagerService extends SystemService { if (!TextUtils.isEmpty(componentName)) { try { serviceComponent = ComponentName.unflattenFromString(componentName); - serviceInfo = - AppGlobals.getPackageManager().getServiceInfo(serviceComponent, 0, userId); + serviceInfo = AppGlobals.getPackageManager().getServiceInfo(serviceComponent, 0, + userId); } catch (RuntimeException | RemoteException e) { Slog.wtf(TAG, "Bad auto-fill service name " + componentName, e); return null; } } - if (DEBUG) Slog.d(TAG, "getServiceComponentForUser(" + userId + "): component=" - + serviceComponent + ", info: " + serviceInfo); + if (DEBUG) { + Slog.d(TAG, "getServiceComponentForUser(" + userId + "): component=" + + serviceComponent + ", info: " + serviceInfo); + } if (serviceInfo == null) { if (DEBUG) Slog.d(TAG, "no service info for " + serviceComponent); return null; } return new AutoFillManagerServiceImpl(this, mContext, mLock, mRequestsHistory, - FgThread.getHandler(), userId, serviceInfo.applicationInfo.uid, serviceComponent, + userId, serviceInfo.applicationInfo.uid, serviceComponent, SERVICE_BINDING_LIFETIME_MS); } /** * Gets the service instance for an user. - * - * <p>First it tries to return the existing instance from the cache; if it's not cached, it - * creates a new instance and caches it. + * <p> + * First it tries to return the existing instance from the cache; if it's not cached, it creates + * a new instance and caches it. */ // TODO(b/33197203): make private once AutoFillUi does not uses notifications AutoFillManagerServiceImpl getServiceForUserLocked(int userId) { AutoFillManagerServiceImpl service = mServicesCache.get(userId); if (service != null) { - if (DEBUG) Log.d(TAG, "reusing cached service for userId " + userId); + if (DEBUG) + Log.d(TAG, "reusing cached service for userId " + userId); service.setLifeExpectancy(SERVICE_BINDING_LIFETIME_MS); } else { service = newServiceForUser(userId); @@ -244,38 +265,84 @@ public final class AutoFillManagerService extends SystemService { synchronized (mLock) { final AutoFillManagerServiceImpl service = getServiceForUserLocked(userId); if (service != null) { - // TODO(b/33197203): must pass AUTO_FILL_FLAG_TYPE_FILL because AM is expecting - // either that flag or AUTO_FILL_FLAG_TYPE_SAVE; should go away once save is - // refactored - flags |= AUTO_FILL_FLAG_TYPE_FILL; service.requestAutoFillLocked(activityToken, autoFillId, bounds, flags); } } } - private void handleAutoFillForUser(int userId, int flags) { - if (DEBUG) { - Slog.d(TAG, "handler.requestAutoFillForUser(): id=" + userId + ", flags=" + flags); + private void handleValueChanged(IBinder activityToken, int userId, AutoFillId autoFillId, + AutoFillValue newValue) { + synchronized (mLock) { + final AutoFillManagerServiceImpl service = getServiceForUserLocked(userId); + if (service != null) { + service.onValueChangeLocked(activityToken, autoFillId, newValue); + } } + } + + private IBinder getTopActivityForUser() { final List<IBinder> topActivities = LocalServices .getService(ActivityManagerInternal.class).getTopVisibleActivities(); - if (DEBUG) - Slog.d(TAG, "Top activities (" + topActivities.size() + "): " + topActivities); + if (DEBUG) Slog.d(TAG, "Top activities (" + topActivities.size() + "): " + topActivities); if (topActivities.isEmpty()) { Slog.w(TAG, "Could not get top activity"); + return null; + } + return topActivities.get(0); + } + + private void handleAutoFillForUser(int userId) { + if (DEBUG) Slog.d(TAG, "handler.requestAutoFillForUser(): id=" + userId); + final IBinder activityToken = getTopActivityForUser(); + if (activityToken == null) { return; } - final IBinder activityToken = topActivities.get(0); + synchronized (mLock) { final AutoFillManagerServiceImpl service = getServiceForUserLocked(userId); if (service == null) { Slog.w(TAG, "no service for user " + userId); return; } - service.requestAutoFillLocked(activityToken, null, null, flags); + service.requestAutoFillLocked(activityToken, null, null, 0); } } + private void handleSaveForUser(int userId) { + if (DEBUG) Slog.d(TAG, "handler.handleSaveForUser(): id=" + userId); + final IBinder activityToken = getTopActivityForUser(); + if (activityToken == null) { + return; + } + + synchronized (mLock) { + final AutoFillManagerServiceImpl service = getServiceForUserLocked(userId); + if (service == null) { + Slog.w(TAG, "no service for user " + userId); + return; + } + service.requestSaveForUserLocked(activityToken); + } + } + + private IBinder getTopActivity() { + final int uid = Binder.getCallingUid(); + final IBinder activityToken = LocalServices.getService(ActivityManagerInternal.class) + .getTopVisibleActivity(uid); + if (activityToken == null) { + // Make sure its called by the top activity. + if (uid == Process.SYSTEM_UID) { + // TODO(b/33197203, b/34819567, b/34171325): figure out proper way to handle it + if (DEBUG) Log.w(TAG, "requestAutoFill(): ignoring call from system"); + + return null; + } + throw new SecurityException("uid " + uid + " does not own the top activity"); + } + + return activityToken; + } + final class AutoFillManagerServiceStub extends IAutoFillManagerService.Stub { @Override @@ -283,29 +350,39 @@ public final class AutoFillManagerService extends SystemService { if (DEBUG) Slog.d(TAG, "requestAutoFill: flags=" + flags + ", autoFillId=" + id + ", bounds=" + bounds); - // Make sure its called by the top activity. - final int uid = Binder.getCallingUid(); - final IBinder activityToken = LocalServices.getService(ActivityManagerInternal.class) - .getTopVisibleActivity(uid); - if (activityToken == null) { - // TODO(b/33197203, b/34819567, b/34171325): figure out proper way to handle it - if (uid == Process.SYSTEM_UID) { - if (DEBUG) Log.w(TAG, "requestAutoFill(): ignoring call from system"); - return; - } - throw new SecurityException("uid " + uid + " does not own the top activity"); + final IBinder activityToken = getTopActivity(); + if (activityToken != null) { + mHandlerCaller.sendMessage(mHandlerCaller.obtainMessageIIOOO(MSG_REQUEST_AUTO_FILL, + UserHandle.getCallingUserId(), flags, activityToken, id, bounds)); } + } + + @Override + public void requestAutoFillForUser(int userId) { + mContext.enforceCallingPermission(MANAGE_AUTO_FILL, TAG); - mHandlerCaller.sendMessage(mHandlerCaller.obtainMessageIIOOO(MSG_REQUEST_AUTO_FILL, - UserHandle.getCallingUserId(), flags, activityToken, id, bounds)); + mHandlerCaller.sendMessage( + mHandlerCaller.obtainMessageI(MSG_REQUEST_AUTO_FILL_FOR_USER, userId)); } @Override - public void requestAutoFillForUser(int userId, int flags) { + public void requestSaveForUser(int userId) { mContext.enforceCallingPermission(MANAGE_AUTO_FILL, TAG); - mHandlerCaller.sendMessage(mHandlerCaller.obtainMessageII( - MSG_REQUEST_AUTO_FILL_FOR_USER, userId, flags)); + mHandlerCaller.sendMessage( + mHandlerCaller.obtainMessageI(MSG_REQUEST_SAVE_FOR_USER, userId)); + } + + @Override + public void onValueChanged(AutoFillId id, AutoFillValue value) { + if (DEBUG) Slog.d(TAG, "onValueChanged(): id=" + id + ", value=" + value); + + final IBinder activityToken = getTopActivity(); + + if (activityToken != null) { + mHandlerCaller.sendMessage(mHandlerCaller.obtainMessageIOOO(MSG_ON_VALUE_CHANGED, + UserHandle.getCallingUserId(), activityToken, id, value)); + } } @Override diff --git a/services/autofill/java/com/android/server/autofill/AutoFillManagerServiceImpl.java b/services/autofill/java/com/android/server/autofill/AutoFillManagerServiceImpl.java index 2dcb31ccc229..42e4fd3b2b7f 100644 --- a/services/autofill/java/com/android/server/autofill/AutoFillManagerServiceImpl.java +++ b/services/autofill/java/com/android/server/autofill/AutoFillManagerServiceImpl.java @@ -19,12 +19,11 @@ package com.android.server.autofill; import static android.service.autofill.AutoFillService.FLAG_AUTHENTICATION_ERROR; import static android.service.autofill.AutoFillService.FLAG_AUTHENTICATION_REQUESTED; import static android.service.autofill.AutoFillService.FLAG_AUTHENTICATION_SUCCESS; -import static android.view.View.AUTO_FILL_FLAG_TYPE_FILL; -import static android.view.View.AUTO_FILL_FLAG_TYPE_SAVE; import static android.view.autofill.AutoFillManager.FLAG_UPDATE_UI_SHOW; import static android.view.autofill.AutoFillManager.FLAG_UPDATE_UI_HIDE; import static com.android.server.autofill.Helper.DEBUG; +import static com.android.server.autofill.Helper.VERBOSE; import static com.android.server.autofill.Helper.bundleToString; import android.annotation.Nullable; @@ -32,6 +31,8 @@ import android.app.Activity; import android.app.ActivityManager; import android.app.IActivityManager; import android.app.assist.AssistStructure; +import android.app.assist.AssistStructure.ViewNode; +import android.app.assist.AssistStructure.WindowNode; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; @@ -46,7 +47,6 @@ import android.hardware.fingerprint.IFingerprintServiceReceiver; import android.os.Binder; import android.os.Bundle; import android.os.DeadObjectException; -import android.os.Handler; import android.os.IBinder; import android.os.RemoteException; import android.os.ServiceManager; @@ -72,13 +72,15 @@ import android.view.autofill.FillResponse; import com.android.internal.annotations.GuardedBy; import com.android.internal.os.IResultReceiver; +import com.android.server.FgThread; import java.io.PrintWriter; import java.lang.ref.WeakReference; -import java.util.Arrays; +import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Map.Entry; /** * Bridge between the {@code system_server}'s {@link AutoFillManagerService} and the @@ -120,8 +122,15 @@ final class AutoFillManagerServiceImpl { if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(intent.getAction())) { final String reason = intent.getStringExtra("reason"); if (DEBUG) Slog.d(TAG, "close system dialogs: " + reason); - // TODO(b/33197203): close any pending UI like account selection (or remove this - // receiver) + + synchronized (mLock) { + final int size = mSessions.size(); + for (int i = 0; i < size; i++) { + final Session session = mSessions.valueAt(i); + // TODO(b/33197203): invalidate the sessions instead? + session.mUi.closeAll(); + } + } } } }; @@ -186,7 +195,6 @@ final class AutoFillManagerServiceImpl { } final AssistStructure structure = resultData .getParcelable(VoiceInteractionSession.KEY_STRUCTURE); - final int flags = resultData.getInt(VoiceInteractionSession.KEY_FLAGS, 0); final Session session; synchronized (mLock) { @@ -195,9 +203,26 @@ final class AutoFillManagerServiceImpl { Slog.w(TAG, "no server callback for id " + resultCode); return; } - session.setAppCallback(appBinder); + session.setAppCallbackLocked(appBinder); + // TODO(b/33197203): since service is fetching the data (to use for save later), + // we should optimize what's sent (for example, remove layout containers, + // color / font info, etc...) + session.mStructure = structure; + + // TODO(b/33197203, b/33269702): Must fetch the data so it's available later on + // handleSave(), even if if the activity is gone by then, but structure.ensureData() + // gives a ONE_WAY warning because system_service could block on app calls. + // We need to change AssistStructure so it provides a "one-way" writeToParcel() + // method that sends all the data + structure.ensureData(); + + structure.sanitizeForParceling(true); + if (VERBOSE) { + Slog.v(TAG, "Dumping " + structure + " before calling service.autoFill()"); + structure.dump(); + } + mService.autoFill(structure, session.mServerCallback); } - mService.autoFill(structure, session.mServerCallback, flags); } }; @@ -212,8 +237,7 @@ final class AutoFillManagerServiceImpl { long mEstimateTimeOfDeath; AutoFillManagerServiceImpl(AutoFillManagerService managerService, Context context, Object lock, - LocalLog requestsHistory, Handler handler, int userId, int uid, ComponentName component, - long ttl) { + LocalLog requestsHistory, int userId, int uid, ComponentName component, long ttl) { mManagerService = managerService; mContext = context; mLock = lock; @@ -244,7 +268,7 @@ final class AutoFillManagerServiceImpl { mValid = true; IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); - mContext.registerReceiver(mBroadcastReceiver, filter, null, handler); + mContext.registerReceiver(mBroadcastReceiver, filter, null, FgThread.getHandler()); } void setLifeExpectancy(long ttl) { @@ -271,20 +295,43 @@ final class AutoFillManagerServiceImpl { * * @param activityToken activity token. * @param autoFillId id of the view that requested auto-fill. + * @param bounds boundaries of the view that requested auto-fill. * @param flags optional flags. */ void requestAutoFillLocked(IBinder activityToken, @Nullable AutoFillId autoFillId, @Nullable Rect bounds, int flags) { if (!mBound) { - Slog.w(TAG, "requestAutoFill() failed because it's not bound to service"); + Slog.w(TAG, "requestAutoFillLocked() failed because it's not bound to service"); return; } requestAutoFillLocked(activityToken, autoFillId, bounds, flags, true); } + /** + * Used by {@link AutoFillManagerServiceShellCommand} to request save for the current top app. + */ + void requestSaveForUserLocked(IBinder activityToken) { + if (!mBound) { + Slog.w(TAG, "requestSaveForUserLocked() failed because it's not bound to service"); + return; + } + if (mService == null) { + Slog.w(TAG, "requestSaveForUserLocked: service not set"); + return; + } + + final Session session = getSessionByTokenLocked(activityToken); + if (session == null) { + Slog.w(TAG, "requestSaveForUserLocked(): no session for " + activityToken); + return; + } + + session.onSaveLocked(); + } + private void requestAutoFillLocked(IBinder activityToken, @Nullable AutoFillId autoFillId, - @Nullable Rect bounds, int flags, boolean queueIfNecessary) { + @Nullable Rect bounds, int flags, boolean queueIfNecessary) { if (mService == null) { if (!queueIfNecessary) { Slog.w(TAG, "requestAutoFillLocked(): service is null"); @@ -294,24 +341,24 @@ final class AutoFillManagerServiceImpl { mQueuedRequests.add(new QueuedRequest(activityToken, autoFillId, bounds, flags)); return; } - if (activityToken == null) { - // Sanity check - Slog.wtf(TAG, "requestAutoFillLocked(): null activityToken"); - return; - } final String historyItem = "s=" + mComponentName + " u=" + mUserId + " f=" + flags + " a=" + activityToken + " i=" + autoFillId + " b=" + bounds; mRequestsHistory.log(historyItem); // TODO(b/33197203): Handle partitioning - Session session = getOrCreateSessionByTokenLocked(activityToken); - if (DEBUG) Slog.d(TAG, "using Session: " + session.mId); + Session session = getSessionByTokenLocked(activityToken); + + if (session == null) { + session = createSessionByTokenLocked(activityToken); + } else { + if (DEBUG) Slog.d(TAG, "reusing session for " + activityToken + ": " + session.mId); + } session.updateAutoFillInput(flags, autoFillId, null, bounds); } - private Session getOrCreateSessionByTokenLocked(IBinder activityToken) { + private Session getSessionByTokenLocked(IBinder activityToken) { final int size = mSessions.size(); for (int i = 0; i < size; i++) { final Session session = mSessions.valueAt(i); @@ -319,12 +366,12 @@ final class AutoFillManagerServiceImpl { return session; } } - return createSessionByTokenLocked(activityToken); + return null; } private Session createSessionByTokenLocked(IBinder activityToken) { final int sessionId = ++sSessionIdCounter; - if (DEBUG) Slog.d(TAG, "creating Session: " + sessionId); + if (DEBUG) Slog.d(TAG, "creating session for " + activityToken + ": " + sessionId); final Session newSession = new Session(sessionId, activityToken); mSessions.put(sessionId, newSession); @@ -338,8 +385,7 @@ final class AutoFillManagerServiceImpl { */ try { // TODO(b/33197203): add MetricsLogger call - if (!mAm.requestAutoFillData( - mAssistReceiver, null, sessionId, activityToken, AUTO_FILL_FLAG_TYPE_FILL)) { + if (!mAm.requestAutoFillData(mAssistReceiver, null, sessionId, activityToken)) { // TODO(b/33197203): might need a way to warn user (perhaps a new method on // AutoFillService). Slog.w(TAG, "failed to request auto-fill data for " + activityToken); @@ -350,6 +396,20 @@ final class AutoFillManagerServiceImpl { return newSession; } + /** + * Callback indicating the value of a field change in the app. + */ + void onValueChangeLocked(IBinder activityToken, AutoFillId autoFillId, AutoFillValue newValue) { + // TODO(b/33197203): add MetricsLogger call + final Session session = getSessionByTokenLocked(activityToken); + if (session == null) { + Slog.w(TAG, "onValueChangeLocked(): session gone for " + activityToken); + return; + } + + session.updateValueLocked(autoFillId, newValue); + } + void stopLocked() { if (DEBUG) Slog.d(TAG, "stopLocked()"); @@ -381,7 +441,8 @@ final class AutoFillManagerServiceImpl { if (DEBUG) Slog.d(TAG, "Removing session " + id); mSessions.remove(id); - // TODO(b/33197203): notify mService so it can invalidate the FillCallback / SaveCallback? + // TODO(b/33197203): notify mService so it can invalidate the FillCallback / SaveCallback + // and cached AssistStructures } void dumpLocked(String prefix, PrintWriter pw) { @@ -479,7 +540,7 @@ final class AutoFillManagerServiceImpl { } private final Listener mListener; - @Nullable + // // TODO(b/33197203): does it really need a reference to the session's response? private FillResponse mResponse; private AutoFillValue mAutoFillValue; private Rect mBounds; @@ -535,7 +596,7 @@ final class AutoFillManagerServiceImpl { * A session for a given activity. * * <p>This class manages the multiple {@link ViewState}s for each view it has, and keeps track - * of the current view session to display the appropriate UI. + * of the current {@link ViewState} to display the appropriate UI. * * <p>Although the auto-fill requests and callbacks are stateless from the service's point of * view, we need to keep state in the framework side for cases such as authentication. For @@ -550,7 +611,6 @@ final class AutoFillManagerServiceImpl { final class Session implements ViewState.Listener { private final AutoFillUI mUi; - final int mId; private final WeakReference<IBinder> mActivityToken; @GuardedBy("mLock") @@ -569,11 +629,31 @@ final class AutoFillManagerServiceImpl { @GuardedBy("mLock") private Dataset mDatasetRequiringAuth; - // Used to auto-fill the activity directly when the FillCallback.onResponse() is called as - // the result of a successful user authentication on service's side. + /** + * Used to auto-fill the activity directly when the FillCallback.onResponse() is called as + * the result of a successful user authentication on service's side. + */ @GuardedBy("mLock") private boolean mAutoFillDirectly; + /** + * Used to remember which {@link Dataset} filled the session. + */ + @GuardedBy("mLock") + private Dataset mAutoFilledDataset; + + /** + * Map of ids that must be updated so they're send to {@link #onSaveLocked()}. + */ + @GuardedBy("mLock") + private Map<AutoFillId, AutoFillValue> mUpdatedValues; + + /** + * Assist structure sent by the app; it will be updated (sanitized, change values for save) + * before sent to {@link AutoFillService}. + */ + private AssistStructure mStructure; + // TODO(b/33197203): use handler to handle results? // TODO(b/33197203): handle all callback methods and/or cancelation? private IFingerprintServiceReceiver mServiceReceiver = @@ -663,6 +743,7 @@ final class AutoFillManagerServiceImpl { // TODO(b/33197203): add MetricsLogger call if (response == null) { if (DEBUG) Slog.d(TAG, "showResponse(): null response"); + removeSelf(); return; } @@ -678,16 +759,13 @@ final class AutoFillManagerServiceImpl { if (DEBUG) Slog.d(TAG, "showError(): " + message); mUi.showError(message); - removeSelf(); } @Override - public void highlightSavedFields(AutoFillId[] ids) { + public void onSaved() { // TODO(b/33197203): add MetricsLogger call - if (DEBUG) Slog.d(TAG, "highlightSavedFields(): " + Arrays.toString(ids)); - - mUi.highlightSavedFields(ids); + if (DEBUG) Slog.d(TAG, "onSaved()"); removeSelf(); } @@ -732,13 +810,96 @@ final class AutoFillManagerServiceImpl { } }; + final int mId; + private Session(int id, IBinder activityToken) { mUi = new AutoFillUI(mContext, this); mId = id; mActivityToken = new WeakReference<>(activityToken); } - void setAppCallback(IBinder appBinder) { + /** + * Callback used to indivate a field has been updated. + */ + void updateValueLocked(AutoFillId id, AutoFillValue newValue) { + if (DEBUG) Slog.d(TAG, "updateValueLocked(): id=" + id + ", newValue=" + newValue); + + // TODO(b/33197203): ignore if not part of the savable ids. + if (mUpdatedValues == null) { + // Lazy intializes it + mUpdatedValues = new HashMap<>(); + } + mUpdatedValues.put(id, newValue); + } + + /** + * Calls service when user requested save. + */ + void onSaveLocked() { + if (DEBUG) Slog.d(TAG, "onSaveLocked(): mUpdateValues=" + mUpdatedValues); + + if (mStructure == null) { + // Sanity check; should not happen... + Slog.wtf(TAG, "onSaveLocked(): no mStructure"); + return; + } + + if (mUpdatedValues == null || mUpdatedValues.isEmpty()) { + // Nothing changed + if (DEBUG) Slog.d(TAG, "onSave(): when no changes, comes no responsibilities"); + + return; + } + + // TODO(b/33197203): make sure the extras are tested by CTS + final Bundle responseExtras = mCurrentResponse == null ? null + : mCurrentResponse.getExtras(); + final Bundle datasetExtras = mAutoFilledDataset == null ? null + : mAutoFilledDataset.getExtras(); + final Bundle extras = (responseExtras == null && datasetExtras == null) + ? null : new Bundle(); + if (responseExtras != null) { + if (DEBUG) { + Slog.d(TAG, "response extras on save extras: " + + bundleToString(responseExtras)); + } + extras.putBundle(AutoFillService.EXTRA_RESPONSE_EXTRAS, responseExtras); + } + if (datasetExtras != null) { + if (DEBUG) { + Slog.d(TAG, "dataset extras on save extras: " + bundleToString(datasetExtras)); + } + extras.putBundle(AutoFillService.EXTRA_DATASET_EXTRAS, datasetExtras); + } + + + for (Entry<AutoFillId, AutoFillValue> entry : mUpdatedValues.entrySet()) { + final AutoFillId id = entry.getKey(); + final ViewNode node = findViewNodeByIdLocked(id); + if (node == null) { + Slog.w(TAG, "onSaveLocked(): did not find node with id " + id); + continue; + } + final AutoFillValue value = entry.getValue(); + if (DEBUG) Slog.d(TAG, "onSaveLocked(): updating " + id + " to " + value); + node.updateAutoFillValue(value); + } + + mStructure.sanitizeForParceling(false); + + if (VERBOSE) { + Slog.v(TAG, "Dumping " + mStructure + " before calling service.save()"); + mStructure.dump(); + } + try { + mService.save(mStructure, mServerCallback, extras); + } catch (RemoteException e) { + Slog.w(TAG, "Error calling save on service: " + e); + // TODO(b/33197203): invalidate session? + } + } + + void setAppCallbackLocked(IBinder appBinder) { try { appBinder.linkToDeath(() -> { if (DEBUG) Slog.d(TAG, "app callback died"); @@ -887,6 +1048,15 @@ final class AutoFillManagerServiceImpl { pw.print(prefix2); pw.print(entry.getKey()); pw.print(": " ); pw.println(entry.getValue()); } + pw.print(prefix); pw.print("mUpdatedValues: "); pw.println(mUpdatedValues); + pw.print(prefix); pw.print("mStructure: " ); + // TODO(b/33197203): add method do dump AssistStructure on pw + if (mStructure != null) { + pw.println("look at logcat" ); + mStructure.dump(); // dumps to logcat + } else { + pw.println("null"); + } } /** @@ -936,52 +1106,12 @@ final class AutoFillManagerServiceImpl { } } - void requestSave() { - synchronized (mLock) { - requestSaveLocked(mId); - } - } - /** * Called by UI to trigger a save request to the service. */ - void requestSaveLocked(int sessionId) { - // TODO(b/33197203): add MetricsLogger call - // TODO(b/33197203): use handler? - // TODO(b/33197203): show error on UI on Slog.w situations below??? - - if (mService == null) { - Slog.w(TAG, "requestSave(): service is null"); - return; - } - final Session session = mSessions.get(sessionId); - if (session == null) { - Slog.w(TAG, "requestSave(): no session with id " + sessionId); - return; - } - final IBinder activityToken = session.mActivityToken.get(); - if (activityToken == null) { - Slog.w(TAG, "activity token for session " + sessionId + " already GCed"); - return; - } - - /* - * TODO(b/33197203): apply security checks below: - * - checks if disabled by secure settings / device policy - * - log operation using noteOp() - * - check flags - * - display disclosure if needed - */ - try { - /* TODO(b/33197203): refactor save logic so it uses a cached AssistStructure, and - get the extras to be sent to the service based on the response / dataset in the - session. */ - if (!mAm.requestAutoFillData(mAssistReceiver, null, sessionId, activityToken, - AUTO_FILL_FLAG_TYPE_SAVE)) { - Slog.w(TAG, "failed to save for " + activityToken); - } - } catch (RemoteException e) { - // Should not happen, it's a local call. + void requestSave() { + synchronized (mLock) { + onSaveLocked(); } } @@ -1004,6 +1134,39 @@ final class AutoFillManagerServiceImpl { } } + private ViewNode findViewNodeByIdLocked(AutoFillId id) { + final int size = mStructure.getWindowNodeCount(); + for (int i = 0; i < size; i++) { + final WindowNode window = mStructure.getWindowNodeAt(i); + final ViewNode root = window.getRootViewNode(); + if (id.equals(root.getAutoFillId())) { + return root; + } + final ViewNode child = findViewNodeByIdLocked(root, id); + if (child != null) { + return child; + } + } + return null; + } + + private ViewNode findViewNodeByIdLocked(ViewNode parent, AutoFillId id) { + final int childrenSize = parent.getChildCount(); + if (childrenSize > 0) { + for (int i = 0; i < childrenSize; i++) { + final ViewNode child = parent.getChildAt(i); + if (id.equals(child.getAutoFillId())) { + return child; + } + final ViewNode grandChild = findViewNodeByIdLocked(child, id); + if (grandChild != null && id.equals(grandChild.getAutoFillId())) { + return grandChild; + } + } + } + return null; + } + private void removeSelf() { synchronized (mLock) { removeSessionLocked(mId); diff --git a/services/autofill/java/com/android/server/autofill/AutoFillManagerServiceShellCommand.java b/services/autofill/java/com/android/server/autofill/AutoFillManagerServiceShellCommand.java index 4998e3f1e723..5c6009a8cf0b 100644 --- a/services/autofill/java/com/android/server/autofill/AutoFillManagerServiceShellCommand.java +++ b/services/autofill/java/com/android/server/autofill/AutoFillManagerServiceShellCommand.java @@ -16,11 +16,7 @@ package com.android.server.autofill; -import static android.view.View.AUTO_FILL_FLAG_TYPE_FILL; -import static android.view.View.AUTO_FILL_FLAG_TYPE_SAVE; - import android.app.ActivityManager; -import android.os.Bundle; import android.os.RemoteException; import android.os.ShellCommand; import android.os.UserHandle; @@ -45,9 +41,9 @@ public final class AutoFillManagerServiceShellCommand extends ShellCommand { try { switch (cmd) { case "fill": - return requestAutoFill(AUTO_FILL_FLAG_TYPE_FILL); + return requestAutoFill(); case "save": - return requestAutoFill(AUTO_FILL_FLAG_TYPE_SAVE); + return requestSave(); default: return handleDefaultCommands(cmd); } @@ -72,9 +68,15 @@ public final class AutoFillManagerServiceShellCommand extends ShellCommand { } } - private int requestAutoFill(int flags) throws RemoteException { + private int requestAutoFill() throws RemoteException { + final int userId = getUserIdFromArgs(); + mService.requestAutoFillForUser(userId); + return 0; + } + + private int requestSave() throws RemoteException { final int userId = getUserIdFromArgs(); - mService.requestAutoFillForUser(userId, flags); + mService.requestSaveForUser(userId); return 0; } diff --git a/services/autofill/java/com/android/server/autofill/AutoFillUI.java b/services/autofill/java/com/android/server/autofill/AutoFillUI.java index 86e04ccd6a83..76c291687ec3 100644 --- a/services/autofill/java/com/android/server/autofill/AutoFillUI.java +++ b/services/autofill/java/com/android/server/autofill/AutoFillUI.java @@ -41,6 +41,7 @@ import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; +import android.view.WindowManager.LayoutParams; import android.widget.Toast; import com.android.internal.annotations.GuardedBy; @@ -93,39 +94,38 @@ final class AutoFillUI { } /** - * Highlights in the {@link Activity} the fields saved by the service. + * Hides the fill UI. + * Shows the options from a {@link FillResponse} so the user can pick up the proper + * {@link Dataset} (when the response has one) for a given view (identified by + * {@code autoFillId}). */ - void highlightSavedFields(AutoFillId[] ids) { - // TODO(b/33197203): proper implementation (must be handled by activity) + void hideFillUi() { UiThread.getHandler().runWithScissors(() -> { - Toast.makeText(mContext, "AutoFill: service saved ids " + Arrays.toString(ids), - Toast.LENGTH_LONG).show(); + hideFillUiLocked(); }, 0); } - /** - * Hides the fill UI. - */ - void hideFillUi() { - UiThread.getHandler().runWithScissors(() -> { - if (mFillWindow != null) { - if (DEBUG) Slog.d(TAG, "remove FillUi remove " + mFillWindow); - mFillWindow.hide(); - } + // Must be called in inside UI Thread + private void hideFillUiLocked() { + if (mFillWindow != null) { + if (DEBUG) Slog.d(TAG, "hideFillUiLocked(): hide" + mFillWindow); - mViewState = null; - mBounds = null; - mFilterText = null; - mFillView = null; - mFillWindow = null; - }, 0); + mFillWindow.hide(); + } + + mViewState = null; + mBounds = null; + mFilterText = null; + mFillView = null; + mFillWindow = null; } + /** * Shows the fill UI, removing the previous fill UI if the has changed. * * @param viewState the view state, compared by reference to know if new UI should be shown - * @param response the response to show, not used if viewState is the same + * @param datasets the datasets to show, not used if viewState is the same * @param bounds bounds of the view to be filled, used if changed * @param filterText text of the view to be filled, used if changed */ @@ -142,7 +142,6 @@ final class AutoFillUI { (dataset) -> { mSession.autoFillApp(dataset); hideFillUi(); - showSaveUi(); }); mFillWindow = new AnchoredWindow( mWm, mFillView, 800, ViewGroup.LayoutParams.WRAP_CONTENT); @@ -204,6 +203,7 @@ final class AutoFillUI { public void onSaveClick() { hideSnackbar(); + // TODO(b/33197203): add MetricsLogger call mSession.requestSave(); } @Override @@ -229,6 +229,18 @@ final class AutoFillUI { } } + /** + * Closes all UI affordances. + */ + void closeAll() { + if (DEBUG) Slog.d(TAG, "closeAll()"); + + UiThread.getHandler().runWithScissors(() -> { + hideSnackbarLocked(); + hideFillUiLocked(); + }, 0); + } + void dump(PrintWriter pw) { pw.println("AufoFill UI"); final String prefix = " "; @@ -243,15 +255,18 @@ final class AutoFillUI { //similar to a snackbar, but can be a bit custom since it is more than just text. This will //allow two buttons for saving or not saving the autofill for instance as well. private void showSnackbar(View snackBar) { - WindowManager.LayoutParams params = new WindowManager.LayoutParams( - WindowManager.LayoutParams.FILL_PARENT, - WindowManager.LayoutParams.WRAP_CONTENT, - WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, // TODO(b/33197203) use TYPE_AUTO_FILL - WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE - | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN, - PixelFormat.TRANSLUCENT); - - params.gravity = Gravity.BOTTOM | Gravity.LEFT; + final LayoutParams params = new LayoutParams(); + params.setTitle("AutoFill Save"); + params.type = LayoutParams.TYPE_PHONE; // TODO(b/33197203) use app window token + params.flags = + LayoutParams.FLAG_NOT_FOCUSABLE // don't receive input events, + | LayoutParams.FLAG_ALT_FOCUSABLE_IM // resize for soft input + | LayoutParams.FLAG_NOT_TOUCH_MODAL; // outside touches go to windows behind us + params.softInputMode = + LayoutParams.SOFT_INPUT_ADJUST_PAN; // pan with soft input + params.gravity = Gravity.BOTTOM | Gravity.START; + params.width = LayoutParams.MATCH_PARENT; + params.height = LayoutParams.WRAP_CONTENT; UiThread.getHandler().runWithScissors(() -> { mSnackbar = snackBar; @@ -261,13 +276,18 @@ final class AutoFillUI { private void hideSnackbar() { UiThread.getHandler().runWithScissors(() -> { - if (mSnackbar != null) { - mWm.removeView(mSnackbar); - mSnackbar = null; - } + hideSnackbarLocked(); }, 0); } + // Must be called in inside UI Thread + private void hideSnackbarLocked() { + if (mSnackbar != null) { + mWm.removeView(mSnackbar); + mSnackbar = null; + } + } + ///////////////////////////////////////////////////////////////////////////////// // TODO(b/33197203): temporary code using a notification to request auto-fill. // // Will be removed once UX decide the right way to present it to the user. // diff --git a/services/autofill/java/com/android/server/autofill/Helper.java b/services/autofill/java/com/android/server/autofill/Helper.java index 79095a197c17..9171dac04d81 100644 --- a/services/autofill/java/com/android/server/autofill/Helper.java +++ b/services/autofill/java/com/android/server/autofill/Helper.java @@ -25,6 +25,7 @@ import java.util.Set; final class Helper { static final boolean DEBUG = true; // TODO(b/33197203): set to false when stable + static final boolean VERBOSE = false; static final String REDACTED = "[REDACTED]"; static void append(StringBuilder builder, Bundle bundle) { diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java index 8020f0e42c37..3e711ec05c75 100644 --- a/services/core/java/com/android/server/InputMethodManagerService.java +++ b/services/core/java/com/android/server/InputMethodManagerService.java @@ -932,7 +932,9 @@ public class InputMethodManagerService extends IInputMethodManager.Stub return; } final InputMethodInfo defIm = suitableImes.get(0); - Slog.i(TAG, "Default found, using " + defIm.getId()); + if (DEBUG) { + Slog.i(TAG, "Default found, using " + defIm.getId()); + } setSelectedInputMethodAndSubtypeLocked(defIm, NOT_A_SUBTYPE_ID, false); } @@ -1123,6 +1125,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub } return true; } + // TODO(b/34886274): The semantics of this verification is actually not well-defined. Slog.w(TAG, "--- IPC called from background users. Ignore. callers=" + Debug.getCallers(10)); return false; @@ -1134,8 +1137,18 @@ public class InputMethodManagerService extends IInputMethodManager.Stub * @param token The window token given to the input method when it was started. * @return true if and only if non-null valid token is specified. */ - private boolean calledWithValidToken(IBinder token) { - if (token == null || mCurToken != token) { + private boolean calledWithValidToken(@Nullable IBinder token) { + if (token == null && Binder.getCallingPid() == Process.myPid()) { + if (DEBUG) { + // TODO(b/34851776): Basically it's the caller's fault if we reach here. + Slog.d(TAG, "Bug 34851776 is detected callers=" + Debug.getCallers(10)); + } + return false; + } + if (token == null || token != mCurToken) { + // TODO(b/34886274): The semantics of this verification is actually not well-defined. + Slog.e(TAG, "Ignoring " + Debug.getCaller() + " due to an invalid token." + + " uid:" + Binder.getCallingUid() + " token:" + token); return false; } return true; @@ -1338,8 +1351,10 @@ public class InputMethodManagerService extends IInputMethodManager.Stub // because if the focus changes some time before or after, the // next client receiving focus that has any interest in input will // be calling through here after that change happens. - Slog.w(TAG, "Starting input on non-focused client " + cs.client - + " (uid=" + cs.uid + " pid=" + cs.pid + ")"); + if (DEBUG) { + Slog.w(TAG, "Starting input on non-focused client " + cs.client + + " (uid=" + cs.uid + " pid=" + cs.pid + ")"); + } return null; } } catch (RemoteException e) { @@ -1457,7 +1472,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub mCurId = info.getId(); mCurToken = new Binder(); try { - if (true || DEBUG) Slog.v(TAG, "Adding window token: " + mCurToken); + if (DEBUG) Slog.v(TAG, "Adding window token: " + mCurToken); mIWindowManager.addWindowToken(mCurToken, TYPE_INPUT_METHOD, DEFAULT_DISPLAY); } catch (RemoteException e) { } @@ -1662,9 +1677,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub public void updateStatusIcon(IBinder token, String packageName, int iconId) { synchronized (mMethodMap) { if (!calledWithValidToken(token)) { - final int uid = Binder.getCallingUid(); - Slog.e(TAG, "Ignoring updateStatusIcon due to an invalid token. uid:" + uid - + " token:" + token); return; } final long ident = Binder.clearCallingIdentity(); @@ -1767,9 +1779,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub @Override public void setImeWindowStatus(IBinder token, int vis, int backDisposition) { if (!calledWithValidToken(token)) { - final int uid = Binder.getCallingUid(); - Slog.e(TAG, "Ignoring setImeWindowStatus due to an invalid token. uid:" + uid - + " token:" + token); return; } @@ -1789,9 +1798,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub // Caution! This method is called in this class. Handle multi-user carefully private void updateSystemUiLocked(IBinder token, int vis, int backDisposition) { if (!calledWithValidToken(token)) { - final int uid = Binder.getCallingUid(); - Slog.e(TAG, "Ignoring updateSystemUiLocked due to an invalid token. uid:" + uid - + " token:" + token); return; } @@ -2259,8 +2265,10 @@ public class InputMethodManagerService extends IInputMethodManager.Stub // because if the focus changes some time before or after, the // next client receiving focus that has any interest in input will // be calling through here after that change happens. - Slog.w(TAG, "Focus gain on non-focused client " + cs.client - + " (uid=" + cs.uid + " pid=" + cs.pid + ")"); + if (DEBUG) { + Slog.w(TAG, "Focus gain on non-focused client " + cs.client + + " (uid=" + cs.uid + " pid=" + cs.pid + ")"); + } return null; } } catch (RemoteException e) { @@ -2275,8 +2283,10 @@ public class InputMethodManagerService extends IInputMethodManager.Stub } if (mCurFocusedWindow == windowToken) { - Slog.w(TAG, "Window already focused, ignoring focus gain of: " + client - + " attribute=" + attribute + ", token = " + windowToken); + if (DEBUG) { + Slog.w(TAG, "Window already focused, ignoring focus gain of: " + client + + " attribute=" + attribute + ", token = " + windowToken); + } if (attribute != null) { return startInputUncheckedLocked(cs, inputContext, missingMethods, attribute, controlFlags); @@ -2519,9 +2529,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub } synchronized (mMethodMap) { if (!calledWithValidToken(token)) { - final int uid = Binder.getCallingUid(); - Slog.e(TAG, "Ignoring switchToNextInputMethod due to an invalid token. uid:" + uid - + " token:" + token); return false; } final ImeSubtypeListItem nextSubtype = mSwitchingController.getNextInputMethodLocked( @@ -2543,9 +2550,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub } synchronized (mMethodMap) { if (!calledWithValidToken(token)) { - final int uid = Binder.getCallingUid(); - Slog.e(TAG, "Ignoring shouldOfferSwitchingToNextInputMethod due to an invalid " - + "token. uid:" + uid + " token:" + token); return false; } final ImeSubtypeListItem nextSubtype = mSwitchingController.getNextInputMethodLocked( @@ -2636,9 +2640,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub } synchronized (mMethodMap) { if (!calledWithValidToken(token)) { - final int uid = Binder.getCallingUid(); - Slog.e(TAG, "Ignoring clearLastInputMethodWindowForTransition due to an " - + "invalid token. uid:" + uid + " token:" + token); return; } } @@ -2702,9 +2703,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub } synchronized (mMethodMap) { if (!calledWithValidToken(token)) { - final int uid = Binder.getCallingUid(); - Slog.e(TAG, "Ignoring hideInputMethod due to an invalid token. uid:" - + uid + " token:" + token); return; } long ident = Binder.clearCallingIdentity(); @@ -2723,9 +2721,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub } synchronized (mMethodMap) { if (!calledWithValidToken(token)) { - final int uid = Binder.getCallingUid(); - Slog.e(TAG, "Ignoring showMySoftInput due to an invalid token. uid:" - + uid + " token:" + token); return; } long ident = Binder.clearCallingIdentity(); @@ -3076,7 +3071,9 @@ public class InputMethodManagerService extends IInputMethodManager.Stub } } if (!enabledImeFound) { - Slog.i(TAG, "All the enabled IMEs are gone. Reset default enabled IMEs."); + if (DEBUG) { + Slog.i(TAG, "All the enabled IMEs are gone. Reset default enabled IMEs."); + } resetDefaultEnabledIme = true; resetSelectedInputMethodAndSubtypeLocked(""); } diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 732cd101e0b3..ee1f28f4cb43 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -235,6 +235,7 @@ import android.graphics.Bitmap; import android.graphics.Point; import android.graphics.Rect; import android.location.LocationManager; +import android.metrics.LogMaker; import android.net.Proxy; import android.net.ProxyInfo; import android.net.Uri; @@ -312,6 +313,7 @@ import android.view.WindowManager; import com.google.android.collect.Lists; import com.google.android.collect.Maps; + import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.app.AssistUtils; @@ -322,6 +324,8 @@ import com.android.internal.app.IVoiceInteractor; import com.android.internal.app.ProcessMap; import com.android.internal.app.SystemUserHomeActivity; import com.android.internal.app.procstats.ProcessStats; +import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.os.BackgroundThread; import com.android.internal.os.BatteryStatsImpl; import com.android.internal.os.IResultReceiver; @@ -696,11 +700,10 @@ public class ActivityManagerService extends IActivityManager.Stub public AssistContent content = null; public Bundle receiverExtras; public int resultCode; - public int flags; public PendingAssistExtras(ActivityRecord _activity, Bundle _extras, Intent _intent, String _hint, IResultReceiver _receiver, Bundle _receiverExtras, int _resultCode, - int _userHandle, int _flags) { + int _userHandle) { activity = _activity; extras = _extras; intent = _intent; @@ -709,7 +712,6 @@ public class ActivityManagerService extends IActivityManager.Stub receiverExtras = _receiverExtras; resultCode = _resultCode; userHandle = _userHandle; - flags = _flags; } @Override public void run() { @@ -6730,7 +6732,8 @@ public class ActivityManagerService extends IActivityManager.Stub ActivityStack stack = ActivityRecord.getStackLocked(token); if (stack != null) { ActivityRecord r = - mStackSupervisor.activityIdleInternalLocked(token, false, config); + mStackSupervisor.activityIdleInternalLocked(token, false /* fromTimeout */, + false /* processPausingActivities */, config); if (stopProfiling) { if ((mProfileProc == r.app) && (mProfileFd != null)) { try { @@ -7610,7 +7613,8 @@ public class ActivityManagerService extends IActivityManager.Stub // Activity supports picture-in-picture, now check that we can enter PiP at this // point, if it is - if (!r.checkEnterPictureInPictureState("enterPictureInPictureMode")) { + if (!r.checkEnterPictureInPictureState("enterPictureInPictureMode", + false /* noThrow */)) { return false; } @@ -7625,6 +7629,10 @@ public class ActivityManagerService extends IActivityManager.Stub mStackSupervisor.moveActivityToPinnedStackLocked(r, "enterPictureInPictureMode", bounds, true /* moveHomeStackToFront */); mStackSupervisor.getStack(PINNED_STACK_ID).setPictureInPictureActions(actions); + + MetricsLogger.action(mContext, MetricsEvent.ACTION_PICTURE_IN_PICTURE_ENTERED, + r.supportsPictureInPictureWhilePausing); + logPictureInPictureArgs(args); }; if (isKeyguardLocked()) { @@ -7678,12 +7686,25 @@ public class ActivityManagerService extends IActivityManager.Stub stack.setPictureInPictureAspectRatio(r.pictureInPictureArgs.getAspectRatio()); stack.setPictureInPictureActions(r.pictureInPictureArgs.getActions()); } + logPictureInPictureArgs(args); } } finally { Binder.restoreCallingIdentity(origId); } } + private void logPictureInPictureArgs(PictureInPictureArgs args) { + if (args.hasSetActions()) { + MetricsLogger.histogram(mContext, "tron_varz_picture_in_picture_actions_count", + args.getActions().size()); + } + if (args.hasSetAspectRatio()) { + LogMaker lm = new LogMaker(MetricsEvent.ACTION_PICTURE_IN_PICTURE_ASPECT_RATIO_CHANGED); + lm.addTaggedData(MetricsEvent.PICTURE_IN_PICTURE_ASPECT_RATIO, args.getAspectRatio()); + MetricsLogger.action(lm); + } + } + private boolean isValidPictureInPictureAspectRatio(float aspectRatio) { return mMinPipAspectRatio <= aspectRatio && aspectRatio <= mMaxPipAspectRatio; } @@ -12393,7 +12414,7 @@ public class ActivityManagerService extends IActivityManager.Stub public Bundle getAssistContextExtras(int requestType) { PendingAssistExtras pae = enqueueAssistContext(requestType, null, null, null, null, 0, null, true /* focused */, true /* newSessionId */, - UserHandle.getCallingUserId(), null, PENDING_ASSIST_EXTRAS_TIMEOUT, 0); + UserHandle.getCallingUserId(), null, PENDING_ASSIST_EXTRAS_TIMEOUT); if (pae == null) { return null; } @@ -12457,42 +12478,29 @@ public class ActivityManagerService extends IActivityManager.Stub @Override public boolean requestAssistContextExtras(int requestType, IResultReceiver receiver, - Bundle receiverExtras, - IBinder activityToken, boolean focused, boolean newSessionId) { + Bundle receiverExtras, IBinder activityToken, boolean focused, boolean newSessionId) { return enqueueAssistContext(requestType, null, null, receiver, receiverExtras, 0, activityToken, focused, newSessionId, UserHandle.getCallingUserId(), null, - PENDING_ASSIST_EXTRAS_LONG_TIMEOUT, 0) != null; + PENDING_ASSIST_EXTRAS_LONG_TIMEOUT) != null; } @Override public boolean requestAutoFillData(IResultReceiver receiver, Bundle receiverExtras, - int resultCode, IBinder activityToken, int flags) { - final boolean forFill = (flags & View.AUTO_FILL_FLAG_TYPE_FILL) != 0; - final boolean forSave = (flags & View.AUTO_FILL_FLAG_TYPE_SAVE) != 0; - if ((forFill && forSave) || (!forFill) && !(forSave)) { - // There can be only one! - Slog.w(TAG, "requestAutoFillData(): invalid flags (" + flags + ")"); - return false; - } - + int resultCode, IBinder activityToken) { // NOTE: we could always use ActivityManager.ASSIST_CONTEXT_FULL and let ActivityThread // rely on the flags to decide whether the handleRequestAssistContextExtras() is for // auto-fill, but it's safer to explicitly use new AutoFill types, in case the Assist // requests use flags in the future as well (since their flags value might collide with the // auto-fill flag values). - final int type = forFill? - ActivityManager.ASSIST_CONTEXT_AUTO_FILL : - ActivityManager.ASSIST_CONTEXT_AUTO_FILL_SAVE; - - return enqueueAssistContext(type, null, null, receiver, receiverExtras, resultCode, - activityToken, true, true, UserHandle.getCallingUserId(), null, - PENDING_AUTO_FILL_ASSIST_STRUCTURE_TIMEOUT, flags) != null; + return enqueueAssistContext(ActivityManager.ASSIST_CONTEXT_AUTO_FILL, null, null, + receiver, receiverExtras, resultCode, activityToken, true, true, + UserHandle.getCallingUserId(), null, + PENDING_AUTO_FILL_ASSIST_STRUCTURE_TIMEOUT) != null; } private PendingAssistExtras enqueueAssistContext(int requestType, Intent intent, String hint, IResultReceiver receiver, Bundle receiverExtras, int resultCode, IBinder activityToken, - boolean focused, boolean newSessionId, int userHandle, Bundle args, long timeout, - int flags) { + boolean focused, boolean newSessionId, int userHandle, Bundle args, long timeout) { enforceCallingPermission(android.Manifest.permission.GET_TOP_ACTIVITY_INFO, "enqueueAssistContext()"); synchronized (this) { @@ -12531,14 +12539,14 @@ public class ActivityManagerService extends IActivityManager.Stub extras.putString(Intent.EXTRA_ASSIST_PACKAGE, activity.packageName); extras.putInt(Intent.EXTRA_ASSIST_UID, activity.app.uid); pae = new PendingAssistExtras(activity, extras, intent, hint, receiver, receiverExtras, - resultCode, userHandle, flags); + resultCode, userHandle); // Increment the sessionId if necessary if (newSessionId) { mViSessionId++; } try { - activity.app.thread.requestAssistContextExtras(activity.appToken, pae, - requestType, mViSessionId, flags); + activity.app.thread.requestAssistContextExtras(activity.appToken, pae, requestType, + mViSessionId); mPendingAssistExtras.add(pae); mUiHandler.postDelayed(pae, timeout); } catch (RemoteException e) { @@ -12614,9 +12622,6 @@ public class ActivityManagerService extends IActivityManager.Stub sendBundle.putParcelable(VoiceInteractionSession.KEY_CONTENT, pae.content); sendBundle.putBundle(VoiceInteractionSession.KEY_RECEIVER_EXTRAS, pae.receiverExtras); - if (pae.flags > 0) { - sendBundle.putInt(VoiceInteractionSession.KEY_FLAGS, pae.flags); - } IBinder cb = extras.getBinder(AutoFillService.KEY_CALLBACK); if (cb != null) { sendBundle.putBinder(AutoFillService.KEY_CALLBACK, cb); @@ -12652,7 +12657,7 @@ public class ActivityManagerService extends IActivityManager.Stub Bundle args) { return enqueueAssistContext(requestType, intent, hint, null, null, 0, null, true /* focused */, true /* newSessionId */, userHandle, args, - PENDING_ASSIST_EXTRAS_TIMEOUT, 0) != null; + PENDING_ASSIST_EXTRAS_TIMEOUT) != null; } public void registerProcessObserver(IProcessObserver observer) { diff --git a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java index 8c3477671730..a06fa1b8dcfe 100644 --- a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java +++ b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java @@ -2043,7 +2043,7 @@ final class ActivityManagerShellCommand extends ShellCommand { mInterface.stopLockTaskMode(); } else { int taskId = Integer.parseInt(taskIdStr); - mInterface.startLockTaskModeById(taskId); + mInterface.startSystemLockTaskMode(taskId); } pw.println("Activity manager is " + (mInterface.isInLockTaskMode() ? "" : "not ") + "in lockTaskMode"); diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java index 36f66d8c4e00..3573b8b3e2d6 100644 --- a/services/core/java/com/android/server/am/ActivityRecord.java +++ b/services/core/java/com/android/server/am/ActivityRecord.java @@ -17,6 +17,7 @@ package com.android.server.am; import static android.app.ActivityManager.ENABLE_TASK_SNAPSHOTS; +import static android.app.ActivityManager.LOCK_TASK_MODE_NONE; import static android.app.ActivityManager.StackId; import static android.app.ActivityManager.StackId.DOCKED_STACK_ID; import static android.app.ActivityManager.StackId.FREEFORM_WORKSPACE_STACK_ID; @@ -36,6 +37,8 @@ import static android.content.pm.ActivityInfo.FLAG_MULTIPROCESS; import static android.content.pm.ActivityInfo.FLAG_SHOW_FOR_ALL_USERS; import static android.content.pm.ActivityInfo.FLAG_STATE_NOT_NEEDED; import static android.content.pm.ActivityInfo.LAUNCH_MULTIPLE; +import static android.content.pm.ActivityInfo.LAUNCH_SINGLE_INSTANCE; +import static android.content.pm.ActivityInfo.LAUNCH_SINGLE_TASK; import static android.content.pm.ActivityInfo.LAUNCH_SINGLE_TOP; import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZEABLE; import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE; @@ -772,7 +775,10 @@ final class ActivityRecord implements AppWindowContainerListener { // Remove the activity from the old task and add it to the new task prevTask.removeActivity(this); - setTask(newTask, null); + // TODO(b/34179495): This should really be set to null in removeActivity() call above, + // but really bad things that I can't track down right now happen when I do that. + // So, setting it here now and will change later when there is time for investigation. + task = null; newTask.addActivityAtIndex(position, this); } @@ -820,19 +826,8 @@ final class ActivityRecord implements AppWindowContainerListener { } } - void setTask(TaskRecord newTask, TaskRecord taskToAffiliateWith) { - if (task != null && task.removeActivity(this) && task != newTask - && task.getStack() != null) { - task.getStack().removeTask(task, "setTask"); - } - task = newTask; - setTaskToAffiliateWith(taskToAffiliateWith); - } - void setTaskToAffiliateWith(TaskRecord taskToAffiliateWith) { - if (taskToAffiliateWith != null && - launchMode != ActivityInfo.LAUNCH_SINGLE_INSTANCE && - launchMode != ActivityInfo.LAUNCH_SINGLE_TASK) { + if (launchMode != LAUNCH_SINGLE_INSTANCE && launchMode != LAUNCH_SINGLE_TASK) { task.setTaskToAffiliateWith(taskToAffiliateWith); } } @@ -947,34 +942,43 @@ final class ActivityRecord implements AppWindowContainerListener { /** * @return whether this activity is currently allowed to enter PIP, throwing an exception if - * the activity is not currently visible. + * the activity is not currently visible and {@param noThrow} is not set. */ - boolean checkEnterPictureInPictureState(String caller) { + boolean checkEnterPictureInPictureState(String caller, boolean noThrow) { + boolean isCurrentAppLocked = mStackSupervisor.getLockTaskModeState() != LOCK_TASK_MODE_NONE; boolean isKeyguardLocked = service.isKeyguardLocked(); boolean hasPinnedStack = mStackSupervisor.getStack(PINNED_STACK_ID) != null; + // Don't return early if !isNotLocked, since we want to throw an exception if the activity + // is in an incorrect state + boolean isNotLocked = !isKeyguardLocked && !isCurrentAppLocked; switch (state) { case RESUMED: - // When visible, allow entering PiP if not on the lockscreen. If there is another - // PiP activity, the logic to handle that comes later in enterPictureInPictureMode() - return !isKeyguardLocked; + // When visible, allow entering PiP if not on the lockscreen and if the task is not + // locked + return isNotLocked; case PAUSING: case PAUSED: - // When pausing, only allow enter PiP if not on the lockscreen and there is not - // already an existing PiP activity - return !isKeyguardLocked && !hasPinnedStack && supportsPictureInPictureWhilePausing + // When pausing, then only allow enter PiP as in the resume state, and in addition, + // require that there is not an existing PiP activity and that the current system + // state supports entering PiP + return isNotLocked && !hasPinnedStack && supportsPictureInPictureWhilePausing && checkEnterPictureInPictureOnHideAppOpsState(); case STOPPING: // When stopping in a valid state, then only allow enter PiP as in the pause state. // Otherwise, fall through to throw an exception if the caller is trying to enter // PiP in an invalid stopping state. if (supportsPictureInPictureWhilePausing) { - return !isKeyguardLocked && !hasPinnedStack + return isNotLocked && !hasPinnedStack && checkEnterPictureInPictureOnHideAppOpsState(); } default: - throw new IllegalStateException(caller - + ": Current activity is not visible (state=" + state.name() + ") " - + "r=" + this); + if (noThrow) { + return false; + } else { + throw new IllegalStateException(caller + + ": Current activity is not visible (state=" + state.name() + ") " + + "r=" + this); + } } } @@ -1672,7 +1676,8 @@ final class ActivityRecord implements AppWindowContainerListener { if (!idle) { // Instead of doing the full stop routine here, let's just hide any activities // we now can, and let them stop when the normal idle happens. - mStackSupervisor.processStoppingActivitiesLocked(false); + mStackSupervisor.processStoppingActivitiesLocked(null /* idleActivity */, + false /* remove */, true /* processPausingActivities */); } else { // If this activity was already idle, then we now need to make sure we perform // the full stop of any activities that are waiting to do so. This is because @@ -2153,7 +2158,7 @@ final class ActivityRecord implements AppWindowContainerListener { // if the app is relaunched when it's stopped, and we're not resuming, // put it back into stopped state. if (stopped) { - getStack().addToStopping(this, true /* immediate */); + getStack().addToStopping(this, true /* scheduleIdle */, false /* idleDelayed */); } } diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index 47109f2090a2..10d108b6a677 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -1139,6 +1139,18 @@ final class ActivityStack extends ConfigurationContainer implements StackWindowL } /** + * Schedule a pause timeout in case the app doesn't respond. We don't give it much time because + * this directly impacts the responsiveness seen by the user. + */ + private void schedulePauseTimeout(ActivityRecord r) { + final Message msg = mHandler.obtainMessage(PAUSE_TIMEOUT_MSG); + msg.obj = r; + r.pauseTime = SystemClock.uptimeMillis(); + mHandler.sendMessageDelayed(msg, PAUSE_TIMEOUT); + if (DEBUG_PAUSE) Slog.v(TAG_PAUSE, "Waiting for pause to complete..."); + } + + /** * Start pausing the currently resumed activity. It is an error to call this if there * is already an activity being paused or there is no resumed activity. * @@ -1244,14 +1256,7 @@ final class ActivityStack extends ConfigurationContainer implements StackWindowL return false; } else { - // Schedule a pause timeout in case the app doesn't respond. - // We don't give it much time because this directly impacts the - // responsiveness seen by the user. - Message msg = mHandler.obtainMessage(PAUSE_TIMEOUT_MSG); - msg.obj = prev; - prev.pauseTime = SystemClock.uptimeMillis(); - mHandler.sendMessageDelayed(msg, PAUSE_TIMEOUT); - if (DEBUG_PAUSE) Slog.v(TAG_PAUSE, "Waiting for pause to complete..."); + schedulePauseTimeout(prev); return true; } @@ -1332,7 +1337,7 @@ final class ActivityStack extends ConfigurationContainer implements StackWindowL || mService.isSleepingOrShuttingDownLocked()) { // If we were visible then resumeTopActivities will release resources before // stopping. - addToStopping(prev, true /* immediate */); + addToStopping(prev, true /* scheduleIdle */, false /* idleDelayed */); } } else { if (DEBUG_PAUSE) Slog.v(TAG_PAUSE, "App died during pause, not stopping: " + prev); @@ -1398,7 +1403,7 @@ final class ActivityStack extends ConfigurationContainer implements StackWindowL mStackSupervisor.ensureActivitiesVisibleLocked(resuming, 0, !PRESERVE_WINDOWS); } - void addToStopping(ActivityRecord r, boolean immediate) { + void addToStopping(ActivityRecord r, boolean scheduleIdle, boolean idleDelayed) { if (!mStackSupervisor.mStoppingActivities.contains(r)) { mStackSupervisor.mStoppingActivities.add(r); } @@ -1409,11 +1414,14 @@ final class ActivityStack extends ConfigurationContainer implements StackWindowL // be cleared immediately. boolean forceIdle = mStackSupervisor.mStoppingActivities.size() > MAX_STOPPING_TO_FORCE || (r.frontOfTask && mTaskHistory.size() <= 1); - - if (immediate || forceIdle) { + if (scheduleIdle || forceIdle) { if (DEBUG_PAUSE) Slog.v(TAG_PAUSE, "Scheduling idle now: forceIdle=" - + forceIdle + "immediate=" + immediate); - mStackSupervisor.scheduleIdleLocked(); + + forceIdle + "immediate=" + !idleDelayed); + if (!idleDelayed) { + mStackSupervisor.scheduleIdleLocked(); + } else { + mStackSupervisor.scheduleIdleTimeoutLocked(r); + } } else { mStackSupervisor.checkReadyForSleepLocked(); } @@ -1993,7 +2001,14 @@ final class ActivityStack extends ConfigurationContainer implements StackWindowL if (visibleBehind == r) { releaseBackgroundResources(r); } else { - addToStopping(r, true /* immediate */); + // If this activity is in a state where it can currently enter + // picture-in-picture, then don't immediately schedule the idle now in case + // the activity tries to enterPictureInPictureMode() later. Otherwise, + // we will try and stop the activity next time idle is processed. + final boolean canEnterPictureInPicture = r.checkEnterPictureInPictureState( + "makeInvisible", true /* noThrow */); + addToStopping(r, true /* scheduleIdle */, + canEnterPictureInPicture /* idleDelayed */); } break; @@ -2760,7 +2775,12 @@ final class ActivityStack extends ConfigurationContainer implements StackWindowL // Slot the activity into the history stack and proceed if (DEBUG_ADD_REMOVE) Slog.i(TAG, "Adding activity " + r + " to stack to task " + task, new RuntimeException("here").fillInStackTrace()); - r.createWindowContainer(); + // TODO: Need to investigate if it is okay for the controller to already be created by the + // time we get to this point. I think it is, but need to double check. + // Use test in b/34179495 to trace the call path. + if (r.getWindowContainerController() == null) { + r.createWindowContainer(); + } task.setFrontOfTask(); if (!isHomeOrRecentsStack() || numActivities() > 0) { @@ -2937,8 +2957,7 @@ final class ActivityStack extends ConfigurationContainer implements StackWindowL + targetTask + " Callers=" + Debug.getCallers(4)); if (DEBUG_TASKS) Slog.v(TAG_TASKS, "Pushing next activity " + p + " out to target's task " + target.task); - p.setTask(targetTask, null); - targetTask.addActivityAtBottom(p); + p.reparent(targetTask, 0 /* position - bottom */, "resetTargetTaskIfNeeded"); } mWindowContainerController.positionChildAtBottom( @@ -3555,7 +3574,7 @@ final class ActivityStack extends ConfigurationContainer implements StackWindowL if (mode == FINISH_AFTER_VISIBLE && (r.visible || r.nowVisible) && next != null && !next.nowVisible) { if (!mStackSupervisor.mStoppingActivities.contains(r)) { - addToStopping(r, false /* immediate */); + addToStopping(r, false /* scheduleIdle */, false /* idleDelayed */); } if (DEBUG_STATES) Slog.v(TAG_STATES, "Moving to STOPPING: "+ r + " (finish requested)"); @@ -3809,7 +3828,7 @@ final class ActivityStack extends ConfigurationContainer implements StackWindowL mWindowManager.notifyAppRelaunchesCleared(r.appToken); } - private void removeTimeoutsForActivityLocked(ActivityRecord r) { + void removeTimeoutsForActivityLocked(ActivityRecord r) { mStackSupervisor.removeTimeoutsForActivityLocked(r); mHandler.removeMessages(PAUSE_TIMEOUT_MSG, r); mHandler.removeMessages(STOP_TIMEOUT_MSG, r); @@ -5074,6 +5093,7 @@ final class ActivityStack extends ConfigurationContainer implements StackWindowL // If the activity was previously pausing, then ensure we transfer that as well if (setPause) { mPausingActivity = r; + schedulePauseTimeout(r); } // Move the stack in which we are placing the activity to the front. The call will also // make sure the activity focus is set. @@ -5115,6 +5135,7 @@ final class ActivityStack extends ConfigurationContainer implements StackWindowL } if (wasPaused) { prevStack.mPausingActivity = null; + prevStack.removeTimeoutsForActivityLocked(r); } } diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index 33a9586617f0..da7dc7d8b0ee 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -163,6 +163,8 @@ import android.view.InputEvent; import android.view.Surface; import com.android.internal.content.ReferrerIntent; +import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.os.TransferPipe; import com.android.internal.statusbar.IStatusBarService; import com.android.internal.util.ArrayUtils; @@ -1713,7 +1715,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D // Checked. final ActivityRecord activityIdleInternalLocked(final IBinder token, boolean fromTimeout, - Configuration config) { + boolean processPausingActivities, Configuration config) { if (DEBUG_ALL) Slog.v(TAG, "Activity idle: " + token); ArrayList<ActivityRecord> finishes = null; @@ -1769,7 +1771,8 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D } // Atomically retrieve all of the other things to do. - final ArrayList<ActivityRecord> stops = processStoppingActivitiesLocked(true); + final ArrayList<ActivityRecord> stops = processStoppingActivitiesLocked(r, + true /* remove */, processPausingActivities); NS = stops != null ? stops.size() : 0; if ((NF = mFinishingActivities.size()) > 0) { finishes = new ArrayList<>(mFinishingActivities); @@ -2285,6 +2288,8 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D // pinned stack is recreated. See moveActivityToPinnedStackLocked(). task.setTaskToReturnTo(isFullscreenStackVisible && onTop ? APPLICATION_ACTIVITY_TYPE : HOME_ACTIVITY_TYPE); + MetricsLogger.action(mService.mContext, + MetricsEvent.ACTION_PICTURE_IN_PICTURE_EXPANDED_TO_FULLSCREEN); } moveTaskToStackLocked(tasks.get(i).taskId, FULLSCREEN_WORKSPACE_STACK_ID, onTop, onTop /*forceFocus*/, @@ -2697,6 +2702,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D // Reset the paused activity on the previous stack if (wasPaused) { prevStack.mPausingActivity = null; + prevStack.removeTimeoutsForActivityLocked(r); } // If the task had focus before (or we're requested to move focus), @@ -3375,7 +3381,8 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D return mService.mUserController.isCurrentProfileLocked(userId); } - final ArrayList<ActivityRecord> processStoppingActivitiesLocked(boolean remove) { + final ArrayList<ActivityRecord> processStoppingActivitiesLocked(ActivityRecord idleActivity, + boolean remove, boolean processPausingActivities) { ArrayList<ActivityRecord> stops = null; final boolean nowVisible = allResumedActivitiesVisible(); @@ -3400,6 +3407,14 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D } } if ((!waitingVisible || mService.isSleepingOrShuttingDownLocked()) && remove) { + if (!processPausingActivities && s.state == PAUSING) { + // Defer processing pausing activities in this iteration and reschedule + // a delayed idle to reprocess it again + removeTimeoutsForActivityLocked(idleActivity); + scheduleIdleTimeoutLocked(idleActivity); + continue; + } + if (DEBUG_STATES) Slog.v(TAG, "Ready to stop: " + s); if (stops == null) { stops = new ArrayList<>(); @@ -4109,9 +4124,10 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D super(looper); } - void activityIdleInternal(ActivityRecord r) { + void activityIdleInternal(ActivityRecord r, boolean processPausingActivities) { synchronized (mService) { - activityIdleInternalLocked(r != null ? r.appToken : null, true, null); + activityIdleInternalLocked(r != null ? r.appToken : null, true /* fromTimeout */, + processPausingActivities, null); } } @@ -4146,11 +4162,13 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D } // We don't at this point know if the activity is fullscreen, // so we need to be conservative and assume it isn't. - activityIdleInternal((ActivityRecord)msg.obj); + activityIdleInternal((ActivityRecord) msg.obj, + true /* processPausingActivities */); } break; case IDLE_NOW_MSG: { if (DEBUG_IDLE) Slog.d(TAG_IDLE, "handleMessage: IDLE_NOW_MSG: r=" + msg.obj); - activityIdleInternal((ActivityRecord)msg.obj); + activityIdleInternal((ActivityRecord) msg.obj, + false /* processPausingActivities */); } break; case RESUME_TOP_ACTIVITY_MSG: { synchronized (mService) { diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java index 73ef88b5c9a8..f5874af74657 100644 --- a/services/core/java/com/android/server/am/ActivityStarter.java +++ b/services/core/java/com/android/server/am/ActivityStarter.java @@ -1615,7 +1615,7 @@ class ActivityStarter { mNewTaskInfo != null ? mNewTaskInfo : mStartActivity.info, mNewTaskIntent != null ? mNewTaskIntent : mIntent, mVoiceSession, mVoiceInteractor, !mLaunchTaskBehind /* toTop */, mStartActivity.mActivityType); - mStartActivity.setTask(task, taskToAffiliate); + addOrReparentStartingActivity(task, "setTaskFromReuseOrCreateNewTask - mReuseTask"); if (mLaunchBounds != null) { final int stackId = mTargetStack.mStackId; if (StackId.resizeStackWithLaunchBounds(stackId)) { @@ -1625,11 +1625,14 @@ class ActivityStarter { mStartActivity.task.updateOverrideConfiguration(mLaunchBounds); } } - if (DEBUG_TASKS) Slog.v(TAG_TASKS, - "Starting new activity " + - mStartActivity + " in new task " + mStartActivity.task); + if (DEBUG_TASKS) Slog.v(TAG_TASKS, "Starting new activity " + mStartActivity + + " in new task " + mStartActivity.task); } else { - mStartActivity.setTask(mReuseTask, taskToAffiliate); + addOrReparentStartingActivity(mReuseTask, "setTaskFromReuseOrCreateNewTask"); + } + + if (taskToAffiliate != null) { + mStartActivity.setTaskToAffiliateWith(taskToAffiliate); } if (mSupervisor.isLockTaskModeViolation(mStartActivity.task)) { @@ -1719,7 +1722,7 @@ class ActivityStarter { // An existing activity is starting this new activity, so we want to keep the new one in // the same task as the one that is starting it. - mStartActivity.setTask(sourceTask, null); + addOrReparentStartingActivity(sourceTask, "setTaskFromSourceRecord"); if (DEBUG_TASKS) Slog.v(TAG_TASKS, "Starting new activity " + mStartActivity + " in existing task " + mStartActivity.task + " from source " + mSourceRecord); return START_SUCCESS; @@ -1752,7 +1755,8 @@ class ActivityStarter { // Check whether we should actually launch the new activity in to the task, // or just reuse the current activity on top. ActivityRecord top = mInTask.getTopActivity(); - if (top != null && top.realActivity.equals(mStartActivity.realActivity) && top.userId == mStartActivity.userId) { + if (top != null && top.realActivity.equals(mStartActivity.realActivity) + && top.userId == mStartActivity.userId) { if ((mLaunchFlags & FLAG_ACTIVITY_SINGLE_TOP) != 0 || mLaunchSingleTop || mLaunchSingleTask) { ActivityStack.logStartActivity(AM_NEW_INTENT, top, top.task); @@ -1761,7 +1765,8 @@ class ActivityStarter { // anything if that is the case, so this is it! return START_RETURN_INTENT_TO_CALLER; } - top.deliverNewIntentLocked(mCallingUid, mStartActivity.intent, mStartActivity.launchedFromPackage); + top.deliverNewIntentLocked(mCallingUid, mStartActivity.intent, + mStartActivity.launchedFromPackage); return START_DELIVERED_TO_TOP; } } @@ -1773,9 +1778,9 @@ class ActivityStarter { return START_TASK_TO_FRONT; } - mStartActivity.setTask(mInTask, null); - if (DEBUG_TASKS) Slog.v(TAG_TASKS, - "Starting new activity " + mStartActivity + " in explicit task " + mStartActivity.task); + addOrReparentStartingActivity(mInTask, "setTaskFromInTask"); + if (DEBUG_TASKS) Slog.v(TAG_TASKS, "Starting new activity " + mStartActivity + + " in explicit task " + mStartActivity.task); return START_SUCCESS; } @@ -1790,10 +1795,18 @@ class ActivityStarter { final TaskRecord task = (prev != null) ? prev.task : mTargetStack.createTaskRecord( mSupervisor.getNextTaskIdForUserLocked(mStartActivity.userId), mStartActivity.info, mIntent, null, null, true, mStartActivity.mActivityType); - mStartActivity.setTask(task, null); - mStartActivity.task.getStack().positionChildWindowContainerAtTop(mStartActivity.task); - if (DEBUG_TASKS) Slog.v(TAG_TASKS, - "Starting new activity " + mStartActivity + " in new guessed " + mStartActivity.task); + addOrReparentStartingActivity(task, "setTaskToCurrentTopOrCreateNewTask"); + mTargetStack.positionChildWindowContainerAtTop(task); + if (DEBUG_TASKS) Slog.v(TAG_TASKS, "Starting new activity " + mStartActivity + + " in new guessed " + mStartActivity.task); + } + + private void addOrReparentStartingActivity(TaskRecord parent, String reason) { + if (mStartActivity.task == null || mStartActivity.task == parent) { + parent.addActivityToTop(mStartActivity); + } else { + mStartActivity.reparent(parent, parent.mActivities.size() /* top */, reason); + } } private int adjustLaunchFlagsToDocumentMode(ActivityRecord r, boolean launchSingleInstance, diff --git a/services/core/java/com/android/server/am/ProcessStatsService.java b/services/core/java/com/android/server/am/ProcessStatsService.java index 8d2b1c2fda79..d210ed76eca8 100644 --- a/services/core/java/com/android/server/am/ProcessStatsService.java +++ b/services/core/java/com/android/server/am/ProcessStatsService.java @@ -28,6 +28,8 @@ import android.util.AtomicFile; import android.util.Slog; import android.util.SparseArray; import android.util.TimeUtils; + +import com.android.internal.annotations.GuardedBy; import com.android.internal.app.procstats.DumpUtils; import com.android.internal.app.procstats.IProcessStats; import com.android.internal.app.procstats.ProcessState; @@ -78,6 +80,10 @@ public final class ProcessStatsService extends IProcessStats.Stub { boolean mPendingWriteCommitted; long mLastWriteTime; + /** For CTS to inject the screen state. */ + @GuardedBy("mAm") + Boolean mInjectedScreenState; + public ProcessStatsService(ActivityManagerService am, File file) { mAm = am; mBaseDir = file; @@ -128,6 +134,9 @@ public final class ProcessStatsService extends IProcessStats.Stub { public boolean setMemFactorLocked(int memFactor, boolean screenOn, long now) { mMemFactorLowered = memFactor < mLastMemOnlyState; mLastMemOnlyState = memFactor; + if (mInjectedScreenState != null) { + screenOn = mInjectedScreenState; + } if (screenOn) { memFactor += ProcessStats.ADJ_SCREEN_ON; } @@ -573,7 +582,9 @@ public final class ProcessStatsService extends IProcessStats.Stub { pw.println(" [--checkin|-c|--csv] [--csv-screen] [--csv-proc] [--csv-mem]"); pw.println(" [--details] [--full-details] [--current] [--hours N] [--last N]"); pw.println(" [--max N] --active] [--commit] [--reset] [--clear] [--write] [-h]"); - pw.println(" [--start-testing] [--stop-testing] [<package.name>]"); + pw.println(" [--start-testing] [--stop-testing] "); + pw.println(" [--pretend-screen-on] [--pretend-screen-off] [--stop-pretend-screen]"); + pw.println(" [<package.name>]"); pw.println(" --checkin: perform a checkin: print and delete old committed states."); pw.println(" -c: print only state in checkin format."); pw.println(" --csv: output data suitable for putting in a spreadsheet."); @@ -595,6 +606,9 @@ public final class ProcessStatsService extends IProcessStats.Stub { pw.println(" --read: replace current stats with last-written stats."); pw.println(" --start-testing: clear all stats and starting high frequency pss sampling."); pw.println(" --stop-testing: stop high frequency pss sampling."); + pw.println(" --pretend-screen-on: pretend screen is on."); + pw.println(" --pretend-screen-off: pretend screen is off."); + pw.println(" --stop-pretend-screen: forget \"pretend screen\" and use the real state."); pw.println(" -a: print everything."); pw.println(" -h: print this help text."); pw.println(" <package.name>: optional name of package to filter output by."); @@ -800,6 +814,21 @@ public final class ProcessStatsService extends IProcessStats.Stub { pw.println("Stopped high frequency sampling."); quit = true; } + } else if ("--pretend-screen-on".equals(arg)) { + synchronized (mAm) { + mInjectedScreenState = true; + } + quit = true; + } else if ("--pretend-screen-off".equals(arg)) { + synchronized (mAm) { + mInjectedScreenState = false; + } + quit = true; + } else if ("--stop-pretend-screen".equals(arg)) { + synchronized (mAm) { + mInjectedScreenState = null; + } + quit = true; } else if ("-h".equals(arg)) { dumpHelp(pw); return; diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java index fef4073922c6..9e09cbbfb0c7 100644 --- a/services/core/java/com/android/server/am/TaskRecord.java +++ b/services/core/java/com/android/server/am/TaskRecord.java @@ -51,6 +51,7 @@ import android.util.Slog; import com.android.internal.app.IVoiceInteractor; import com.android.internal.util.XmlUtils; +import com.android.server.wm.AppWindowContainerController; import com.android.server.wm.TaskWindowContainerController; import com.android.server.wm.TaskWindowContainerListener; @@ -1033,6 +1034,12 @@ final class TaskRecord extends ConfigurationContainer implements TaskWindowConta * be in the current task or unparented to any task. */ void addActivityAtIndex(int index, ActivityRecord r) { + if (r.task != null && r.task != this) { + throw new IllegalArgumentException("Can not add r=" + " to task=" + this + + " current parent=" + r.task); + } + r.task = this; + // Remove r first, and if it wasn't already in the list and it's fullscreen, count it. if (!mActivities.remove(r) && r.fullscreen) { // Was not previously in list. @@ -1063,6 +1070,7 @@ final class TaskRecord extends ConfigurationContainer implements TaskWindowConta } } + index = Math.min(size, index); mActivities.add(index, r); updateEffectiveIntent(); if (r.isPersistable()) { @@ -1071,7 +1079,12 @@ final class TaskRecord extends ConfigurationContainer implements TaskWindowConta // Sync. with window manager updateOverrideConfigurationFromLaunchBounds(); - mWindowContainerController.positionChildAt(r.getWindowContainerController(), index); + final AppWindowContainerController appController = r.getWindowContainerController(); + if (appController != null) { + // Only attempt to move in WM if the child has a controller. It is possible we haven't + // created controller for the activity we are starting yet. + mWindowContainerController.positionChildAt(appController, index); + } r.onOverrideConfigurationSent(); } diff --git a/services/core/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java b/services/core/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java index 08a333230793..017c5fb4d4ec 100644 --- a/services/core/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java +++ b/services/core/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java @@ -66,9 +66,9 @@ public class UpstreamNetworkMonitor { public static final int EVENT_ON_LINKPROPERTIES = 3; public static final int EVENT_ON_LOST = 4; - private static final int LISTEN_ALL = 1; - private static final int TRACK_DEFAULT = 2; - private static final int MOBILE_REQUEST = 3; + private static final int CALLBACK_LISTEN_ALL = 1; + private static final int CALLBACK_TRACK_DEFAULT = 2; + private static final int CALLBACK_MOBILE_REQUEST = 3; private final Context mContext; private final StateMachine mTarget; @@ -98,10 +98,10 @@ public class UpstreamNetworkMonitor { final NetworkRequest listenAllRequest = new NetworkRequest.Builder() .clearCapabilities().build(); - mListenAllCallback = new UpstreamNetworkCallback(LISTEN_ALL); + mListenAllCallback = new UpstreamNetworkCallback(CALLBACK_LISTEN_ALL); cm().registerNetworkCallback(listenAllRequest, mListenAllCallback); - mDefaultNetworkCallback = new UpstreamNetworkCallback(TRACK_DEFAULT); + mDefaultNetworkCallback = new UpstreamNetworkCallback(CALLBACK_TRACK_DEFAULT); cm().registerDefaultNetworkCallback(mDefaultNetworkCallback); } @@ -136,30 +136,25 @@ public class UpstreamNetworkMonitor { return; } - final NetworkRequest.Builder builder = new NetworkRequest.Builder() - .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); - if (mDunRequired) { - builder.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED) - .addCapability(NetworkCapabilities.NET_CAPABILITY_DUN); - } else { - builder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET); - } - final NetworkRequest mobileUpstreamRequest = builder.build(); + // The following use of the legacy type system cannot be removed until + // after upstream selection no longer finds networks by legacy type. + // See also http://b/34364553 . + final int legacyType = mDunRequired ? TYPE_MOBILE_DUN : TYPE_MOBILE_HIPRI; + + final NetworkRequest mobileUpstreamRequest = new NetworkRequest.Builder() + .setCapabilities(ConnectivityManager.networkCapabilitiesForType(legacyType)) + .build(); // The existing default network and DUN callbacks will be notified. // Therefore, to avoid duplicate notifications, we only register a no-op. - mMobileNetworkCallback = new UpstreamNetworkCallback(MOBILE_REQUEST); + mMobileNetworkCallback = new UpstreamNetworkCallback(CALLBACK_MOBILE_REQUEST); // TODO: Change the timeout from 0 (no onUnavailable callback) to some // moderate callback timeout. This might be useful for updating some UI. // Additionally, we log a message to aid in any subsequent debugging. Log.d(TAG, "requesting mobile upstream network: " + mobileUpstreamRequest); - // The following use of the legacy type system cannot be removed until - // after upstream selection no longer finds networks by legacy type. - // See also b/34364553. - final int apnType = mDunRequired ? TYPE_MOBILE_DUN : TYPE_MOBILE_HIPRI; - cm().requestNetwork(mobileUpstreamRequest, mMobileNetworkCallback, 0, apnType); + cm().requestNetwork(mobileUpstreamRequest, mMobileNetworkCallback, 0, legacyType); } public void releaseMobileNetworkRequest() { @@ -184,17 +179,18 @@ public class UpstreamNetworkMonitor { // Always request whatever extra information we can, in case this // was already up when start() was called, in which case we would // not have been notified of any information that had not changed. - final NetworkCallback cb = - (callbackType == TRACK_DEFAULT) ? mDefaultNetworkCallback : - (callbackType == MOBILE_REQUEST) ? mMobileNetworkCallback : null; - if (cb != null) { - final ConnectivityManager cm = cm(); - cm.requestNetworkCapabilities(mDefaultNetworkCallback); - cm.requestLinkProperties(mDefaultNetworkCallback); - } - - if (callbackType == TRACK_DEFAULT) { - mCurrentDefault = network; + switch (callbackType) { + case CALLBACK_LISTEN_ALL: + break; + case CALLBACK_TRACK_DEFAULT: + cm().requestNetworkCapabilities(mDefaultNetworkCallback); + cm().requestLinkProperties(mDefaultNetworkCallback); + mCurrentDefault = network; + break; + case CALLBACK_MOBILE_REQUEST: + cm().requestNetworkCapabilities(mMobileNetworkCallback); + cm().requestLinkProperties(mMobileNetworkCallback); + break; } // Requesting updates for mListenAllCallback is not currently possible @@ -262,7 +258,7 @@ public class UpstreamNetworkMonitor { } private void handleLost(int callbackType, Network network) { - if (callbackType == TRACK_DEFAULT) { + if (callbackType == CALLBACK_TRACK_DEFAULT) { mCurrentDefault = null; // Receiving onLost() for a default network does not necessarily // mean the network is gone. We wait for a separate notification diff --git a/services/core/java/com/android/server/display/NightDisplayService.java b/services/core/java/com/android/server/display/NightDisplayService.java index 0357b1b42935..7237fdbc945e 100644 --- a/services/core/java/com/android/server/display/NightDisplayService.java +++ b/services/core/java/com/android/server/display/NightDisplayService.java @@ -111,7 +111,7 @@ public final class NightDisplayService extends SystemService getLocalService(DisplayTransformManager.class); if (enabled) { dtm.setColorMatrix(LEVEL_COLOR_MATRIX_NIGHT_DISPLAY, MATRIX_IDENTITY); - } else if (mController.isActivated()) { + } else if (mController != null && mController.isActivated()) { dtm.setColorMatrix(LEVEL_COLOR_MATRIX_NIGHT_DISPLAY, MATRIX_NIGHT); } } diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 37fff68750d2..180f6c9ae963 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -16,17 +16,24 @@ package com.android.server.policy; +import static android.Manifest.permission.INTERNAL_SYSTEM_WINDOW; +import static android.Manifest.permission.SYSTEM_ALERT_WINDOW; import static android.app.ActivityManager.StackId.DOCKED_STACK_ID; import static android.app.ActivityManager.StackId.FREEFORM_WORKSPACE_STACK_ID; import static android.app.ActivityManager.StackId.HOME_STACK_ID; +import static android.app.AppOpsManager.OP_SYSTEM_ALERT_WINDOW; +import static android.app.AppOpsManager.OP_TOAST_WINDOW; import static android.content.Context.DISPLAY_SERVICE; import static android.content.Context.WINDOW_SERVICE; import static android.content.pm.PackageManager.FEATURE_PICTURE_IN_PICTURE; import static android.content.pm.PackageManager.FEATURE_TELEVISION; import static android.content.pm.PackageManager.FEATURE_WATCH; +import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static android.content.res.Configuration.EMPTY; import static android.content.res.Configuration.UI_MODE_TYPE_CAR; import static android.content.res.Configuration.UI_MODE_TYPE_MASK; +import static android.os.Build.VERSION_CODES.M; +import static android.os.Build.VERSION_CODES.O; import static android.view.WindowManager.DOCKED_LEFT; import static android.view.WindowManager.DOCKED_RIGHT; import static android.view.WindowManager.DOCKED_TOP; @@ -63,21 +70,14 @@ import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING; import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; import static android.view.WindowManager.LayoutParams.SOFT_INPUT_MASK_ADJUST; import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY; -import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ABOVE_SUB_PANEL; -import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG; -import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA; -import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA_OVERLAY; -import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_PANEL; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; -import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL; +import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; import static android.view.WindowManager.LayoutParams.TYPE_BOOT_PROGRESS; import static android.view.WindowManager.LayoutParams.TYPE_DISPLAY_OVERLAY; import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER; -import static android.view.WindowManager.LayoutParams.TYPE_DRAG; import static android.view.WindowManager.LayoutParams.TYPE_DREAM; import static android.view.WindowManager.LayoutParams.TYPE_INPUT_CONSUMER; import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD; -import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG; import static android.view.WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG; import static android.view.WindowManager.LayoutParams.TYPE_MAGNIFICATION_OVERLAY; import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR; @@ -103,8 +103,11 @@ import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION; import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION_STARTING; import static android.view.WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY; import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER; +import static android.view.WindowManager.LayoutParams.isSystemAlertWindowType; import static android.view.WindowManager.TAKE_SCREENSHOT_FULLSCREEN; import static android.view.WindowManager.TAKE_SCREENSHOT_SELECTED_REGION; +import static android.view.WindowManagerGlobal.ADD_OKAY; +import static android.view.WindowManagerGlobal.ADD_PERMISSION_DENIED; import static android.view.WindowManagerPolicy.WindowManagerFuncs.CAMERA_LENS_COVERED; import static android.view.WindowManagerPolicy.WindowManagerFuncs.CAMERA_LENS_COVER_ABSENT; import static android.view.WindowManagerPolicy.WindowManagerFuncs.CAMERA_LENS_UNCOVERED; @@ -156,7 +159,6 @@ import android.media.session.MediaSessionLegacyHelper; import android.os.Binder; import android.os.Build; import android.os.Bundle; -import android.os.Debug; import android.os.FactoryTest; import android.os.Handler; import android.os.IBinder; @@ -314,12 +316,6 @@ public class PhoneWindowManager implements WindowManagerPolicy { // Nav bar is always translucent when the freeform stack is visible, otherwise always opaque. static final int NAV_BAR_TRANSLUCENT_WHEN_FREEFORM_OPAQUE_OTHERWISE = 1; - static final int APPLICATION_MEDIA_SUBLAYER = -2; - static final int APPLICATION_MEDIA_OVERLAY_SUBLAYER = -1; - static final int APPLICATION_PANEL_SUBLAYER = 1; - static final int APPLICATION_SUB_PANEL_SUBLAYER = 2; - static final int APPLICATION_ABOVE_SUB_PANEL_SUBLAYER = 3; - static public final String SYSTEM_DIALOG_REASON_KEY = "reason"; static public final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions"; static public final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps"; @@ -2315,86 +2311,82 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (type < FIRST_SYSTEM_WINDOW || type > LAST_SYSTEM_WINDOW) { // Window manager will make sure these are okay. - return WindowManagerGlobal.ADD_OKAY; - } - String permission = null; - switch (type) { - case TYPE_TOAST: - // XXX right now the app process has complete control over - // this... should introduce a token to let the system - // monitor/control what they are doing. - outAppOp[0] = AppOpsManager.OP_TOAST_WINDOW; - break; - case TYPE_DREAM: - case TYPE_INPUT_METHOD: - case TYPE_WALLPAPER: - case TYPE_PRESENTATION: - case TYPE_PRIVATE_PRESENTATION: - case TYPE_VOICE_INTERACTION: - case TYPE_ACCESSIBILITY_OVERLAY: - case TYPE_QS_DIALOG: - // The window manager will check these. - break; - case TYPE_PHONE: - case TYPE_PRIORITY_PHONE: - case TYPE_SYSTEM_ALERT: - case TYPE_SYSTEM_ERROR: - case TYPE_SYSTEM_OVERLAY: - permission = android.Manifest.permission.SYSTEM_ALERT_WINDOW; - outAppOp[0] = AppOpsManager.OP_SYSTEM_ALERT_WINDOW; - break; - default: - permission = android.Manifest.permission.INTERNAL_SYSTEM_WINDOW; - } - if (permission != null) { - if (android.Manifest.permission.SYSTEM_ALERT_WINDOW.equals(permission)) { - final int callingUid = Binder.getCallingUid(); - // system processes will be automatically allowed privilege to draw - if (callingUid == Process.SYSTEM_UID) { - return WindowManagerGlobal.ADD_OKAY; - } - - // check if user has enabled this operation. SecurityException will be thrown if - // this app has not been allowed by the user - final int mode = mAppOpsManager.checkOpNoThrow(outAppOp[0], callingUid, - attrs.packageName); - switch (mode) { - case AppOpsManager.MODE_ALLOWED: - case AppOpsManager.MODE_IGNORED: - // although we return ADD_OKAY for MODE_IGNORED, the added window will - // actually be hidden in WindowManagerService - return WindowManagerGlobal.ADD_OKAY; - case AppOpsManager.MODE_ERRORED: - try { - ApplicationInfo appInfo = mContext.getPackageManager() - .getApplicationInfo(attrs.packageName, - UserHandle.getUserId(callingUid)); - // Don't crash legacy apps - if (appInfo.targetSdkVersion < Build.VERSION_CODES.M) { - return WindowManagerGlobal.ADD_OKAY; - } - } catch (PackageManager.NameNotFoundException e) { - /* ignore */ - } - return WindowManagerGlobal.ADD_PERMISSION_DENIED; - default: - // in the default mode, we will make a decision here based on - // checkCallingPermission() - if (mContext.checkCallingPermission(permission) != - PackageManager.PERMISSION_GRANTED) { - return WindowManagerGlobal.ADD_PERMISSION_DENIED; - } else { - return WindowManagerGlobal.ADD_OKAY; - } + return ADD_OKAY; + } + + if (!isSystemAlertWindowType(type)) { + switch (type) { + case TYPE_TOAST: + // Only apps that target older than O SDK can add window without a token, after + // that we require a token so apps cannot add toasts directly as the token is + // added by the notification system. + // Window manager does the checking for this. + outAppOp[0] = OP_TOAST_WINDOW; + return ADD_OKAY; + case TYPE_DREAM: + case TYPE_INPUT_METHOD: + case TYPE_WALLPAPER: + case TYPE_PRESENTATION: + case TYPE_PRIVATE_PRESENTATION: + case TYPE_VOICE_INTERACTION: + case TYPE_ACCESSIBILITY_OVERLAY: + case TYPE_QS_DIALOG: + // The window manager will check these. + return ADD_OKAY; + } + return mContext.checkCallingOrSelfPermission(INTERNAL_SYSTEM_WINDOW) + == PERMISSION_GRANTED ? ADD_OKAY : ADD_PERMISSION_DENIED; + } + + // Things get a little more interesting for alert windows... + outAppOp[0] = OP_SYSTEM_ALERT_WINDOW; + + final int callingUid = Binder.getCallingUid(); + // system processes will be automatically granted privilege to draw + if (UserHandle.getAppId(callingUid) == Process.SYSTEM_UID) { + return ADD_OKAY; + } + + ApplicationInfo appInfo; + try { + appInfo = mContext.getPackageManager().getApplicationInfo(attrs.packageName, + UserHandle.getUserId(callingUid)); + } catch (PackageManager.NameNotFoundException e) { + appInfo = null; + } + + if (appInfo == null || (type != TYPE_APPLICATION_OVERLAY && appInfo.targetSdkVersion >= O)) { + /** + * Apps targeting >= {@link Build.VERSION_CODES#O} are required to hold + * {@link android.Manifest.permission#INTERNAL_SYSTEM_WINDOW} (system signature apps) + * permission to add alert windows that aren't + * {@link android.view.WindowManager.LayoutParams#TYPE_APPLICATION_OVERLAY}. + */ + return (mContext.checkCallingPermission(INTERNAL_SYSTEM_WINDOW) == PERMISSION_GRANTED) + ? ADD_OKAY : ADD_PERMISSION_DENIED; + } + + // check if user has enabled this operation. SecurityException will be thrown if this app + // has not been allowed by the user + final int mode = mAppOpsManager.checkOpNoThrow(outAppOp[0], callingUid, attrs.packageName); + switch (mode) { + case AppOpsManager.MODE_ALLOWED: + case AppOpsManager.MODE_IGNORED: + // although we return ADD_OKAY for MODE_IGNORED, the added window will + // actually be hidden in WindowManagerService + return ADD_OKAY; + case AppOpsManager.MODE_ERRORED: + // Don't crash legacy apps + if (appInfo.targetSdkVersion < M) { + return ADD_OKAY; } - } - - if (mContext.checkCallingOrSelfPermission(permission) - != PackageManager.PERMISSION_GRANTED) { - return WindowManagerGlobal.ADD_PERMISSION_DENIED; - } + return ADD_PERMISSION_DENIED; + default: + // in the default mode, we will make a decision here based on + // checkCallingPermission() + return (mContext.checkCallingPermission(SYSTEM_ALERT_WINDOW) == PERMISSION_GRANTED) + ? ADD_OKAY : ADD_PERMISSION_DENIED; } - return WindowManagerGlobal.ADD_OKAY; } @Override @@ -2440,9 +2432,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } // Check if third party app has set window to system window type. - return mContext.checkCallingOrSelfPermission( - android.Manifest.permission.INTERNAL_SYSTEM_WINDOW) - != PackageManager.PERMISSION_GRANTED; + return mContext.checkCallingOrSelfPermission(INTERNAL_SYSTEM_WINDOW) != PERMISSION_GRANTED; } @Override @@ -2591,130 +2581,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } - /** {@inheritDoc} */ - @Override - public int windowTypeToLayerLw(int type) { - if (type >= FIRST_APPLICATION_WINDOW && type <= LAST_APPLICATION_WINDOW) { - return 2; - } - switch (type) { - case TYPE_WALLPAPER: - // wallpaper is at the bottom, though the window manager may move it. - return 1; - case TYPE_PRESENTATION: - case TYPE_PRIVATE_PRESENTATION: - return 2; - case TYPE_DOCK_DIVIDER: - return 2; - case TYPE_QS_DIALOG: - return 2; - case TYPE_PHONE: - return 3; - case TYPE_SEARCH_BAR: - case TYPE_VOICE_INTERACTION_STARTING: - return 4; - case TYPE_VOICE_INTERACTION: - // voice interaction layer is almost immediately above apps. - return 5; - case TYPE_INPUT_CONSUMER: - return 6; - case TYPE_SYSTEM_DIALOG: - return 7; - case TYPE_TOAST: - // toasts and the plugged-in battery thing - return 8; - case TYPE_PRIORITY_PHONE: - // SIM errors and unlock. Not sure if this really should be in a high layer. - return 9; - case TYPE_DREAM: - // used for Dreams (screensavers with TYPE_DREAM windows) - return 10; - case TYPE_SYSTEM_ALERT: - // like the ANR / app crashed dialogs - return 11; - case TYPE_INPUT_METHOD: - // on-screen keyboards and other such input method user interfaces go here. - return 12; - case TYPE_INPUT_METHOD_DIALOG: - // on-screen keyboards and other such input method user interfaces go here. - return 13; - case TYPE_STATUS_BAR_SUB_PANEL: - return 15; - case TYPE_STATUS_BAR: - return 16; - case TYPE_STATUS_BAR_PANEL: - return 17; - case TYPE_KEYGUARD_DIALOG: - return 18; - case TYPE_VOLUME_OVERLAY: - // the on-screen volume indicator and controller shown when the user - // changes the device volume - return 19; - case TYPE_SYSTEM_OVERLAY: - // the on-screen volume indicator and controller shown when the user - // changes the device volume - return 20; - case TYPE_NAVIGATION_BAR: - // the navigation bar, if available, shows atop most things - return 21; - case TYPE_NAVIGATION_BAR_PANEL: - // some panels (e.g. search) need to show on top of the navigation bar - return 22; - case TYPE_SCREENSHOT: - // screenshot selection layer shouldn't go above system error, but it should cover - // navigation bars at the very least. - return 23; - case TYPE_SYSTEM_ERROR: - // system-level error dialogs - return 24; - case TYPE_MAGNIFICATION_OVERLAY: - // used to highlight the magnified portion of a display - return 25; - case TYPE_DISPLAY_OVERLAY: - // used to simulate secondary display devices - return 26; - case TYPE_DRAG: - // the drag layer: input for drag-and-drop is associated with this window, - // which sits above all other focusable windows - return 27; - case TYPE_ACCESSIBILITY_OVERLAY: - // overlay put by accessibility services to intercept user interaction - return 28; - case TYPE_SECURE_SYSTEM_OVERLAY: - return 29; - case TYPE_BOOT_PROGRESS: - return 30; - case TYPE_POINTER: - // the (mouse) pointer layer - return 31; - } - Log.e(TAG, "Unknown window type: " + type); - return 2; - } - - /** {@inheritDoc} */ - @Override - public int subWindowTypeToLayerLw(int type) { - switch (type) { - case TYPE_APPLICATION_PANEL: - case TYPE_APPLICATION_ATTACHED_DIALOG: - return APPLICATION_PANEL_SUBLAYER; - case TYPE_APPLICATION_MEDIA: - return APPLICATION_MEDIA_SUBLAYER; - case TYPE_APPLICATION_MEDIA_OVERLAY: - return APPLICATION_MEDIA_OVERLAY_SUBLAYER; - case TYPE_APPLICATION_SUB_PANEL: - return APPLICATION_SUB_PANEL_SUBLAYER; - case TYPE_APPLICATION_ABOVE_SUB_PANEL: - return APPLICATION_ABOVE_SUB_PANEL_SUBLAYER; - } - Log.e(TAG, "Unknown sub-window type: " + type); - return 0; - } - @Override public int getMaxWallpaperLayer() { - return windowTypeToLayerLw(TYPE_STATUS_BAR); + return getWindowLayerFromTypeLw(TYPE_STATUS_BAR); } private int getNavigationBarWidth(int rotation, int uiMode) { @@ -2797,8 +2666,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { return false; default: // Hide only windows below the keyguard host window. - return windowTypeToLayerLw(win.getBaseType()) - < windowTypeToLayerLw(TYPE_STATUS_BAR); + return getWindowLayerLw(win) < getWindowLayerFromTypeLw(TYPE_STATUS_BAR); } } @@ -3043,7 +2911,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { "PhoneWindowManager"); break; } - return WindowManagerGlobal.ADD_OKAY; + return ADD_OKAY; } /** {@inheritDoc} */ @@ -7837,8 +7705,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { immersiveSticky = (vis & View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) != 0; final boolean navAllowedHidden = immersive || immersiveSticky; - if (hideNavBarSysui && !navAllowedHidden && windowTypeToLayerLw(win.getBaseType()) - > windowTypeToLayerLw(TYPE_INPUT_CONSUMER)) { + if (hideNavBarSysui && !navAllowedHidden + && getWindowLayerLw(win) > getWindowLayerFromTypeLw(TYPE_INPUT_CONSUMER)) { // We can't hide the navbar from this window otherwise the input consumer would not get // the input events. vis = (vis & ~View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java index fedd55a9b5b6..83e77ec3f9ae 100644 --- a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java +++ b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java @@ -630,6 +630,10 @@ public class WebViewUpdateServiceImpl { */ public boolean isValidProvider(WebViewProviderInfo configInfo, PackageInfo packageInfo) { + // Ensure the provider targets this framework release (or a later one). + if (!UserPackage.hasCorrectTargetSdkVersion(packageInfo)) { + return false; + } if (!versionCodeGE(packageInfo.versionCode, getMinimumVersionCode()) && !mSystemInterface.systemIsDebuggable()) { // Webview providers may be downgraded arbitrarily low, prevent that by enforcing diff --git a/services/core/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java index 49ffa22b53e3..f7a9e41ba706 100644 --- a/services/core/java/com/android/server/wm/AccessibilityController.java +++ b/services/core/java/com/android/server/wm/AccessibilityController.java @@ -369,6 +369,7 @@ final class AccessibilityController { case WindowManager.LayoutParams.TYPE_SYSTEM_ALERT: case WindowManager.LayoutParams.TYPE_TOAST: case WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY: + case WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY: case WindowManager.LayoutParams.TYPE_PRIORITY_PHONE: case WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG: case WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG: @@ -687,7 +688,7 @@ final class AccessibilityController { mSurfaceControl = surfaceControl; mSurfaceControl.setLayerStack(mWindowManager.getDefaultDisplay() .getLayerStack()); - mSurfaceControl.setLayer(mWindowManagerService.mPolicy.windowTypeToLayerLw( + mSurfaceControl.setLayer(mWindowManagerService.mPolicy.getWindowLayerFromTypeLw( WindowManager.LayoutParams.TYPE_MAGNIFICATION_OVERLAY) * WindowManagerService.TYPE_LAYER_MULTIPLIER); mSurfaceControl.setPosition(0, 0); diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java index d64376973616..061aa832086a 100644 --- a/services/core/java/com/android/server/wm/AppWindowToken.java +++ b/services/core/java/com/android/server/wm/AppWindowToken.java @@ -192,7 +192,8 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree AppWindowToken(WindowManagerService service, IApplicationToken token, boolean voiceInteraction, DisplayContent dc) { - super(service, token != null ? token.asBinder() : null, TYPE_APPLICATION, true, dc); + super(service, token != null ? token.asBinder() : null, TYPE_APPLICATION, true, dc, + false /* ownerCanManageAppTokens */); appToken = token; mVoiceInteraction = voiceInteraction; mInputApplicationHandle = new InputApplicationHandle(this); diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 679f178fd6df..c45136ca2472 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -2185,7 +2185,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo && !mService.mInputMethodTarget.isInMultiWindowMode(); } - final int aboveAppLayer = (mService.mPolicy.windowTypeToLayerLw(TYPE_APPLICATION) + 1) + final int aboveAppLayer = (mService.mPolicy.getWindowLayerFromTypeLw(TYPE_APPLICATION) + 1) * TYPE_LAYER_MULTIPLIER + TYPE_LAYER_OFFSET; final MutableBoolean mutableIncludeFullDisplay = new MutableBoolean(includeFullDisplay); synchronized(mService.mWindowMap) { @@ -2728,8 +2728,10 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo */ private final Comparator<WindowToken> mWindowComparator = (token1, token2) -> // Tokens with higher base layer are z-ordered on-top. - mService.mPolicy.windowTypeToLayerLw(token1.windowType) - < mService.mPolicy.windowTypeToLayerLw(token2.windowType) ? -1 : 1; + mService.mPolicy.getWindowLayerFromTypeLw(token1.windowType, + token1.mOwnerCanManageAppTokens) + < mService.mPolicy.getWindowLayerFromTypeLw(token2.windowType, + token2.mOwnerCanManageAppTokens) ? -1 : 1; private final Predicate<WindowState> mGetOrientingWindow = w -> { if (!w.isVisibleLw() || !w.mPolicyVisibilityAfterAnim) { diff --git a/services/core/java/com/android/server/wm/DragState.java b/services/core/java/com/android/server/wm/DragState.java index 1ae987f6072d..3fdafc7bebdf 100644 --- a/services/core/java/com/android/server/wm/DragState.java +++ b/services/core/java/com/android/server/wm/DragState.java @@ -239,7 +239,7 @@ class DragState { } int getDragLayerLw() { - return mService.mPolicy.windowTypeToLayerLw(WindowManager.LayoutParams.TYPE_DRAG) + return mService.mPolicy.getWindowLayerFromTypeLw(WindowManager.LayoutParams.TYPE_DRAG) * WindowManagerService.TYPE_LAYER_MULTIPLIER + WindowManagerService.TYPE_LAYER_OFFSET; } diff --git a/services/core/java/com/android/server/wm/InputConsumerImpl.java b/services/core/java/com/android/server/wm/InputConsumerImpl.java index b92bfb962d95..36753b7d5e04 100644 --- a/services/core/java/com/android/server/wm/InputConsumerImpl.java +++ b/services/core/java/com/android/server/wm/InputConsumerImpl.java @@ -77,7 +77,7 @@ class InputConsumerImpl { } private int getLayerLw(int windowType) { - return mService.mPolicy.windowTypeToLayerLw(windowType) + return mService.mPolicy.getWindowLayerFromTypeLw(windowType) * WindowManagerService.TYPE_LAYER_MULTIPLIER + WindowManagerService.TYPE_LAYER_OFFSET; } diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java index 5f53d84cb5fe..37b8deb0a24f 100644 --- a/services/core/java/com/android/server/wm/InputMonitor.java +++ b/services/core/java/com/android/server/wm/InputMonitor.java @@ -24,6 +24,7 @@ import static android.view.WindowManager.INPUT_CONSUMER_WALLPAPER; import static android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_DISABLE_WALLPAPER_TOUCH_EVENTS; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD; +import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_DRAG; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_FOCUS_LIGHT; @@ -237,8 +238,8 @@ final class InputMonitor implements InputManagerService.WindowManagerCallbacks { // Figure out whether this window is layered above system windows. // We need to do this here to help the activity manager know how to // layer its ANR dialog. - int systemAlertLayer = mService.mPolicy.windowTypeToLayerLw( - WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); + int systemAlertLayer = mService.mPolicy.getWindowLayerFromTypeLw( + TYPE_APPLICATION_OVERLAY, windowState.mOwnerCanAddInternalSystemWindow); aboveSystem = windowState.mBaseLayer > systemAlertLayer; } else if (appWindowToken != null) { Slog.i(TAG_WM, "Input event dispatching timed out " @@ -471,7 +472,7 @@ final class InputMonitor implements InputManagerService.WindowManagerCallbacks { /* Callback to get pointer layer. */ @Override public int getPointerLayer() { - return mService.mPolicy.windowTypeToLayerLw(WindowManager.LayoutParams.TYPE_POINTER) + return mService.mPolicy.getWindowLayerFromTypeLw(WindowManager.LayoutParams.TYPE_POINTER) * WindowManagerService.TYPE_LAYER_MULTIPLIER + WindowManagerService.TYPE_LAYER_OFFSET; } diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java index 0ff1f0c9f2cd..538f0d9f8552 100644 --- a/services/core/java/com/android/server/wm/TaskStack.java +++ b/services/core/java/com/android/server/wm/TaskStack.java @@ -1479,7 +1479,7 @@ public class TaskStack extends WindowContainer<Task> implements DimLayer.DimLaye return StackId.hasMovementAnimations(mStackId); } - public boolean getForceScaleToCrop() { + public boolean getForceScaleToStack() { return mBoundsAnimating; } diff --git a/services/core/java/com/android/server/wm/WallpaperWindowToken.java b/services/core/java/com/android/server/wm/WallpaperWindowToken.java index 8ea1b3b1355a..28aebbbb281c 100644 --- a/services/core/java/com/android/server/wm/WallpaperWindowToken.java +++ b/services/core/java/com/android/server/wm/WallpaperWindowToken.java @@ -40,8 +40,8 @@ class WallpaperWindowToken extends WindowToken { private static final String TAG = TAG_WITH_CLASS_NAME ? "WallpaperWindowToken" : TAG_WM; WallpaperWindowToken(WindowManagerService service, IBinder token, boolean explicit, - DisplayContent dc) { - super(service, token, TYPE_WALLPAPER, explicit, dc); + DisplayContent dc, boolean ownerCanManageAppTokens) { + super(service, token, TYPE_WALLPAPER, explicit, dc, ownerCanManageAppTokens); dc.mWallpaperController.addWallpaperToken(this); } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 9b96523af73f..971794be2cbb 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -16,13 +16,14 @@ package com.android.server.wm; +import static android.Manifest.permission.INTERNAL_SYSTEM_WINDOW; import static android.Manifest.permission.MANAGE_APP_TOKENS; import static android.Manifest.permission.REGISTER_WINDOW_MANAGER_LISTENERS; import static android.app.ActivityManager.DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT; -import static android.app.ActivityManager.StackId.DOCKED_STACK_ID; import static android.app.ActivityManager.StackId.PINNED_STACK_ID; import static android.app.StatusBarManager.DISABLE_MASK; import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; +import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.WindowManager.DOCKED_INVALID; import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW; @@ -101,7 +102,6 @@ import android.app.ActivityManager.TaskSnapshot; import android.app.ActivityManagerInternal; import android.app.AppOpsManager; import android.app.IActivityManager; -import android.app.RemoteAction; import android.app.admin.DevicePolicyManager; import android.content.BroadcastReceiver; import android.content.ContentResolver; @@ -236,7 +236,6 @@ import java.util.Date; import java.util.HashMap; import java.util.List; -import static android.Manifest.permission.MANAGE_ACTIVITY_STACKS; import static android.Manifest.permission.READ_FRAME_BUFFER; /** {@hide} */ public class WindowManagerService extends IWindowManager.Stub @@ -523,7 +522,7 @@ public class WindowManagerService extends IWindowManager.Stub boolean mSupportsPictureInPicture = false; int getDragLayerLocked() { - return mPolicy.windowTypeToLayerLw(TYPE_DRAG) * TYPE_LAYER_MULTIPLIER + TYPE_LAYER_OFFSET; + return mPolicy.getWindowLayerFromTypeLw(TYPE_DRAG) * TYPE_LAYER_MULTIPLIER + TYPE_LAYER_OFFSET; } class RotationWatcher { @@ -1099,6 +1098,8 @@ public class WindowManagerService extends IWindowManager.Stub long origId; final int callingUid = Binder.getCallingUid(); final int type = attrs.type; + final boolean ownerCanAddInternalSystemWindow = + mContext.checkCallingPermission(INTERNAL_SYSTEM_WINDOW) == PERMISSION_GRANTED; synchronized(mWindowMap) { if (!mDisplayReady) { @@ -1200,7 +1201,8 @@ public class WindowManagerService extends IWindowManager.Stub return WindowManagerGlobal.ADD_BAD_APP_TOKEN; } } - token = new WindowToken(this, attrs.token, type, false, displayContent); + token = new WindowToken(this, attrs.token, type, false, displayContent, + ownerCanAddInternalSystemWindow); } else if (rootType >= FIRST_APPLICATION_WINDOW && rootType <= LAST_APPLICATION_WINDOW) { atoken = token.asAppWindowToken(); if (atoken == null) { @@ -1270,11 +1272,13 @@ public class WindowManagerService extends IWindowManager.Stub // It is not valid to use an app token with other system types; we will // instead make a new token for it (as if null had been passed in for the token). attrs.token = null; - token = new WindowToken(this, null, type, false, displayContent); + token = new WindowToken(this, null, type, false, displayContent, + ownerCanAddInternalSystemWindow); } - WindowState win = new WindowState(this, session, client, token, parentWindow, - appOp[0], seq, attrs, viewVisibility, session.mUid); + final WindowState win = new WindowState(this, session, client, token, parentWindow, + appOp[0], seq, attrs, viewVisibility, session.mUid, + ownerCanAddInternalSystemWindow); if (win.mDeathRecipient == null) { // Client has apparently died, so there is no reason to // continue. @@ -2405,9 +2409,10 @@ public class WindowManagerService extends IWindowManager.Stub return; } if (type == TYPE_WALLPAPER) { - new WallpaperWindowToken(this, binder, true, dc); + new WallpaperWindowToken(this, binder, true, dc, + true /* ownerCanManageAppTokens */); } else { - new WindowToken(this, binder, type, true, dc); + new WindowToken(this, binder, type, true, dc, true /* ownerCanManageAppTokens */); } } } @@ -3606,7 +3611,7 @@ public class WindowManagerService extends IWindowManager.Stub mCircularDisplayMask = new CircularDisplayMask( getDefaultDisplayContentLocked().getDisplay(), mFxSession, - mPolicy.windowTypeToLayerLw( + mPolicy.getWindowLayerFromTypeLw( WindowManager.LayoutParams.TYPE_POINTER) * TYPE_LAYER_MULTIPLIER + 10, screenOffset, maskThickness); } @@ -3635,7 +3640,7 @@ public class WindowManagerService extends IWindowManager.Stub mContext, getDefaultDisplayContentLocked().getDisplay(), mFxSession, - mPolicy.windowTypeToLayerLw( + mPolicy.getWindowLayerFromTypeLw( WindowManager.LayoutParams.TYPE_POINTER) * TYPE_LAYER_MULTIPLIER + 10); } diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 050adfebfc01..867080ed2450 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -18,7 +18,6 @@ package com.android.server.wm; import static android.app.ActivityManager.ENABLE_TASK_SNAPSHOTS; import static android.app.ActivityManager.StackId; -import static android.app.ActivityManager.StackId.DOCKED_STACK_ID; import static android.app.ActivityManager.StackId.INVALID_STACK_ID; import static android.app.ActivityManager.isLowRamDeviceStatic; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; @@ -164,6 +163,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP final int mAppOp; // UserId and appId of the owner. Don't display windows of non-current user. final int mOwnerUid; + /** The owner has {@link android.Manifest.permission#INTERNAL_SYSTEM_WINDOW} */ + final boolean mOwnerCanAddInternalSystemWindow; final IWindowId mWindowId; WindowToken mToken; // The same object as mToken if this is an app window and null for non-app windows. @@ -561,7 +562,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP WindowState(WindowManagerService service, Session s, IWindow c, WindowToken token, WindowState parentWindow, int appOp, int seq, WindowManager.LayoutParams a, - int viewVisibility, int ownerId) { + int viewVisibility, int ownerId, boolean ownerCanAddInternalSystemWindow) { mService = service; mSession = s; mClient = c; @@ -569,6 +570,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP mToken = token; mAppToken = mToken.asAppWindowToken(); mOwnerUid = ownerId; + mOwnerCanAddInternalSystemWindow = ownerCanAddInternalSystemWindow; mWindowId = new IWindowId.Stub() { @Override public void registerFocusObserver(IWindowFocusObserver observer) { @@ -613,9 +615,9 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP if (mAttrs.type >= FIRST_SUB_WINDOW && mAttrs.type <= LAST_SUB_WINDOW) { // The multiplier here is to reserve space for multiple // windows in the same type layer. - mBaseLayer = mPolicy.windowTypeToLayerLw(parentWindow.mAttrs.type) + mBaseLayer = mPolicy.getWindowLayerLw(parentWindow) * TYPE_LAYER_MULTIPLIER + TYPE_LAYER_OFFSET; - mSubLayer = mPolicy.subWindowTypeToLayerLw(a.type); + mSubLayer = mPolicy.getSubWindowLayerFromTypeLw(a.type); mIsChildWindow = true; if (DEBUG_ADD_REMOVE) Slog.v(TAG, "Adding " + this + " to " + parentWindow); @@ -629,7 +631,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } else { // The multiplier here is to reserve space for multiple // windows in the same type layer. - mBaseLayer = mPolicy.windowTypeToLayerLw(a.type) + mBaseLayer = mPolicy.getWindowLayerLw(this) * TYPE_LAYER_MULTIPLIER + TYPE_LAYER_OFFSET; mSubLayer = 0; mIsChildWindow = false; @@ -676,6 +678,11 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP return mAttrs.packageName; } + @Override + public boolean canAddInternalSystemWindow() { + return mOwnerCanAddInternalSystemWindow; + } + /** * Subtracts the insets calculated by intersecting {@param layoutFrame} with {@param insetFrame} * from {@param frame}. In other words, it applies the insets that would result if diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index abce222bf33f..b163abf9f20e 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -1313,18 +1313,20 @@ class WindowStateAnimator { float surfaceWidth = mSurfaceController.getWidth(); float surfaceHeight = mSurfaceController.getHeight(); - if ((task != null && task.mStack.getForceScaleToCrop()) || mForceScaleUntilResize) { + if ((task != null && task.mStack.getForceScaleToStack()) || mForceScaleUntilResize) { int hInsets = w.getAttrs().surfaceInsets.left + w.getAttrs().surfaceInsets.right; int vInsets = w.getAttrs().surfaceInsets.top + w.getAttrs().surfaceInsets.bottom; if (!mForceScaleUntilResize) { mSurfaceController.forceScaleableInTransaction(true); } + + task.mStack.getDimBounds(mTmpStackBounds); // We want to calculate the scaling based on the content area, not based on // the entire surface, so that we scale in sync with windows that don't have insets. - mExtraHScale = (finalClipRect.width() - hInsets) / (float)(surfaceWidth - hInsets); - mExtraVScale = (finalClipRect.height() - vInsets) / (float)(surfaceHeight - vInsets); + mExtraHScale = (mTmpStackBounds.width() - hInsets) / (float)(surfaceWidth - hInsets); + mExtraVScale = (mTmpStackBounds.height() - vInsets) / (float)(surfaceHeight - vInsets); - // In the case of ForceScaleToCrop we scale entire tasks together, + // In the case of ForceScaleToStack we scale entire tasks together, // and so we need to scale our offsets relative to the task bounds // or parent and child windows would fall out of alignment. int posX = (int) (mTmpSize.left - w.mAttrs.x * (1 - mExtraHScale)); diff --git a/services/core/java/com/android/server/wm/WindowToken.java b/services/core/java/com/android/server/wm/WindowToken.java index 4b94d1566681..8beb87d3354b 100644 --- a/services/core/java/com/android/server/wm/WindowToken.java +++ b/services/core/java/com/android/server/wm/WindowToken.java @@ -77,6 +77,9 @@ class WindowToken extends WindowContainer<WindowState> { // The display this token is on. protected DisplayContent mDisplayContent; + /** The owner has {@link android.Manifest.permission#MANAGE_APP_TOKENS} */ + final boolean mOwnerCanManageAppTokens; + /** * Compares two child window of this token and returns -1 if the first is lesser than the * second in terms of z-order and 1 otherwise. @@ -98,11 +101,12 @@ class WindowToken extends WindowContainer<WindowState> { }; WindowToken(WindowManagerService service, IBinder _token, int type, boolean persistOnEmpty, - DisplayContent dc) { + DisplayContent dc, boolean ownerCanManageAppTokens) { mService = service; token = _token; windowType = type; mPersistOnEmpty = persistOnEmpty; + mOwnerCanManageAppTokens = ownerCanManageAppTokens; onDisplayChanged(dc); } diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 3c1d2744dd2e..578e0b3bd06c 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -8564,18 +8564,11 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { } } - /** - * Sets which packages may enter lock task mode. - * - * <p>This function can only be called by the device owner or alternatively by the profile owner - * in case the user is affiliated. - * - * @param packages The list of packages allowed to enter lock task mode. - */ @Override public void setLockTaskPackages(ComponentName who, String[] packages) throws SecurityException { Preconditions.checkNotNull(who, "ComponentName is null"); + Preconditions.checkNotNull(packages, "packages is null"); synchronized (this) { getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER); @@ -8598,48 +8591,51 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { updateLockTaskPackagesLocked(packages, userHandle); } + private void maybeClearLockTaskPackagesLocked() { + final long ident = mInjector.binderClearCallingIdentity(); + try { + final List<UserInfo> userInfos = mUserManager.getUsers(/*excludeDying=*/ true); + for (int i = 0; i < userInfos.size(); i++) { + int userId = userInfos.get(i).id; + final List<String> lockTaskPackages = getUserData(userId).mLockTaskPackages; + if (!lockTaskPackages.isEmpty() && + !isUserAffiliatedWithDeviceLocked(userId)) { + Slog.d(LOG_TAG, + "User id " + userId + " not affiliated. Clearing lock task packages"); + setLockTaskPackagesLocked(userId, Collections.<String>emptyList()); + } + } + } finally { + mInjector.binderRestoreCallingIdentity(ident); + } + } + /** * This function returns the list of components allowed to start the task lock mode. */ @Override public String[] getLockTaskPackages(ComponentName who) { Preconditions.checkNotNull(who, "ComponentName is null"); + + final int userHandle = mInjector.binderGetCallingUserHandle().getIdentifier(); synchronized (this) { - getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER); - int userHandle = mInjector.binderGetCallingUserHandle().getIdentifier(); - final List<String> packages = getLockTaskPackagesLocked(userHandle); + getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER); + if (!isUserAffiliatedWithDeviceLocked(userHandle)) { + throw new SecurityException("Admin " + who + + " is neither the device owner or affiliated user's profile owner."); + } + + final List<String> packages = getUserData(userHandle).mLockTaskPackages; return packages.toArray(new String[packages.size()]); } } - private List<String> getLockTaskPackagesLocked(int userHandle) { - final DevicePolicyData policy = getUserData(userHandle); - return policy.mLockTaskPackages; - } - - /** - * This function lets the caller know whether the given package is allowed to start the - * lock task mode. - * @param pkg The package to check - */ @Override public boolean isLockTaskPermitted(String pkg) { - // Get current user's devicepolicy - int uid = mInjector.binderGetCallingUid(); - int userHandle = UserHandle.getUserId(uid); - DevicePolicyData policy = getUserData(userHandle); + final int userHandle = mInjector.userHandleGetCallingUserId(); synchronized (this) { - for (int i = 0; i < policy.mLockTaskPackages.size(); i++) { - String lockTaskPackage = policy.mLockTaskPackages.get(i); - - // If the given package equals one of the packages stored our list, - // we allow this package to start lock task mode. - if (lockTaskPackage.equals(pkg)) { - return true; - } - } + return getUserData(userHandle).mLockTaskPackages.contains(pkg); } - return false; } @Override @@ -9848,6 +9844,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { // but as a result of that other users might become affiliated or un-affiliated. maybePauseDeviceWideLoggingLocked(); maybeResumeDeviceWideLoggingLocked(); + maybeClearLockTaskPackagesLocked(); } } diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java index f4e4e089dec6..7df638cb53d4 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java @@ -3332,6 +3332,75 @@ public class DevicePolicyManagerTest extends DpmTestBase { MoreAsserts.assertEmpty(targetUsers); } + public void testLockTaskPackagesAllowedForAffiliatedUsers() throws Exception { + // Setup a device owner. + mContext.binder.callingUid = DpmMockContext.CALLER_SYSTEM_USER_UID; + setupDeviceOwner(); + // Lock task packages are updated when loading user data. + verify(mContext.iactivityManager) + .updateLockTaskPackages(eq(UserHandle.USER_SYSTEM), eq(new String[0])); + + // Set up a managed profile managed by different package (package name shouldn't matter) + final int MANAGED_PROFILE_USER_ID = 15; + final int MANAGED_PROFILE_ADMIN_UID = UserHandle.getUid(MANAGED_PROFILE_USER_ID, 20456); + final ComponentName adminDifferentPackage = + new ComponentName("another.package", "whatever.class"); + addManagedProfile(adminDifferentPackage, MANAGED_PROFILE_ADMIN_UID, admin2); + verify(mContext.iactivityManager) + .updateLockTaskPackages(eq(MANAGED_PROFILE_USER_ID), eq(new String[0])); + + // The DO can still set lock task packages + mContext.binder.callingUid = DpmMockContext.CALLER_SYSTEM_USER_UID; + final String[] doPackages = {"doPackage1", "doPackage2"}; + dpm.setLockTaskPackages(admin1, doPackages); + MoreAsserts.assertEquals(doPackages, dpm.getLockTaskPackages(admin1)); + assertTrue(dpm.isLockTaskPermitted("doPackage1")); + assertFalse(dpm.isLockTaskPermitted("anotherPackage")); + verify(mContext.iactivityManager) + .updateLockTaskPackages(eq(UserHandle.USER_SYSTEM), eq(doPackages)); + + // Managed profile is unaffiliated - shouldn't be able to setLockTaskPackages. + mContext.binder.callingUid = MANAGED_PROFILE_ADMIN_UID; + final String[] poPackages = {"poPackage1", "poPackage2"}; + try { + dpm.setLockTaskPackages(adminDifferentPackage, poPackages); + fail("Didn't throw expected security exception."); + } catch (SecurityException expected) { + } + try { + dpm.getLockTaskPackages(adminDifferentPackage); + fail("Didn't throw expected security exception."); + } catch (SecurityException expected) { + } + assertFalse(dpm.isLockTaskPermitted("doPackage1")); + + // Setting same affiliation ids + final List<String> userAffiliationIds = Arrays.asList("some-affiliation-id"); + mContext.binder.callingUid = DpmMockContext.CALLER_SYSTEM_USER_UID; + dpm.setAffiliationIds(admin1, userAffiliationIds); + + mContext.binder.callingUid = MANAGED_PROFILE_ADMIN_UID; + dpm.setAffiliationIds(adminDifferentPackage, userAffiliationIds); + + // Now the managed profile can set lock task packages. + dpm.setLockTaskPackages(adminDifferentPackage, poPackages); + MoreAsserts.assertEquals(poPackages, dpm.getLockTaskPackages(adminDifferentPackage)); + assertTrue(dpm.isLockTaskPermitted("poPackage1")); + assertFalse(dpm.isLockTaskPermitted("doPackage2")); + verify(mContext.iactivityManager) + .updateLockTaskPackages(eq(MANAGED_PROFILE_USER_ID), eq(poPackages)); + + // Unaffiliate the profile, lock task mode no longer available on the profile. + dpm.setAffiliationIds(adminDifferentPackage, Collections.<String>emptyList()); + assertFalse(dpm.isLockTaskPermitted("poPackage1")); + // Lock task packages cleared when loading user data and when the user becomes unaffiliated. + verify(mContext.iactivityManager, times(2)) + .updateLockTaskPackages(eq(MANAGED_PROFILE_USER_ID), eq(new String[0])); + + mContext.binder.callingUid = DpmMockContext.CALLER_SYSTEM_USER_UID; + assertTrue(dpm.isLockTaskPermitted("doPackage1")); + } + public void testIsDeviceManaged() throws Exception { mContext.binder.callingUid = DpmMockContext.CALLER_SYSTEM_USER_UID; setupDeviceOwner(); diff --git a/services/tests/servicestests/src/com/android/server/webkit/WebViewUpdateServiceTest.java b/services/tests/servicestests/src/com/android/server/webkit/WebViewUpdateServiceTest.java index 4c0f0424cf18..e4b74eb07264 100644 --- a/services/tests/servicestests/src/com/android/server/webkit/WebViewUpdateServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/webkit/WebViewUpdateServiceTest.java @@ -16,6 +16,7 @@ package com.android.server.webkit; +import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -24,6 +25,7 @@ import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.Signature; +import android.os.Build; import android.os.Bundle; import android.support.test.InstrumentationRegistry; import android.support.test.runner.AndroidJUnit4; @@ -174,6 +176,8 @@ public class WebViewUpdateServiceTest { // no flag means invalid p.applicationInfo.metaData.putString(WEBVIEW_LIBRARY_FLAG, "blah"); } + // Default to this package being valid in terms of targetSdkVersion. + p.applicationInfo.targetSdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT; return p; } @@ -1614,4 +1618,42 @@ public class WebViewUpdateServiceTest { checkPreparationPhasesForPackage(primaryPackage, 3); assertTrue(mWebViewUpdateServiceImpl.isMultiProcessEnabled()); } + + /** + * Ensure that packages with a targetSdkVersion targeting the current platform are valid, and + * that packages targeting an older version are not valid. + */ + @Test + public void testTargetSdkVersionValidity() { + PackageInfo newSdkPackage = createPackageInfo("newTargetSdkPackage", + true /* enabled */, true /* valid */, true /* installed */); + newSdkPackage.applicationInfo.targetSdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT; + PackageInfo currentSdkPackage = createPackageInfo("currentTargetSdkPackage", + true /* enabled */, true /* valid */, true /* installed */); + currentSdkPackage.applicationInfo.targetSdkVersion = Build.VERSION_CODES.N_MR1+1; + PackageInfo oldSdkPackage = createPackageInfo("oldTargetSdkPackage", + true /* enabled */, true /* valid */, true /* installed */); + oldSdkPackage.applicationInfo.targetSdkVersion = Build.VERSION_CODES.N_MR1; + + WebViewProviderInfo newSdkProviderInfo = + new WebViewProviderInfo(newSdkPackage.packageName, "", true, false, null); + WebViewProviderInfo currentSdkProviderInfo = + new WebViewProviderInfo(currentSdkPackage.packageName, "", true, false, null); + WebViewProviderInfo[] packages = new WebViewProviderInfo[] { + new WebViewProviderInfo(oldSdkPackage.packageName, "", true, false, null), + currentSdkProviderInfo, newSdkProviderInfo}; + setupWithPackages(packages, true); +; + mTestSystemImpl.setPackageInfo(newSdkPackage); + mTestSystemImpl.setPackageInfo(currentSdkPackage); + mTestSystemImpl.setPackageInfo(oldSdkPackage); + + assertArrayEquals(new WebViewProviderInfo[]{currentSdkProviderInfo, newSdkProviderInfo}, + mWebViewUpdateServiceImpl.getValidWebViewPackages()); + + runWebViewBootPreparationOnMainSync(); + + checkPreparationPhasesForPackage(currentSdkPackage.packageName, + 1 /* first preparation phase */); + } } diff --git a/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java b/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java index ec429a05e3ca..1e471e3322d5 100644 --- a/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java +++ b/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java @@ -16,49 +16,7 @@ package com.android.server.wm; -import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW; -import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW; -import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY; -import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ABOVE_SUB_PANEL; -import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG; -import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA; -import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA_OVERLAY; -import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_PANEL; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; -import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL; -import static android.view.WindowManager.LayoutParams.TYPE_BOOT_PROGRESS; -import static android.view.WindowManager.LayoutParams.TYPE_DISPLAY_OVERLAY; -import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER; -import static android.view.WindowManager.LayoutParams.TYPE_DRAG; -import static android.view.WindowManager.LayoutParams.TYPE_DREAM; -import static android.view.WindowManager.LayoutParams.TYPE_INPUT_CONSUMER; -import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD; -import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG; -import static android.view.WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG; -import static android.view.WindowManager.LayoutParams.TYPE_MAGNIFICATION_OVERLAY; -import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR; -import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL; -import static android.view.WindowManager.LayoutParams.TYPE_PHONE; -import static android.view.WindowManager.LayoutParams.TYPE_POINTER; -import static android.view.WindowManager.LayoutParams.TYPE_PRESENTATION; -import static android.view.WindowManager.LayoutParams.TYPE_PRIORITY_PHONE; -import static android.view.WindowManager.LayoutParams.TYPE_PRIVATE_PRESENTATION; -import static android.view.WindowManager.LayoutParams.TYPE_QS_DIALOG; -import static android.view.WindowManager.LayoutParams.TYPE_SCREENSHOT; -import static android.view.WindowManager.LayoutParams.TYPE_SEARCH_BAR; -import static android.view.WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY; -import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR; -import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL; -import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_SUB_PANEL; -import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; -import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG; -import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; -import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY; -import static android.view.WindowManager.LayoutParams.TYPE_TOAST; -import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION; -import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION_STARTING; -import static android.view.WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY; -import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER; import static org.mockito.Mockito.mock; import android.annotation.Nullable; @@ -70,12 +28,10 @@ import android.hardware.display.DisplayManagerInternal; import android.os.Bundle; import android.os.IBinder; import android.os.RemoteException; -import android.util.Log; import android.view.Display; import android.view.IWindowManager; import android.view.KeyEvent; import android.view.WindowManager; -import android.view.WindowManagerGlobal; import android.view.WindowManagerPolicy; import android.view.animation.Animation; import android.os.PowerManagerInternal; @@ -163,127 +119,6 @@ class TestWindowManagerPolicy implements WindowManagerPolicy { } @Override - public int windowTypeToLayerLw(int type) { - // TODO: figure-out a good way to keep this in-sync with PhoneWindowManager...sigh! - if (type >= FIRST_APPLICATION_WINDOW && type <= LAST_APPLICATION_WINDOW) { - return 2; - } - switch (type) { - case TYPE_PRESENTATION: - case TYPE_PRIVATE_PRESENTATION: - return 2; - case TYPE_WALLPAPER: - // wallpaper is at the bottom, though the window manager may move it. - return 2; - case TYPE_DOCK_DIVIDER: - return 2; - case TYPE_QS_DIALOG: - return 2; - case TYPE_PHONE: - return 3; - case TYPE_SEARCH_BAR: - case TYPE_VOICE_INTERACTION_STARTING: - return 4; - case TYPE_VOICE_INTERACTION: - // voice interaction layer is almost immediately above apps. - return 5; - case TYPE_INPUT_CONSUMER: - return 6; - case TYPE_SYSTEM_DIALOG: - return 7; - case TYPE_TOAST: - // toasts and the plugged-in battery thing - return 8; - case TYPE_PRIORITY_PHONE: - // SIM errors and unlock. Not sure if this really should be in a high layer. - return 9; - case TYPE_DREAM: - // used for Dreams (screensavers with TYPE_DREAM windows) - return 10; - case TYPE_SYSTEM_ALERT: - // like the ANR / app crashed dialogs - return 11; - case TYPE_INPUT_METHOD: - // on-screen keyboards and other such input method user interfaces go here. - return 12; - case TYPE_INPUT_METHOD_DIALOG: - // on-screen keyboards and other such input method user interfaces go here. - return 13; - case TYPE_STATUS_BAR_SUB_PANEL: - return 15; - case TYPE_STATUS_BAR: - return 16; - case TYPE_STATUS_BAR_PANEL: - return 17; - case TYPE_KEYGUARD_DIALOG: - return 18; - case TYPE_VOLUME_OVERLAY: - // the on-screen volume indicator and controller shown when the user - // changes the device volume - return 19; - case TYPE_SYSTEM_OVERLAY: - // the on-screen volume indicator and controller shown when the user - // changes the device volume - return 20; - case TYPE_NAVIGATION_BAR: - // the navigation bar, if available, shows atop most things - return 21; - case TYPE_NAVIGATION_BAR_PANEL: - // some panels (e.g. search) need to show on top of the navigation bar - return 22; - case TYPE_SCREENSHOT: - // screenshot selection layer shouldn't go above system error, but it should cover - // navigation bars at the very least. - return 23; - case TYPE_SYSTEM_ERROR: - // system-level error dialogs - return 24; - case TYPE_MAGNIFICATION_OVERLAY: - // used to highlight the magnified portion of a display - return 25; - case TYPE_DISPLAY_OVERLAY: - // used to simulate secondary display devices - return 26; - case TYPE_DRAG: - // the drag layer: input for drag-and-drop is associated with this window, - // which sits above all other focusable windows - return 27; - case TYPE_ACCESSIBILITY_OVERLAY: - // overlay put by accessibility services to intercept user interaction - return 28; - case TYPE_SECURE_SYSTEM_OVERLAY: - return 29; - case TYPE_BOOT_PROGRESS: - return 30; - case TYPE_POINTER: - // the (mouse) pointer layer - return 31; - } - Log.e(TAG, "Unknown window type: " + type); - return 2; - } - - @Override - public int subWindowTypeToLayerLw(int type) { - // TODO: figure-out a good way to keep this in-sync with PhoneWindowManager... - switch (type) { - case TYPE_APPLICATION_PANEL: - case TYPE_APPLICATION_ATTACHED_DIALOG: - return 1; - case TYPE_APPLICATION_MEDIA: - return -2; - case TYPE_APPLICATION_MEDIA_OVERLAY: - return -1; - case TYPE_APPLICATION_SUB_PANEL: - return 2; - case TYPE_APPLICATION_ABOVE_SUB_PANEL: - return 3; - } - Log.e(TAG, "Unknown sub-window type: " + type); - return 0; - } - - @Override public int getMaxWallpaperLayer() { return 0; } diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java index 186884b01d21..4cad4e8e40f1 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java @@ -57,7 +57,8 @@ public class WindowFrameTests { final Task mTask; boolean mDockedResizingForTest = false; WindowStateWithTask(WindowManager.LayoutParams attrs, Task t) { - super(sWm, null, mIWindow, mWindowToken, null, 0, 0, attrs, 0, 0); + super(sWm, null, mIWindow, mWindowToken, null, 0, 0, attrs, 0, 0, + false /* ownerCanAddInternalSystemWindow */); mTask = t; } @@ -106,7 +107,7 @@ public class WindowFrameTests { sWm.mSystemDecorLayer = 10000; mWindowToken = new WindowToken(sWm, new Binder(), 0, false, - sWm.getDefaultDisplayContentLocked()); + sWm.getDefaultDisplayContentLocked(), false /* ownerCanManageAppTokens */); mStubStack = new TaskStack(sWm, 0); } diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java index c6f88ed3a711..7dec52df9109 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java @@ -181,7 +181,7 @@ class WindowTestsBase { attrs.setTitle(name); final WindowState w = new WindowState(sWm, sMockSession, sIWindow, token, parent, OP_NONE, - 0, attrs, 0, 0); + 0, attrs, 0, 0, false /* ownerCanAddInternalSystemWindow */); // TODO: Probably better to make this call in the WindowState ctor to avoid errors with // adding it to the token... token.addWindow(w); @@ -223,7 +223,8 @@ class WindowTestsBase { } TestWindowToken(int type, DisplayContent dc, boolean persistOnEmpty) { - super(sWm, mock(IBinder.class), type, persistOnEmpty, dc); + super(sWm, mock(IBinder.class), type, persistOnEmpty, dc, + false /* ownerCanManageAppTokens */); } int getWindowsCount() { @@ -403,7 +404,8 @@ class WindowTestsBase { boolean resizeReported; TestWindowState(WindowManager.LayoutParams attrs, WindowToken token) { - super(sWm, sMockSession, sIWindow, token, null, OP_NONE, 0, attrs, 0, 0); + super(sWm, sMockSession, sIWindow, token, null, OP_NONE, 0, attrs, 0, 0, + false /* ownerCanAddInternalSystemWindow */); } @Override diff --git a/tests/net/java/android/net/ConnectivityManagerTest.java b/tests/net/java/android/net/ConnectivityManagerTest.java new file mode 100644 index 000000000000..b984bbfddac3 --- /dev/null +++ b/tests/net/java/android/net/ConnectivityManagerTest.java @@ -0,0 +1,176 @@ +/* + * Copyright (C) 2017 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. + */ + +package android.net; + +import static android.net.NetworkCapabilities.NET_CAPABILITY_CBS; +import static android.net.NetworkCapabilities.NET_CAPABILITY_DUN; +import static android.net.NetworkCapabilities.NET_CAPABILITY_FOTA; +import static android.net.NetworkCapabilities.NET_CAPABILITY_IMS; +import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET; +import static android.net.NetworkCapabilities.NET_CAPABILITY_MMS; +import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED; +import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_VPN; +import static android.net.NetworkCapabilities.NET_CAPABILITY_SUPL; +import static android.net.NetworkCapabilities.NET_CAPABILITY_TRUSTED; +import static android.net.NetworkCapabilities.NET_CAPABILITY_WIFI_P2P; +import static android.net.NetworkCapabilities.TRANSPORT_BLUETOOTH; +import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; +import static android.net.NetworkCapabilities.TRANSPORT_ETHERNET; +import static android.net.NetworkCapabilities.TRANSPORT_WIFI; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import android.net.ConnectivityManager; +import android.net.NetworkCapabilities; + +import android.support.test.filters.SmallTest; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.runner.RunWith; +import org.junit.Test; + + + +@RunWith(AndroidJUnit4.class) +@SmallTest +public class ConnectivityManagerTest { + static NetworkCapabilities verifyNetworkCapabilities( + int legacyType, int transportType, int... capabilities) { + final NetworkCapabilities nc = ConnectivityManager.networkCapabilitiesForType(legacyType); + assertNotNull(nc); + assertTrue(nc.hasTransport(transportType)); + for (int capability : capabilities) { + assertTrue(nc.hasCapability(capability)); + } + + return nc; + } + + static void verifyUnrestrictedNetworkCapabilities(int legacyType, int transportType) { + verifyNetworkCapabilities( + legacyType, + transportType, + NET_CAPABILITY_INTERNET, + NET_CAPABILITY_NOT_RESTRICTED, + NET_CAPABILITY_NOT_VPN, + NET_CAPABILITY_TRUSTED); + } + + static void verifyRestrictedMobileNetworkCapabilities(int legacyType, int capability) { + final NetworkCapabilities nc = verifyNetworkCapabilities( + legacyType, + TRANSPORT_CELLULAR, + capability, + NET_CAPABILITY_NOT_VPN, + NET_CAPABILITY_TRUSTED); + + assertFalse(nc.hasCapability(NET_CAPABILITY_INTERNET)); + assertFalse(nc.hasCapability(NET_CAPABILITY_NOT_RESTRICTED)); + } + + @Test + public void testNetworkCapabilitiesForTypeMobile() { + verifyUnrestrictedNetworkCapabilities( + ConnectivityManager.TYPE_MOBILE, TRANSPORT_CELLULAR); + } + + @Test + public void testNetworkCapabilitiesForTypeMobileCbs() { + verifyRestrictedMobileNetworkCapabilities( + ConnectivityManager.TYPE_MOBILE_CBS, NET_CAPABILITY_CBS); + } + + @Test + public void testNetworkCapabilitiesForTypeMobileDun() { + verifyRestrictedMobileNetworkCapabilities( + ConnectivityManager.TYPE_MOBILE_DUN, NET_CAPABILITY_DUN); + } + + @Test + public void testNetworkCapabilitiesForTypeMobileFota() { + verifyRestrictedMobileNetworkCapabilities( + ConnectivityManager.TYPE_MOBILE_FOTA, NET_CAPABILITY_FOTA); + } + + @Test + public void testNetworkCapabilitiesForTypeMobileHipri() { + verifyUnrestrictedNetworkCapabilities( + ConnectivityManager.TYPE_MOBILE_HIPRI, TRANSPORT_CELLULAR); + } + + @Test + public void testNetworkCapabilitiesForTypeMobileIms() { + verifyRestrictedMobileNetworkCapabilities( + ConnectivityManager.TYPE_MOBILE_IMS, NET_CAPABILITY_IMS); + } + + @Test + public void testNetworkCapabilitiesForTypeMobileMms() { + final NetworkCapabilities nc = verifyNetworkCapabilities( + ConnectivityManager.TYPE_MOBILE_MMS, + TRANSPORT_CELLULAR, + NET_CAPABILITY_MMS, + NET_CAPABILITY_NOT_VPN, + NET_CAPABILITY_TRUSTED); + + assertFalse(nc.hasCapability(NET_CAPABILITY_INTERNET)); + } + + @Test + public void testNetworkCapabilitiesForTypeMobileSupl() { + final NetworkCapabilities nc = verifyNetworkCapabilities( + ConnectivityManager.TYPE_MOBILE_SUPL, + TRANSPORT_CELLULAR, + NET_CAPABILITY_SUPL, + NET_CAPABILITY_NOT_VPN, + NET_CAPABILITY_TRUSTED); + + assertFalse(nc.hasCapability(NET_CAPABILITY_INTERNET)); + } + + @Test + public void testNetworkCapabilitiesForTypeWifi() { + verifyUnrestrictedNetworkCapabilities( + ConnectivityManager.TYPE_WIFI, TRANSPORT_WIFI); + } + + @Test + public void testNetworkCapabilitiesForTypeWifiP2p() { + final NetworkCapabilities nc = verifyNetworkCapabilities( + ConnectivityManager.TYPE_WIFI_P2P, + TRANSPORT_WIFI, + NET_CAPABILITY_NOT_RESTRICTED, NET_CAPABILITY_NOT_VPN, + NET_CAPABILITY_TRUSTED, NET_CAPABILITY_WIFI_P2P); + + assertFalse(nc.hasCapability(NET_CAPABILITY_INTERNET)); + } + + @Test + public void testNetworkCapabilitiesForTypeBluetooth() { + verifyUnrestrictedNetworkCapabilities( + ConnectivityManager.TYPE_BLUETOOTH, TRANSPORT_BLUETOOTH); + } + + @Test + public void testNetworkCapabilitiesForTypeEthernet() { + verifyUnrestrictedNetworkCapabilities( + ConnectivityManager.TYPE_ETHERNET, TRANSPORT_ETHERNET); + } +} diff --git a/tests/net/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitorTest.java b/tests/net/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitorTest.java index b8c739b64090..3ed56dff3f83 100644 --- a/tests/net/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitorTest.java +++ b/tests/net/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitorTest.java @@ -23,7 +23,13 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; import android.content.Context; import android.net.ConnectivityManager; @@ -40,6 +46,7 @@ import org.junit.Before; import org.junit.runner.RunWith; import org.junit.Test; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import java.util.HashMap; @@ -64,7 +71,7 @@ public class UpstreamNetworkMonitorTest { reset(mContext); reset(mCS); - mCM = new TestConnectivityManager(mContext, mCS); + mCM = spy(new TestConnectivityManager(mContext, mCS)); mUNM = new UpstreamNetworkMonitor(null, EVENT_UNM_UPDATE, (ConnectivityManager) mCM); } @@ -126,6 +133,42 @@ public class UpstreamNetworkMonitorTest { } @Test + public void testDuplicateMobileRequestsIgnored() throws Exception { + assertFalse(mUNM.mobileNetworkRequested()); + assertEquals(0, mCM.requested.size()); + + mUNM.start(); + verify(mCM, Mockito.times(1)).registerNetworkCallback( + any(NetworkRequest.class), any(NetworkCallback.class)); + verify(mCM, Mockito.times(1)).registerDefaultNetworkCallback(any(NetworkCallback.class)); + assertFalse(mUNM.mobileNetworkRequested()); + assertEquals(0, mCM.requested.size()); + + mUNM.updateMobileRequiresDun(true); + mUNM.registerMobileNetworkRequest(); + verify(mCM, Mockito.times(1)).requestNetwork( + any(NetworkRequest.class), any(NetworkCallback.class), anyInt(), anyInt()); + + assertTrue(mUNM.mobileNetworkRequested()); + assertUpstreamTypeRequested(TYPE_MOBILE_DUN); + assertTrue(mCM.isDunRequested()); + + // Try a few things that must not result in any state change. + mUNM.registerMobileNetworkRequest(); + mUNM.updateMobileRequiresDun(true); + mUNM.registerMobileNetworkRequest(); + + assertTrue(mUNM.mobileNetworkRequested()); + assertUpstreamTypeRequested(TYPE_MOBILE_DUN); + assertTrue(mCM.isDunRequested()); + + mUNM.stop(); + verify(mCM, times(3)).unregisterNetworkCallback(any(NetworkCallback.class)); + + verifyNoMoreInteractions(mCM); + } + + @Test public void testRequestsDunNetwork() throws Exception { assertFalse(mUNM.mobileNetworkRequested()); assertEquals(0, mCM.requested.size()); @@ -149,7 +192,7 @@ public class UpstreamNetworkMonitorTest { } @Test - public void testUpdateMobileRequiredDun() throws Exception { + public void testUpdateMobileRequiresDun() throws Exception { mUNM.start(); // Test going from no-DUN to DUN correctly re-registers callbacks. @@ -180,7 +223,7 @@ public class UpstreamNetworkMonitorTest { mCM.legacyTypeMap.values().iterator().next()); } - private static class TestConnectivityManager extends ConnectivityManager { + public static class TestConnectivityManager extends ConnectivityManager { public Set<NetworkCallback> trackingDefault = new HashSet<>(); public Map<NetworkCallback, NetworkRequest> listening = new HashMap<>(); public Map<NetworkCallback, NetworkRequest> requested = new HashMap<>(); diff --git a/tools/layoutlib/bridge/src/android/graphics/Bitmap_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Bitmap_Delegate.java index 9d9d71f66de9..8c6740c41052 100644 --- a/tools/layoutlib/bridge/src/android/graphics/Bitmap_Delegate.java +++ b/tools/layoutlib/bridge/src/android/graphics/Bitmap_Delegate.java @@ -636,6 +636,20 @@ public final class Bitmap_Delegate { Bitmap.getDefaultDensity()); } + @LayoutlibDelegate + /*package*/ static Bitmap nativeCreateHardwareBitmap(GraphicBuffer buffer) { + Bridge.getLog().error(LayoutLog.TAG_UNSUPPORTED, + "Bitmap.nativeCreateHardwareBitmap() is not supported", null /*data*/); + return null; + } + + @LayoutlibDelegate + /*package*/ static GraphicBuffer nativeCreateGraphicBufferHandle(long nativeBitmap) { + Bridge.getLog().error(LayoutLog.TAG_UNSUPPORTED, + "Bitmap.nativeCreateGraphicBufferHandle() is not supported", null /*data*/); + return null; + } + // ---- Private delegate/helper methods ---- private Bitmap_Delegate(BufferedImage image, Config config) { diff --git a/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java index c599e9d6d6bc..47216eec03bd 100644 --- a/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java +++ b/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java @@ -209,20 +209,20 @@ public final class Canvas_Delegate extends BaseCanvas_Delegate { } @LayoutlibDelegate - public static void nRestore(long nativeCanvas, boolean throwOnUnderflow) { + public static boolean nRestore(long nativeCanvas) { // FIXME: implement throwOnUnderflow. // get the delegate from the native int. Canvas_Delegate canvasDelegate = Canvas_Delegate.getDelegate(nativeCanvas); if (canvasDelegate == null) { - return; + return false; } canvasDelegate.restore(); + return true; } @LayoutlibDelegate - public static void nRestoreToCount(long nativeCanvas, int saveCount, - boolean throwOnUnderflow) { + public static void nRestoreToCount(long nativeCanvas, int saveCount) { // FIXME: implement throwOnUnderflow. // get the delegate from the native int. Canvas_Delegate canvasDelegate = Canvas_Delegate.getDelegate(nativeCanvas); @@ -427,7 +427,7 @@ public final class Canvas_Delegate extends BaseCanvas_Delegate { } @LayoutlibDelegate - public static void nGetCTM(long canvas, long matrix) { + public static void nGetMatrix(long canvas, long matrix) { // get the delegate from the native int. Canvas_Delegate canvasDelegate = Canvas_Delegate.getDelegate(canvas); if (canvasDelegate == null) { diff --git a/tools/layoutlib/bridge/src/android/graphics/FontFamily_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/FontFamily_Delegate.java index 147ed99ee047..a43e54579da2 100644 --- a/tools/layoutlib/bridge/src/android/graphics/FontFamily_Delegate.java +++ b/tools/layoutlib/bridge/src/android/graphics/FontFamily_Delegate.java @@ -313,7 +313,8 @@ public class FontFamily_Delegate { } @LayoutlibDelegate - /*package*/ static boolean nAddFontFromAsset(long builderPtr, AssetManager mgr, String path) { + /*package*/ static boolean nAddFontFromAssetManager(long builderPtr, AssetManager mgr, String path, + int cookie, boolean isAsset) { FontFamily_Delegate ffd = sManager.getDelegate(builderPtr); if (ffd == null) { return false; @@ -388,6 +389,10 @@ public class FontFamily_Delegate { return false; } + @LayoutlibDelegate + /*package*/ static void nAbort(long builderPtr) { + sManager.removeJavaReferenceFor(builderPtr); + } // ---- private helper methods ---- diff --git a/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java index 9b8fa996a017..aa1f00dee42e 100644 --- a/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java +++ b/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java @@ -1062,8 +1062,6 @@ public class Paint_Delegate { @LayoutlibDelegate /*package*/ static void nSetWordSpacing(long nativePaint, float wordSpacing) { - Bridge.getLog().fidelityWarning(LayoutLog.TAG_TEXT_RENDERING, - "Paint.setWordSpacing() not supported.", null, null); Paint_Delegate delegate = sManager.getDelegate(nativePaint); if (delegate == null) { return; diff --git a/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java index f6c463f1b578..11328dce94e1 100644 --- a/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java +++ b/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java @@ -16,12 +16,14 @@ package android.graphics; -import android.text.FontConfig; +import com.android.ide.common.rendering.api.LayoutLog; +import com.android.layoutlib.bridge.Bridge; import com.android.layoutlib.bridge.impl.DelegateManager; import com.android.tools.layoutlib.annotations.LayoutlibDelegate; import android.annotation.NonNull; import android.graphics.FontFamily_Delegate.FontVariant; +import android.text.FontConfig; import java.awt.Font; import java.io.File; @@ -160,6 +162,18 @@ public final class Typeface_Delegate { } @LayoutlibDelegate + /*package*/ static synchronized long nativeCreateFromTypefaceWithVariation(long native_instance, + List<FontConfig.Axis> axes) { + long newInstance = nativeCreateFromTypeface(native_instance, 0); + + if (newInstance != 0) { + Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, + "nativeCreateFromTypefaceWithVariation is not supported", null, null); + } + return newInstance; + } + + @LayoutlibDelegate /*package*/ static long nativeCreateWeightAlias(long native_instance, int weight) { Typeface_Delegate delegate = sManager.getDelegate(native_instance); if (delegate == null) { diff --git a/tools/layoutlib/bridge/src/android/graphics/drawable/VectorDrawable_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/drawable/VectorDrawable_Delegate.java index 430607aa178b..eee74734fde5 100644 --- a/tools/layoutlib/bridge/src/android/graphics/drawable/VectorDrawable_Delegate.java +++ b/tools/layoutlib/bridge/src/android/graphics/drawable/VectorDrawable_Delegate.java @@ -156,7 +156,7 @@ public class VectorDrawable_Delegate { bounds.offsetTo(0, 0); nativePathRenderer.draw(canvasWrapperPtr, colorFilterPtr, bounds.width(), bounds.height()); - Canvas_Delegate.nRestore(canvasWrapperPtr, true); + Canvas_Delegate.nRestore(canvasWrapperPtr); return bounds.width() * bounds.height(); } @@ -1122,7 +1122,7 @@ public class VectorDrawable_Delegate { drawPath(currentGroup, childPath, canvasPtr, w, h, filterPtr); } } - Canvas_Delegate.nRestore(canvasPtr, true); + Canvas_Delegate.nRestore(canvasPtr); } public void draw(long canvasPtr, long filterPtr, int w, int h) { diff --git a/tools/layoutlib/bridge/src/android/text/StaticLayout_Delegate.java b/tools/layoutlib/bridge/src/android/text/StaticLayout_Delegate.java index 65c0a07bbac4..970c7d577c51 100644 --- a/tools/layoutlib/bridge/src/android/text/StaticLayout_Delegate.java +++ b/tools/layoutlib/bridge/src/android/text/StaticLayout_Delegate.java @@ -75,7 +75,8 @@ public class StaticLayout_Delegate { /*package*/ static void nSetupParagraph(long nativeBuilder, char[] text, int length, float firstWidth, int firstWidthLineCount, float restWidth, int[] variableTabStops, int defaultTabStop, int breakStrategy, - int hyphenationFrequency) { + int hyphenationFrequency, boolean isJustified) { + // TODO: implement justified alignment Builder builder = sBuilderManager.getDelegate(nativeBuilder); if (builder == null) { return; diff --git a/tools/layoutlib/bridge/src/android/view/RenderNode_Delegate.java b/tools/layoutlib/bridge/src/android/view/RenderNode_Delegate.java index a801cb0606e0..152878bb0fd5 100644 --- a/tools/layoutlib/bridge/src/android/view/RenderNode_Delegate.java +++ b/tools/layoutlib/bridge/src/android/view/RenderNode_Delegate.java @@ -57,7 +57,7 @@ public class RenderNode_Delegate { private String mName; @LayoutlibDelegate - /*package*/ static long nCreate(RenderNode thisRenderNode, String name) { + /*package*/ static long nCreate(String name) { RenderNode_Delegate renderNodeDelegate = new RenderNode_Delegate(); renderNodeDelegate.mName = name; return sManager.addNewDelegate(renderNodeDelegate); diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmGenerator.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmGenerator.java index a2f8372d6eb8..bed5806aadad 100644 --- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmGenerator.java +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmGenerator.java @@ -36,6 +36,7 @@ import java.util.Set; import java.util.TreeMap; import java.util.jar.JarEntry; import java.util.jar.JarOutputStream; +import java.util.stream.Collectors; /** * Class that generates a new JAR from a list of classes, some of which are to be kept as-is @@ -78,6 +79,8 @@ public class AsmGenerator { private final Map<String, ICreateInfo.InjectMethodRunnable> mInjectedMethodsMap; /** A map { FQCN => set { field names } } which should be promoted to public visibility */ private final Map<String, Set<String>> mPromotedFields; + /** A list of classes to be promoted to public visibility */ + private final Set<String> mPromotedClasses; /** * Creates a new generator that can generate the output JAR with the stubbed classes. @@ -179,6 +182,9 @@ public class AsmGenerator { addToMap(createInfo.getPromotedFields(), mPromotedFields); mInjectedMethodsMap = createInfo.getInjectedMethodsMap(); + + mPromotedClasses = + Arrays.stream(createInfo.getPromotedClasses()).collect(Collectors.toSet()); } /** @@ -400,7 +406,11 @@ public class AsmGenerator { if (promoteFields != null && !promoteFields.isEmpty()) { cv = new PromoteFieldClassAdapter(cv, promoteFields); } + if (!mPromotedClasses.isEmpty()) { + cv = new PromoteClassClassAdapter(cv, mPromotedClasses); + } cr.accept(cv, 0); + return cw.toByteArray(); } diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java index 741eb27558ed..94302d328313 100644 --- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java @@ -113,6 +113,11 @@ public final class CreateInfo implements ICreateInfo { } @Override + public String[] getPromotedClasses() { + return PROMOTED_CLASSES; + } + + @Override public Map<String, InjectMethodRunnable> getInjectedMethodsMap() { return INJECTED_METHODS; } @@ -344,6 +349,13 @@ public final class CreateInfo implements ICreateInfo { }; /** + * List of classes to be promoted to public visibility. Prefer using PROMOTED_FIELDS to this + * if possible. + */ + private final static String[] PROMOTED_CLASSES = new String[] { + }; + + /** * List of classes for which the methods returning them should be deleted. * The array contains a list of null terminated section starting with the name of the class * to rename in which the methods are deleted, followed by a list of return types identifying diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/ICreateInfo.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/ICreateInfo.java index 535a9a8c0b77..48abde4517e6 100644 --- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/ICreateInfo.java +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/ICreateInfo.java @@ -78,6 +78,11 @@ public interface ICreateInfo { String[] getPromotedFields(); /** + * Returns a list of classes to be promoted to public visibility. + */ + String[] getPromotedClasses(); + + /** * Returns a map from binary FQCN className to {@link InjectMethodRunnable} which will be * called to inject methods into a class. * Can be empty but must not be null. diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/PromoteClassClassAdapter.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/PromoteClassClassAdapter.java new file mode 100644 index 000000000000..99e3089115d6 --- /dev/null +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/PromoteClassClassAdapter.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2017 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. + */ + +package com.android.tools.layoutlib.create; + +import org.objectweb.asm.ClassVisitor; + +import java.util.Set; +import java.util.stream.Collectors; + +import static org.objectweb.asm.Opcodes.ACC_PRIVATE; +import static org.objectweb.asm.Opcodes.ACC_PROTECTED; +import static org.objectweb.asm.Opcodes.ACC_PUBLIC; + +/** + * Promotes given classes to public visibility. + */ +public class PromoteClassClassAdapter extends ClassVisitor { + + private final Set<String> mClassNames; + private static final int CLEAR_PRIVATE_MASK = ~(ACC_PRIVATE | ACC_PROTECTED); + + public PromoteClassClassAdapter(ClassVisitor cv, Set<String> classNames) { + super(Main.ASM_VERSION, cv); + mClassNames = + classNames.stream().map(name -> name.replace(".", "/")).collect(Collectors.toSet()); + } + + @Override + public void visit(int version, int access, String name, String signature, String superName, + String[] interfaces) { + if (mClassNames.contains(name)) { + if ((access & ACC_PUBLIC) == 0) { + access = (access & CLEAR_PRIVATE_MASK) | ACC_PUBLIC; + } + } + + super.visit(version, access, name, signature, superName, interfaces); + } + + @Override + public void visitInnerClass(String name, String outerName, String innerName, int access) { + if (mClassNames.contains(name)) { + if ((access & ACC_PUBLIC) == 0) { + access = (access & CLEAR_PRIVATE_MASK) | ACC_PUBLIC; + } + } + + super.visitInnerClass(name, outerName, innerName, access); + } +} diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/PromoteFieldClassAdapter.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/PromoteFieldClassAdapter.java index 05af0337a397..ba778602546d 100644 --- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/PromoteFieldClassAdapter.java +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/PromoteFieldClassAdapter.java @@ -31,7 +31,7 @@ import static org.objectweb.asm.Opcodes.ACC_PUBLIC; public class PromoteFieldClassAdapter extends ClassVisitor { private final Set<String> mFieldNames; - private static final int ACC_NOT_PUBLIC = ~(ACC_PRIVATE | ACC_PROTECTED); + private static final int CLEAR_PRIVATE_MASK = ~(ACC_PRIVATE | ACC_PROTECTED); public PromoteFieldClassAdapter(ClassVisitor cv, Set<String> fieldNames) { super(Main.ASM_VERSION, cv); @@ -43,7 +43,7 @@ public class PromoteFieldClassAdapter extends ClassVisitor { Object value) { if (mFieldNames.contains(name)) { if ((access & ACC_PUBLIC) == 0) { - access = (access & ACC_NOT_PUBLIC) | ACC_PUBLIC; + access = (access & CLEAR_PRIVATE_MASK) | ACC_PUBLIC; } } return super.visitField(access, name, desc, signature, value); diff --git a/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/AsmGeneratorTest.java b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/AsmGeneratorTest.java index 0560d8aca1bd..4d5d5d2c4a6e 100644 --- a/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/AsmGeneratorTest.java +++ b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/AsmGeneratorTest.java @@ -137,6 +137,11 @@ public class AsmGeneratorTest { } @Override + public String[] getPromotedClasses() { + return EMPTY_STRING_ARRAY; + } + + @Override public Map<String, InjectMethodRunnable> getInjectedMethodsMap() { return Collections.emptyMap(); } @@ -211,6 +216,11 @@ public class AsmGeneratorTest { } @Override + public String[] getPromotedClasses() { + return EMPTY_STRING_ARRAY; + } + + @Override public Map<String, InjectMethodRunnable> getInjectedMethodsMap() { return Collections.emptyMap(); } @@ -293,6 +303,11 @@ public class AsmGeneratorTest { } @Override + public String[] getPromotedClasses() { + return EMPTY_STRING_ARRAY; + } + + @Override public Map<String, InjectMethodRunnable> getInjectedMethodsMap() { return Collections.emptyMap(); } @@ -370,6 +385,11 @@ public class AsmGeneratorTest { } @Override + public String[] getPromotedClasses() { + return EMPTY_STRING_ARRAY; + } + + @Override public Map<String, InjectMethodRunnable> getInjectedMethodsMap() { return Collections.singletonMap("mock_android.util.EmptyArray", InjectMethodRunnables.CONTEXT_GET_FRAMEWORK_CLASS_LOADER); diff --git a/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/PromoteClassClassAdapterTest.java b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/PromoteClassClassAdapterTest.java new file mode 100644 index 000000000000..eeb0b10c1e2b --- /dev/null +++ b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/PromoteClassClassAdapterTest.java @@ -0,0 +1,170 @@ +/* + * Copyright (C) 2017 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. + */ + +package com.android.tools.layoutlib.create; + +import org.junit.Test; +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.Opcodes; + +import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.StringJoiner; + +import static org.junit.Assert.assertTrue; + +/** + * {@link ClassVisitor} that logs all the calls to the different visit methods so they can be later + * inspected. + */ +class LoggingClassVisitor extends ClassVisitor { + List<String> mLog = new LinkedList<String>(); + + public LoggingClassVisitor() { + super(Main.ASM_VERSION); + } + + public LoggingClassVisitor(ClassVisitor cv) { + super(Main.ASM_VERSION, cv); + } + + private static String formatAccess(int access) { + StringJoiner modifiers = new StringJoiner(","); + + if ((access & Opcodes.ACC_PUBLIC) != 0) { + modifiers.add("public"); + } + if ((access & Opcodes.ACC_PRIVATE) != 0) { + modifiers.add("private"); + } + if ((access & Opcodes.ACC_PROTECTED) != 0) { + modifiers.add("protected"); + } + if ((access & Opcodes.ACC_STATIC) != 0) { + modifiers.add("static"); + } + if ((access & Opcodes.ACC_FINAL) != 0) { + modifiers.add("static"); + } + + return "[" + modifiers.toString() + "]"; + } + + private void log(String method, String format, Object...args) { + mLog.add( + String.format("[%s] - %s", method, String.format(format, (Object[]) args)) + ); + } + + @Override + public void visitOuterClass(String owner, String name, String desc) { + log( + "visitOuterClass", + "owner=%s, name=%s, desc=%s", + owner, name, desc + ); + + super.visitOuterClass(owner, name, desc); + } + + @Override + public void visitInnerClass(String name, String outerName, String innerName, int access) { + log( + "visitInnerClass", + "name=%s, outerName=%s, innerName=%s, access=%s", + name, outerName, innerName, formatAccess(access) + ); + + super.visitInnerClass(name, outerName, innerName, access); + } + + @Override + public void visit(int version, int access, String name, String signature, String superName, + String[] interfaces) { + log( + "visit", + "version=%d, access=%s, name=%s, signature=%s, superName=%s, interfaces=%s", + version, formatAccess(access), name, signature, superName, Arrays.toString(interfaces) + ); + + super.visit(version, access, name, signature, superName, interfaces); + } +} + +class PackageProtectedClass {} + +public class PromoteClassClassAdapterTest { + private static class PrivateClass {} + private static class ClassWithPrivateInnerClass { + private class InnerPrivateClass {} + } + + @Test + public void testInnerClassPromotion() throws IOException { + ClassReader reader = new ClassReader(PrivateClass.class.getName()); + LoggingClassVisitor log = new LoggingClassVisitor(); + + PromoteClassClassAdapter adapter = new PromoteClassClassAdapter(log, new HashSet<String>() { + { + add("com.android.tools.layoutlib.create.PromoteClassClassAdapterTest$PrivateClass"); + add("com.android.tools.layoutlib.create" + + ".PromoteClassClassAdapterTest$ClassWithPrivateInnerClass$InnerPrivateClass"); + } + }); + reader.accept(adapter, 0); + assertTrue(log.mLog.contains( + "[visitInnerClass] - " + + "name=com/android/tools/layoutlib/create" + + "/PromoteClassClassAdapterTest$PrivateClass, " + + "outerName=com/android/tools/layoutlib/create" + + "/PromoteClassClassAdapterTest, innerName=PrivateClass, access=[public,static]")); + + // Test inner of inner class + log.mLog.clear(); + reader = new ClassReader(ClassWithPrivateInnerClass.class.getName()); + reader.accept(adapter, 0); + + assertTrue(log.mLog.contains("[visitInnerClass] - " + + "name=com/android/tools/layoutlib/create" + + "/PromoteClassClassAdapterTest$ClassWithPrivateInnerClass$InnerPrivateClass, " + + "outerName=com/android/tools/layoutlib/create" + + "/PromoteClassClassAdapterTest$ClassWithPrivateInnerClass, " + + "innerName=InnerPrivateClass, access=[public]")); + + } + + @Test + public void testProtectedClassPromotion() throws IOException { + ClassReader reader = new ClassReader(PackageProtectedClass.class.getName()); + LoggingClassVisitor log = new LoggingClassVisitor(); + + PromoteClassClassAdapter adapter = new PromoteClassClassAdapter(log, new HashSet<String>() { + { + add("com.android.tools.layoutlib.create.PackageProtectedClass"); + } + }); + + reader.accept(adapter, 0); + assertTrue(log.mLog.contains("[visit] - version=52, access=[public], " + + "name=com/android/tools/layoutlib/create/PackageProtectedClass, signature=null, " + + "superName=java/lang/Object, interfaces=[]")); + + } +}
\ No newline at end of file |