diff options
181 files changed, 823 insertions, 1937 deletions
diff --git a/api/6.xml b/api/6.xml index 32d0f1ed5201..74c237511618 100644 --- a/api/6.xml +++ b/api/6.xml @@ -6389,72 +6389,6 @@ visibility="public" > </field> -<field name="quickContactBadgeStyleSmallWindowLarge" - type="int" - transient="false" - volatile="false" - value="16843443" - static="true" - final="true" - deprecated="not deprecated" - visibility="public" -> -</field> -<field name="quickContactBadgeStyleSmallWindowMedium" - type="int" - transient="false" - volatile="false" - value="16843442" - static="true" - final="true" - deprecated="not deprecated" - visibility="public" -> -</field> -<field name="quickContactBadgeStyleSmallWindowSmall" - type="int" - transient="false" - volatile="false" - value="16843441" - static="true" - final="true" - deprecated="not deprecated" - visibility="public" -> -</field> -<field name="quickContactBadgeStyleWindowLarge" - type="int" - transient="false" - volatile="false" - value="16843440" - static="true" - final="true" - deprecated="not deprecated" - visibility="public" -> -</field> -<field name="quickContactBadgeStyleWindowMedium" - type="int" - transient="false" - volatile="false" - value="16843439" - static="true" - final="true" - deprecated="not deprecated" - visibility="public" -> -</field> -<field name="quickContactBadgeStyleWindowSmall" - type="int" - transient="false" - volatile="false" - value="16843438" - static="true" - final="true" - deprecated="not deprecated" - visibility="public" -> -</field> <field name="radioButtonStyle" type="int" transient="false" @@ -8842,17 +8776,6 @@ visibility="public" > </field> -<field name="wallpaperAuthor" - type="int" - transient="false" - volatile="false" - value="16843444" - static="true" - final="true" - deprecated="not deprecated" - visibility="public" -> -</field> <field name="wallpaperCloseEnterAnimation" type="int" transient="false" @@ -8875,17 +8798,6 @@ visibility="public" > </field> -<field name="wallpaperDescription" - type="int" - transient="false" - volatile="false" - value="16843445" - static="true" - final="true" - deprecated="not deprecated" - visibility="public" -> -</field> <field name="wallpaperIntraCloseEnterAnimation" type="int" transient="false" @@ -13892,8 +13804,6 @@ </parameter> <parameter name="options" type="android.os.Bundle"> </parameter> -<exception name="NetworkErrorException" type="android.accounts.NetworkErrorException"> -</exception> </method> <method name="editProperties" return="android.os.Bundle" @@ -13943,7 +13853,7 @@ </parameter> <parameter name="authTokenType" type="java.lang.String"> </parameter> -<parameter name="options" type="android.os.Bundle"> +<parameter name="loginOptions" type="android.os.Bundle"> </parameter> <exception name="NetworkErrorException" type="android.accounts.NetworkErrorException"> </exception> @@ -14007,10 +13917,8 @@ </parameter> <parameter name="authTokenType" type="java.lang.String"> </parameter> -<parameter name="options" type="android.os.Bundle"> +<parameter name="loginOptions" type="android.os.Bundle"> </parameter> -<exception name="NetworkErrorException" type="android.accounts.NetworkErrorException"> -</exception> </method> </class> <class name="Account" @@ -14275,7 +14183,7 @@ </parameter> <parameter name="password" type="java.lang.String"> </parameter> -<parameter name="userdata" type="android.os.Bundle"> +<parameter name="extras" type="android.os.Bundle"> </parameter> </method> <method name="addOnAccountsUpdatedListener" @@ -14441,7 +14349,7 @@ </parameter> <parameter name="authTokenType" type="java.lang.String"> </parameter> -<parameter name="options" type="android.os.Bundle"> +<parameter name="loginOptions" type="android.os.Bundle"> </parameter> <parameter name="activity" type="android.app.Activity"> </parameter> @@ -14491,7 +14399,7 @@ </parameter> <parameter name="addAccountOptions" type="android.os.Bundle"> </parameter> -<parameter name="getAuthTokenOptions" type="android.os.Bundle"> +<parameter name="loginOptions" type="android.os.Bundle"> </parameter> <parameter name="callback" type="android.accounts.AccountManagerCallback<android.os.Bundle>"> </parameter> @@ -14660,7 +14568,7 @@ </parameter> <parameter name="authTokenType" type="java.lang.String"> </parameter> -<parameter name="options" type="android.os.Bundle"> +<parameter name="loginOptions" type="android.os.Bundle"> </parameter> <parameter name="activity" type="android.app.Activity"> </parameter> @@ -15058,71 +14966,6 @@ > </method> </interface> -<class name="AccountManagerResponse" - extends="java.lang.Object" - abstract="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<implements name="android.os.Parcelable"> -</implements> -<method name="describeContents" - return="int" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="onError" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="errorCode" type="int"> -</parameter> -<parameter name="errorMessage" type="java.lang.String"> -</parameter> -</method> -<method name="onResult" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="result" type="android.os.Bundle"> -</parameter> -</method> -<method name="writeToParcel" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="dest" type="android.os.Parcel"> -</parameter> -<parameter name="flags" type="int"> -</parameter> -</method> -</class> <class name="AccountsException" extends="java.lang.Exception" abstract="false" @@ -24703,208 +24546,6 @@ </parameter> </method> </interface> -<class name="WallpaperInfo" - extends="java.lang.Object" - abstract="false" - static="false" - final="true" - deprecated="not deprecated" - visibility="public" -> -<implements name="android.os.Parcelable"> -</implements> -<constructor name="WallpaperInfo" - type="android.app.WallpaperInfo" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="context" type="android.content.Context"> -</parameter> -<parameter name="service" type="android.content.pm.ResolveInfo"> -</parameter> -<exception name="IOException" type="java.io.IOException"> -</exception> -<exception name="XmlPullParserException" type="org.xmlpull.v1.XmlPullParserException"> -</exception> -</constructor> -<method name="describeContents" - return="int" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="dump" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="pw" type="android.util.Printer"> -</parameter> -<parameter name="prefix" type="java.lang.String"> -</parameter> -</method> -<method name="getComponent" - return="android.content.ComponentName" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="getPackageName" - return="java.lang.String" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="getServiceInfo" - return="android.content.pm.ServiceInfo" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="getServiceName" - return="java.lang.String" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="getSettingsActivity" - return="java.lang.String" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="loadAuthor" - return="java.lang.CharSequence" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="pm" type="android.content.pm.PackageManager"> -</parameter> -<exception name="Resources.NotFoundException" type="android.content.res.Resources.NotFoundException"> -</exception> -</method> -<method name="loadDescription" - return="java.lang.CharSequence" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="pm" type="android.content.pm.PackageManager"> -</parameter> -<exception name="Resources.NotFoundException" type="android.content.res.Resources.NotFoundException"> -</exception> -</method> -<method name="loadIcon" - return="android.graphics.drawable.Drawable" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="pm" type="android.content.pm.PackageManager"> -</parameter> -</method> -<method name="loadLabel" - return="java.lang.CharSequence" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="pm" type="android.content.pm.PackageManager"> -</parameter> -</method> -<method name="loadThumbnail" - return="android.graphics.drawable.Drawable" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="pm" type="android.content.pm.PackageManager"> -</parameter> -</method> -<method name="writeToParcel" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="dest" type="android.os.Parcel"> -</parameter> -<parameter name="flags" type="int"> -</parameter> -</method> -<field name="CREATOR" - type="android.os.Parcelable.Creator" - transient="false" - volatile="false" - static="true" - final="true" - deprecated="not deprecated" - visibility="public" -> -</field> -</class> <class name="WallpaperManager" extends="java.lang.Object" abstract="false" @@ -24996,17 +24637,6 @@ <parameter name="context" type="android.content.Context"> </parameter> </method> -<method name="getWallpaperInfo" - return="android.app.WallpaperInfo" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> <method name="peekDrawable" return="android.graphics.drawable.Drawable" abstract="false" @@ -25029,29 +24659,6 @@ visibility="public" > </method> -<method name="sendWallpaperCommand" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="windowToken" type="android.os.IBinder"> -</parameter> -<parameter name="action" type="java.lang.String"> -</parameter> -<parameter name="x" type="int"> -</parameter> -<parameter name="y" type="int"> -</parameter> -<parameter name="z" type="int"> -</parameter> -<parameter name="extras" type="android.os.Bundle"> -</parameter> -</method> <method name="setBitmap" return="void" abstract="false" @@ -25097,21 +24704,6 @@ <exception name="IOException" type="java.io.IOException"> </exception> </method> -<method name="setWallpaperOffsetSteps" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="xStep" type="float"> -</parameter> -<parameter name="yStep" type="float"> -</parameter> -</method> <method name="setWallpaperOffsets" return="void" abstract="false" @@ -25144,17 +24736,6 @@ <parameter name="minimumHeight" type="int"> </parameter> </method> -<field name="ACTION_LIVE_WALLPAPER_CHOOSER" - type="java.lang.String" - transient="false" - volatile="false" - value=""android.service.wallpaper.LIVE_WALLPAPER_CHOOSER"" - static="true" - final="true" - deprecated="not deprecated" - visibility="public" -> -</field> </class> </package> <package name="android.appwidget" @@ -79940,17 +79521,6 @@ deprecated="not deprecated" visibility="public" > -<field name="CAMCORDER" - type="int" - transient="false" - volatile="false" - value="5" - static="true" - final="true" - deprecated="not deprecated" - visibility="public" -> -</field> <field name="DEFAULT" type="int" transient="false" @@ -79995,17 +79565,6 @@ visibility="public" > </field> -<field name="VOICE_RECOGNITION" - type="int" - transient="false" - volatile="false" - value="6" - static="true" - final="true" - deprecated="not deprecated" - visibility="public" -> -</field> <field name="VOICE_UPLINK" type="int" transient="false" @@ -99828,7 +99387,7 @@ visibility="public" > </field> -<field name="ECLAIR_MR1" +<field name="ECLAIR_0_1" type="int" transient="false" volatile="false" @@ -105903,17 +105462,6 @@ <parameter name="time" type="long"> </parameter> </method> -<method name="isScreenOn" - return="boolean" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> <method name="newWakeLock" return="android.os.PowerManager.WakeLock" abstract="false" @@ -123478,341 +123026,6 @@ </implements> </interface> </package> -<package name="android.service.wallpaper" -> -<class name="WallpaperService" - extends="android.app.Service" - abstract="true" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<constructor name="WallpaperService" - type="android.service.wallpaper.WallpaperService" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</constructor> -<method name="onBind" - return="android.os.IBinder" - abstract="false" - native="false" - synchronized="false" - static="false" - final="true" - deprecated="not deprecated" - visibility="public" -> -<parameter name="intent" type="android.content.Intent"> -</parameter> -</method> -<method name="onCreateEngine" - return="android.service.wallpaper.WallpaperService.Engine" - abstract="true" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<field name="SERVICE_INTERFACE" - type="java.lang.String" - transient="false" - volatile="false" - value=""android.service.wallpaper.WallpaperService"" - static="true" - final="true" - deprecated="not deprecated" - visibility="public" -> -</field> -<field name="SERVICE_META_DATA" - type="java.lang.String" - transient="false" - volatile="false" - value=""android.service.wallpaper"" - static="true" - final="true" - deprecated="not deprecated" - visibility="public" -> -</field> -</class> -<class name="WallpaperService.Engine" - extends="java.lang.Object" - abstract="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<constructor name="WallpaperService.Engine" - type="android.service.wallpaper.WallpaperService.Engine" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</constructor> -<method name="getDesiredMinimumHeight" - return="int" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="getDesiredMinimumWidth" - return="int" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="getSurfaceHolder" - return="android.view.SurfaceHolder" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="isPreview" - return="boolean" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="isVisible" - return="boolean" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="onCommand" - return="android.os.Bundle" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="action" type="java.lang.String"> -</parameter> -<parameter name="x" type="int"> -</parameter> -<parameter name="y" type="int"> -</parameter> -<parameter name="z" type="int"> -</parameter> -<parameter name="extras" type="android.os.Bundle"> -</parameter> -<parameter name="resultRequested" type="boolean"> -</parameter> -</method> -<method name="onCreate" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="surfaceHolder" type="android.view.SurfaceHolder"> -</parameter> -</method> -<method name="onDesiredSizeChanged" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="desiredWidth" type="int"> -</parameter> -<parameter name="desiredHeight" type="int"> -</parameter> -</method> -<method name="onDestroy" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="onOffsetsChanged" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="xOffset" type="float"> -</parameter> -<parameter name="yOffset" type="float"> -</parameter> -<parameter name="xOffsetStep" type="float"> -</parameter> -<parameter name="yOffsetStep" type="float"> -</parameter> -<parameter name="xPixelOffset" type="int"> -</parameter> -<parameter name="yPixelOffset" type="int"> -</parameter> -</method> -<method name="onSurfaceChanged" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="holder" type="android.view.SurfaceHolder"> -</parameter> -<parameter name="format" type="int"> -</parameter> -<parameter name="width" type="int"> -</parameter> -<parameter name="height" type="int"> -</parameter> -</method> -<method name="onSurfaceCreated" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="holder" type="android.view.SurfaceHolder"> -</parameter> -</method> -<method name="onSurfaceDestroyed" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="holder" type="android.view.SurfaceHolder"> -</parameter> -</method> -<method name="onTouchEvent" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="event" type="android.view.MotionEvent"> -</parameter> -</method> -<method name="onVisibilityChanged" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="visible" type="boolean"> -</parameter> -</method> -<method name="setTouchEventsEnabled" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="enabled" type="boolean"> -</parameter> -</method> -</class> -<class name="WallpaperSettingsActivity" - extends="android.preference.PreferenceActivity" - abstract="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<constructor name="WallpaperSettingsActivity" - type="android.service.wallpaper.WallpaperSettingsActivity" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</constructor> -<field name="EXTRA_PREVIEW_MODE" - type="java.lang.String" - transient="false" - volatile="false" - value=""android.service.wallpaper.PREVIEW_MODE"" - static="true" - final="true" - deprecated="not deprecated" - visibility="public" -> -</field> -</class> -</package> <package name="android.speech" > <class name="RecognizerIntent" @@ -158737,17 +157950,6 @@ visibility="public" > </method> -<method name="isOpaque" - return="boolean" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> <method name="isPaddingOffsetRequired" return="boolean" abstract="false" @@ -159029,19 +158231,6 @@ <parameter name="canvas" type="android.graphics.Canvas"> </parameter> </method> -<method name="onDrawScrollBars" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="true" - deprecated="not deprecated" - visibility="protected" -> -<parameter name="canvas" type="android.graphics.Canvas"> -</parameter> -</method> <method name="onFinishInflate" return="void" abstract="false" @@ -162629,17 +161818,6 @@ visibility="public" > </method> -<method name="isChildrenDrawingOrderEnabled" - return="boolean" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="protected" -> -</method> <method name="isChildrenDrawnWithCacheEnabled" return="boolean" abstract="false" @@ -163023,19 +162201,6 @@ <parameter name="enabled" type="boolean"> </parameter> </method> -<method name="setChildrenDrawingOrderEnabled" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="protected" -> -<parameter name="enabled" type="boolean"> -</parameter> -</method> <method name="setChildrenDrawnWithCacheEnabled" return="void" abstract="false" @@ -172907,17 +172072,6 @@ visibility="public" > </constructor> -<method name="getContentDisposition" - return="java.lang.String" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> <method name="getContentLength" return="long" abstract="false" @@ -172962,17 +172116,6 @@ visibility="public" > </method> -<method name="getExpiresString" - return="java.lang.String" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> <method name="getHttpStatusCode" return="int" abstract="false" @@ -173097,23 +172240,6 @@ <parameter name="w" type="android.webkit.WebView"> </parameter> </constructor> -<method name="addMessageToConsole" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="message" type="java.lang.String"> -</parameter> -<parameter name="lineNumber" type="int"> -</parameter> -<parameter name="sourceID" type="java.lang.String"> -</parameter> -</method> <method name="createWindow" return="android.webkit.WebView" abstract="false" @@ -173166,30 +172292,6 @@ visibility="public" > </method> -<method name="getVisitedHistory" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="callback" type="android.webkit.ValueCallback<java.lang.String[]>"> -</parameter> -</method> -<method name="getWebChromeClient" - return="android.webkit.WebChromeClient" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> <method name="onCloseWindow" return="void" abstract="false" @@ -173262,32 +172364,6 @@ <parameter name="resend" type="android.os.Message"> </parameter> </method> -<method name="onGeolocationPermissionsHidePrompt" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="onGeolocationPermissionsShowPrompt" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="origin" type="java.lang.String"> -</parameter> -<parameter name="callback" type="android.webkit.GeolocationPermissions.Callback"> -</parameter> -</method> <method name="onJsAlert" return="void" abstract="false" @@ -173350,17 +172426,6 @@ <parameter name="defaultValue" type="java.lang.String"> </parameter> </method> -<method name="onJsTimeout" - return="boolean" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> <method name="onLoadResource" return="void" abstract="false" @@ -173415,23 +172480,6 @@ <parameter name="newProgress" type="int"> </parameter> </method> -<method name="onReachedMaxAppCacheSize" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="spaceNeeded" type="long"> -</parameter> -<parameter name="totalUsedQuota" type="long"> -</parameter> -<parameter name="quotaUpdater" type="android.webkit.WebStorage.QuotaUpdater"> -</parameter> -</method> <method name="onReceivedError" return="void" abstract="false" @@ -173918,82 +172966,6 @@ visibility="public" > </constructor> -<method name="allow" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="origin" type="java.lang.String"> -</parameter> -</method> -<method name="clear" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="origin" type="java.lang.String"> -</parameter> -</method> -<method name="clearAll" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="getAllowed" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="origin" type="java.lang.String"> -</parameter> -<parameter name="callback" type="android.webkit.ValueCallback<java.lang.Boolean>"> -</parameter> -</method> -<method name="getInstance" - return="android.webkit.GeolocationPermissions" - abstract="false" - native="false" - synchronized="false" - static="true" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="getOrigins" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="callback" type="android.webkit.ValueCallback<java.util.Set>"> -</parameter> -</method> </class> <interface name="GeolocationPermissions.Callback" abstract="true" @@ -174991,27 +173963,6 @@ > </method> </class> -<interface name="ValueCallback" - abstract="true" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<method name="onReceiveValue" - return="void" - abstract="true" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="value" type="T"> -</parameter> -</method> -</interface> <class name="WebBackForwardList" extends="java.lang.Object" abstract="false" @@ -175087,58 +174038,6 @@ visibility="public" > </constructor> -<method name="addMessageToConsole" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="message" type="java.lang.String"> -</parameter> -<parameter name="lineNumber" type="int"> -</parameter> -<parameter name="sourceID" type="java.lang.String"> -</parameter> -</method> -<method name="getDefaultVideoPoster" - return="android.graphics.Bitmap" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="getVideoLoadingProgressView" - return="android.view.View" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="getVisitedHistory" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="callback" type="android.webkit.ValueCallback<java.lang.String[]>"> -</parameter> -</method> <method name="onCloseWindow" return="void" abstract="false" @@ -175220,17 +174119,6 @@ <parameter name="callback" type="android.webkit.GeolocationPermissions.Callback"> </parameter> </method> -<method name="onHideCustomView" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> <method name="onJsAlert" return="boolean" abstract="false" @@ -175309,17 +174197,6 @@ <parameter name="result" type="android.webkit.JsPromptResult"> </parameter> </method> -<method name="onJsTimeout" - return="boolean" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> <method name="onProgressChanged" return="void" abstract="false" @@ -175335,23 +174212,6 @@ <parameter name="newProgress" type="int"> </parameter> </method> -<method name="onReachedMaxAppCacheSize" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="spaceNeeded" type="long"> -</parameter> -<parameter name="totalUsedQuota" type="long"> -</parameter> -<parameter name="quotaUpdater" type="android.webkit.WebStorage.QuotaUpdater"> -</parameter> -</method> <method name="onReceivedIcon" return="void" abstract="false" @@ -175382,23 +174242,6 @@ <parameter name="title" type="java.lang.String"> </parameter> </method> -<method name="onReceivedTouchIconUrl" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="view" type="android.webkit.WebView"> -</parameter> -<parameter name="url" type="java.lang.String"> -</parameter> -<parameter name="precomposed" type="boolean"> -</parameter> -</method> <method name="onRequestFocus" return="void" abstract="false" @@ -175412,41 +174255,7 @@ <parameter name="view" type="android.webkit.WebView"> </parameter> </method> -<method name="onShowCustomView" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="view" type="android.view.View"> -</parameter> -<parameter name="callback" type="android.webkit.WebChromeClient.CustomViewCallback"> -</parameter> -</method> </class> -<interface name="WebChromeClient.CustomViewCallback" - abstract="true" - static="true" - final="false" - deprecated="not deprecated" - visibility="public" -> -<method name="onCustomViewHidden" - return="void" - abstract="true" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -</interface> <class name="WebHistoryItem" extends="java.lang.Object" abstract="false" @@ -175750,28 +174559,6 @@ visibility="public" > </method> -<method name="getDefaultZoom" - return="android.webkit.WebSettings.ZoomDensity" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="getDomStorageEnabled" - return="boolean" - abstract="false" - native="false" - synchronized="true" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> <method name="getFantasyFontFamily" return="java.lang.String" abstract="false" @@ -175838,17 +174625,6 @@ visibility="public" > </method> -<method name="getLoadWithOverviewMode" - return="boolean" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> <method name="getLoadsImagesAutomatically" return="boolean" abstract="false" @@ -176038,45 +174814,6 @@ <parameter name="allow" type="boolean"> </parameter> </method> -<method name="setAppCacheEnabled" - return="void" - abstract="false" - native="false" - synchronized="true" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="flag" type="boolean"> -</parameter> -</method> -<method name="setAppCacheMaxSize" - return="void" - abstract="false" - native="false" - synchronized="true" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="appCacheMaxSize" type="long"> -</parameter> -</method> -<method name="setAppCachePath" - return="void" - abstract="false" - native="false" - synchronized="true" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="appCachePath" type="java.lang.String"> -</parameter> -</method> <method name="setBlockNetworkImage" return="void" abstract="false" @@ -176194,32 +174931,6 @@ <parameter name="encoding" type="java.lang.String"> </parameter> </method> -<method name="setDefaultZoom" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="zoom" type="android.webkit.WebSettings.ZoomDensity"> -</parameter> -</method> -<method name="setDomStorageEnabled" - return="void" - abstract="false" - native="false" - synchronized="true" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="flag" type="boolean"> -</parameter> -</method> <method name="setFantasyFontFamily" return="void" abstract="false" @@ -176324,19 +175035,6 @@ <parameter name="enabled" type="boolean"> </parameter> </method> -<method name="setLoadWithOverviewMode" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="overview" type="boolean"> -</parameter> -</method> <method name="setLoadsImagesAutomatically" return="void" abstract="false" @@ -176774,39 +175472,6 @@ > </method> </class> -<class name="WebSettings.ZoomDensity" - extends="java.lang.Enum" - abstract="false" - static="true" - final="true" - deprecated="not deprecated" - visibility="public" -> -<method name="valueOf" - return="android.webkit.WebSettings.ZoomDensity" - abstract="false" - native="false" - synchronized="false" - static="true" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="name" type="java.lang.String"> -</parameter> -</method> -<method name="values" - return="android.webkit.WebSettings.ZoomDensity[]" - abstract="false" - native="false" - synchronized="false" - static="true" - final="true" - deprecated="not deprecated" - visibility="public" -> -</method> -</class> <class name="WebStorage" extends="java.lang.Object" abstract="false" @@ -176823,99 +175488,6 @@ visibility="public" > </constructor> -<method name="deleteAllData" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="deleteOrigin" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="origin" type="java.lang.String"> -</parameter> -</method> -<method name="getInstance" - return="android.webkit.WebStorage" - abstract="false" - native="false" - synchronized="false" - static="true" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="getOrigins" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="callback" type="android.webkit.ValueCallback<java.util.Map>"> -</parameter> -</method> -<method name="getQuotaForOrigin" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="origin" type="java.lang.String"> -</parameter> -<parameter name="callback" type="android.webkit.ValueCallback<java.lang.Long>"> -</parameter> -</method> -<method name="getUsageForOrigin" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="origin" type="java.lang.String"> -</parameter> -<parameter name="callback" type="android.webkit.ValueCallback<java.lang.Long>"> -</parameter> -</method> -<method name="setQuotaForOrigin" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="origin" type="java.lang.String"> -</parameter> -<parameter name="quota" type="long"> -</parameter> -</method> </class> <interface name="WebStorage.QuotaUpdater" abstract="true" @@ -177357,17 +175929,6 @@ <parameter name="vy" type="int"> </parameter> </method> -<method name="freeMemory" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> <method name="getCertificate" return="android.net.http.SslCertificate" abstract="false" diff --git a/api/current.xml b/api/current.xml index d6af516188d1..6ddd4391465e 100644 --- a/api/current.xml +++ b/api/current.xml @@ -99850,7 +99850,7 @@ visibility="public" > </field> -<field name="ECLAIR_MR1" +<field name="ECLAIR_0_1" type="int" transient="false" volatile="false" diff --git a/core/java/android/app/SearchManager.java b/core/java/android/app/SearchManager.java index 7f5a1e7bac53..2e94a2f5fcb1 100644 --- a/core/java/android/app/SearchManager.java +++ b/core/java/android/app/SearchManager.java @@ -769,17 +769,15 @@ import java.util.List; * </tr> * * <tr><th>android:icon</th> - * <td>If provided, this icon will be shown in place of the label above the search box. - * This is a reference to a drawable (icon) resource. Note that the application icon - * is also used as an icon to the left of the search box and you cannot modify this - * behavior, so including the icon attribute is unecessary and this may be - * deprecated in the future.</td> + * <td><strong>This is deprecated.</strong><br/>The default + * application icon is now always used, so this attribute is + * obsolete.</td> * <td align="center">No</td> * </tr> * * <tr><th>android:hint</th> - * <td>This is the text to display in the search text field when no user text has been - * entered.</td> + * <td>This is the text to display in the search text field when no text + * has been entered by the user.</td> * <td align="center">No</td> * </tr> * @@ -790,17 +788,14 @@ import java.util.List; * <tbody> * <tr><th>showSearchLabelAsBadge</th> * <td>If set, this flag enables the display of the search target (label) - * above the search box. If this flag and showSearchIconAsBadge - * (see below) are both not set, no badge will be shown.</td> + * above the search box. As an alternative, you may + * want to instead use "hint" text in the search box. + * See the "android:hint" attribute above.</td> * </tr> * <tr><th>showSearchIconAsBadge</th> - * <td>If set, this flag enables the display of the search target (icon) - * above the search box. If this flag and showSearchLabelAsBadge - * (see above) are both not set, no badge will be shown. If both flags - * are set, showSearchIconAsBadge has precedence and the icon will be - * shown. Because the application icon is now used to the left of the - * search box by default, using this search mode is no longer necessary - * and may be deprecated in the future.</td> + * <td><strong>This is deprecated.</strong><br/>The default + * application icon is now always used, so this + * option is obsolete.</td> * </tr> * <tr><th>queryRewriteFromData</th> * <td>If set, this flag causes the suggestion column SUGGEST_COLUMN_INTENT_DATA diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index 398f2114931c..0085f2620924 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -1678,6 +1678,7 @@ public class Intent implements Parcelable { * <ul> * <li><em>state</em> - 0 for unplugged, 1 for plugged. </li> * <li><em>name</em> - Headset type, human readable string </li> + * <li><em>microphone</em> - 1 if headset has a microphone, 0 otherwise </li> * </ul> * </ul> */ diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java index d4aaba3cf570..ee18e88fd153 100644 --- a/core/java/android/os/Build.java +++ b/core/java/android/os/Build.java @@ -158,9 +158,9 @@ public class Build { public static final int ECLAIR = 5; /** - * Current work on Eclair MR1. + * December 2009: Android 2.0.1 */ - public static final int ECLAIR_MR1 = 6; + public static final int ECLAIR_0_1 = 6; } /** The type of build, like "user" or "eng". */ diff --git a/core/java/android/pim/vcard/VCardComposer.java b/core/java/android/pim/vcard/VCardComposer.java index f9dce255056e..78075952937f 100644 --- a/core/java/android/pim/vcard/VCardComposer.java +++ b/core/java/android/pim/vcard/VCardComposer.java @@ -414,8 +414,10 @@ public class VCardComposer { appendVCardLine(builder, VCARD_PROPERTY_FULL_NAME, phoneName, needCharset, false); appendVCardLine(builder, VCARD_PROPERTY_NAME, phoneName, needCharset, false); - String label = Integer.toString(phonetype); - appendVCardTelephoneLine(builder, phonetype, label, phoneNumber); + if (!TextUtils.isEmpty(phoneNumber)) { + String label = Integer.toString(phonetype); + appendVCardTelephoneLine(builder, phonetype, label, phoneNumber); + } appendVCardLine(builder, VCARD_PROPERTY_END, VCARD_DATA_VCARD); diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index cb3dc166f7a4..7433a799e4e7 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -3638,6 +3638,19 @@ public final class Settings { public static final String LAST_KMSG_KB = "last_kmsg_kb"; /** + * The length of time in milli-seconds that automatic small adjustments to + * SystemClock are ignored if NITZ_UPDATE_DIFF is not exceeded. + */ + public static final String NITZ_UPDATE_SPACING = "nitz_update_spacing"; + + /** + * If the NITZ_UPDATE_DIFF time is exceeded then an automatic adjustment + * to SystemClock will be allowed even if NITZ_UPDATE_SPACING has not been + * exceeded. + */ + public static final String NITZ_UPDATE_DIFF = "nitz_update_diff"; + + /** * @deprecated * @hide */ diff --git a/core/java/com/android/internal/widget/SlidingTab.java b/core/java/com/android/internal/widget/SlidingTab.java index dfd4f4006529..6ea64609acdb 100644 --- a/core/java/com/android/internal/widget/SlidingTab.java +++ b/core/java/com/android/internal/widget/SlidingTab.java @@ -37,8 +37,11 @@ import com.android.internal.R; /** * A special widget containing two Sliders and a threshold for each. Moving either slider beyond - * the threshold will cause the registered OnTriggerListener.onTrigger() to be called with - * {@link OnTriggerListener#LEFT_HANDLE} or {@link OnTriggerListener#RIGHT_HANDLE} to be called. + * the threshold will cause the registered OnTriggerListener.onTrigger() to be called with + * whichHandle being {@link OnTriggerListener#LEFT_HANDLE} or {@link OnTriggerListener#RIGHT_HANDLE} + * Equivalently, selecting a tab will result in a call to + * {@link OnTriggerListener#onGrabbedStateChange(View, int)} with one of these two states. Releasing + * the tab will result in whichHandle being {@link OnTriggerListener#NO_HANDLE}. * */ public class SlidingTab extends ViewGroup { @@ -50,7 +53,7 @@ public class SlidingTab extends ViewGroup { private static final int MSG_ANIMATE = 100; // TODO: Make these configurable - private static final float TARGET_ZONE = 2.0f / 3.0f; + private static final float THRESHOLD = 2.0f / 3.0f; private static final long VIBRATE_SHORT = 30; private static final long VIBRATE_LONG = 40; @@ -71,35 +74,35 @@ public class SlidingTab extends ViewGroup { private Slider mRightSlider; private Slider mCurrentSlider; private boolean mTracking; - private float mTargetZone; + private float mThreshold; private Slider mOtherSlider; private boolean mAnimating; /** * Interface definition for a callback to be invoked when a tab is triggered - * by moving it beyond a target zone. + * by moving it beyond a threshold. */ public interface OnTriggerListener { /** * The interface was triggered because the user let go of the handle without reaching the - * target zone. + * threshold. */ public static final int NO_HANDLE = 0; /** * The interface was triggered because the user grabbed the left handle and moved it past - * the target zone. + * the threshold. */ public static final int LEFT_HANDLE = 1; /** * The interface was triggered because the user grabbed the right handle and moved it past - * the target zone. + * the threshold. */ public static final int RIGHT_HANDLE = 2; /** - * Called when the user moves a handle beyond the target zone. + * Called when the user moves a handle beyond the threshold. * * @param v The view that was triggered. * @param whichHandle Which "dial handle" the user grabbed, @@ -146,6 +149,7 @@ public class SlidingTab extends ViewGroup { private final ImageView tab; private final TextView text; private final ImageView target; + private int currentState = STATE_NORMAL; /** * Constructor @@ -223,6 +227,7 @@ public class SlidingTab extends ViewGroup { } else { text.setTextAppearance(text.getContext(), R.style.TextAppearance_SlidingTabNormal); } + currentState = state; } void showTarget() { @@ -260,8 +265,8 @@ public class SlidingTab extends ViewGroup { final int parentWidth = r - l; final int parentHeight = b - t; - final int leftTarget = (int) (TARGET_ZONE * parentWidth) - targetWidth + handleWidth / 2; - final int rightTarget = (int) ((1.0f - TARGET_ZONE) * parentWidth) - handleWidth / 2; + final int leftTarget = (int) (THRESHOLD * parentWidth) - targetWidth + handleWidth / 2; + final int rightTarget = (int) ((1.0f - THRESHOLD) * parentWidth) - handleWidth / 2; final int left = (parentWidth - handleWidth) / 2; final int right = left + handleWidth; @@ -286,8 +291,8 @@ public class SlidingTab extends ViewGroup { // vertical final int targetLeft = (parentWidth - targetWidth) / 2; final int targetRight = (parentWidth + targetWidth) / 2; - final int top = (int) (TARGET_ZONE * parentHeight) + handleHeight / 2 - targetHeight; - final int bottom = (int) ((1.0f - TARGET_ZONE) * parentHeight) - handleHeight / 2; + final int top = (int) (THRESHOLD * parentHeight) + handleHeight / 2 - targetHeight; + final int bottom = (int) ((1.0f - THRESHOLD) * parentHeight) - handleHeight / 2; if (alignment == ALIGN_TOP) { tab.layout(left, 0, right, handleHeight); text.layout(left, 0 - parentHeight, right, 0); @@ -300,12 +305,34 @@ public class SlidingTab extends ViewGroup { } } + public void updateDrawableStates() { + setState(currentState); + } + + /** + * Ensure all the dependent widgets are measured. + */ + public void measure() { + tab.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), + View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); + text.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), + View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); + } + + /** + * Get the measured tab width. Must be called after {@link Slider#measure()}. + * @return + */ public int getTabWidth() { - return tab.getDrawable().getIntrinsicWidth(); + return tab.getMeasuredWidth(); } + /** + * Get the measured tab width. Must be called after {@link Slider#measure()}. + * @return + */ public int getTabHeight() { - return tab.getDrawable().getIntrinsicHeight(); + return tab.getMeasuredHeight(); } } @@ -351,11 +378,12 @@ public class SlidingTab extends ViewGroup { throw new RuntimeException(LOG_TAG + " cannot have UNSPECIFIED dimensions"); } - final float density = mDensity; - final int leftTabWidth = (int) (density * mLeftSlider.getTabWidth() + 0.5f); - final int rightTabWidth = (int) (density * mRightSlider.getTabWidth() + 0.5f); - final int leftTabHeight = (int) (density * mLeftSlider.getTabHeight() + 0.5f); - final int rightTabHeight = (int) (density * mRightSlider.getTabHeight() + 0.5f); + mLeftSlider.measure(); + mRightSlider.measure(); + final int leftTabWidth = mLeftSlider.getTabWidth(); + final int rightTabWidth = mRightSlider.getTabWidth(); + final int leftTabHeight = mLeftSlider.getTabHeight(); + final int rightTabHeight = mRightSlider.getTabHeight(); final int width; final int height; if (isHorizontal()) { @@ -400,12 +428,12 @@ public class SlidingTab extends ViewGroup { if (leftHit) { mCurrentSlider = mLeftSlider; mOtherSlider = mRightSlider; - mTargetZone = isHorizontal() ? TARGET_ZONE : 1.0f - TARGET_ZONE; + mThreshold = isHorizontal() ? THRESHOLD : 1.0f - THRESHOLD; setGrabbedState(OnTriggerListener.LEFT_HANDLE); } else { mCurrentSlider = mRightSlider; mOtherSlider = mLeftSlider; - mTargetZone = isHorizontal() ? 1.0f - TARGET_ZONE : TARGET_ZONE; + mThreshold = isHorizontal() ? 1.0f - THRESHOLD : THRESHOLD; setGrabbedState(OnTriggerListener.RIGHT_HANDLE); } mCurrentSlider.setState(Slider.STATE_PRESSED); @@ -429,16 +457,16 @@ public class SlidingTab extends ViewGroup { case MotionEvent.ACTION_MOVE: moveHandle(x, y); float position = isHorizontal() ? x : y; - float target = mTargetZone * (isHorizontal() ? getWidth() : getHeight()); - boolean targetZoneReached; + float target = mThreshold * (isHorizontal() ? getWidth() : getHeight()); + boolean thresholdReached; if (isHorizontal()) { - targetZoneReached = mCurrentSlider == mLeftSlider ? + thresholdReached = mCurrentSlider == mLeftSlider ? position > target : position < target; } else { - targetZoneReached = mCurrentSlider == mLeftSlider ? + thresholdReached = mCurrentSlider == mLeftSlider ? position < target : position > target; } - if (!mTriggered && targetZoneReached) { + if (!mTriggered && thresholdReached) { mTriggered = true; mTracking = false; mCurrentSlider.setState(Slider.STATE_ACTIVE); @@ -527,6 +555,7 @@ public class SlidingTab extends ViewGroup { mLeftSlider.setTarget(targetId); mLeftSlider.setBarBackgroundResource(barId); mLeftSlider.setTabBackgroundResource(tabId); + mLeftSlider.updateDrawableStates(); } /** @@ -554,6 +583,7 @@ public class SlidingTab extends ViewGroup { mRightSlider.setTarget(targetId); mRightSlider.setBarBackgroundResource(barId); mRightSlider.setTabBackgroundResource(tabId); + mRightSlider.updateDrawableStates(); } /** diff --git a/core/res/res/drawable-hdpi/blank_tile.png b/core/res/res/drawable-hdpi/blank_tile.png Binary files differindex e2a386cac381..63b9296b1276 100644 --- a/core/res/res/drawable-hdpi/blank_tile.png +++ b/core/res/res/drawable-hdpi/blank_tile.png diff --git a/core/res/res/drawable-hdpi/ic_jog_dial_answer.png b/core/res/res/drawable-hdpi/ic_jog_dial_answer.png Binary files differnew file mode 100644 index 000000000000..ca0a825ffe8e --- /dev/null +++ b/core/res/res/drawable-hdpi/ic_jog_dial_answer.png diff --git a/core/res/res/drawable-hdpi/ic_jog_dial_answer_and_end.png b/core/res/res/drawable-hdpi/ic_jog_dial_answer_and_end.png Binary files differnew file mode 100644 index 000000000000..82237bdd8d51 --- /dev/null +++ b/core/res/res/drawable-hdpi/ic_jog_dial_answer_and_end.png diff --git a/core/res/res/drawable-hdpi/ic_jog_dial_answer_and_hold.png b/core/res/res/drawable-hdpi/ic_jog_dial_answer_and_hold.png Binary files differnew file mode 100644 index 000000000000..4946adab1e54 --- /dev/null +++ b/core/res/res/drawable-hdpi/ic_jog_dial_answer_and_hold.png diff --git a/core/res/res/drawable-hdpi/ic_jog_dial_decline.png b/core/res/res/drawable-hdpi/ic_jog_dial_decline.png Binary files differnew file mode 100644 index 000000000000..006a6e4f02dd --- /dev/null +++ b/core/res/res/drawable-hdpi/ic_jog_dial_decline.png diff --git a/core/res/res/drawable-hdpi/jog_tab_bar_confirm_gray.9.png b/core/res/res/drawable-hdpi/jog_tab_bar_confirm_gray.9.png Binary files differdeleted file mode 100644 index 92db44f5491f..000000000000 --- a/core/res/res/drawable-hdpi/jog_tab_bar_confirm_gray.9.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/jog_tab_bar_confirm_green.9.png b/core/res/res/drawable-hdpi/jog_tab_bar_confirm_green.9.png Binary files differdeleted file mode 100644 index 0bed1a0c54bf..000000000000 --- a/core/res/res/drawable-hdpi/jog_tab_bar_confirm_green.9.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/jog_tab_bar_confirm_red.9.png b/core/res/res/drawable-hdpi/jog_tab_bar_confirm_red.9.png Binary files differdeleted file mode 100644 index 81fbe5a42798..000000000000 --- a/core/res/res/drawable-hdpi/jog_tab_bar_confirm_red.9.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/jog_tab_bar_confirm_yellow.9.png b/core/res/res/drawable-hdpi/jog_tab_bar_confirm_yellow.9.png Binary files differdeleted file mode 100644 index d9c33fb43a6a..000000000000 --- a/core/res/res/drawable-hdpi/jog_tab_bar_confirm_yellow.9.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/jog_tab_bar_left_end_confirm_gray.9.png b/core/res/res/drawable-hdpi/jog_tab_bar_left_end_confirm_gray.9.png Binary files differnew file mode 100644 index 000000000000..53ed1367cc58 --- /dev/null +++ b/core/res/res/drawable-hdpi/jog_tab_bar_left_end_confirm_gray.9.png diff --git a/core/res/res/drawable-hdpi/jog_tab_bar_left_end_confirm_green.9.png b/core/res/res/drawable-hdpi/jog_tab_bar_left_end_confirm_green.9.png Binary files differnew file mode 100644 index 000000000000..64557908b261 --- /dev/null +++ b/core/res/res/drawable-hdpi/jog_tab_bar_left_end_confirm_green.9.png diff --git a/core/res/res/drawable-hdpi/jog_tab_bar_left_end_confirm_red.9.png b/core/res/res/drawable-hdpi/jog_tab_bar_left_end_confirm_red.9.png Binary files differnew file mode 100644 index 000000000000..49bb9c151252 --- /dev/null +++ b/core/res/res/drawable-hdpi/jog_tab_bar_left_end_confirm_red.9.png diff --git a/core/res/res/drawable-hdpi/jog_tab_bar_left_end_confirm_yellow.9.png b/core/res/res/drawable-hdpi/jog_tab_bar_left_end_confirm_yellow.9.png Binary files differnew file mode 100644 index 000000000000..b3c4c4c78dbc --- /dev/null +++ b/core/res/res/drawable-hdpi/jog_tab_bar_left_end_confirm_yellow.9.png diff --git a/core/res/res/drawable-hdpi/jog_tab_bar_left_end_normal.9.png b/core/res/res/drawable-hdpi/jog_tab_bar_left_end_normal.9.png Binary files differnew file mode 100644 index 000000000000..00dea6ecb4cd --- /dev/null +++ b/core/res/res/drawable-hdpi/jog_tab_bar_left_end_normal.9.png diff --git a/core/res/res/drawable-hdpi/jog_tab_bar_left_end_pressed.9.png b/core/res/res/drawable-hdpi/jog_tab_bar_left_end_pressed.9.png Binary files differnew file mode 100644 index 000000000000..45b18508b0ca --- /dev/null +++ b/core/res/res/drawable-hdpi/jog_tab_bar_left_end_pressed.9.png diff --git a/core/res/res/drawable-hdpi/jog_tab_bar_normal.9.png b/core/res/res/drawable-hdpi/jog_tab_bar_normal.9.png Binary files differdeleted file mode 100644 index 1cf7f1c54816..000000000000 --- a/core/res/res/drawable-hdpi/jog_tab_bar_normal.9.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/jog_tab_bar_pressed.9.png b/core/res/res/drawable-hdpi/jog_tab_bar_pressed.9.png Binary files differdeleted file mode 100644 index c7b367e41e42..000000000000 --- a/core/res/res/drawable-hdpi/jog_tab_bar_pressed.9.png +++ /dev/null diff --git a/core/res/res/drawable-hdpi/jog_tab_bar_right_end_confirm_gray.9.png b/core/res/res/drawable-hdpi/jog_tab_bar_right_end_confirm_gray.9.png Binary files differnew file mode 100644 index 000000000000..35b35296f07a --- /dev/null +++ b/core/res/res/drawable-hdpi/jog_tab_bar_right_end_confirm_gray.9.png diff --git a/core/res/res/drawable-hdpi/jog_tab_bar_right_end_confirm_green.9.png b/core/res/res/drawable-hdpi/jog_tab_bar_right_end_confirm_green.9.png Binary files differnew file mode 100644 index 000000000000..720de7f04a96 --- /dev/null +++ b/core/res/res/drawable-hdpi/jog_tab_bar_right_end_confirm_green.9.png diff --git a/core/res/res/drawable-hdpi/jog_tab_bar_right_end_confirm_red.9.png b/core/res/res/drawable-hdpi/jog_tab_bar_right_end_confirm_red.9.png Binary files differnew file mode 100644 index 000000000000..b3387be61344 --- /dev/null +++ b/core/res/res/drawable-hdpi/jog_tab_bar_right_end_confirm_red.9.png diff --git a/core/res/res/drawable-hdpi/jog_tab_bar_right_end_confirm_yellow.9.png b/core/res/res/drawable-hdpi/jog_tab_bar_right_end_confirm_yellow.9.png Binary files differnew file mode 100644 index 000000000000..7ddfbcc6c5c3 --- /dev/null +++ b/core/res/res/drawable-hdpi/jog_tab_bar_right_end_confirm_yellow.9.png diff --git a/core/res/res/drawable-hdpi/jog_tab_bar_right_end_normal.9.png b/core/res/res/drawable-hdpi/jog_tab_bar_right_end_normal.9.png Binary files differnew file mode 100644 index 000000000000..1855e5f622ab --- /dev/null +++ b/core/res/res/drawable-hdpi/jog_tab_bar_right_end_normal.9.png diff --git a/core/res/res/drawable-hdpi/jog_tab_bar_right_end_pressed.9.png b/core/res/res/drawable-hdpi/jog_tab_bar_right_end_pressed.9.png Binary files differnew file mode 100644 index 000000000000..844f30467a90 --- /dev/null +++ b/core/res/res/drawable-hdpi/jog_tab_bar_right_end_pressed.9.png diff --git a/core/res/res/drawable-hdpi/loading_tile.png b/core/res/res/drawable-hdpi/loading_tile.png Binary files differindex 691ca45c8ca4..f5a80c953979 100644 --- a/core/res/res/drawable-hdpi/loading_tile.png +++ b/core/res/res/drawable-hdpi/loading_tile.png diff --git a/core/res/res/drawable-hdpi/no_tile_128.png b/core/res/res/drawable-hdpi/no_tile_128.png Binary files differindex 86b998dd6084..a9b007d45ae9 100644 --- a/core/res/res/drawable-hdpi/no_tile_128.png +++ b/core/res/res/drawable-hdpi/no_tile_128.png diff --git a/core/res/res/drawable-land-hdpi/jog_tab_bar_confirm_gray.9.png b/core/res/res/drawable-land-hdpi/jog_tab_bar_confirm_gray.9.png Binary files differdeleted file mode 100644 index c0f7706e3475..000000000000 --- a/core/res/res/drawable-land-hdpi/jog_tab_bar_confirm_gray.9.png +++ /dev/null diff --git a/core/res/res/drawable-land-hdpi/jog_tab_bar_confirm_green.9.png b/core/res/res/drawable-land-hdpi/jog_tab_bar_confirm_green.9.png Binary files differdeleted file mode 100644 index 0f2ce1392013..000000000000 --- a/core/res/res/drawable-land-hdpi/jog_tab_bar_confirm_green.9.png +++ /dev/null diff --git a/core/res/res/drawable-land-hdpi/jog_tab_bar_confirm_red.9.png b/core/res/res/drawable-land-hdpi/jog_tab_bar_confirm_red.9.png Binary files differdeleted file mode 100644 index a34eb7d36283..000000000000 --- a/core/res/res/drawable-land-hdpi/jog_tab_bar_confirm_red.9.png +++ /dev/null diff --git a/core/res/res/drawable-land-hdpi/jog_tab_bar_confirm_yellow.9.png b/core/res/res/drawable-land-hdpi/jog_tab_bar_confirm_yellow.9.png Binary files differdeleted file mode 100644 index e1433562a5dc..000000000000 --- a/core/res/res/drawable-land-hdpi/jog_tab_bar_confirm_yellow.9.png +++ /dev/null diff --git a/core/res/res/drawable-land-hdpi/jog_tab_bar_left_end_confirm_gray.9.png b/core/res/res/drawable-land-hdpi/jog_tab_bar_left_end_confirm_gray.9.png Binary files differnew file mode 100644 index 000000000000..76f76bc1d83b --- /dev/null +++ b/core/res/res/drawable-land-hdpi/jog_tab_bar_left_end_confirm_gray.9.png diff --git a/core/res/res/drawable-land-hdpi/jog_tab_bar_left_end_confirm_green.9.png b/core/res/res/drawable-land-hdpi/jog_tab_bar_left_end_confirm_green.9.png Binary files differnew file mode 100644 index 000000000000..d070fad28063 --- /dev/null +++ b/core/res/res/drawable-land-hdpi/jog_tab_bar_left_end_confirm_green.9.png diff --git a/core/res/res/drawable-land-hdpi/jog_tab_bar_left_end_confirm_red.9.png b/core/res/res/drawable-land-hdpi/jog_tab_bar_left_end_confirm_red.9.png Binary files differnew file mode 100644 index 000000000000..8d38ea629457 --- /dev/null +++ b/core/res/res/drawable-land-hdpi/jog_tab_bar_left_end_confirm_red.9.png diff --git a/core/res/res/drawable-land-hdpi/jog_tab_bar_left_end_confirm_yellow.9.png b/core/res/res/drawable-land-hdpi/jog_tab_bar_left_end_confirm_yellow.9.png Binary files differnew file mode 100644 index 000000000000..2da4677c9d74 --- /dev/null +++ b/core/res/res/drawable-land-hdpi/jog_tab_bar_left_end_confirm_yellow.9.png diff --git a/core/res/res/drawable-land-hdpi/jog_tab_bar_left_end_normal.9.png b/core/res/res/drawable-land-hdpi/jog_tab_bar_left_end_normal.9.png Binary files differnew file mode 100644 index 000000000000..a18165297fba --- /dev/null +++ b/core/res/res/drawable-land-hdpi/jog_tab_bar_left_end_normal.9.png diff --git a/core/res/res/drawable-land-hdpi/jog_tab_bar_left_end_pressed.9.png b/core/res/res/drawable-land-hdpi/jog_tab_bar_left_end_pressed.9.png Binary files differnew file mode 100644 index 000000000000..6cf31316b774 --- /dev/null +++ b/core/res/res/drawable-land-hdpi/jog_tab_bar_left_end_pressed.9.png diff --git a/core/res/res/drawable-land-hdpi/jog_tab_bar_normal.9.png b/core/res/res/drawable-land-hdpi/jog_tab_bar_normal.9.png Binary files differdeleted file mode 100644 index b5837f77bba4..000000000000 --- a/core/res/res/drawable-land-hdpi/jog_tab_bar_normal.9.png +++ /dev/null diff --git a/core/res/res/drawable-land-hdpi/jog_tab_bar_pressed.9.png b/core/res/res/drawable-land-hdpi/jog_tab_bar_pressed.9.png Binary files differdeleted file mode 100644 index 79ad83d0d0e2..000000000000 --- a/core/res/res/drawable-land-hdpi/jog_tab_bar_pressed.9.png +++ /dev/null diff --git a/core/res/res/drawable-land-hdpi/jog_tab_bar_right_end_confirm_gray.9.png b/core/res/res/drawable-land-hdpi/jog_tab_bar_right_end_confirm_gray.9.png Binary files differnew file mode 100644 index 000000000000..05541f37758c --- /dev/null +++ b/core/res/res/drawable-land-hdpi/jog_tab_bar_right_end_confirm_gray.9.png diff --git a/core/res/res/drawable-land-hdpi/jog_tab_bar_right_end_confirm_green.9.png b/core/res/res/drawable-land-hdpi/jog_tab_bar_right_end_confirm_green.9.png Binary files differnew file mode 100644 index 000000000000..0bf0ea903d99 --- /dev/null +++ b/core/res/res/drawable-land-hdpi/jog_tab_bar_right_end_confirm_green.9.png diff --git a/core/res/res/drawable-land-hdpi/jog_tab_bar_right_end_confirm_red.9.png b/core/res/res/drawable-land-hdpi/jog_tab_bar_right_end_confirm_red.9.png Binary files differnew file mode 100644 index 000000000000..b82a30f2ef17 --- /dev/null +++ b/core/res/res/drawable-land-hdpi/jog_tab_bar_right_end_confirm_red.9.png diff --git a/core/res/res/drawable-land-hdpi/jog_tab_bar_right_end_confirm_yellow.9.png b/core/res/res/drawable-land-hdpi/jog_tab_bar_right_end_confirm_yellow.9.png Binary files differnew file mode 100644 index 000000000000..5f530fa0a95e --- /dev/null +++ b/core/res/res/drawable-land-hdpi/jog_tab_bar_right_end_confirm_yellow.9.png diff --git a/core/res/res/drawable-land-hdpi/jog_tab_bar_right_end_normal.9.png b/core/res/res/drawable-land-hdpi/jog_tab_bar_right_end_normal.9.png Binary files differnew file mode 100644 index 000000000000..d8bbd17087b2 --- /dev/null +++ b/core/res/res/drawable-land-hdpi/jog_tab_bar_right_end_normal.9.png diff --git a/core/res/res/drawable-land-hdpi/jog_tab_bar_right_end_pressed.9.png b/core/res/res/drawable-land-hdpi/jog_tab_bar_right_end_pressed.9.png Binary files differnew file mode 100644 index 000000000000..c40808780796 --- /dev/null +++ b/core/res/res/drawable-land-hdpi/jog_tab_bar_right_end_pressed.9.png diff --git a/core/res/res/drawable-land-hdpi/jog_tab_left_confirm_gray.png b/core/res/res/drawable-land-hdpi/jog_tab_left_confirm_gray.png Binary files differindex 9c63b22df744..dff38b4357d5 100644 --- a/core/res/res/drawable-land-hdpi/jog_tab_left_confirm_gray.png +++ b/core/res/res/drawable-land-hdpi/jog_tab_left_confirm_gray.png diff --git a/core/res/res/drawable-land-hdpi/jog_tab_left_confirm_green.png b/core/res/res/drawable-land-hdpi/jog_tab_left_confirm_green.png Binary files differindex 4f9877c15bc2..88a95be8c8b8 100644 --- a/core/res/res/drawable-land-hdpi/jog_tab_left_confirm_green.png +++ b/core/res/res/drawable-land-hdpi/jog_tab_left_confirm_green.png diff --git a/core/res/res/drawable-land-hdpi/jog_tab_left_confirm_red.png b/core/res/res/drawable-land-hdpi/jog_tab_left_confirm_red.png Binary files differindex bdce97d5866b..b9486ea76fb1 100644 --- a/core/res/res/drawable-land-hdpi/jog_tab_left_confirm_red.png +++ b/core/res/res/drawable-land-hdpi/jog_tab_left_confirm_red.png diff --git a/core/res/res/drawable-land-hdpi/jog_tab_left_confirm_yellow.png b/core/res/res/drawable-land-hdpi/jog_tab_left_confirm_yellow.png Binary files differindex 327fc2cc5d81..9144d7ab50ef 100644 --- a/core/res/res/drawable-land-hdpi/jog_tab_left_confirm_yellow.png +++ b/core/res/res/drawable-land-hdpi/jog_tab_left_confirm_yellow.png diff --git a/core/res/res/drawable-land-hdpi/jog_tab_left_normal.png b/core/res/res/drawable-land-hdpi/jog_tab_left_normal.png Binary files differindex e69d91cb8c22..b2d76954d864 100644 --- a/core/res/res/drawable-land-hdpi/jog_tab_left_normal.png +++ b/core/res/res/drawable-land-hdpi/jog_tab_left_normal.png diff --git a/core/res/res/drawable-land-hdpi/jog_tab_left_pressed.png b/core/res/res/drawable-land-hdpi/jog_tab_left_pressed.png Binary files differindex b6153d8af447..55e170d418ed 100644 --- a/core/res/res/drawable-land-hdpi/jog_tab_left_pressed.png +++ b/core/res/res/drawable-land-hdpi/jog_tab_left_pressed.png diff --git a/core/res/res/drawable-land-hdpi/jog_tab_right_confirm_gray.png b/core/res/res/drawable-land-hdpi/jog_tab_right_confirm_gray.png Binary files differindex 6e3e00b573fa..131b7201baea 100644 --- a/core/res/res/drawable-land-hdpi/jog_tab_right_confirm_gray.png +++ b/core/res/res/drawable-land-hdpi/jog_tab_right_confirm_gray.png diff --git a/core/res/res/drawable-land-hdpi/jog_tab_right_confirm_green.png b/core/res/res/drawable-land-hdpi/jog_tab_right_confirm_green.png Binary files differindex dae9efcbfc2b..c36b0adaffd8 100644 --- a/core/res/res/drawable-land-hdpi/jog_tab_right_confirm_green.png +++ b/core/res/res/drawable-land-hdpi/jog_tab_right_confirm_green.png diff --git a/core/res/res/drawable-land-hdpi/jog_tab_right_confirm_red.png b/core/res/res/drawable-land-hdpi/jog_tab_right_confirm_red.png Binary files differindex 9de3158b3ac4..d388619d6dda 100644 --- a/core/res/res/drawable-land-hdpi/jog_tab_right_confirm_red.png +++ b/core/res/res/drawable-land-hdpi/jog_tab_right_confirm_red.png diff --git a/core/res/res/drawable-land-hdpi/jog_tab_right_confirm_yellow.png b/core/res/res/drawable-land-hdpi/jog_tab_right_confirm_yellow.png Binary files differindex 8c9f180c87b6..24f1aec1ec08 100644 --- a/core/res/res/drawable-land-hdpi/jog_tab_right_confirm_yellow.png +++ b/core/res/res/drawable-land-hdpi/jog_tab_right_confirm_yellow.png diff --git a/core/res/res/drawable-land-hdpi/jog_tab_right_normal.png b/core/res/res/drawable-land-hdpi/jog_tab_right_normal.png Binary files differindex 0c4faf2ce5b9..9111649a42fc 100644 --- a/core/res/res/drawable-land-hdpi/jog_tab_right_normal.png +++ b/core/res/res/drawable-land-hdpi/jog_tab_right_normal.png diff --git a/core/res/res/drawable-land-hdpi/jog_tab_right_pressed.png b/core/res/res/drawable-land-hdpi/jog_tab_right_pressed.png Binary files differindex 4ec7b5633679..3bd2e5ba441a 100644 --- a/core/res/res/drawable-land-hdpi/jog_tab_right_pressed.png +++ b/core/res/res/drawable-land-hdpi/jog_tab_right_pressed.png diff --git a/core/res/res/drawable-land-mdpi/jog_tab_bar_left_end_confirm_gray.9.png b/core/res/res/drawable-land-mdpi/jog_tab_bar_left_end_confirm_gray.9.png Binary files differnew file mode 100644 index 000000000000..61222f41b8e9 --- /dev/null +++ b/core/res/res/drawable-land-mdpi/jog_tab_bar_left_end_confirm_gray.9.png diff --git a/core/res/res/drawable-land-mdpi/jog_tab_bar_left_end_confirm_green.9.png b/core/res/res/drawable-land-mdpi/jog_tab_bar_left_end_confirm_green.9.png Binary files differnew file mode 100644 index 000000000000..3060f7264dce --- /dev/null +++ b/core/res/res/drawable-land-mdpi/jog_tab_bar_left_end_confirm_green.9.png diff --git a/core/res/res/drawable-land-mdpi/jog_tab_bar_left_end_confirm_red.9.png b/core/res/res/drawable-land-mdpi/jog_tab_bar_left_end_confirm_red.9.png Binary files differnew file mode 100644 index 000000000000..cee7bf501a24 --- /dev/null +++ b/core/res/res/drawable-land-mdpi/jog_tab_bar_left_end_confirm_red.9.png diff --git a/core/res/res/drawable-land-mdpi/jog_tab_bar_left_end_confirm_yellow.9.png b/core/res/res/drawable-land-mdpi/jog_tab_bar_left_end_confirm_yellow.9.png Binary files differnew file mode 100644 index 000000000000..4bd56d11d95f --- /dev/null +++ b/core/res/res/drawable-land-mdpi/jog_tab_bar_left_end_confirm_yellow.9.png diff --git a/core/res/res/drawable-land-mdpi/jog_tab_bar_left_end_normal.9.png b/core/res/res/drawable-land-mdpi/jog_tab_bar_left_end_normal.9.png Binary files differnew file mode 100644 index 000000000000..367e887c405b --- /dev/null +++ b/core/res/res/drawable-land-mdpi/jog_tab_bar_left_end_normal.9.png diff --git a/core/res/res/drawable-land-mdpi/jog_tab_bar_left_end_pressed.9.png b/core/res/res/drawable-land-mdpi/jog_tab_bar_left_end_pressed.9.png Binary files differnew file mode 100644 index 000000000000..02f3f275505c --- /dev/null +++ b/core/res/res/drawable-land-mdpi/jog_tab_bar_left_end_pressed.9.png diff --git a/core/res/res/drawable-land-mdpi/jog_tab_bar_right_end_confirm_gray.9.png b/core/res/res/drawable-land-mdpi/jog_tab_bar_right_end_confirm_gray.9.png Binary files differnew file mode 100644 index 000000000000..bfaba2fe0955 --- /dev/null +++ b/core/res/res/drawable-land-mdpi/jog_tab_bar_right_end_confirm_gray.9.png diff --git a/core/res/res/drawable-land-mdpi/jog_tab_bar_right_end_confirm_green.9.png b/core/res/res/drawable-land-mdpi/jog_tab_bar_right_end_confirm_green.9.png Binary files differnew file mode 100644 index 000000000000..d35fe7b25047 --- /dev/null +++ b/core/res/res/drawable-land-mdpi/jog_tab_bar_right_end_confirm_green.9.png diff --git a/core/res/res/drawable-land-mdpi/jog_tab_bar_right_end_confirm_red.9.png b/core/res/res/drawable-land-mdpi/jog_tab_bar_right_end_confirm_red.9.png Binary files differnew file mode 100644 index 000000000000..508f6bdf5204 --- /dev/null +++ b/core/res/res/drawable-land-mdpi/jog_tab_bar_right_end_confirm_red.9.png diff --git a/core/res/res/drawable-land-mdpi/jog_tab_bar_right_end_confirm_yellow.9.png b/core/res/res/drawable-land-mdpi/jog_tab_bar_right_end_confirm_yellow.9.png Binary files differnew file mode 100644 index 000000000000..a6041e5648a9 --- /dev/null +++ b/core/res/res/drawable-land-mdpi/jog_tab_bar_right_end_confirm_yellow.9.png diff --git a/core/res/res/drawable-land-mdpi/jog_tab_bar_right_end_normal.9.png b/core/res/res/drawable-land-mdpi/jog_tab_bar_right_end_normal.9.png Binary files differnew file mode 100644 index 000000000000..28cdd0b2b704 --- /dev/null +++ b/core/res/res/drawable-land-mdpi/jog_tab_bar_right_end_normal.9.png diff --git a/core/res/res/drawable-land-mdpi/jog_tab_bar_right_end_pressed.9.png b/core/res/res/drawable-land-mdpi/jog_tab_bar_right_end_pressed.9.png Binary files differnew file mode 100644 index 000000000000..46ba76b97462 --- /dev/null +++ b/core/res/res/drawable-land-mdpi/jog_tab_bar_right_end_pressed.9.png diff --git a/core/res/res/drawable-land-mdpi/jog_tab_left_confirm_gray.png b/core/res/res/drawable-land-mdpi/jog_tab_left_confirm_gray.png Binary files differnew file mode 100644 index 000000000000..396dcf7a3857 --- /dev/null +++ b/core/res/res/drawable-land-mdpi/jog_tab_left_confirm_gray.png diff --git a/core/res/res/drawable-land-mdpi/jog_tab_left_confirm_green.png b/core/res/res/drawable-land-mdpi/jog_tab_left_confirm_green.png Binary files differnew file mode 100644 index 000000000000..d928310762d0 --- /dev/null +++ b/core/res/res/drawable-land-mdpi/jog_tab_left_confirm_green.png diff --git a/core/res/res/drawable-land-mdpi/jog_tab_left_confirm_red.png b/core/res/res/drawable-land-mdpi/jog_tab_left_confirm_red.png Binary files differnew file mode 100644 index 000000000000..c377463bd52c --- /dev/null +++ b/core/res/res/drawable-land-mdpi/jog_tab_left_confirm_red.png diff --git a/core/res/res/drawable-land-mdpi/jog_tab_left_confirm_yellow.png b/core/res/res/drawable-land-mdpi/jog_tab_left_confirm_yellow.png Binary files differnew file mode 100644 index 000000000000..b868c7672378 --- /dev/null +++ b/core/res/res/drawable-land-mdpi/jog_tab_left_confirm_yellow.png diff --git a/core/res/res/drawable-land-mdpi/jog_tab_left_normal.png b/core/res/res/drawable-land-mdpi/jog_tab_left_normal.png Binary files differnew file mode 100644 index 000000000000..5ca876bb81cc --- /dev/null +++ b/core/res/res/drawable-land-mdpi/jog_tab_left_normal.png diff --git a/core/res/res/drawable-land-mdpi/jog_tab_left_pressed.png b/core/res/res/drawable-land-mdpi/jog_tab_left_pressed.png Binary files differnew file mode 100644 index 000000000000..8c33a782edad --- /dev/null +++ b/core/res/res/drawable-land-mdpi/jog_tab_left_pressed.png diff --git a/core/res/res/drawable-land-mdpi/jog_tab_right_confirm_gray.png b/core/res/res/drawable-land-mdpi/jog_tab_right_confirm_gray.png Binary files differnew file mode 100644 index 000000000000..4f1a002a1bbb --- /dev/null +++ b/core/res/res/drawable-land-mdpi/jog_tab_right_confirm_gray.png diff --git a/core/res/res/drawable-land-mdpi/jog_tab_right_confirm_green.png b/core/res/res/drawable-land-mdpi/jog_tab_right_confirm_green.png Binary files differnew file mode 100644 index 000000000000..af1550f44e9f --- /dev/null +++ b/core/res/res/drawable-land-mdpi/jog_tab_right_confirm_green.png diff --git a/core/res/res/drawable-land-mdpi/jog_tab_right_confirm_red.png b/core/res/res/drawable-land-mdpi/jog_tab_right_confirm_red.png Binary files differnew file mode 100644 index 000000000000..b458d27c9e64 --- /dev/null +++ b/core/res/res/drawable-land-mdpi/jog_tab_right_confirm_red.png diff --git a/core/res/res/drawable-land-mdpi/jog_tab_right_confirm_yellow.png b/core/res/res/drawable-land-mdpi/jog_tab_right_confirm_yellow.png Binary files differnew file mode 100644 index 000000000000..8e55d6a7b070 --- /dev/null +++ b/core/res/res/drawable-land-mdpi/jog_tab_right_confirm_yellow.png diff --git a/core/res/res/drawable-land-mdpi/jog_tab_right_normal.png b/core/res/res/drawable-land-mdpi/jog_tab_right_normal.png Binary files differnew file mode 100644 index 000000000000..c607c7c0ca08 --- /dev/null +++ b/core/res/res/drawable-land-mdpi/jog_tab_right_normal.png diff --git a/core/res/res/drawable-land-mdpi/jog_tab_right_pressed.png b/core/res/res/drawable-land-mdpi/jog_tab_right_pressed.png Binary files differnew file mode 100644 index 000000000000..2537d73f0c9d --- /dev/null +++ b/core/res/res/drawable-land-mdpi/jog_tab_right_pressed.png diff --git a/core/res/res/drawable-mdpi/ic_jog_dial_answer.png b/core/res/res/drawable-mdpi/ic_jog_dial_answer.png Binary files differnew file mode 100644 index 000000000000..e2bc483de27a --- /dev/null +++ b/core/res/res/drawable-mdpi/ic_jog_dial_answer.png diff --git a/core/res/res/drawable-mdpi/ic_jog_dial_answer_and_end.png b/core/res/res/drawable-mdpi/ic_jog_dial_answer_and_end.png Binary files differnew file mode 100644 index 000000000000..aa0fab224b55 --- /dev/null +++ b/core/res/res/drawable-mdpi/ic_jog_dial_answer_and_end.png diff --git a/core/res/res/drawable-mdpi/ic_jog_dial_answer_and_hold.png b/core/res/res/drawable-mdpi/ic_jog_dial_answer_and_hold.png Binary files differnew file mode 100644 index 000000000000..9effe375c317 --- /dev/null +++ b/core/res/res/drawable-mdpi/ic_jog_dial_answer_and_hold.png diff --git a/core/res/res/drawable-mdpi/ic_jog_dial_decline.png b/core/res/res/drawable-mdpi/ic_jog_dial_decline.png Binary files differnew file mode 100644 index 000000000000..81c76b59a453 --- /dev/null +++ b/core/res/res/drawable-mdpi/ic_jog_dial_decline.png diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_gray.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_gray.9.png Binary files differnew file mode 100644 index 000000000000..adbb146d6fa1 --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_gray.9.png diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_green.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_green.9.png Binary files differnew file mode 100644 index 000000000000..e8be7bf370b3 --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_green.9.png diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_red.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_red.9.png Binary files differnew file mode 100644 index 000000000000..120a9d8878f8 --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_red.9.png diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_yellow.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_yellow.9.png Binary files differnew file mode 100644 index 000000000000..60ec1462a4b3 --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_bar_left_end_confirm_yellow.9.png diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_left_end_normal.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_left_end_normal.9.png Binary files differnew file mode 100644 index 000000000000..747745378c7a --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_bar_left_end_normal.9.png diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_left_end_pressed.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_left_end_pressed.9.png Binary files differnew file mode 100644 index 000000000000..c79a35cf3da8 --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_bar_left_end_pressed.9.png diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_gray.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_gray.9.png Binary files differnew file mode 100644 index 000000000000..4ce09fa3ca91 --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_gray.9.png diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_green.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_green.9.png Binary files differnew file mode 100644 index 000000000000..9d7565fcde4e --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_green.9.png diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_red.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_red.9.png Binary files differnew file mode 100644 index 000000000000..d5f9bd89b6f2 --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_red.9.png diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_yellow.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_yellow.9.png Binary files differnew file mode 100644 index 000000000000..5b9c5b490d0b --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_yellow.9.png diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_normal.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_normal.9.png Binary files differnew file mode 100644 index 000000000000..2e6ca2ebf201 --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_normal.9.png diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_pressed.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_pressed.9.png Binary files differnew file mode 100644 index 000000000000..f41750dae939 --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_pressed.9.png diff --git a/core/res/res/drawable-mdpi/jog_tab_left_confirm_gray.png b/core/res/res/drawable-mdpi/jog_tab_left_confirm_gray.png Binary files differnew file mode 100644 index 000000000000..e8544ff9515a --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_left_confirm_gray.png diff --git a/core/res/res/drawable-mdpi/jog_tab_left_confirm_green.png b/core/res/res/drawable-mdpi/jog_tab_left_confirm_green.png Binary files differnew file mode 100644 index 000000000000..d0ba8f8fbed5 --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_left_confirm_green.png diff --git a/core/res/res/drawable-mdpi/jog_tab_left_confirm_red.png b/core/res/res/drawable-mdpi/jog_tab_left_confirm_red.png Binary files differnew file mode 100644 index 000000000000..5188c86cb824 --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_left_confirm_red.png diff --git a/core/res/res/drawable-mdpi/jog_tab_left_confirm_yellow.png b/core/res/res/drawable-mdpi/jog_tab_left_confirm_yellow.png Binary files differnew file mode 100644 index 000000000000..861e17a7f173 --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_left_confirm_yellow.png diff --git a/core/res/res/drawable-mdpi/jog_tab_left_normal.png b/core/res/res/drawable-mdpi/jog_tab_left_normal.png Binary files differnew file mode 100644 index 000000000000..7af1b855006b --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_left_normal.png diff --git a/core/res/res/drawable-mdpi/jog_tab_left_pressed.png b/core/res/res/drawable-mdpi/jog_tab_left_pressed.png Binary files differnew file mode 100644 index 000000000000..b76e83e9573e --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_left_pressed.png diff --git a/core/res/res/drawable-mdpi/jog_tab_right_confirm_gray.png b/core/res/res/drawable-mdpi/jog_tab_right_confirm_gray.png Binary files differnew file mode 100644 index 000000000000..814a50d25756 --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_right_confirm_gray.png diff --git a/core/res/res/drawable-mdpi/jog_tab_right_confirm_green.png b/core/res/res/drawable-mdpi/jog_tab_right_confirm_green.png Binary files differnew file mode 100644 index 000000000000..cf157fc837ed --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_right_confirm_green.png diff --git a/core/res/res/drawable-mdpi/jog_tab_right_confirm_red.png b/core/res/res/drawable-mdpi/jog_tab_right_confirm_red.png Binary files differnew file mode 100644 index 000000000000..74f2935c3769 --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_right_confirm_red.png diff --git a/core/res/res/drawable-mdpi/jog_tab_right_confirm_yellow.png b/core/res/res/drawable-mdpi/jog_tab_right_confirm_yellow.png Binary files differnew file mode 100644 index 000000000000..66557319d14f --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_right_confirm_yellow.png diff --git a/core/res/res/drawable-mdpi/jog_tab_right_normal.png b/core/res/res/drawable-mdpi/jog_tab_right_normal.png Binary files differnew file mode 100644 index 000000000000..479c9a5f2f52 --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_right_normal.png diff --git a/core/res/res/drawable-mdpi/jog_tab_right_pressed.png b/core/res/res/drawable-mdpi/jog_tab_right_pressed.png Binary files differnew file mode 100644 index 000000000000..454aaf2216de --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_right_pressed.png diff --git a/core/res/res/drawable-mdpi/jog_tab_target_gray.png b/core/res/res/drawable-mdpi/jog_tab_target_gray.png Binary files differnew file mode 100644 index 000000000000..517b2534703b --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_target_gray.png diff --git a/core/res/res/drawable-mdpi/jog_tab_target_green.png b/core/res/res/drawable-mdpi/jog_tab_target_green.png Binary files differnew file mode 100644 index 000000000000..188f3cc838c4 --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_target_green.png diff --git a/core/res/res/drawable-mdpi/jog_tab_target_red.png b/core/res/res/drawable-mdpi/jog_tab_target_red.png Binary files differnew file mode 100644 index 000000000000..a36394dc5158 --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_target_red.png diff --git a/core/res/res/drawable-mdpi/jog_tab_target_yellow.png b/core/res/res/drawable-mdpi/jog_tab_target_yellow.png Binary files differnew file mode 100644 index 000000000000..ba999b10410e --- /dev/null +++ b/core/res/res/drawable-mdpi/jog_tab_target_yellow.png diff --git a/core/res/res/drawable/jog_tab_bar_left_answer.xml b/core/res/res/drawable/jog_tab_bar_left_answer.xml index b1d7c315166b..32ce3dcda656 100644 --- a/core/res/res/drawable/jog_tab_bar_left_answer.xml +++ b/core/res/res/drawable/jog_tab_bar_left_answer.xml @@ -17,12 +17,12 @@ <!-- StateListDrawable used for buttons in the in-call onscreen touch UI. --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" - android:drawable="@drawable/jog_tab_bar_pressed" /> + android:drawable="@drawable/jog_tab_bar_left_end_pressed" /> <item android:state_enabled="true" - android:drawable="@drawable/jog_tab_bar_normal" /> + android:drawable="@drawable/jog_tab_bar_left_end_normal" /> <item android:state_active="true" - android:drawable="@drawable/jog_tab_bar_confirm_green" /> + android:drawable="@drawable/jog_tab_bar_left_end_confirm_green" /> </selector> diff --git a/core/res/res/drawable/jog_tab_bar_left_generic.xml b/core/res/res/drawable/jog_tab_bar_left_generic.xml index de1a42f0d61b..7e381931a998 100644 --- a/core/res/res/drawable/jog_tab_bar_left_generic.xml +++ b/core/res/res/drawable/jog_tab_bar_left_generic.xml @@ -17,12 +17,12 @@ <!-- StateListDrawable used for buttons in the in-call onscreen touch UI. --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" - android:drawable="@drawable/jog_tab_bar_pressed" /> + android:drawable="@drawable/jog_tab_bar_left_end_pressed" /> <item android:state_enabled="true" - android:drawable="@drawable/jog_tab_bar_normal" /> + android:drawable="@drawable/jog_tab_bar_left_end_normal" /> <item android:state_active="true" - android:drawable="@drawable/jog_tab_bar_confirm_gray" /> + android:drawable="@drawable/jog_tab_bar_left_end_confirm_gray" /> </selector> diff --git a/core/res/res/drawable/jog_tab_bar_left_unlock.xml b/core/res/res/drawable/jog_tab_bar_left_unlock.xml index b1d7c315166b..32ce3dcda656 100644 --- a/core/res/res/drawable/jog_tab_bar_left_unlock.xml +++ b/core/res/res/drawable/jog_tab_bar_left_unlock.xml @@ -17,12 +17,12 @@ <!-- StateListDrawable used for buttons in the in-call onscreen touch UI. --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" - android:drawable="@drawable/jog_tab_bar_pressed" /> + android:drawable="@drawable/jog_tab_bar_left_end_pressed" /> <item android:state_enabled="true" - android:drawable="@drawable/jog_tab_bar_normal" /> + android:drawable="@drawable/jog_tab_bar_left_end_normal" /> <item android:state_active="true" - android:drawable="@drawable/jog_tab_bar_confirm_green" /> + android:drawable="@drawable/jog_tab_bar_left_end_confirm_green" /> </selector> diff --git a/core/res/res/drawable/jog_tab_bar_right_decline.xml b/core/res/res/drawable/jog_tab_bar_right_decline.xml index ae82aba2fb33..83183ac1bc19 100644 --- a/core/res/res/drawable/jog_tab_bar_right_decline.xml +++ b/core/res/res/drawable/jog_tab_bar_right_decline.xml @@ -17,12 +17,12 @@ <!-- StateListDrawable used for buttons in the in-call onscreen touch UI. --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" - android:drawable="@drawable/jog_tab_bar_pressed" /> + android:drawable="@drawable/jog_tab_bar_right_end_pressed" /> <item android:state_enabled="true" - android:drawable="@drawable/jog_tab_bar_normal" /> + android:drawable="@drawable/jog_tab_bar_right_end_normal" /> <item android:state_active="true" - android:drawable="@drawable/jog_tab_bar_confirm_red" /> + android:drawable="@drawable/jog_tab_bar_right_end_confirm_red" /> </selector> diff --git a/core/res/res/drawable/jog_tab_bar_right_generic.xml b/core/res/res/drawable/jog_tab_bar_right_generic.xml index de1a42f0d61b..8797e155d519 100644 --- a/core/res/res/drawable/jog_tab_bar_right_generic.xml +++ b/core/res/res/drawable/jog_tab_bar_right_generic.xml @@ -17,12 +17,12 @@ <!-- StateListDrawable used for buttons in the in-call onscreen touch UI. --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" - android:drawable="@drawable/jog_tab_bar_pressed" /> + android:drawable="@drawable/jog_tab_bar_right_end_pressed" /> <item android:state_enabled="true" - android:drawable="@drawable/jog_tab_bar_normal" /> + android:drawable="@drawable/jog_tab_bar_right_end_normal" /> <item android:state_active="true" - android:drawable="@drawable/jog_tab_bar_confirm_gray" /> + android:drawable="@drawable/jog_tab_bar_right_end_confirm_gray" /> </selector> diff --git a/core/res/res/drawable/jog_tab_bar_right_sound_off.xml b/core/res/res/drawable/jog_tab_bar_right_sound_off.xml index de1a42f0d61b..8797e155d519 100644 --- a/core/res/res/drawable/jog_tab_bar_right_sound_off.xml +++ b/core/res/res/drawable/jog_tab_bar_right_sound_off.xml @@ -17,12 +17,12 @@ <!-- StateListDrawable used for buttons in the in-call onscreen touch UI. --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" - android:drawable="@drawable/jog_tab_bar_pressed" /> + android:drawable="@drawable/jog_tab_bar_right_end_pressed" /> <item android:state_enabled="true" - android:drawable="@drawable/jog_tab_bar_normal" /> + android:drawable="@drawable/jog_tab_bar_right_end_normal" /> <item android:state_active="true" - android:drawable="@drawable/jog_tab_bar_confirm_gray" /> + android:drawable="@drawable/jog_tab_bar_right_end_confirm_gray" /> </selector> diff --git a/core/res/res/drawable/jog_tab_bar_right_sound_on.xml b/core/res/res/drawable/jog_tab_bar_right_sound_on.xml index febe32a1ed3e..d66e1c2b31d9 100644 --- a/core/res/res/drawable/jog_tab_bar_right_sound_on.xml +++ b/core/res/res/drawable/jog_tab_bar_right_sound_on.xml @@ -17,12 +17,12 @@ <!-- StateListDrawable used for buttons in the in-call onscreen touch UI. --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" - android:drawable="@drawable/jog_tab_bar_pressed" /> + android:drawable="@drawable/jog_tab_bar_right_end_pressed" /> <item android:state_enabled="true" - android:drawable="@drawable/jog_tab_bar_normal" /> + android:drawable="@drawable/jog_tab_bar_right_end_normal" /> <item android:state_active="true" - android:drawable="@drawable/jog_tab_bar_confirm_yellow" /> + android:drawable="@drawable/jog_tab_bar_right_end_confirm_yellow" /> </selector> diff --git a/core/res/res/layout/keyguard_screen_tab_unlock.xml b/core/res/res/layout/keyguard_screen_tab_unlock.xml index 6f7010eb7041..1991e988efd0 100644 --- a/core/res/res/layout/keyguard_screen_tab_unlock.xml +++ b/core/res/res/layout/keyguard_screen_tab_unlock.xml @@ -131,7 +131,7 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" - android:layout_marginBottom="50dip" + android:layout_marginBottom="80dip" /> <!-- emergency call button shown when sim is missing or PUKd --> diff --git a/core/res/res/layout/keyguard_screen_tab_unlock_land.xml b/core/res/res/layout/keyguard_screen_tab_unlock_land.xml index a9edb6bf0ef3..5c802352a6a8 100644 --- a/core/res/res/layout/keyguard_screen_tab_unlock_land.xml +++ b/core/res/res/layout/keyguard_screen_tab_unlock_land.xml @@ -140,7 +140,7 @@ android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="fill_parent" - android:layout_marginRight="50dip" + android:layout_marginRight="80dip" /> </LinearLayout> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index f93fb017324d..f5346d89c120 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -520,6 +520,12 @@ <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Přihlásit se"</string> <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Neplatné uživatelské jméno nebo heslo."</string> <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"Probíhá kontrola..."</string> + <!-- no translation found for lockscreen_unlock_label (737440483220667054) --> + <skip /> + <!-- no translation found for lockscreen_sound_on_label (9068877576513425970) --> + <skip /> + <!-- no translation found for lockscreen_sound_off_label (996822825154319026) --> + <skip /> <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string> <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string> <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Vymazat"</string> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index fa89feaaf7a7..6ebd460d43b7 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -520,6 +520,12 @@ <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Log ind"</string> <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Ugyldigt brugernavn eller ugyldig adgangskode."</string> <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"Kontrollerer ..."</string> + <!-- no translation found for lockscreen_unlock_label (737440483220667054) --> + <skip /> + <!-- no translation found for lockscreen_sound_on_label (9068877576513425970) --> + <skip /> + <!-- no translation found for lockscreen_sound_off_label (996822825154319026) --> + <skip /> <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string> <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string> <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Ryd"</string> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index ebf3b66aff47..b0ffe189f4a8 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -520,6 +520,12 @@ <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Anmelden"</string> <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Ungültiger Nutzername oder ungültiges Passwort."</string> <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"Überprüfung..."</string> + <!-- no translation found for lockscreen_unlock_label (737440483220667054) --> + <skip /> + <!-- no translation found for lockscreen_sound_on_label (9068877576513425970) --> + <skip /> + <!-- no translation found for lockscreen_sound_off_label (996822825154319026) --> + <skip /> <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string> <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string> <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Löschen"</string> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index 062658dd2874..bfc4e0472884 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -520,6 +520,12 @@ <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Σύνδεση"</string> <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Μη έγκυρο όνομα χρήστη ή κωδικός πρόσβασης."</string> <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"Έλεγχος..."</string> + <!-- no translation found for lockscreen_unlock_label (737440483220667054) --> + <skip /> + <!-- no translation found for lockscreen_sound_on_label (9068877576513425970) --> + <skip /> + <!-- no translation found for lockscreen_sound_off_label (996822825154319026) --> + <skip /> <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string> <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string> <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Εκκαθάριση"</string> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index 88f16a9867c9..d3b899177b50 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -520,6 +520,12 @@ <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Inicia sesión"</string> <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Nombre de usuario o contraseña incorrecta."</string> <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"Comprobando..."</string> + <!-- no translation found for lockscreen_unlock_label (737440483220667054) --> + <skip /> + <!-- no translation found for lockscreen_sound_on_label (9068877576513425970) --> + <skip /> + <!-- no translation found for lockscreen_sound_off_label (996822825154319026) --> + <skip /> <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string> <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string> <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Borrar"</string> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index 27579787dfb3..dad4ed2cbe4e 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -520,6 +520,12 @@ <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Acceder"</string> <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Nombre de usuario o contraseña no válido"</string> <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"Comprobando..."</string> + <!-- no translation found for lockscreen_unlock_label (737440483220667054) --> + <skip /> + <!-- no translation found for lockscreen_sound_on_label (9068877576513425970) --> + <skip /> + <!-- no translation found for lockscreen_sound_off_label (996822825154319026) --> + <skip /> <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g> <xliff:g id="AMPM">%P</xliff:g>"</string> <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g> <xliff:g id="AMPM">%p</xliff:g>"</string> <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Borrar"</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index 7a07a7cd6728..55b74da0018b 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -520,6 +520,12 @@ <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Se connecter"</string> <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Nom d\'utilisateur ou mot de passe incorrect."</string> <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"Vérification..."</string> + <!-- no translation found for lockscreen_unlock_label (737440483220667054) --> + <skip /> + <!-- no translation found for lockscreen_sound_on_label (9068877576513425970) --> + <skip /> + <!-- no translation found for lockscreen_sound_off_label (996822825154319026) --> + <skip /> <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string> <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string> <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Effacer"</string> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index 8d2aefafba8a..39dd807bbfa3 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -520,6 +520,12 @@ <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Accedi"</string> <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Password o nome utente non valido."</string> <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"Controllo in corso..."</string> + <!-- no translation found for lockscreen_unlock_label (737440483220667054) --> + <skip /> + <!-- no translation found for lockscreen_sound_on_label (9068877576513425970) --> + <skip /> + <!-- no translation found for lockscreen_sound_off_label (996822825154319026) --> + <skip /> <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string> <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string> <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Cancella"</string> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index 8c3836cf90f2..b1f78dd28d0d 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -520,6 +520,12 @@ <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"ログイン"</string> <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"ユーザー名またはパスワードが正しくありません。"</string> <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"確認中..."</string> + <!-- no translation found for lockscreen_unlock_label (737440483220667054) --> + <skip /> + <!-- no translation found for lockscreen_sound_on_label (9068877576513425970) --> + <skip /> + <!-- no translation found for lockscreen_sound_off_label (996822825154319026) --> + <skip /> <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string> <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string> <string name="status_bar_clear_all_button" msgid="7774721344716731603">"通知を消去"</string> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index 840fa998871e..721ab319480b 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -520,6 +520,12 @@ <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"로그인"</string> <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"사용자 이름 또는 비밀번호가 잘못되었습니다."</string> <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"확인 중..."</string> + <!-- no translation found for lockscreen_unlock_label (737440483220667054) --> + <skip /> + <!-- no translation found for lockscreen_sound_on_label (9068877576513425970) --> + <skip /> + <!-- no translation found for lockscreen_sound_off_label (996822825154319026) --> + <skip /> <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string> <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string> <string name="status_bar_clear_all_button" msgid="7774721344716731603">"지우기"</string> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index ced4f16a6ceb..90a1e9f9babc 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -520,6 +520,12 @@ <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Logg på"</string> <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Ugyldig brukernavn eller passord."</string> <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"Kontrollerer ..."</string> + <!-- no translation found for lockscreen_unlock_label (737440483220667054) --> + <skip /> + <!-- no translation found for lockscreen_sound_on_label (9068877576513425970) --> + <skip /> + <!-- no translation found for lockscreen_sound_off_label (996822825154319026) --> + <skip /> <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string> <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string> <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Fjern"</string> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index c5f5a4b60984..fdd35a986e97 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -147,10 +147,8 @@ <string name="permgroupdesc_location" msgid="2430258821648348660">"Uw fysieke locatie bijhouden"</string> <string name="permgrouplab_network" msgid="5808983377727109831">"Netwerkcommunicatie"</string> <string name="permgroupdesc_network" msgid="5035763698958415998">"Toepassingen toestaan verschillende netwerkfuncties te openen."</string> - <!-- no translation found for permgrouplab_accounts (3359646291125325519) --> - <skip /> - <!-- no translation found for permgroupdesc_accounts (4948732641827091312) --> - <skip /> + <string name="permgrouplab_accounts" msgid="3359646291125325519">"Uw accounts"</string> + <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Toegang tot de beschikbare accounts."</string> <string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Bedieningselementen hardware"</string> <string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"Rechtstreekse toegang tot hardware op de handset."</string> <string name="permgrouplab_phoneCalls" msgid="9067173988325865923">"Telefoonoproepen"</string> @@ -455,12 +453,9 @@ <string name="phoneTypeWorkPager" msgid="649938731231157056">"Pager werk"</string> <string name="phoneTypeAssistant" msgid="5596772636128562884">"Assistent"</string> <string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string> - <!-- no translation found for eventTypeBirthday (2813379844211390740) --> - <skip /> - <!-- no translation found for eventTypeAnniversary (3876779744518284000) --> - <skip /> - <!-- no translation found for eventTypeOther (5834288791948564594) --> - <skip /> + <string name="eventTypeBirthday" msgid="2813379844211390740">"Verjaardag"</string> + <string name="eventTypeAnniversary" msgid="3876779744518284000">"Jubileum"</string> + <string name="eventTypeOther" msgid="5834288791948564594">"Afspraak"</string> <string name="emailTypeCustom" msgid="8525960257804213846">"Aangepast"</string> <string name="emailTypeHome" msgid="449227236140433919">"Thuis"</string> <string name="emailTypeWork" msgid="3548058059601149973">"Werk"</string> @@ -525,6 +520,12 @@ <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Aanmelden"</string> <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Gebruikersnaam of wachtwoord ongeldig."</string> <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"Controleren..."</string> + <!-- no translation found for lockscreen_unlock_label (737440483220667054) --> + <skip /> + <!-- no translation found for lockscreen_sound_on_label (9068877576513425970) --> + <skip /> + <!-- no translation found for lockscreen_sound_off_label (996822825154319026) --> + <skip /> <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string> <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string> <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Wissen"</string> @@ -793,12 +794,8 @@ <string name="accessibility_binding_label" msgid="4148120742096474641">"Toegankelijkheid"</string> <string name="wallpaper_binding_label" msgid="1240087844304687662">"Achtergrond"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Achtergrond wijzigen"</string> - <!-- no translation found for pptp_vpn_description (2688045385181439401) --> - <skip /> - <!-- no translation found for l2tp_vpn_description (3750692169378923304) --> - <skip /> - <!-- no translation found for l2tp_ipsec_psk_vpn_description (3945043564008303239) --> - <skip /> - <!-- no translation found for l2tp_ipsec_crt_vpn_description (5382714073103653577) --> - <skip /> + <string name="pptp_vpn_description" msgid="2688045385181439401">"Point-to-Point Tunneling Protocol (PPTP)"</string> + <string name="l2tp_vpn_description" msgid="3750692169378923304">"Layer 2 Tunneling Protocol (L2TP)"</string> + <string name="l2tp_ipsec_psk_vpn_description" msgid="3945043564008303239">"Vooraf gedeelde sleutel op basis van L2TP/IPSec VPN"</string> + <string name="l2tp_ipsec_crt_vpn_description" msgid="5382714073103653577">"Certificaat op basis van L2TP/IPSec VPN"</string> </resources> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index 388a9e7783ac..edb3ff6f6631 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -520,6 +520,12 @@ <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Zaloguj"</string> <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Błędna nazwa użytkownika lub hasło."</string> <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"Trwa sprawdzanie..."</string> + <!-- no translation found for lockscreen_unlock_label (737440483220667054) --> + <skip /> + <!-- no translation found for lockscreen_sound_on_label (9068877576513425970) --> + <skip /> + <!-- no translation found for lockscreen_sound_off_label (996822825154319026) --> + <skip /> <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string> <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string> <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Wyczyść"</string> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index b2edaae3c597..603c8b78d1c2 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -520,6 +520,12 @@ <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Iniciar sessão"</string> <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Nome de utilizador ou palavra-passe inválidos."</string> <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"A verificar..."</string> + <!-- no translation found for lockscreen_unlock_label (737440483220667054) --> + <skip /> + <!-- no translation found for lockscreen_sound_on_label (9068877576513425970) --> + <skip /> + <!-- no translation found for lockscreen_sound_off_label (996822825154319026) --> + <skip /> <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g> <xliff:g id="AMPM">%P</xliff:g>"</string> <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g> <xliff:g id="AMPM">%p</xliff:g>"</string> <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Limpar"</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index 725053c70610..eccb608cb2ed 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -520,6 +520,12 @@ <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Fazer login"</string> <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Nome de usuário ou senha inválida."</string> <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"Verificando..."</string> + <!-- no translation found for lockscreen_unlock_label (737440483220667054) --> + <skip /> + <!-- no translation found for lockscreen_sound_on_label (9068877576513425970) --> + <skip /> + <!-- no translation found for lockscreen_sound_off_label (996822825154319026) --> + <skip /> <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string> <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string> <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Limpar"</string> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index 1e1500b9ee62..17aba0c24097 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -520,6 +520,12 @@ <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Вход"</string> <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Неверное имя пользователя или пароль."</string> <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"Проверка..."</string> + <!-- no translation found for lockscreen_unlock_label (737440483220667054) --> + <skip /> + <!-- no translation found for lockscreen_sound_on_label (9068877576513425970) --> + <skip /> + <!-- no translation found for lockscreen_sound_off_label (996822825154319026) --> + <skip /> <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string> <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string> <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Очистить"</string> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index 823ba22a73d3..fb701d62aea3 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -520,6 +520,12 @@ <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Logga in"</string> <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Ogiltigt användarnamn eller lösenord."</string> <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"Kontrollerar ..."</string> + <!-- no translation found for lockscreen_unlock_label (737440483220667054) --> + <skip /> + <!-- no translation found for lockscreen_sound_on_label (9068877576513425970) --> + <skip /> + <!-- no translation found for lockscreen_sound_off_label (996822825154319026) --> + <skip /> <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string> <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string> <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Ta bort"</string> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index f95fc0a0a056..dc44cca3c0e4 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -520,6 +520,12 @@ <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Oturum aç"</string> <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Geçersiz kullanıcı adı veya şifre."</string> <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"Kontrol ediliyor..."</string> + <!-- no translation found for lockscreen_unlock_label (737440483220667054) --> + <skip /> + <!-- no translation found for lockscreen_sound_on_label (9068877576513425970) --> + <skip /> + <!-- no translation found for lockscreen_sound_off_label (996822825154319026) --> + <skip /> <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g> <xliff:g id="AMPM">%P</xliff:g>"</string> <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g> <xliff:g id="AMPM">%p</xliff:g>"</string> <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Temizle"</string> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index ab5554baedbe..1c668f763a7a 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -520,6 +520,12 @@ <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"登录"</string> <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"用户名或密码无效。"</string> <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"正在检查..."</string> + <!-- no translation found for lockscreen_unlock_label (737440483220667054) --> + <skip /> + <!-- no translation found for lockscreen_sound_on_label (9068877576513425970) --> + <skip /> + <!-- no translation found for lockscreen_sound_off_label (996822825154319026) --> + <skip /> <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="AMPM">%P</xliff:g><xliff:g id="HOUR">%-l</xliff:g>点"</string> <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="AMPM">%p</xliff:g><xliff:g id="HOUR">%-l</xliff:g>点"</string> <string name="status_bar_clear_all_button" msgid="7774721344716731603">"清除"</string> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index da02fe7bd7c2..366ad5f385bb 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -520,6 +520,12 @@ <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"登入"</string> <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"使用者名稱或密碼錯誤。"</string> <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"檢查中..."</string> + <!-- no translation found for lockscreen_unlock_label (737440483220667054) --> + <skip /> + <!-- no translation found for lockscreen_sound_on_label (9068877576513425970) --> + <skip /> + <!-- no translation found for lockscreen_sound_off_label (996822825154319026) --> + <skip /> <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string> <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string> <string name="status_bar_clear_all_button" msgid="7774721344716731603">"清除"</string> diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index 50382b3435f7..fbf4076bebf9 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -2892,12 +2892,9 @@ For a more in-depth discussion of search configuration, please refer to {@link android.app.SearchManager}. --> <declare-styleable name="Searchable"> - <!-- If provided, this icon will be shown in place of the label above the search box. - This is a reference to a drawable (icon) resource. Note that the application icon - is also used as an icon to the left of the search box and you cannot modify this - behavior, so including the icon attribute is unecessary and this may be - deprecated in the future. - <i>Optional attribute.</i> --> + <!--<strong>This is deprecated.</strong><br/>The default + application icon is now always used, so this attribute is + obsolete.--> <attr name="icon" /> <!-- This is the user-displayed name of the searchable activity. <i>Required attribute.</i> --> @@ -2920,9 +2917,9 @@ <!-- If set, this flag enables the display of the search target (label) within the search bar. If neither bad mode is selected, no badge will be shown. --> <flag name="showSearchLabelAsBadge" value="0x04" /> - <!-- If set, this flag enables the display of the search target (icon) within the - search bar. (Note, overrides showSearchLabel) If neither bad mode is selected, - no badge will be shown.--> + <!--<strong>This is deprecated.</strong><br/>The default + application icon is now always used, so this option is + obsolete.--> <flag name="showSearchIconAsBadge" value="0x08" /> <!-- If set, this flag causes the suggestion column SUGGEST_COLUMN_INTENT_DATA to be considered as the text for suggestion query rewriting. This should only diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 822a59af3811..0b6f97e4ff77 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -214,4 +214,8 @@ it will be removed when the lower-level touch driver generates better data. --> <bool name="config_filterTouchEvents">false</bool> + + <!-- Component name of the default wallpaper. This will be ImageWallpaper if not + specified --> + <string name="default_wallpaper_component">@null</string> </resources> diff --git a/graphics/java/android/renderscript/RSSurfaceView.java b/graphics/java/android/renderscript/RSSurfaceView.java index 1bc03ac34382..ad1bb5429a99 100644 --- a/graphics/java/android/renderscript/RSSurfaceView.java +++ b/graphics/java/android/renderscript/RSSurfaceView.java @@ -80,10 +80,10 @@ public class RSSurfaceView extends SurfaceView implements SurfaceHolder.Callback */ public void surfaceDestroyed(SurfaceHolder holder) { // Surface will be destroyed when we return + Log.v(RenderScript.LOG_TAG, "surfaceDestroyed"); if (mRS != null) { - mRS.contextSetSurface(null); + mRS.contextSetSurface(0, 0, null); } - //Log.v(RenderScript.LOG_TAG, "surfaceDestroyed"); } /** @@ -91,10 +91,10 @@ public class RSSurfaceView extends SurfaceView implements SurfaceHolder.Callback * not normally called or subclassed by clients of RSSurfaceView. */ public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { + Log.v(RenderScript.LOG_TAG, "surfaceChanged"); if (mRS != null) { - mRS.contextSetSurface(holder.getSurface()); + mRS.contextSetSurface(w, h, holder.getSurface()); } - //Log.v(RenderScript.LOG_TAG, "surfaceChanged"); } /** @@ -147,11 +147,8 @@ public class RSSurfaceView extends SurfaceView implements SurfaceHolder.Callback // ---------------------------------------------------------------------- public RenderScript createRenderScript(boolean useDepth, boolean forceSW) { - Surface sur = null; - while ((sur == null) || (mSurfaceHolder == null)) { - sur = getHolder().getSurface(); - } - mRS = new RenderScript(sur, useDepth, forceSW); + Log.v(RenderScript.LOG_TAG, "createRenderScript"); + mRS = new RenderScript(useDepth, forceSW); return mRS; } @@ -160,6 +157,7 @@ public class RSSurfaceView extends SurfaceView implements SurfaceHolder.Callback } public void destroyRenderScript() { + Log.v(RenderScript.LOG_TAG, "destroyRenderScript"); mRS.destroy(); mRS = null; } diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java index f1e5af1eb540..ea118829fbfb 100644 --- a/graphics/java/android/renderscript/RenderScript.java +++ b/graphics/java/android/renderscript/RenderScript.java @@ -30,10 +30,12 @@ import android.view.Surface; * **/ public class RenderScript { - static final String LOG_TAG = "libRS_jni"; + static final String LOG_TAG = "RenderScript_jni"; private static final boolean DEBUG = false; @SuppressWarnings({"UnusedDeclaration", "deprecation"}) private static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV; + int mWidth; + int mHeight; @@ -62,9 +64,9 @@ public class RenderScript { native int nDeviceCreate(); native void nDeviceDestroy(int dev); native void nDeviceSetConfig(int dev, int param, int value); - native int nContextCreate(int dev, Surface sur, int ver, boolean useDepth); + native int nContextCreate(int dev, int ver, boolean useDepth); native void nContextDestroy(int con); - native void nContextSetSurface(Surface sur); + native void nContextSetSurface(int w, int h, Surface sur); native void nContextBindRootScript(int script); native void nContextBindSampler(int sampler, int slot); @@ -259,27 +261,31 @@ public class RenderScript { mRS.mMessageCallback.mID = msg; mRS.mMessageCallback.run(); } - //Log.d("rs", "MessageThread msg " + msg + " v1 " + rbuf[0] + " v2 " + rbuf[1] + " v3 " +rbuf[2]); + //Log.d(LOG_TAG, "MessageThread msg " + msg + " v1 " + rbuf[0] + " v2 " + rbuf[1] + " v3 " +rbuf[2]); } - Log.d("rs", "MessageThread exiting."); + Log.d(LOG_TAG, "MessageThread exiting."); } } - public RenderScript(Surface sur, boolean useDepth, boolean forceSW) { - mSurface = sur; + public RenderScript(boolean useDepth, boolean forceSW) { + mSurface = null; + mWidth = 0; + mHeight = 0; mDev = nDeviceCreate(); if(forceSW) { nDeviceSetConfig(mDev, 0, 1); } - mContext = nContextCreate(mDev, mSurface, 0, useDepth); + mContext = nContextCreate(mDev, 0, useDepth); Element.initPredefined(this); mMessageThread = new MessageThread(this); mMessageThread.start(); } - public void contextSetSurface(Surface sur) { + public void contextSetSurface(int w, int h, Surface sur) { mSurface = sur; - nContextSetSurface(mSurface); + mWidth = w; + mHeight = h; + nContextSetSurface(w, h, mSurface); } public void destroy() { diff --git a/graphics/jni/android_renderscript_RenderScript.cpp b/graphics/jni/android_renderscript_RenderScript.cpp index f3dda417e064..709cb977dd3a 100644 --- a/graphics/jni/android_renderscript_RenderScript.cpp +++ b/graphics/jni/android_renderscript_RenderScript.cpp @@ -151,30 +151,17 @@ nDeviceSetConfig(JNIEnv *_env, jobject _this, jint dev, jint p, jint value) } static jint -nContextCreate(JNIEnv *_env, jobject _this, jint dev, jobject wnd, jint ver, jboolean useDepth) +nContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver, jboolean useDepth) { LOG_API("nContextCreate"); - - if (wnd == NULL) { - not_valid_surface: - doThrow(_env, "java/lang/IllegalArgumentException", - "Make sure the SurfaceView or associated SurfaceHolder has a valid Surface"); - return 0; - } - jclass surface_class = _env->FindClass("android/view/Surface"); - jfieldID surfaceFieldID = _env->GetFieldID(surface_class, "mSurface", "I"); - Surface * window = (Surface*)_env->GetIntField(wnd, surfaceFieldID); - if (window == NULL) - goto not_valid_surface; - - return (jint)rsContextCreate((RsDevice)dev, window, ver, useDepth); + return (jint)rsContextCreate((RsDevice)dev, ver, useDepth); } static void -nContextSetSurface(JNIEnv *_env, jobject _this, jobject wnd) +nContextSetSurface(JNIEnv *_env, jobject _this, jint width, jint height, jobject wnd) { RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); - LOG_API("nContextSetSurface, con(%p), surface(%p)", con, (Surface *)wnd); + LOG_API("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", con, width, height, (Surface *)wnd); Surface * window = NULL; if (wnd == NULL) { @@ -185,7 +172,7 @@ nContextSetSurface(JNIEnv *_env, jobject _this, jobject wnd) window = (Surface*)_env->GetIntField(wnd, surfaceFieldID); } - rsContextSetSurface(con, window); + rsContextSetSurface(con, width, height, window); } static void @@ -1345,8 +1332,8 @@ static JNINativeMethod methods[] = { {"nDeviceCreate", "()I", (void*)nDeviceCreate }, {"nDeviceDestroy", "(I)V", (void*)nDeviceDestroy }, {"nDeviceSetConfig", "(III)V", (void*)nDeviceSetConfig }, -{"nContextCreate", "(ILandroid/view/Surface;IZ)I", (void*)nContextCreate }, -{"nContextSetSurface", "(Landroid/view/Surface;)V", (void*)nContextSetSurface }, +{"nContextCreate", "(IIZ)I", (void*)nContextCreate }, +{"nContextSetSurface", "(IILandroid/view/Surface;)V", (void*)nContextSetSurface }, {"nContextDestroy", "(I)V", (void*)nContextDestroy }, {"nContextPause", "()V", (void*)nContextPause }, {"nContextResume", "()V", (void*)nContextResume }, diff --git a/include/media/AudioSystem.h b/include/media/AudioSystem.h index e0661778c3e3..bc3dd368b84c 100644 --- a/include/media/AudioSystem.h +++ b/include/media/AudioSystem.h @@ -239,15 +239,11 @@ public: DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES = 0x100, DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER = 0x200, DEVICE_OUT_AUX_DIGITAL = 0x400, - DEVICE_OUT_FM_HEADPHONE = 0x800, - DEVICE_OUT_FM_SPEAKER = 0x1000, - DEVICE_OUT_TTY = 0x2000, DEVICE_OUT_DEFAULT = 0x8000, DEVICE_OUT_ALL = (DEVICE_OUT_EARPIECE | DEVICE_OUT_SPEAKER | DEVICE_OUT_WIRED_HEADSET | DEVICE_OUT_WIRED_HEADPHONE | DEVICE_OUT_BLUETOOTH_SCO | DEVICE_OUT_BLUETOOTH_SCO_HEADSET | DEVICE_OUT_BLUETOOTH_SCO_CARKIT | DEVICE_OUT_BLUETOOTH_A2DP | DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | - DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER | DEVICE_OUT_AUX_DIGITAL | DEVICE_OUT_FM_HEADPHONE | - DEVICE_OUT_FM_SPEAKER | DEVICE_OUT_TTY | DEVICE_OUT_DEFAULT), + DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER | DEVICE_OUT_AUX_DIGITAL | DEVICE_OUT_DEFAULT), // input devices DEVICE_IN_COMMUNICATION = 0x10000, diff --git a/libs/audioflinger/AudioFlinger.cpp b/libs/audioflinger/AudioFlinger.cpp index ebd470f412e7..d918998e9328 100644 --- a/libs/audioflinger/AudioFlinger.cpp +++ b/libs/audioflinger/AudioFlinger.cpp @@ -1185,7 +1185,6 @@ void AudioFlinger::PlaybackThread::readOutputParameters() mFrameSize = mOutput->frameSize(); mFrameCount = mOutput->bufferSize() / mFrameSize; - mMinBytesToWrite = (mOutput->latency() * mSampleRate * mFrameSize) / 1000; // FIXME - Current mixer implementation only supports stereo output: Always // Allocate a stereo buffer even if HW output is mono. if (mMixBuffer != NULL) delete mMixBuffer; @@ -1215,23 +1214,25 @@ AudioFlinger::MixerThread::~MixerThread() bool AudioFlinger::MixerThread::threadLoop() { - uint32_t sleepTime = 1000; - uint32_t maxBufferRecoveryInUsecs = getMaxBufferRecoveryInUsecs(); int16_t* curBuf = mMixBuffer; Vector< sp<Track> > tracksToRemove; - size_t enabledTracks = 0; + uint32_t mixerStatus = MIXER_IDLE; nsecs_t standbyTime = systemTime(); size_t mixBufferSize = mFrameCount * mFrameSize; // FIXME: Relaxed timing because of a certain device that can't meet latency // Should be reduced to 2x after the vendor fixes the driver issue nsecs_t maxPeriod = seconds(mFrameCount) / mSampleRate * 3; nsecs_t lastWarning = 0; + bool longStandbyExit = false; + uint32_t activeSleepTime = activeSleepTimeUs(); + uint32_t idleSleepTime = idleSleepTimeUs(); + uint32_t sleepTime = idleSleepTime; while (!exitPending()) { processConfigEvents(); - enabledTracks = 0; + mixerStatus = MIXER_IDLE; { // scope for mLock Mutex::Autolock _l(mLock); @@ -1241,7 +1242,8 @@ bool AudioFlinger::MixerThread::threadLoop() // FIXME: Relaxed timing because of a certain device that can't meet latency // Should be reduced to 2x after the vendor fixes the driver issue maxPeriod = seconds(mFrameCount) / mSampleRate * 3; - maxBufferRecoveryInUsecs = getMaxBufferRecoveryInUsecs(); + activeSleepTime = activeSleepTimeUs(); + idleSleepTime = idleSleepTimeUs(); } const SortedVector< wp<Track> >& activeTracks = mActiveTracks; @@ -1277,15 +1279,15 @@ bool AudioFlinger::MixerThread::threadLoop() } standbyTime = systemTime() + kStandbyTimeInNsecs; - sleepTime = 1000; + sleepTime = idleSleepTime; continue; } } - enabledTracks = prepareTracks_l(activeTracks, &tracksToRemove); + mixerStatus = prepareTracks_l(activeTracks, &tracksToRemove); } - if (LIKELY(enabledTracks)) { + if (LIKELY(mixerStatus == MIXER_TRACKS_READY)) { // mix buffers... mAudioMixer->process(curBuf); sleepTime = 0; @@ -1294,15 +1296,22 @@ bool AudioFlinger::MixerThread::threadLoop() // If no tracks are ready, sleep once for the duration of an output // buffer size, then write 0s to the output if (sleepTime == 0) { - sleepTime = maxBufferRecoveryInUsecs; - } else if (mBytesWritten != 0) { + if (mixerStatus == MIXER_TRACKS_ENABLED) { + sleepTime = activeSleepTime; + } else { + sleepTime = idleSleepTime; + } + } else if (mBytesWritten != 0 || + (mixerStatus == MIXER_TRACKS_ENABLED && longStandbyExit)) { + LOGV("NO DATA READY, %p", this); memset (curBuf, 0, mixBufferSize); sleepTime = 0; + LOGV_IF((mBytesWritten == 0 && (mixerStatus == MIXER_TRACKS_ENABLED && longStandbyExit)), "anticipated start"); } } if (mSuspended) { - sleepTime = maxBufferRecoveryInUsecs; + sleepTime = idleSleepTime; } // sleepTime == 0 means we must write to audio hardware if (sleepTime == 0) { @@ -1312,7 +1321,6 @@ bool AudioFlinger::MixerThread::threadLoop() if (bytesWritten > 0) mBytesWritten += bytesWritten; mNumWrites++; mInWrite = false; - mStandby = false; nsecs_t now = systemTime(); nsecs_t delta = now - mLastWriteTime; if (delta > maxPeriod) { @@ -1322,7 +1330,11 @@ bool AudioFlinger::MixerThread::threadLoop() ns2ms(delta), mNumDelayedWrites, this); lastWarning = now; } + if (mStandby) { + longStandbyExit = true; + } } + mStandby = false; } else { usleep(sleepTime); } @@ -1342,10 +1354,10 @@ bool AudioFlinger::MixerThread::threadLoop() } // prepareTracks_l() must be called with ThreadBase::mLock held -size_t AudioFlinger::MixerThread::prepareTracks_l(const SortedVector< wp<Track> >& activeTracks, Vector< sp<Track> > *tracksToRemove) +uint32_t AudioFlinger::MixerThread::prepareTracks_l(const SortedVector< wp<Track> >& activeTracks, Vector< sp<Track> > *tracksToRemove) { - size_t enabledTracks = 0; + uint32_t mixerStatus = MIXER_IDLE; // find out which tracks need to be processed size_t count = activeTracks.size(); for (size_t i=0 ; i<count ; i++) { @@ -1415,7 +1427,7 @@ size_t AudioFlinger::MixerThread::prepareTracks_l(const SortedVector< wp<Track> // reset retry count track->mRetryCount = kMaxTrackRetries; - enabledTracks++; + mixerStatus = MIXER_TRACKS_READY; } else { //LOGV("track %d u=%08x, s=%08x [NOT READY]", track->name(), cblk->user, cblk->server); if (track->isStopped()) { @@ -1432,16 +1444,11 @@ size_t AudioFlinger::MixerThread::prepareTracks_l(const SortedVector< wp<Track> if (--(track->mRetryCount) <= 0) { LOGV("BUFFER TIMEOUT: remove(%d) from active list on thread %p", track->name(), this); tracksToRemove->add(track); + } else if (mixerStatus != MIXER_TRACKS_READY) { + mixerStatus = MIXER_TRACKS_ENABLED; } - // For tracks using static shared memory buffer, make sure that we have - // written enough data to audio hardware before disabling the track - // NOTE: this condition with arrive before track->mRetryCount <= 0 so we - // don't care about code removing track from active list above. - if ((track->mSharedBuffer == 0) || (mBytesWritten >= mMinBytesToWrite)) { - mAudioMixer->disable(AudioMixer::MIXING); - } else { - enabledTracks++; - } + + mAudioMixer->disable(AudioMixer::MIXING); } } } @@ -1459,7 +1466,7 @@ size_t AudioFlinger::MixerThread::prepareTracks_l(const SortedVector< wp<Track> } } - return enabledTracks; + return mixerStatus; } void AudioFlinger::MixerThread::getTracks( @@ -1621,14 +1628,14 @@ status_t AudioFlinger::MixerThread::dumpInternals(int fd, const Vector<String16> return NO_ERROR; } -uint32_t AudioFlinger::MixerThread::getMaxBufferRecoveryInUsecs() +uint32_t AudioFlinger::MixerThread::activeSleepTimeUs() { - uint32_t time = ((mFrameCount * 1000) / mSampleRate) * 1000; - // Add some margin with regard to scheduling precision - if (time > 10000) { - time -= 10000; - } - return time; + return (uint32_t)(mOutput->latency() * 1000) / 2; +} + +uint32_t AudioFlinger::MixerThread::idleSleepTimeUs() +{ + return (uint32_t)((mFrameCount * 1000) / mSampleRate) * 1000; } // ---------------------------------------------------------------------------- @@ -1646,25 +1653,31 @@ AudioFlinger::DirectOutputThread::~DirectOutputThread() bool AudioFlinger::DirectOutputThread::threadLoop() { - uint32_t sleepTime = 1000; - uint32_t maxBufferRecoveryInUsecs = getMaxBufferRecoveryInUsecs(); + uint32_t mixerStatus = MIXER_IDLE; sp<Track> trackToRemove; sp<Track> activeTrack; nsecs_t standbyTime = systemTime(); int8_t *curBuf; size_t mixBufferSize = mFrameCount*mFrameSize; + uint32_t activeSleepTime = activeSleepTimeUs(); + uint32_t idleSleepTime = idleSleepTimeUs(); + uint32_t sleepTime = idleSleepTime; + while (!exitPending()) { processConfigEvents(); + mixerStatus = MIXER_IDLE; + { // scope for the mLock Mutex::Autolock _l(mLock); if (checkForNewParameters_l()) { mixBufferSize = mFrameCount*mFrameSize; - maxBufferRecoveryInUsecs = getMaxBufferRecoveryInUsecs(); + activeSleepTime = activeSleepTimeUs(); + idleSleepTime = idleSleepTimeUs(); } // put audio hardware into standby after short delay @@ -1698,7 +1711,7 @@ bool AudioFlinger::DirectOutputThread::threadLoop() } standbyTime = systemTime() + kStandbyTimeInNsecs; - sleepTime = 1000; + sleepTime = idleSleepTime; continue; } } @@ -1753,6 +1766,7 @@ bool AudioFlinger::DirectOutputThread::threadLoop() // reset retry count track->mRetryCount = kMaxTrackRetries; activeTrack = t; + mixerStatus = MIXER_TRACKS_READY; } else { //LOGV("track %d u=%08x, s=%08x [NOT READY]", track->name(), cblk->user, cblk->server); if (track->isStopped()) { @@ -1768,16 +1782,10 @@ bool AudioFlinger::DirectOutputThread::threadLoop() if (--(track->mRetryCount) <= 0) { LOGV("BUFFER TIMEOUT: remove(%d) from active list", track->name()); trackToRemove = track; + } else { + mixerStatus = MIXER_TRACKS_ENABLED; } - - // For tracks using static shared memry buffer, make sure that we have - // written enough data to audio hardware before disabling the track - // NOTE: this condition with arrive before track->mRetryCount <= 0 so we - // don't care about code removing track from active list above. - if ((track->mSharedBuffer != 0) && (mBytesWritten < mMinBytesToWrite)) { - activeTrack = t; - } - } + } } } @@ -1791,7 +1799,7 @@ bool AudioFlinger::DirectOutputThread::threadLoop() } } - if (activeTrack != 0) { + if (LIKELY(mixerStatus == MIXER_TRACKS_READY)) { AudioBufferProvider::Buffer buffer; size_t frameCount = mFrameCount; curBuf = (int8_t *)mMixBuffer; @@ -1812,7 +1820,11 @@ bool AudioFlinger::DirectOutputThread::threadLoop() standbyTime = systemTime() + kStandbyTimeInNsecs; } else { if (sleepTime == 0) { - sleepTime = maxBufferRecoveryInUsecs; + if (mixerStatus == MIXER_TRACKS_ENABLED) { + sleepTime = activeSleepTime; + } else { + sleepTime = idleSleepTime; + } } else if (mBytesWritten != 0 && AudioSystem::isLinearPCM(mFormat)) { memset (mMixBuffer, 0, mFrameCount * mFrameSize); sleepTime = 0; @@ -1820,7 +1832,7 @@ bool AudioFlinger::DirectOutputThread::threadLoop() } if (mSuspended) { - sleepTime = maxBufferRecoveryInUsecs; + sleepTime = idleSleepTime; } // sleepTime == 0 means we must write to audio hardware if (sleepTime == 0) { @@ -1905,15 +1917,22 @@ bool AudioFlinger::DirectOutputThread::checkForNewParameters_l() return reconfig; } -uint32_t AudioFlinger::DirectOutputThread::getMaxBufferRecoveryInUsecs() +uint32_t AudioFlinger::DirectOutputThread::activeSleepTimeUs() { uint32_t time; if (AudioSystem::isLinearPCM(mFormat)) { - time = ((mFrameCount * 1000) / mSampleRate) * 1000; - // Add some margin with regard to scheduling precision - if (time > 10000) { - time -= 10000; - } + time = (uint32_t)(mOutput->latency() * 1000) / 2; + } else { + time = 10000; + } + return time; +} + +uint32_t AudioFlinger::DirectOutputThread::idleSleepTimeUs() +{ + uint32_t time; + if (AudioSystem::isLinearPCM(mFormat)) { + time = (uint32_t)((mFrameCount * 1000) / mSampleRate) * 1000; } else { time = 10000; } @@ -1936,28 +1955,30 @@ AudioFlinger::DuplicatingThread::~DuplicatingThread() bool AudioFlinger::DuplicatingThread::threadLoop() { - uint32_t sleepTime = 1000; - uint32_t maxBufferRecoveryInUsecs = getMaxBufferRecoveryInUsecs(); int16_t* curBuf = mMixBuffer; Vector< sp<Track> > tracksToRemove; - size_t enabledTracks = 0; + uint32_t mixerStatus = MIXER_IDLE; nsecs_t standbyTime = systemTime(); size_t mixBufferSize = mFrameCount*mFrameSize; SortedVector< sp<OutputTrack> > outputTracks; uint32_t writeFrames = 0; + uint32_t activeSleepTime = activeSleepTimeUs(); + uint32_t idleSleepTime = idleSleepTimeUs(); + uint32_t sleepTime = idleSleepTime; while (!exitPending()) { processConfigEvents(); - enabledTracks = 0; + mixerStatus = MIXER_IDLE; { // scope for the mLock Mutex::Autolock _l(mLock); if (checkForNewParameters_l()) { mixBufferSize = mFrameCount*mFrameSize; - maxBufferRecoveryInUsecs = getMaxBufferRecoveryInUsecs(); + activeSleepTime = activeSleepTimeUs(); + idleSleepTime = idleSleepTimeUs(); } const SortedVector< wp<Track> >& activeTracks = mActiveTracks; @@ -1997,22 +2018,26 @@ bool AudioFlinger::DuplicatingThread::threadLoop() } standbyTime = systemTime() + kStandbyTimeInNsecs; - sleepTime = 1000; + sleepTime = idleSleepTime; continue; } } - enabledTracks = prepareTracks_l(activeTracks, &tracksToRemove); + mixerStatus = prepareTracks_l(activeTracks, &tracksToRemove); } - if (LIKELY(enabledTracks)) { + if (LIKELY(mixerStatus == MIXER_TRACKS_READY)) { // mix buffers... mAudioMixer->process(curBuf); sleepTime = 0; writeFrames = mFrameCount; } else { if (sleepTime == 0) { - sleepTime = maxBufferRecoveryInUsecs; + if (mixerStatus == MIXER_TRACKS_ENABLED) { + sleepTime = activeSleepTime; + } else { + sleepTime = idleSleepTime; + } } else if (mBytesWritten != 0) { // flush remaining overflow buffers in output tracks for (size_t i = 0; i < outputTracks.size(); i++) { @@ -2026,7 +2051,7 @@ bool AudioFlinger::DuplicatingThread::threadLoop() } if (mSuspended) { - sleepTime = maxBufferRecoveryInUsecs; + sleepTime = idleSleepTime; } // sleepTime == 0 means we must write to audio hardware if (sleepTime == 0) { diff --git a/libs/audioflinger/AudioFlinger.h b/libs/audioflinger/AudioFlinger.h index 22d15c930001..594d8785298e 100644 --- a/libs/audioflinger/AudioFlinger.h +++ b/libs/audioflinger/AudioFlinger.h @@ -361,6 +361,12 @@ private: DUPLICATING }; + enum mixer_state { + MIXER_IDLE, + MIXER_TRACKS_ENABLED, + MIXER_TRACKS_READY + }; + // playback track class Track : public TrackBase { public: @@ -530,7 +536,8 @@ private: virtual int getTrackName_l() = 0; virtual void deleteTrackName_l(int name) = 0; - virtual uint32_t getMaxBufferRecoveryInUsecs() = 0; + virtual uint32_t activeSleepTimeUs() = 0; + virtual uint32_t idleSleepTimeUs() = 0; private: @@ -562,7 +569,6 @@ private: int mNumWrites; int mNumDelayedWrites; bool mInWrite; - int mMinBytesToWrite; }; class MixerThread : public PlaybackThread { @@ -582,10 +588,11 @@ private: virtual status_t dumpInternals(int fd, const Vector<String16>& args); protected: - size_t prepareTracks_l(const SortedVector< wp<Track> >& activeTracks, Vector< sp<Track> > *tracksToRemove); + uint32_t prepareTracks_l(const SortedVector< wp<Track> >& activeTracks, Vector< sp<Track> > *tracksToRemove); virtual int getTrackName_l(); virtual void deleteTrackName_l(int name); - virtual uint32_t getMaxBufferRecoveryInUsecs(); + virtual uint32_t activeSleepTimeUs(); + virtual uint32_t idleSleepTimeUs(); AudioMixer* mAudioMixer; }; @@ -604,7 +611,8 @@ private: protected: virtual int getTrackName_l(); virtual void deleteTrackName_l(int name); - virtual uint32_t getMaxBufferRecoveryInUsecs(); + virtual uint32_t activeSleepTimeUs(); + virtual uint32_t idleSleepTimeUs(); private: float mLeftVolume; diff --git a/libs/binder/ProcessState.cpp b/libs/binder/ProcessState.cpp index d7daf734279e..2d4e10ddde53 100644 --- a/libs/binder/ProcessState.cpp +++ b/libs/binder/ProcessState.cpp @@ -41,7 +41,7 @@ #include <sys/mman.h> #include <sys/stat.h> -#define BINDER_VM_SIZE (1*1024*1024) +#define BINDER_VM_SIZE ((1*1024*1024) - (4096 *2)) static bool gSingleProcess = false; diff --git a/libs/rs/RenderScript.h b/libs/rs/RenderScript.h index 9b043930d520..3ca8b158c8b7 100644 --- a/libs/rs/RenderScript.h +++ b/libs/rs/RenderScript.h @@ -55,7 +55,7 @@ RsDevice rsDeviceCreate(); void rsDeviceDestroy(RsDevice); void rsDeviceSetConfig(RsDevice, RsDeviceParam, int32_t value); -RsContext rsContextCreate(RsDevice, void *, uint32_t version, bool useDepth); +RsContext rsContextCreate(RsDevice, uint32_t version, bool useDepth); void rsContextDestroy(RsContext); void rsObjDestroyOOB(RsContext, void *); diff --git a/libs/rs/java/Fountain/src/com/android/fountain/FountainView.java b/libs/rs/java/Fountain/src/com/android/fountain/FountainView.java index cda005e06930..1e7c5a2f047e 100644 --- a/libs/rs/java/Fountain/src/com/android/fountain/FountainView.java +++ b/libs/rs/java/Fountain/src/com/android/fountain/FountainView.java @@ -48,29 +48,25 @@ public class FountainView extends RSSurfaceView { private RenderScript mRS; private FountainRS mRender; - private void destroyRS() { - if(mRS != null) { - mRS = null; - destroyRenderScript(); - } - java.lang.System.gc(); - } - public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { super.surfaceChanged(holder, format, w, h); - destroyRS(); - mRS = createRenderScript(false, true); - mRender = new FountainRS(); - mRender.init(mRS, getResources(), w, h); + if (mRS == null) { + mRS = createRenderScript(false, true); + mRS.contextSetSurface(w, h, holder.getSurface()); + mRender = new FountainRS(); + mRender.init(mRS, getResources(), w, h); + } } - public void surfaceDestroyed(SurfaceHolder holder) { - // Surface will be destroyed when we return - destroyRS(); + @Override + protected void onDetachedFromWindow() { + if(mRS != null) { + mRS = null; + destroyRenderScript(); + } } - @Override public boolean onTouchEvent(MotionEvent ev) { diff --git a/libs/rs/java/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java b/libs/rs/java/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java index b1facfc5a3b8..334fd9c356fa 100644 --- a/libs/rs/java/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java +++ b/libs/rs/java/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java @@ -126,13 +126,14 @@ public class ImageProcessingActivity extends Activity implements SurfaceHolder.C } public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { + mRS.contextSetSurface(width, height, holder.getSurface()); } public void surfaceDestroyed(SurfaceHolder holder) { } private Script.Invokable createScript() { - mRS = new RenderScript(mSurfaceView.getHolder().getSurface(), false, false); + mRS = new RenderScript(false, false); mRS.mMessageCallback = new FilterCallback(); mParamsType = Type.createFromClass(mRS, Params.class, 1, "Parameters"); diff --git a/libs/rs/rs.spec b/libs/rs/rs.spec index 865e43555ad7..da25a2722df5 100644 --- a/libs/rs/rs.spec +++ b/libs/rs/rs.spec @@ -37,9 +37,15 @@ ContextResume { } ContextSetSurface { + param uint32_t width + param uint32_t height param void *sur } +ContextSetPriority { + param uint32_t priority + } + AssignName { param void *obj param const char *name diff --git a/libs/rs/rsContext.cpp b/libs/rs/rsContext.cpp index 3e4cc36bc36a..c835dda76011 100644 --- a/libs/rs/rsContext.cpp +++ b/libs/rs/rsContext.cpp @@ -92,38 +92,12 @@ void Context::initEGL() LOGE("eglCreateContext returned EGL_NO_CONTEXT"); } gGLContextCount++; - - if (mWndSurface) { - setSurface(mWndSurface); - } else { - setSurface((Surface *)android_createDisplaySurface()); - } - - eglQuerySurface(mEGL.mDisplay, mEGL.mSurface, EGL_WIDTH, &mEGL.mWidth); - eglQuerySurface(mEGL.mDisplay, mEGL.mSurface, EGL_HEIGHT, &mEGL.mHeight); - - - mGL.mVersion = glGetString(GL_VERSION); - mGL.mVendor = glGetString(GL_VENDOR); - mGL.mRenderer = glGetString(GL_RENDERER); - mGL.mExtensions = glGetString(GL_EXTENSIONS); - - LOGV("EGL Version %i %i", mEGL.mMajorVersion, mEGL.mMinorVersion); - LOGV("GL Version %s", mGL.mVersion); - LOGV("GL Vendor %s", mGL.mVendor); - LOGV("GL Renderer %s", mGL.mRenderer); - LOGV("GL Extensions %s", mGL.mExtensions); - - if ((strlen((const char *)mGL.mVersion) < 12) || memcmp(mGL.mVersion, "OpenGL ES-CM", 12)) { - LOGE("Error, OpenGL ES Lite not supported"); - } else { - sscanf((const char *)mGL.mVersion + 13, "%i.%i", &mGL.mMajorVersion, &mGL.mMinorVersion); - } } void Context::deinitEGL() { - setSurface(NULL); + LOGV("deinitEGL"); + setSurface(0, 0, NULL); eglDestroyContext(mEGL.mDisplay, mEGL.mContext); checkEglError("eglDestroyContext"); @@ -265,9 +239,9 @@ void * Context::threadProc(void *vrsc) rsc->props.mLogScripts = getProp("debug.rs.script"); rsc->props.mLogObjects = getProp("debug.rs.objects"); - pthread_mutex_lock(&gInitMutex); - rsc->initEGL(); - pthread_mutex_unlock(&gInitMutex); + //pthread_mutex_lock(&gInitMutex); + //rsc->initEGL(); + //pthread_mutex_unlock(&gInitMutex); ScriptTLSStruct *tlsStruct = new ScriptTLSStruct; if (!tlsStruct) { @@ -342,7 +316,7 @@ void * Context::threadProc(void *vrsc) return NULL; } -Context::Context(Device *dev, Surface *sur, bool useDepth) +Context::Context(Device *dev, bool useDepth) { pthread_mutex_lock(&gInitMutex); @@ -353,6 +327,7 @@ Context::Context(Device *dev, Surface *sur, bool useDepth) mUseDepth = useDepth; mPaused = false; mObjHead = NULL; + memset(&mEGL, 0, sizeof(mEGL)); int status; pthread_attr_t threadAttr; @@ -380,7 +355,7 @@ Context::Context(Device *dev, Surface *sur, bool useDepth) sparam.sched_priority = ANDROID_PRIORITY_DISPLAY; pthread_attr_setschedparam(&threadAttr, &sparam); - mWndSurface = sur; + mWndSurface = NULL; objDestroyOOBInit(); timerInit(); @@ -426,8 +401,10 @@ Context::~Context() objDestroyOOBDestroy(); } -void Context::setSurface(Surface *sur) +void Context::setSurface(uint32_t w, uint32_t h, Surface *sur) { + LOGV("setSurface %i %i %p", w, h, sur); + EGLBoolean ret; if (mEGL.mSurface != NULL) { ret = eglMakeCurrent(mEGL.mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); @@ -437,10 +414,22 @@ void Context::setSurface(Surface *sur) checkEglError("eglDestroySurface", ret); mEGL.mSurface = NULL; + mEGL.mWidth = 0; + mEGL.mHeight = 0; + mWidth = 0; + mHeight = 0; } mWndSurface = sur; if (mWndSurface != NULL) { + bool first = false; + if (!mEGL.mContext) { + first = true; + pthread_mutex_lock(&gInitMutex); + initEGL(); + pthread_mutex_unlock(&gInitMutex); + } + mEGL.mSurface = eglCreateWindowSurface(mEGL.mDisplay, mEGL.mConfig, mWndSurface, NULL); checkEglError("eglCreateWindowSurface"); if (mEGL.mSurface == EGL_NO_SURFACE) { @@ -449,6 +438,36 @@ void Context::setSurface(Surface *sur) ret = eglMakeCurrent(mEGL.mDisplay, mEGL.mSurface, mEGL.mSurface, mEGL.mContext); checkEglError("eglMakeCurrent", ret); + + eglQuerySurface(mEGL.mDisplay, mEGL.mSurface, EGL_WIDTH, &mEGL.mWidth); + eglQuerySurface(mEGL.mDisplay, mEGL.mSurface, EGL_HEIGHT, &mEGL.mHeight); + mWidth = w; + mHeight = h; + mStateVertex.updateSize(this, w, h); + + if ((int)mWidth != mEGL.mWidth || (int)mHeight != mEGL.mHeight) { + LOGE("EGL/Surface mismatch EGL (%i x %i) SF (%i x %i)", mEGL.mWidth, mEGL.mHeight, mWidth, mHeight); + } + + if (first) { + mGL.mVersion = glGetString(GL_VERSION); + mGL.mVendor = glGetString(GL_VENDOR); + mGL.mRenderer = glGetString(GL_RENDERER); + mGL.mExtensions = glGetString(GL_EXTENSIONS); + + //LOGV("EGL Version %i %i", mEGL.mMajorVersion, mEGL.mMinorVersion); + LOGV("GL Version %s", mGL.mVersion); + LOGV("GL Vendor %s", mGL.mVendor); + LOGV("GL Renderer %s", mGL.mRenderer); + //LOGV("GL Extensions %s", mGL.mExtensions); + + if ((strlen((const char *)mGL.mVersion) < 12) || memcmp(mGL.mVersion, "OpenGL ES-CM", 12)) { + LOGE("Error, OpenGL ES Lite not supported"); + } else { + sscanf((const char *)mGL.mVersion + 13, "%i.%i", &mGL.mMajorVersion, &mGL.mMinorVersion); + } + } + } } @@ -767,19 +786,23 @@ void rsi_ContextResume(Context *rsc) rsc->resume(); } -void rsi_ContextSetSurface(Context *rsc, void *sur) +void rsi_ContextSetSurface(Context *rsc, uint32_t w, uint32_t h, void *sur) +{ + rsc->setSurface(w, h, (Surface *)sur); +} + +void rsi_ContextSetPriority(Context *rsc, uint32_t p) { - rsc->setSurface((Surface *)sur); } } } -RsContext rsContextCreate(RsDevice vdev, void *sur, uint32_t version, bool useDepth) +RsContext rsContextCreate(RsDevice vdev, uint32_t version, bool useDepth) { Device * dev = static_cast<Device *>(vdev); - Context *rsc = new Context(dev, (Surface *)sur, useDepth); + Context *rsc = new Context(dev, useDepth); return rsc; } diff --git a/libs/rs/rsContext.h b/libs/rs/rsContext.h index bffc55b7cb8b..f3803a5ec23b 100644 --- a/libs/rs/rsContext.h +++ b/libs/rs/rsContext.h @@ -49,7 +49,7 @@ namespace renderscript { class Context { public: - Context(Device *, Surface *, bool useDepth); + Context(Device *, bool useDepth); ~Context(); static pthread_key_t gThreadTLSKey; @@ -94,7 +94,7 @@ public: void pause(); void resume(); - void setSurface(Surface *sur); + void setSurface(uint32_t w, uint32_t h, Surface *sur); void assignName(ObjectBase *obj, const char *name, uint32_t len); void removeName(ObjectBase *obj); @@ -189,6 +189,9 @@ protected: } mGL; + uint32_t mWidth; + uint32_t mHeight; + bool mRunning; bool mExit; bool mUseDepth; diff --git a/libs/rs/rsLocklessFifo.cpp b/libs/rs/rsLocklessFifo.cpp index 085a81e751bb..c79652016f6e 100644 --- a/libs/rs/rsLocklessFifo.cpp +++ b/libs/rs/rsLocklessFifo.cpp @@ -57,7 +57,7 @@ bool LocklessCommandFifo::init(uint32_t sizeInBytes) mPut = mBuffer; mGet = mBuffer; mEnd = mBuffer + (sizeInBytes) - 1; - dumpState("init"); + //dumpState("init"); return true; } diff --git a/libs/rs/rsProgramVertex.cpp b/libs/rs/rsProgramVertex.cpp index eea8b3b67068..68f589f45f82 100644 --- a/libs/rs/rsProgramVertex.cpp +++ b/libs/rs/rsProgramVertex.cpp @@ -157,12 +157,17 @@ void ProgramVertexState::init(Context *rsc, int32_t w, int32_t h) pv->bindAllocation(alloc); + updateSize(rsc, w, h); +} + +void ProgramVertexState::updateSize(Context *rsc, int32_t w, int32_t h) +{ Matrix m; m.loadOrtho(0,w, h,0, -1,1); - alloc->subData(RS_PROGRAM_VERTEX_PROJECTION_OFFSET, 16, &m.m[0], 16*4); + mDefaultAlloc->subData(RS_PROGRAM_VERTEX_PROJECTION_OFFSET, 16, &m.m[0], 16*4); m.loadIdentity(); - alloc->subData(RS_PROGRAM_VERTEX_MODELVIEW_OFFSET, 16, &m.m[0], 16*4); + mDefaultAlloc->subData(RS_PROGRAM_VERTEX_MODELVIEW_OFFSET, 16, &m.m[0], 16*4); } void ProgramVertexState::deinit(Context *rsc) diff --git a/libs/rs/rsProgramVertex.h b/libs/rs/rsProgramVertex.h index 493668c083a1..a97ba3825ff0 100644 --- a/libs/rs/rsProgramVertex.h +++ b/libs/rs/rsProgramVertex.h @@ -63,6 +63,7 @@ public: void init(Context *rsc, int32_t w, int32_t h); void deinit(Context *rsc); + void updateSize(Context *rsc, int32_t w, int32_t h); ObjectBaseRef<ProgramVertex> mDefault; ObjectBaseRef<ProgramVertex> mLast; diff --git a/libs/rs/rsUtils.h b/libs/rs/rsUtils.h index 63d73a1480d5..07f893338bfa 100644 --- a/libs/rs/rsUtils.h +++ b/libs/rs/rsUtils.h @@ -18,7 +18,7 @@ #define ANDROID_RS_UTILS_H #define LOG_NDEBUG 0 -#define LOG_TAG "rs" +#define LOG_TAG "RenderScript" #include <utils/Log.h> #include <utils/Vector.h> #include <utils/KeyedVector.h> diff --git a/libs/surfaceflinger/LayerBuffer.cpp b/libs/surfaceflinger/LayerBuffer.cpp index a36304c8de78..28d7c48b45d8 100644 --- a/libs/surfaceflinger/LayerBuffer.cpp +++ b/libs/surfaceflinger/LayerBuffer.cpp @@ -26,6 +26,8 @@ #include <ui/GraphicBuffer.h> #include <ui/PixelFormat.h> #include <ui/FramebufferNativeWindow.h> +#include <ui/Rect.h> +#include <ui/Region.h> #include <hardware/copybit.h> @@ -46,12 +48,15 @@ gralloc_module_t const* LayerBuffer::sGrallocModule = 0; LayerBuffer::LayerBuffer(SurfaceFlinger* flinger, DisplayID display, const sp<Client>& client, int32_t i) : LayerBaseClient(flinger, display, client, i), - mNeedsBlending(false) + mNeedsBlending(false), mBlitEngine(0) { } LayerBuffer::~LayerBuffer() { + if (mBlitEngine) { + copybit_close(mBlitEngine); + } } void LayerBuffer::onFirstRef() @@ -69,6 +74,10 @@ void LayerBuffer::onFirstRef() sGrallocModule = (gralloc_module_t const *)module; } } + + if (hw_get_module(COPYBIT_HARDWARE_MODULE_ID, &module) == 0) { + copybit_open(module, &mBlitEngine); + } } sp<LayerBaseClient::Surface> LayerBuffer::createSurface() const @@ -350,6 +359,35 @@ LayerBuffer::BufferSource::BufferSource(LayerBuffer& layer, return; } + if (mLayer.mBlitEngine) { + // create our temporary buffer and corresponding EGLImageKHR. + // note that the size of this buffer doesn't really matter, + // the final image will always be drawn with proper aspect ratio. + + int w = buffers.w; + int h = buffers.h; + mTempGraphicBuffer.clear(); + mTempGraphicBuffer = new GraphicBuffer( + w, h, HAL_PIXEL_FORMAT_RGBX_8888, + GraphicBuffer::USAGE_HW_TEXTURE | + GraphicBuffer::USAGE_HW_2D); + + if (mTempGraphicBuffer->initCheck() == NO_ERROR) { + NativeBuffer& dst(mTempBuffer); + dst.img.w = mTempGraphicBuffer->getStride(); + dst.img.h = mTempGraphicBuffer->getHeight(); + dst.img.format = mTempGraphicBuffer->getPixelFormat(); + dst.img.handle = (native_handle_t *)mTempGraphicBuffer->handle; + dst.img.base = 0; + dst.crop.l = 0; + dst.crop.t = 0; + dst.crop.r = mTempGraphicBuffer->getWidth(); + dst.crop.b = mTempGraphicBuffer->getHeight(); + } else { + mTempGraphicBuffer.clear(); + } + } + mBufferHeap = buffers; mLayer.setNeedsBlending((info.h_alpha - info.l_alpha) > 0); mBufferSize = info.getScanlineSize(buffers.hor_stride)*buffers.ver_stride; @@ -438,15 +476,35 @@ void LayerBuffer::BufferSource::onDraw(const Region& clip) const #if defined(EGL_ANDROID_image_native_buffer) if (mLayer.mFlags & DisplayHardware::DIRECT_TEXTURE) { - // NOTE: Assume the buffer is allocated with the proper USAGE flags - sp<GraphicBuffer> graphicBuffer = new GraphicBuffer( - src.crop.r, src.crop.b, src.img.format, - GraphicBuffer::USAGE_HW_TEXTURE, - src.img.w, src.img.handle, false); + copybit_device_t* copybit = mLayer.mBlitEngine; + if (copybit) { + // create our EGLImageKHR the first time + if (mTexture.image == EGL_NO_IMAGE_KHR) { + err = NO_MEMORY; + if (mTempGraphicBuffer!=0) { + err = mLayer.initializeEglImage( + mTempGraphicBuffer, &mTexture); + // once the EGLImage has been created (whether it fails + // or not) we don't need the graphic buffer reference + // anymore. + mTempGraphicBuffer.clear(); + } + } - graphicBuffer->setVerticalStride(src.img.h); + if (err == NO_ERROR) { + // NOTE: Assume the buffer is allocated with the proper USAGE flags + const NativeBuffer& dst(mTempBuffer); + region_iterator clip(Region(Rect(dst.crop.r, dst.crop.b))); + copybit->set_parameter(copybit, COPYBIT_TRANSFORM, 0); + copybit->set_parameter(copybit, COPYBIT_PLANE_ALPHA, 0xFF); + copybit->set_parameter(copybit, COPYBIT_DITHER, COPYBIT_ENABLE); + err = copybit->stretch(copybit, &dst.img, &src.img, + &dst.crop, &src.crop, &clip); - err = mLayer.initializeEglImage(graphicBuffer, &mTexture); + } + } else { + err = INVALID_OPERATION; + } } #endif else { diff --git a/libs/surfaceflinger/LayerBuffer.h b/libs/surfaceflinger/LayerBuffer.h index 47482f49e476..1abb103a674a 100644 --- a/libs/surfaceflinger/LayerBuffer.h +++ b/libs/surfaceflinger/LayerBuffer.h @@ -135,8 +135,9 @@ private: status_t mStatus; ISurface::BufferHeap mBufferHeap; size_t mBufferSize; - mutable sp<GraphicBuffer> mTempBitmap; mutable LayerBase::Texture mTexture; + NativeBuffer mTempBuffer; + mutable sp<GraphicBuffer> mTempGraphicBuffer; }; class OverlaySource : public Source { @@ -205,6 +206,7 @@ private: sp<Surface> mSurface; bool mInvalidate; bool mNeedsBlending; + copybit_device_t* mBlitEngine; }; // --------------------------------------------------------------------------- diff --git a/libs/ui/FramebufferNativeWindow.cpp b/libs/ui/FramebufferNativeWindow.cpp index 0efba9c96640..c5e22e5645e3 100644 --- a/libs/ui/FramebufferNativeWindow.cpp +++ b/libs/ui/FramebufferNativeWindow.cpp @@ -118,8 +118,6 @@ FramebufferNativeWindow::FramebufferNativeWindow() LOGE_IF(err, "fb buffer 1 allocation failed w=%d, h=%d, err=%s", fbDev->width, fbDev->height, strerror(-err)); - LOGE("xDpi %d", fbDev->xdpi); - LOGE("yDpi %d", fbDev->ydpi); const_cast<uint32_t&>(android_native_window_t::flags) = fbDev->flags; const_cast<float&>(android_native_window_t::xdpi) = fbDev->xdpi; const_cast<float&>(android_native_window_t::ydpi) = fbDev->ydpi; diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java index 58a0bba163f4..3b406129c981 100644 --- a/media/java/android/media/AudioService.java +++ b/media/java/android/media/AudioService.java @@ -222,15 +222,6 @@ public class AudioService extends IAudioService.Stub { // Broadcast receiver for device connections intent broadcasts private final BroadcastReceiver mReceiver = new AudioServiceBroadcastReceiver(); - //TODO: use common definitions with HeadsetObserver - private static final int BIT_HEADSET = (1 << 0); - private static final int BIT_HEADSET_NO_MIC = (1 << 1); - private static final int BIT_TTY = (1 << 2); - private static final int BIT_FM_HEADSET = (1 << 3); - private static final int BIT_FM_SPEAKER = (1 << 4); - - private int mHeadsetState; - // Devices currently connected private HashMap <Integer, String> mConnectedDevices = new HashMap <Integer, String>(); @@ -254,7 +245,6 @@ public class AudioService extends IAudioService.Stub { mVolumePanel = new VolumePanel(context, this); mSettingsObserver = new SettingsObserver(); mMode = AudioSystem.MODE_NORMAL; - mHeadsetState = 0; mForcedUseForComm = AudioSystem.FORCE_NONE; createAudioSystemThread(); readPersistedSettings(); @@ -1460,72 +1450,35 @@ public class AudioService extends IAudioService.Stub { } } else if (action.equals(Intent.ACTION_HEADSET_PLUG)) { int state = intent.getIntExtra("state", 0); - if ((state & BIT_HEADSET) == 0 && - (mHeadsetState & BIT_HEADSET) != 0) { - AudioSystem.setDeviceConnectionState(AudioSystem.DEVICE_OUT_WIRED_HEADSET, - AudioSystem.DEVICE_STATE_UNAVAILABLE, - ""); - mConnectedDevices.remove(AudioSystem.DEVICE_OUT_WIRED_HEADSET); - } else if ((state & BIT_HEADSET) != 0 && - (mHeadsetState & BIT_HEADSET) == 0) { - AudioSystem.setDeviceConnectionState(AudioSystem.DEVICE_OUT_WIRED_HEADSET, - AudioSystem.DEVICE_STATE_AVAILABLE, - ""); - mConnectedDevices.put( new Integer(AudioSystem.DEVICE_OUT_WIRED_HEADSET), ""); - } - if ((state & BIT_HEADSET_NO_MIC) == 0 && - (mHeadsetState & BIT_HEADSET_NO_MIC) != 0) { - AudioSystem.setDeviceConnectionState(AudioSystem.DEVICE_OUT_WIRED_HEADPHONE, - AudioSystem.DEVICE_STATE_UNAVAILABLE, - ""); - mConnectedDevices.remove(AudioSystem.DEVICE_OUT_WIRED_HEADPHONE); - } else if ((state & BIT_HEADSET_NO_MIC) != 0 && - (mHeadsetState & BIT_HEADSET_NO_MIC) == 0) { - AudioSystem.setDeviceConnectionState(AudioSystem.DEVICE_OUT_WIRED_HEADPHONE, - AudioSystem.DEVICE_STATE_AVAILABLE, - ""); - mConnectedDevices.put( new Integer(AudioSystem.DEVICE_OUT_WIRED_HEADPHONE), ""); - } - if ((state & BIT_TTY) == 0 && - (mHeadsetState & BIT_TTY) != 0) { - AudioSystem.setDeviceConnectionState(AudioSystem.DEVICE_OUT_TTY, - AudioSystem.DEVICE_STATE_UNAVAILABLE, - ""); - mConnectedDevices.remove(AudioSystem.DEVICE_OUT_TTY); - } else if ((state & BIT_TTY) != 0 && - (mHeadsetState & BIT_TTY) == 0) { - AudioSystem.setDeviceConnectionState(AudioSystem.DEVICE_OUT_TTY, - AudioSystem.DEVICE_STATE_AVAILABLE, - ""); - mConnectedDevices.put( new Integer(AudioSystem.DEVICE_OUT_TTY), ""); - } - if ((state & BIT_FM_HEADSET) == 0 && - (mHeadsetState & BIT_FM_HEADSET) != 0) { - AudioSystem.setDeviceConnectionState(AudioSystem.DEVICE_OUT_FM_HEADPHONE, - AudioSystem.DEVICE_STATE_UNAVAILABLE, - ""); - mConnectedDevices.remove(AudioSystem.DEVICE_OUT_FM_HEADPHONE); - } else if ((state & BIT_FM_HEADSET) != 0 && - (mHeadsetState & BIT_FM_HEADSET) == 0) { - AudioSystem.setDeviceConnectionState(AudioSystem.DEVICE_OUT_FM_HEADPHONE, - AudioSystem.DEVICE_STATE_AVAILABLE, - ""); - mConnectedDevices.put( new Integer(AudioSystem.DEVICE_OUT_FM_HEADPHONE), ""); - } - if ((state & BIT_FM_SPEAKER) == 0 && - (mHeadsetState & BIT_FM_SPEAKER) != 0) { - AudioSystem.setDeviceConnectionState(AudioSystem.DEVICE_OUT_FM_SPEAKER, - AudioSystem.DEVICE_STATE_UNAVAILABLE, - ""); - mConnectedDevices.remove(AudioSystem.DEVICE_OUT_FM_SPEAKER); - } else if ((state & BIT_FM_SPEAKER) != 0 && - (mHeadsetState & BIT_FM_SPEAKER) == 0) { - AudioSystem.setDeviceConnectionState(AudioSystem.DEVICE_OUT_FM_SPEAKER, - AudioSystem.DEVICE_STATE_AVAILABLE, - ""); - mConnectedDevices.put( new Integer(AudioSystem.DEVICE_OUT_FM_SPEAKER), ""); + int microphone = intent.getIntExtra("microphone", 0); + + if (microphone != 0) { + boolean isConnected = mConnectedDevices.containsKey(AudioSystem.DEVICE_OUT_WIRED_HEADSET); + if (state == 0 && isConnected) { + AudioSystem.setDeviceConnectionState(AudioSystem.DEVICE_OUT_WIRED_HEADSET, + AudioSystem.DEVICE_STATE_UNAVAILABLE, + ""); + mConnectedDevices.remove(AudioSystem.DEVICE_OUT_WIRED_HEADSET); + } else if (state == 1 && !isConnected) { + AudioSystem.setDeviceConnectionState(AudioSystem.DEVICE_OUT_WIRED_HEADSET, + AudioSystem.DEVICE_STATE_AVAILABLE, + ""); + mConnectedDevices.put( new Integer(AudioSystem.DEVICE_OUT_WIRED_HEADSET), ""); + } + } else { + boolean isConnected = mConnectedDevices.containsKey(AudioSystem.DEVICE_OUT_WIRED_HEADPHONE); + if (state == 0 && isConnected) { + AudioSystem.setDeviceConnectionState(AudioSystem.DEVICE_OUT_WIRED_HEADPHONE, + AudioSystem.DEVICE_STATE_UNAVAILABLE, + ""); + mConnectedDevices.remove(AudioSystem.DEVICE_OUT_WIRED_HEADPHONE); + } else if (state == 1 && !isConnected) { + AudioSystem.setDeviceConnectionState(AudioSystem.DEVICE_OUT_WIRED_HEADPHONE, + AudioSystem.DEVICE_STATE_AVAILABLE, + ""); + mConnectedDevices.put( new Integer(AudioSystem.DEVICE_OUT_WIRED_HEADPHONE), ""); + } } - mHeadsetState = state; } } } diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java index dbf6d9dfe71d..9fe53289313d 100644 --- a/media/java/android/media/AudioSystem.java +++ b/media/java/android/media/AudioSystem.java @@ -243,9 +243,6 @@ public class AudioSystem public static final int DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES = 0x100; public static final int DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER = 0x200; public static final int DEVICE_OUT_AUX_DIGITAL = 0x400; - public static final int DEVICE_OUT_FM_HEADPHONE = 0x800; - public static final int DEVICE_OUT_FM_SPEAKER = 0x1000; - public static final int DEVICE_OUT_TTY = 0x2000; public static final int DEVICE_OUT_DEFAULT = 0x8000; // input devices public static final int DEVICE_IN_COMMUNICATION = 0x10000; diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp index 8529a8e46fa1..cedd79db7ce9 100644 --- a/media/libmedia/AudioTrack.cpp +++ b/media/libmedia/AudioTrack.cpp @@ -318,26 +318,35 @@ void AudioTrack::start() } if (android_atomic_or(1, &mActive) == 0) { - audio_io_handle_t output = AudioTrack::getOutput(); + audio_io_handle_t output = getOutput(); + AudioSystem::startOutput(output, (AudioSystem::stream_type)mStreamType); + mNewPosition = mCblk->server + mUpdatePeriod; + mCblk->bufferTimeoutMs = MAX_STARTUP_TIMEOUT_MS; + mCblk->waitTimeMs = 0; + if (t != 0) { + t->run("AudioTrackThread", THREAD_PRIORITY_AUDIO_CLIENT); + } else { + setpriority(PRIO_PROCESS, 0, THREAD_PRIORITY_AUDIO_CLIENT); + } + status_t status = mAudioTrack->start(); if (status == DEAD_OBJECT) { LOGV("start() dead IAudioTrack: creating a new one"); status = createTrack(mStreamType, mCblk->sampleRate, mFormat, mChannelCount, mFrameCount, mFlags, mSharedBuffer, output); - } - if (status == NO_ERROR) { - AudioSystem::startOutput(output, (AudioSystem::stream_type)mStreamType); mNewPosition = mCblk->server + mUpdatePeriod; mCblk->bufferTimeoutMs = MAX_STARTUP_TIMEOUT_MS; mCblk->waitTimeMs = 0; + } + if (status != NO_ERROR) { + LOGV("start() failed"); + android_atomic_and(~1, &mActive); if (t != 0) { - t->run("AudioTrackThread", THREAD_PRIORITY_AUDIO_CLIENT); + t->requestExit(); } else { - setpriority(PRIO_PROCESS, 0, THREAD_PRIORITY_AUDIO_CLIENT); + setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_NORMAL); } - } else { - LOGV("start() failed"); - android_atomic_and(~1, &mActive); + AudioSystem::stopOutput(output, (AudioSystem::stream_type)mStreamType); } } diff --git a/opengl/libagl/egl.cpp b/opengl/libagl/egl.cpp index 673c174ef45c..781b8c33fdc5 100644 --- a/opengl/libagl/egl.cpp +++ b/opengl/libagl/egl.cpp @@ -876,7 +876,7 @@ struct config_management_t { #define VERSION_MAJOR 1 #define VERSION_MINOR 2 static char const * const gVendorString = "Google Inc."; -static char const * const gVersionString = "1.2 Android Driver"; +static char const * const gVersionString = "1.2 Android Driver 1.1.0"; static char const * const gClientApiString = "OpenGL ES"; static char const * const gExtensionsString = "EGL_KHR_image_base " diff --git a/opengl/libagl/state.cpp b/opengl/libagl/state.cpp index a59b3b046e3f..0f1f27d8cfb6 100644 --- a/opengl/libagl/state.cpp +++ b/opengl/libagl/state.cpp @@ -37,7 +37,7 @@ namespace android { // ---------------------------------------------------------------------------- static char const * const gVendorString = "Android"; -static char const * const gRendererString = "Android PixelFlinger 1.1"; +static char const * const gRendererString = "Android PixelFlinger 1.2"; static char const * const gVersionString = "OpenGL ES-CM 1.0"; static char const * const gExtensionsString = "GL_OES_byte_coordinates " // OK diff --git a/services/java/com/android/server/HeadsetObserver.java b/services/java/com/android/server/HeadsetObserver.java index bee3108b412b..58fa69e888a9 100644 --- a/services/java/com/android/server/HeadsetObserver.java +++ b/services/java/com/android/server/HeadsetObserver.java @@ -43,9 +43,6 @@ class HeadsetObserver extends UEventObserver { private static final int BIT_HEADSET = (1 << 0); private static final int BIT_HEADSET_NO_MIC = (1 << 1); - private static final int BIT_TTY = (1 << 2); - private static final int BIT_FM_HEADSET = (1 << 3); - private static final int BIT_FM_SPEAKER = (1 << 4); private int mHeadsetState; private int mPrevHeadsetState; @@ -102,15 +99,18 @@ class HeadsetObserver extends UEventObserver { } private synchronized final void update(String newName, int newState) { - if (newName != mHeadsetName || newState != mHeadsetState) { + // Retain only relevant bits + int headsetState = newState & (BIT_HEADSET|BIT_HEADSET_NO_MIC); + + if (headsetState != mHeadsetState) { boolean isUnplug = false; - if ( (mHeadsetState & BIT_HEADSET) > 0 || (mHeadsetState & BIT_HEADSET_NO_MIC) > 0) { - if ((newState & BIT_HEADSET) == 0 && (newState & BIT_HEADSET_NO_MIC) == 0) - isUnplug = true; + if (((mHeadsetState & BIT_HEADSET) != 0 && (headsetState & BIT_HEADSET) == 0) || + ((mHeadsetState & BIT_HEADSET_NO_MIC) != 0 && (headsetState & BIT_HEADSET_NO_MIC) == 0)) { + isUnplug = true; } mHeadsetName = newName; mPrevHeadsetState = mHeadsetState; - mHeadsetState = newState; + mHeadsetState = headsetState; mPendingIntent = true; if (isUnplug) { @@ -135,9 +135,23 @@ class HeadsetObserver extends UEventObserver { // Pack up the values and broadcast them to everyone Intent intent = new Intent(Intent.ACTION_HEADSET_PLUG); intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); + int state = 0; + int microphone = 0; + + if ((mHeadsetState & BIT_HEADSET) != (mPrevHeadsetState & BIT_HEADSET)) { + microphone = 1; + if ((mHeadsetState & BIT_HEADSET) != 0) { + state = 1; + } + } else if ((mHeadsetState & BIT_HEADSET_NO_MIC) != (mPrevHeadsetState & BIT_HEADSET_NO_MIC)) { + if ((mHeadsetState & BIT_HEADSET_NO_MIC) != 0) { + state = 1; + } + } - intent.putExtra("state", mHeadsetState); + intent.putExtra("state", state); intent.putExtra("name", mHeadsetName); + intent.putExtra("microphone", microphone); // TODO: Should we require a permission? ActivityManagerNative.broadcastStickyIntent(intent, null); diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java index 39129d4852b9..5ed2d3567886 100644 --- a/services/java/com/android/server/PackageManagerService.java +++ b/services/java/com/android/server/PackageManagerService.java @@ -102,6 +102,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.zip.ZipEntry; +import java.util.zip.ZipException; import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; @@ -2781,72 +2782,156 @@ class PackageManagerService extends IPackageManager.Stub { return pkg; } - private int cachePackageSharedLibsLI(PackageParser.Package pkg, - File dataPath, File scanFile) { + // The following constants are returned by cachePackageSharedLibsForAbiLI + // to indicate if native shared libraries were found in the package. + // Values are: + // PACKAGE_INSTALL_NATIVE_FOUND_LIBRARIES => native libraries found and installed + // PACKAGE_INSTALL_NATIVE_NO_LIBRARIES => no native libraries in package + // PACKAGE_INSTALL_NATIVE_ABI_MISMATCH => native libraries for another ABI found + // in package (and not installed) + // + private static final int PACKAGE_INSTALL_NATIVE_FOUND_LIBRARIES = 0; + private static final int PACKAGE_INSTALL_NATIVE_NO_LIBRARIES = 1; + private static final int PACKAGE_INSTALL_NATIVE_ABI_MISMATCH = 2; + + // Find all files of the form lib/<cpuAbi>/lib<name>.so in the .apk + // and automatically copy them to /data/data/<appname>/lib if present. + // + // NOTE: this method may throw an IOException if the library cannot + // be copied to its final destination, e.g. if there isn't enough + // room left on the data partition, or a ZipException if the package + // file is malformed. + // + private int cachePackageSharedLibsForAbiLI( PackageParser.Package pkg, + File dataPath, File scanFile, String cpuAbi) + throws IOException, ZipException { File sharedLibraryDir = new File(dataPath.getPath() + "/lib"); - final String sharedLibraryABI = Build.CPU_ABI; - final String apkLibraryDirectory = "lib/" + sharedLibraryABI + "/"; - final String apkSharedLibraryPrefix = apkLibraryDirectory + "lib"; - final String sharedLibrarySuffix = ".so"; - boolean hasNativeCode = false; - boolean installedNativeCode = false; - try { - ZipFile zipFile = new ZipFile(scanFile); - Enumeration<ZipEntry> entries = - (Enumeration<ZipEntry>) zipFile.entries(); + final String apkLib = "lib/"; + final int apkLibLen = apkLib.length(); + final int cpuAbiLen = cpuAbi.length(); + final String libPrefix = "lib"; + final int libPrefixLen = libPrefix.length(); + final String libSuffix = ".so"; + final int libSuffixLen = libSuffix.length(); + boolean hasNativeLibraries = false; + boolean installedNativeLibraries = false; + + // the minimum length of a valid native shared library of the form + // lib/<something>/lib<name>.so. + final int minEntryLen = apkLibLen + 2 + libPrefixLen + 1 + libSuffixLen; + + ZipFile zipFile = new ZipFile(scanFile); + Enumeration<ZipEntry> entries = + (Enumeration<ZipEntry>) zipFile.entries(); + + while (entries.hasMoreElements()) { + ZipEntry entry = entries.nextElement(); + // skip directories + if (entry.isDirectory()) { + continue; + } + String entryName = entry.getName(); + + // check that the entry looks like lib/<something>/lib<name>.so + // here, but don't check the ABI just yet. + // + // - must be sufficiently long + // - must end with libSuffix, i.e. ".so" + // - must start with apkLib, i.e. "lib/" + if (entryName.length() < minEntryLen || + !entryName.endsWith(libSuffix) || + !entryName.startsWith(apkLib) ) { + continue; + } - while (entries.hasMoreElements()) { - ZipEntry entry = entries.nextElement(); - if (entry.isDirectory()) { - if (!hasNativeCode && entry.getName().startsWith("lib")) { - hasNativeCode = true; - } - continue; + // file name must start with libPrefix, i.e. "lib" + int lastSlash = entryName.lastIndexOf('/'); + + if (lastSlash < 0 || + !entryName.regionMatches(lastSlash+1, libPrefix, 0, libPrefixLen) ) { + continue; + } + + hasNativeLibraries = true; + + // check the cpuAbi now, between lib/ and /lib<name>.so + // + if (lastSlash != apkLibLen + cpuAbiLen || + !entryName.regionMatches(apkLibLen, cpuAbi, 0, cpuAbiLen) ) + continue; + + // extract the library file name, ensure it doesn't contain + // weird characters. we're guaranteed here that it doesn't contain + // a directory separator though. + String libFileName = entryName.substring(lastSlash+1); + if (!FileUtils.isFilenameSafe(new File(libFileName))) { + continue; + } + + installedNativeLibraries = true; + + String sharedLibraryFilePath = sharedLibraryDir.getPath() + + File.separator + libFileName; + File sharedLibraryFile = new File(sharedLibraryFilePath); + if (! sharedLibraryFile.exists() || + sharedLibraryFile.length() != entry.getSize() || + sharedLibraryFile.lastModified() != entry.getTime()) { + if (Config.LOGD) { + Log.d(TAG, "Caching shared lib " + entry.getName()); } - String entryName = entry.getName(); - if (entryName.startsWith("lib/")) { - hasNativeCode = true; + if (mInstaller == null) { + sharedLibraryDir.mkdir(); } - if (! (entryName.startsWith(apkSharedLibraryPrefix) - && entryName.endsWith(sharedLibrarySuffix))) { - continue; - } - String libFileName = entryName.substring( - apkLibraryDirectory.length()); - if (libFileName.contains("/") - || (!FileUtils.isFilenameSafe(new File(libFileName)))) { - continue; + cacheSharedLibLI(pkg, zipFile, entry, sharedLibraryDir, + sharedLibraryFile); + } + } + if (!hasNativeLibraries) + return PACKAGE_INSTALL_NATIVE_NO_LIBRARIES; + + if (!installedNativeLibraries) + return PACKAGE_INSTALL_NATIVE_ABI_MISMATCH; + + return PACKAGE_INSTALL_NATIVE_FOUND_LIBRARIES; + } + + // extract shared libraries stored in the APK as lib/<cpuAbi>/lib<name>.so + // and copy them to /data/data/<appname>/lib. + // + // This function will first try the main CPU ABI defined by Build.CPU_ABI + // (which corresponds to ro.product.cpu.abi), and also try an alternate + // one if ro.product.cpu.abi2 is defined. + // + private int cachePackageSharedLibsLI(PackageParser.Package pkg, + File dataPath, File scanFile) { + final String cpuAbi = Build.CPU_ABI; + try { + int result = cachePackageSharedLibsForAbiLI(pkg, dataPath, scanFile, cpuAbi); + + // some architectures are capable of supporting several CPU ABIs + // for example, 'armeabi-v7a' also supports 'armeabi' native code + // this is indicated by the definition of the ro.product.cpu.abi2 + // system property. + // + // only scan the package twice in case of ABI mismatch + if (result == PACKAGE_INSTALL_NATIVE_ABI_MISMATCH) { + String cpuAbi2 = SystemProperties.get("ro.product.cpu.abi2",null); + if (cpuAbi2 != null) { + result = cachePackageSharedLibsForAbiLI(pkg, dataPath, scanFile, cpuAbi2); } - - installedNativeCode = true; - - String sharedLibraryFilePath = sharedLibraryDir.getPath() + - File.separator + libFileName; - File sharedLibraryFile = new File(sharedLibraryFilePath); - if (! sharedLibraryFile.exists() || - sharedLibraryFile.length() != entry.getSize() || - sharedLibraryFile.lastModified() != entry.getTime()) { - if (Config.LOGD) { - Log.d(TAG, "Caching shared lib " + entry.getName()); - } - if (mInstaller == null) { - sharedLibraryDir.mkdir(); - } - cacheSharedLibLI(pkg, zipFile, entry, sharedLibraryDir, - sharedLibraryFile); + + if (result == PACKAGE_INSTALL_NATIVE_ABI_MISMATCH) { + Log.w(TAG,"Native ABI mismatch from package file"); + return PackageManager.INSTALL_FAILED_INVALID_APK; } } + } catch (ZipException e) { + Log.w(TAG, "Failed to extract data from package file", e); + return PackageManager.INSTALL_FAILED_INVALID_APK; } catch (IOException e) { Log.w(TAG, "Failed to cache package shared libs", e); return PackageManager.INSTALL_FAILED_INSUFFICIENT_STORAGE; } - - if (hasNativeCode && !installedNativeCode) { - Log.w(TAG, "Install failed: .apk has native code but none for arch " - + Build.CPU_ABI); - return PackageManager.INSTALL_FAILED_CPU_ABI_INCOMPATIBLE; - } - return PackageManager.INSTALL_SUCCEEDED; } diff --git a/services/java/com/android/server/WallpaperManagerService.java b/services/java/com/android/server/WallpaperManagerService.java index 4b6049f03e1c..5b8e11cd30ae 100644 --- a/services/java/com/android/server/WallpaperManagerService.java +++ b/services/java/com/android/server/WallpaperManagerService.java @@ -164,7 +164,7 @@ class WallpaperManagerService extends IWallpaperManager.Stub { if ((mLastDiedTime+MIN_WALLPAPER_CRASH_TIME) < SystemClock.uptimeMillis()) { Log.w(TAG, "Reverting to built-in wallpaper!"); - bindWallpaperComponentLocked(null); + bindWallpaperComponentLocked(null, false); } } } @@ -203,11 +203,11 @@ class WallpaperManagerService extends IWallpaperManager.Stub { public void systemReady() { synchronized (mLock) { try { - bindWallpaperComponentLocked(mWallpaperComponent); + bindWallpaperComponentLocked(mWallpaperComponent, false); } catch (RuntimeException e) { Log.w(TAG, "Failure starting previous wallpaper", e); try { - bindWallpaperComponentLocked(null); + bindWallpaperComponentLocked(null, false); } catch (RuntimeException e2) { Log.w(TAG, "Failure starting default wallpaper", e2); clearWallpaperComponentLocked(); @@ -224,7 +224,7 @@ class WallpaperManagerService extends IWallpaperManager.Stub { } final long ident = Binder.clearCallingIdentity(); try { - bindWallpaperComponentLocked(null); + bindWallpaperComponentLocked(null, false); } finally { Binder.restoreCallingIdentity(ident); } @@ -307,7 +307,8 @@ class WallpaperManagerService extends IWallpaperManager.Stub { try { ParcelFileDescriptor pfd = updateWallpaperBitmapLocked(name); if (pfd != null) { - bindWallpaperComponentLocked(null); + // Bind the wallpaper to an ImageWallpaper + bindWallpaperComponentLocked(null, true); saveSettingsLocked(); } return pfd; @@ -335,48 +336,57 @@ class WallpaperManagerService extends IWallpaperManager.Stub { synchronized (mLock) { final long ident = Binder.clearCallingIdentity(); try { - bindWallpaperComponentLocked(name); + bindWallpaperComponentLocked(name, false); } finally { Binder.restoreCallingIdentity(ident); } } } - void bindWallpaperComponentLocked(ComponentName name) { + void bindWallpaperComponentLocked(ComponentName componentName, boolean isBitmap) { // Has the component changed? if (mWallpaperConnection != null) { if (mWallpaperComponent == null) { - if (name == null) { + if (componentName == null) { // Still using default wallpaper. return; } - } else if (mWallpaperComponent.equals(name)) { + } else if (mWallpaperComponent.equals(componentName)) { // Changing to same wallpaper. return; } } try { - ComponentName realName = name; - if (realName == null) { - // The default component is our static image wallpaper. - realName = new ComponentName("android", - ImageWallpaper.class.getName()); - //clearWallpaperComponentLocked(); - //return; + ComponentName realComponentName = componentName; + if (realComponentName == null) { + String defaultComponent = + mContext.getString(com.android.internal.R.string.default_wallpaper_component); + if (defaultComponent != null && !isBitmap) { + // See if there is a default wallpaper component specified + // Only look for this if the wallpaper is not being set to a bitmap + realComponentName = ComponentName.unflattenFromString(defaultComponent); + } + if (realComponentName == null) { + // Fall back to static image wallpaper + realComponentName = new ComponentName("android", + ImageWallpaper.class.getName()); + //clearWallpaperComponentLocked(); + //return; + } } - ServiceInfo si = mContext.getPackageManager().getServiceInfo(realName, + ServiceInfo si = mContext.getPackageManager().getServiceInfo(realComponentName, PackageManager.GET_META_DATA | PackageManager.GET_PERMISSIONS); if (!android.Manifest.permission.BIND_WALLPAPER.equals(si.permission)) { throw new SecurityException("Selected service does not require " + android.Manifest.permission.BIND_WALLPAPER - + ": " + realName); + + ": " + realComponentName); } WallpaperInfo wi = null; Intent intent = new Intent(WallpaperService.SERVICE_INTERFACE); - if (name != null) { + if (componentName != null) { // Make sure the selected service is actually a wallpaper service. List<ResolveInfo> ris = mContext.getPackageManager() .queryIntentServices(intent, PackageManager.GET_META_DATA); @@ -396,13 +406,13 @@ class WallpaperManagerService extends IWallpaperManager.Stub { } if (wi == null) { throw new SecurityException("Selected service is not a wallpaper: " - + realName); + + realComponentName); } } // Bind the service! WallpaperConnection newConn = new WallpaperConnection(wi); - intent.setComponent(realName); + intent.setComponent(realComponentName); intent.putExtra(Intent.EXTRA_CLIENT_LABEL, com.android.internal.R.string.wallpaper_binding_label); intent.putExtra(Intent.EXTRA_CLIENT_INTENT, PendingIntent.getActivity( @@ -413,11 +423,11 @@ class WallpaperManagerService extends IWallpaperManager.Stub { if (!mContext.bindService(intent, newConn, Context.BIND_AUTO_CREATE)) { throw new IllegalArgumentException("Unable to bind service: " - + name); + + componentName); } clearWallpaperComponentLocked(); - mWallpaperComponent = name; + mWallpaperComponent = componentName; mWallpaperConnection = newConn; mLastDiedTime = SystemClock.uptimeMillis(); try { @@ -428,7 +438,7 @@ class WallpaperManagerService extends IWallpaperManager.Stub { } } catch (PackageManager.NameNotFoundException e) { - throw new IllegalArgumentException("Unknown component " + name); + throw new IllegalArgumentException("Unknown component " + componentName); } } @@ -459,7 +469,7 @@ class WallpaperManagerService extends IWallpaperManager.Stub { mWidth, mHeight); } catch (RemoteException e) { Log.w(TAG, "Failed attaching wallpaper; clearing", e); - bindWallpaperComponentLocked(null); + bindWallpaperComponentLocked(null, false); } } diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index e7280919d6a3..aa79ab4fc642 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -12816,6 +12816,11 @@ public final class ActivityManagerService extends ActivityManagerNative implemen mConfiguration = newConfig; Log.i(TAG, "Config changed: " + newConfig); + + AttributeCache ac = AttributeCache.instance(); + if (ac != null) { + ac.updateConfiguration(mConfiguration); + } Message msg = mHandler.obtainMessage(UPDATE_CONFIGURATION_MSG); msg.obj = new Configuration(mConfiguration); @@ -12843,11 +12848,6 @@ public final class ActivityManagerService extends ActivityManagerNative implemen null, null, 0, null, null, null, false, false, MY_PID, Process.SYSTEM_UID); } - - AttributeCache ac = AttributeCache.instance(); - if (ac != null) { - ac.updateConfiguration(mConfiguration); - } } } diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java index bb3f2a70604f..425682a6c114 100644 --- a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java +++ b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java @@ -76,6 +76,7 @@ final class CdmaServiceStateTracker extends ServiceStateTracker { private static final int NITZ_UPDATE_DIFF_DEFAULT = 2000; private int mNitzUpdateDiff = SystemProperties.getInt("ro.nitz_update_diff", NITZ_UPDATE_DIFF_DEFAULT); + /** * Values correspond to ServiceStateTracker.DATA_ACCESS_ definitions. */ @@ -159,6 +160,7 @@ final class CdmaServiceStateTracker extends ServiceStateTracker { super(); this.phone = phone; + cr = phone.getContext().getContentResolver(); cm = phone.mCM; ss = new ServiceState(); newSS = new ServiceState(); @@ -184,12 +186,9 @@ final class CdmaServiceStateTracker extends ServiceStateTracker { cm.registerForCdmaOtaProvision(this,EVENT_OTA_PROVISION_STATUS_CHANGE, null); // System setting property AIRPLANE_MODE_ON is set in Settings. - int airplaneMode = Settings.System.getInt( - phone.getContext().getContentResolver(), - Settings.System.AIRPLANE_MODE_ON, 0); + int airplaneMode = Settings.System.getInt(cr, Settings.System.AIRPLANE_MODE_ON, 0); mDesiredPowerState = ! (airplaneMode > 0); - cr = phone.getContext().getContentResolver(); cr.registerContentObserver( Settings.System.getUriFor(Settings.System.AUTO_TIME), true, mAutoTimeObserver); @@ -1021,8 +1020,7 @@ final class CdmaServiceStateTracker extends ServiceStateTracker { } if (hasRegistered) { - Checkin.updateStats(phone.getContext().getContentResolver(), - Checkin.Stats.Tag.PHONE_CDMA_REGISTERED, 1, 0.0); + Checkin.updateStats(cr, Checkin.Stats.Tag.PHONE_CDMA_REGISTERED, 1, 0.0); networkAttachedRegistrants.notifyRegistrants(); } @@ -1460,9 +1458,13 @@ final class CdmaServiceStateTracker extends ServiceStateTracker { */ long gained = c.getTimeInMillis() - System.currentTimeMillis(); long timeSinceLastUpdate = SystemClock.elapsedRealtime() - mSavedAtTime; + int nitzUpdateSpacing = Settings.Gservices.getInt(cr, + Settings.Gservices.NITZ_UPDATE_SPACING, mNitzUpdateSpacing); + int nitzUpdateDiff = Settings.Gservices.getInt(cr, + Settings.Gservices.NITZ_UPDATE_DIFF, mNitzUpdateDiff); - if ((timeSinceLastUpdate > mNitzUpdateSpacing) - || (Math.abs(gained) > mNitzUpdateDiff)) { + if ((mSavedAtTime == 0) || (timeSinceLastUpdate > nitzUpdateSpacing) + || (Math.abs(gained) > nitzUpdateDiff)) { Log.i(LOG_TAG, "NITZ: Auto updating time of day to " + c.getTime() + " NITZ receive delay=" + millisSinceNitzReceived + "ms gained=" + gained + "ms from " + nitz); @@ -1494,8 +1496,7 @@ final class CdmaServiceStateTracker extends ServiceStateTracker { private boolean getAutoTime() { try { - return Settings.System.getInt(phone.getContext().getContentResolver(), - Settings.System.AUTO_TIME) > 0; + return Settings.System.getInt(cr, Settings.System.AUTO_TIME) > 0; } catch (SettingNotFoundException snfe) { return true; } @@ -1534,8 +1535,7 @@ final class CdmaServiceStateTracker extends ServiceStateTracker { } private void revertToNitz() { - if (Settings.System.getInt(phone.getContext().getContentResolver(), - Settings.System.AUTO_TIME, 0) == 0) { + if (Settings.System.getInt(cr, Settings.System.AUTO_TIME, 0) == 0) { return; } Log.d(LOG_TAG, "Reverting to NITZ: tz='" + mSavedTimeZone diff --git a/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java b/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java index 5614c127bf22..a5188cec100c 100755 --- a/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java +++ b/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java @@ -879,16 +879,7 @@ public class GSMPhone extends PhoneBase { } public String getLine1AlphaTag() { - String ret; - - ret = mSIMRecords.getMsisdnAlphaTag(); - - if (ret == null || ret.length() == 0) { - return mContext.getText( - com.android.internal.R.string.defaultMsisdnAlphaTag).toString(); - } - - return ret; + return mSIMRecords.getMsisdnAlphaTag(); } public void setLine1Number(String alphaTag, String number, Message onComplete) { |